aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHJ <thechairman@thechairman.info>2024-02-03 15:09:54 -0500
committerHJ <thechairman@thechairman.info>2024-02-03 15:09:54 -0500
commit96a3c5c179d8d3fff24eb2953e45f8dd15e2714c (patch)
tree0a67bc0cfeabe51740bb049c61f16f1ac3bdd4ff
parent547fe03cf43105f46160e2dd9afff21637eaaf47 (diff)
downloadgleam_aoc-96a3c5c179d8d3fff24eb2953e45f8dd15e2714c.tar.gz
gleam_aoc-96a3c5c179d8d3fff24eb2953e45f8dd15e2714c.zip
cleanup
-rw-r--r--aoc2023/aoc.toml4
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cachebin0 -> 2399 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_metabin0 -> 85 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl55
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cachebin0 -> 583 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_metabin0 -> 293 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl278
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cachebin0 -> 581 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_metabin0 -> 231 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl142
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl12
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cachebin0 -> 468 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_metabin0 -> 131 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl61
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cachebin0 -> 1514 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_metabin0 -> 85 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl74
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cachebin0 -> 1512 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_metabin0 -> 69 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl53
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cachebin0 -> 438 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl25
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cachebin0 -> 818 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cachebin0 -> 380 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cachebin0 -> 1293 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cachebin0 -> 1300 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cachebin0 -> 1714 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_metabin0 -> 60 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl83
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cachebin0 -> 1068 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_metabin0 -> 439 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl155
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cachebin0 -> 879 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl8
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cachebin0 -> 3273 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_metabin0 -> 89 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl131
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cachebin0 -> 15288 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl54
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cachebin0 -> 8873 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_metabin0 -> 129 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl30
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cachebin0 -> 1929 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_metabin0 -> 227 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl230
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cachebin0 -> 1542 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_metabin0 -> 292 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl76
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cachebin0 -> 1135 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_metabin0 -> 179 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl53
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cachebin0 -> 1642 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_metabin0 -> 195 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl46
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cachebin0 -> 479 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_metabin0 -> 140 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl61
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cachebin0 -> 5108 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_metabin0 -> 421 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl749
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cachebin0 -> 3189 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_metabin0 -> 118 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl93
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cachebin0 -> 5510 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_metabin0 -> 144 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl229
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cachebin0 -> 901 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl8
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cachebin0 -> 5547 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_metabin0 -> 76 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl143
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cachebin0 -> 3674 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_metabin0 -> 101 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl57
-rw-r--r--aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl187
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/adglent.app17
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/adglent.beambin0 -> 3072 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beambin0 -> 8292 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beambin0 -> 6308 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beambin0 -> 1556 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beambin0 -> 3696 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beambin0 -> 3800 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beambin0 -> 2744 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@template.beambin0 -> 1804 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beambin0 -> 792 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beambin0 -> 792 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beambin0 -> 812 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beambin0 -> 812 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beambin0 -> 3900 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime.beambin0 -> 7024 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beambin0 -> 924 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beambin0 -> 4324 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beambin0 -> 1884 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beambin0 -> 1412 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beambin0 -> 8688 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beambin0 -> 4368 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beambin0 -> 3024 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beambin0 -> 2416 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beambin0 -> 3380 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beambin0 -> 20468 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beambin0 -> 4196 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beambin0 -> 7608 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beambin0 -> 904 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beambin0 -> 5416 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beambin0 -> 3412 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beambin0 -> 7708 bytes
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl5
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl6
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl7
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl5
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl6
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl6
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl6
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl3
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl5
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl1
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl5
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl4
-rw-r--r--aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl4
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cachebin0 -> 407 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_metabin0 -> 68 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl21
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl35
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cachebin0 -> 305 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_metabin0 -> 45 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl8
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cachebin0 -> 1845 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl52
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cachebin0 -> 5462 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_metabin0 -> 168 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl340
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cachebin0 -> 1935 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl68
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cachebin0 -> 2064 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl130
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cachebin0 -> 1730 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl38
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cachebin0 -> 1777 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_metabin0 -> 157 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl145
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cachebin0 -> 1994 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl88
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cachebin0 -> 2415 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_metabin0 -> 116 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl149
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cachebin0 -> 1933 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl68
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cachebin0 -> 2257 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_metabin0 -> 152 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl149
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cachebin0 -> 1817 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl32
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cachebin0 -> 3200 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_metabin0 -> 153 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl177
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cachebin0 -> 1915 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl68
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cachebin0 -> 2445 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_metabin0 -> 176 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl253
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cachebin0 -> 1789 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl52
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cachebin0 -> 4185 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_metabin0 -> 223 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl231
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cachebin0 -> 2116 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl84
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cachebin0 -> 3614 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_metabin0 -> 154 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl218
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cachebin0 -> 2438 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl96
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cachebin0 -> 9036 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_metabin0 -> 191 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl459
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cachebin0 -> 1836 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl50
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cachebin0 -> 1176 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_metabin0 -> 134 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl118
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cachebin0 -> 1864 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl52
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cachebin0 -> 4798 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_metabin0 -> 153 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl237
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cachebin0 -> 2472 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl54
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cachebin0 -> 1440 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl166
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cachebin0 -> 1896 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl68
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cachebin0 -> 5683 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_metabin0 -> 152 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl254
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cachebin0 -> 2259 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl52
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cachebin0 -> 2089 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_metabin0 -> 208 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl169
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cachebin0 -> 2379 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl160
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cachebin0 -> 5112 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_metabin0 -> 157 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl269
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cachebin0 -> 1790 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl36
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cachebin0 -> 1920 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_metabin0 -> 135 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl131
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cachebin0 -> 1803 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl48
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cachebin0 -> 3183 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_metabin0 -> 174 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl242
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cachebin0 -> 1865 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl58
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cachebin0 -> 1810 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_metabin0 -> 236 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl179
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cachebin0 -> 1793 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl40
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cachebin0 -> 1829 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl133
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cachebin0 -> 2127 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_metabin0 -> 102 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl64
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cachebin0 -> 3198 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_metabin0 -> 118 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl70
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cachebin0 -> 3158 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl60
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app15
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beambin0 -> 1976 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beambin0 -> 2780 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beambin0 -> 1088 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beambin0 -> 2508 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beambin0 -> 12732 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beambin0 -> 2400 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beambin0 -> 6228 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beambin0 -> 2392 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beambin0 -> 6816 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beambin0 -> 2428 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beambin0 -> 6624 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beambin0 -> 2452 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beambin0 -> 6912 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beambin0 -> 2416 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beambin0 -> 7676 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beambin0 -> 2404 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beambin0 -> 9856 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beambin0 -> 2496 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beambin0 -> 9700 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beambin0 -> 2584 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beambin0 -> 8520 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beambin0 -> 2876 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beambin0 -> 15476 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beambin0 -> 2520 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beambin0 -> 5292 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beambin0 -> 2504 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beambin0 -> 9516 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beambin0 -> 2660 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beambin0 -> 7028 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beambin0 -> 2428 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beambin0 -> 11296 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beambin0 -> 2652 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beambin0 -> 8124 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beambin0 -> 2756 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beambin0 -> 11140 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beambin0 -> 2396 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beambin0 -> 6252 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beambin0 -> 2416 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beambin0 -> 9700 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beambin0 -> 2504 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beambin0 -> 7556 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beambin0 -> 2392 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beambin0 -> 5652 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beambin0 -> 3852 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beambin0 -> 4028 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beambin0 -> 3412 bytes
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl1
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl4
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl1
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl1
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl1
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl3
-rw-r--r--aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cachebin0 -> 6090 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_metabin0 -> 282 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl538
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cachebin0 -> 2538 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl15
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cachebin0 -> 4865 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl156
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cachebin0 -> 946 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl8
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cachebin0 -> 8057 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_metabin0 -> 166 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl202
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs431
-rw-r--r--aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gap/ebin/gap.app8
-rw-r--r--aoc2023/build/dev/erlang/gap/ebin/gap.beambin0 -> 15568 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beambin0 -> 1052 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/ebin/gap@myers.beambin0 -> 6508 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beambin0 -> 896 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/ebin/gap@styling.beambin0 -> 7488 bytes
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam.lock0
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cachebin0 -> 62995 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_metabin0 -> 114 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl263
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beambin0 -> 10580 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app8
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cachebin0 -> 28213 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_metabin0 -> 123 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl513
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cachebin0 -> 3149 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_metabin0 -> 96 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl75
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beambin0 -> 19736 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beambin0 -> 4148 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app7
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cachebin0 -> 14528 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_metabin0 -> 183 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl172
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cachebin0 -> 8209 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_metabin0 -> 64 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl218
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cachebin0 -> 4583 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_metabin0 -> 46 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl24
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cachebin0 -> 30763 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_metabin0 -> 66 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl286
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cachebin0 -> 12100 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_metabin0 -> 284 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl281
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cachebin0 -> 34039 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_metabin0 -> 201 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl563
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cachebin0 -> 8750 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_metabin0 -> 222 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl118
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cachebin0 -> 6486 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_metabin0 -> 166 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl202
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cachebin0 -> 3907 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_metabin0 -> 166 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl163
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs95
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beambin0 -> 7276 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beambin0 -> 7624 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beambin0 -> 1916 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beambin0 -> 9320 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beambin0 -> 9308 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beambin0 -> 16508 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beambin0 -> 5584 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beambin0 -> 7084 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beambin0 -> 7656 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app7
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cachebin0 -> 8892 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_metabin0 -> 122 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl90
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cachebin0 -> 2901 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_metabin0 -> 50 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl26
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cachebin0 -> 869 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl15
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cachebin0 -> 28516 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_metabin0 -> 72 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl190
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cachebin0 -> 3092 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_metabin0 -> 54 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl33
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cachebin0 -> 3322 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_metabin0 -> 46 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl27
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cachebin0 -> 31558 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl374
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl263
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beambin0 -> 4352 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beambin0 -> 1856 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beambin0 -> 1392 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beambin0 -> 6008 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beambin0 -> 1980 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beambin0 -> 1836 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beambin0 -> 14888 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app7
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beambin0 -> 13964 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl15
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cachebin0 -> 15491 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_metabin0 -> 149 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl626
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cachebin0 -> 4352 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_metabin0 -> 161 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl153
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cachebin0 -> 8252 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_metabin0 -> 195 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl202
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cachebin0 -> 5278 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_metabin0 -> 150 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl97
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cachebin0 -> 3223 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_metabin0 -> 138 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl82
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl88
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs38
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beambin0 -> 21920 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beambin0 -> 7076 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beambin0 -> 8976 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beambin0 -> 5004 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beambin0 -> 4308 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app7
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beambin0 -> 4952 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl8
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl10
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cachebin0 -> 4263 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_metabin0 -> 199 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl118
-rw-r--r--aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beambin0 -> 4888 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app10
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cachebin0 -> 13720 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_metabin0 -> 196 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl273
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cachebin0 -> 2475 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl53
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cachebin0 -> 354 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl8
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cachebin0 -> 16821 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_metabin0 -> 200 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl322
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cachebin0 -> 5895 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_metabin0 -> 103 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl43
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cachebin0 -> 4454 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_metabin0 -> 78 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl111
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cachebin0 -> 728 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_metabin0 -> 130 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl28
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl43
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beambin0 -> 10924 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beambin0 -> 2524 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beambin0 -> 852 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beambin0 -> 13040 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beambin0 -> 2044 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beambin0 -> 5364 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app8
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beambin0 -> 2396 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beambin0 -> 3096 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl6
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl7
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl6
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs957
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cachebin0 -> 1301 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_metabin0 -> 52 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl20
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cachebin0 -> 5024 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl102
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cachebin0 -> 4262 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_metabin0 -> 84 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl66
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cachebin0 -> 2010 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_metabin0 -> 52 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl33
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cachebin0 -> 7175 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_metabin0 -> 48 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl162
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cachebin0 -> 6338 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_metabin0 -> 98 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl87
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cachebin0 -> 12361 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl97
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cachebin0 -> 49464 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_metabin0 -> 173 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl808
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cachebin0 -> 11445 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_metabin0 -> 48 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl181
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cachebin0 -> 5886 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl67
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cachebin0 -> 18217 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl332
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cachebin0 -> 2936 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl27
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cachebin0 -> 38553 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_metabin0 -> 141 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl744
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cachebin0 -> 46380 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_metabin0 -> 120 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl1129
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cachebin0 -> 4822 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl76
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cachebin0 -> 7384 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl147
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cachebin0 -> 2807 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl79
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cachebin0 -> 1961 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl33
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cachebin0 -> 7180 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl121
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cachebin0 -> 6990 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl33
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cachebin0 -> 10484 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl201
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cachebin0 -> 6575 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_metabin0 -> 85 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl85
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cachebin0 -> 21819 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_metabin0 -> 136 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl352
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cachebin0 -> 10653 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl91
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cachebin0 -> 8323 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_metabin0 -> 132 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl252
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl529
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs875
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beambin0 -> 1720 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beambin0 -> 4696 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beambin0 -> 3308 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beambin0 -> 2184 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beambin0 -> 4008 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beambin0 -> 3760 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beambin0 -> 4712 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beambin0 -> 32632 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beambin0 -> 6128 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beambin0 -> 5500 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beambin0 -> 9888 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beambin0 -> 1748 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beambin0 -> 28416 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beambin0 -> 34500 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beambin0 -> 4092 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beambin0 -> 4560 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beambin0 -> 2384 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beambin0 -> 2024 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beambin0 -> 5332 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beambin0 -> 2116 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beambin0 -> 6868 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beambin0 -> 4772 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beambin0 -> 12480 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beambin0 -> 4152 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beambin0 -> 9524 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app7
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beambin0 -> 28356 bytes
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl5
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl4
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl1
-rw-r--r--aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl9
-rw-r--r--aoc2023/build/dev/erlang/gleam_version1
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cachebin0 -> 18783 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_metabin0 -> 278 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl513
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cachebin0 -> 20298 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_metabin0 -> 214 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl523
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cachebin0 -> 1675 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_metabin0 -> 116 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl68
-rw-r--r--aoc2023/build/dev/erlang/glint/ebin/glint.app10
-rw-r--r--aoc2023/build/dev/erlang/glint/ebin/glint.beambin0 -> 20208 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/ebin/glint@flag.beambin0 -> 22116 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beambin0 -> 3976 bytes
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl1
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl6
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl4
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint_Command.hrl5
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl4
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint_Config.hrl4
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl5
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl5
-rw-r--r--aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl6
-rw-r--r--aoc2023/build/dev/erlang/pqueue/LICENSE21
-rw-r--r--aoc2023/build/dev/erlang/pqueue/README.markdown31
-rw-r--r--aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dagbin0 -> 492 bytes
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/edoc-info3
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/erlang.pngbin0 -> 2109 bytes
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/index.html17
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html15
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html16
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/pqueue.html166
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html143
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html162
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html205
-rw-r--r--aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css55
-rw-r--r--aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app6
-rw-r--r--aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beambin0 -> 87040 bytes
-rw-r--r--aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beambin0 -> 21608 bytes
-rw-r--r--aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beambin0 -> 14272 bytes
-rw-r--r--aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beambin0 -> 1219668 bytes
-rw-r--r--aoc2023/build/dev/erlang/pqueue/rebar.config14
-rw-r--r--aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src10
-rw-r--r--aoc2023/build/dev/erlang/pqueue/src/pqueue.erl2246
-rw-r--r--aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl483
-rw-r--r--aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl404
-rw-r--r--aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl11662
-rw-r--r--aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl49
-rw-r--r--aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl156
-rw-r--r--aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl183
-rw-r--r--aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cachebin0 -> 20340 bytes
-rw-r--r--aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl287
-rw-r--r--aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl70
-rw-r--r--aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs102
-rw-r--r--aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app7
-rw-r--r--aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beambin0 -> 10420 bytes
-rw-r--r--aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beambin0 -> 4536 bytes
-rw-r--r--aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cachebin0 -> 3753 bytes
-rw-r--r--aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_metabin0 -> 125 bytes
-rw-r--r--aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl74
-rw-r--r--aoc2023/build/dev/erlang/snag/ebin/snag.app7
-rw-r--r--aoc2023/build/dev/erlang/snag/ebin/snag.beambin0 -> 3648 bytes
-rw-r--r--aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl1
-rw-r--r--aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl157
-rw-r--r--aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cachebin0 -> 33321 bytes
-rw-r--r--aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_metabin0 -> 140 bytes
-rw-r--r--aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl2142
-rw-r--r--aoc2023/build/dev/erlang/tom/ebin/tom.app7
-rw-r--r--aoc2023/build/dev/erlang/tom/ebin/tom.beambin0 -> 70968 bytes
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl5
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl1
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl1
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl1
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl5
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl6
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl1
-rw-r--r--aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl5
-rw-r--r--aoc2023/build/dev/javascript/gleam.lock0
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cachebin0 -> 2397 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_metabin0 -> 85 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cachebin0 -> 583 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_metabin0 -> 293 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cachebin0 -> 581 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_metabin0 -> 231 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cachebin0 -> 468 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_metabin0 -> 131 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cachebin0 -> 1514 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_metabin0 -> 85 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cachebin0 -> 1512 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_metabin0 -> 69 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cachebin0 -> 438 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cachebin0 -> 818 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cachebin0 -> 380 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cachebin0 -> 1293 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cachebin0 -> 1300 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cachebin0 -> 1712 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_metabin0 -> 60 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cachebin0 -> 1068 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_metabin0 -> 439 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cachebin0 -> 879 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cachebin0 -> 3269 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_metabin0 -> 89 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cachebin0 -> 15268 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cachebin0 -> 8896 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_metabin0 -> 129 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cachebin0 -> 1929 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_metabin0 -> 227 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cachebin0 -> 1538 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_metabin0 -> 292 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cachebin0 -> 1135 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_metabin0 -> 179 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cachebin0 -> 1642 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_metabin0 -> 195 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cachebin0 -> 479 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_metabin0 -> 140 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cachebin0 -> 5112 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_metabin0 -> 421 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cachebin0 -> 3189 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_metabin0 -> 118 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cachebin0 -> 5512 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_metabin0 -> 144 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cachebin0 -> 899 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cachebin0 -> 5540 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_metabin0 -> 76 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cachebin0 -> 3672 bytes
-rw-r--r--aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_metabin0 -> 101 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cachebin0 -> 407 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_metabin0 -> 68 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cachebin0 -> 305 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_metabin0 -> 45 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cachebin0 -> 1847 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cachebin0 -> 5449 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_metabin0 -> 168 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cachebin0 -> 1935 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cachebin0 -> 2063 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cachebin0 -> 1730 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cachebin0 -> 1777 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_metabin0 -> 157 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cachebin0 -> 1996 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cachebin0 -> 2417 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_metabin0 -> 116 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cachebin0 -> 1931 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cachebin0 -> 2257 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_metabin0 -> 152 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cachebin0 -> 1819 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cachebin0 -> 3206 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_metabin0 -> 153 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cachebin0 -> 1914 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cachebin0 -> 2442 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_metabin0 -> 176 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cachebin0 -> 1789 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cachebin0 -> 4203 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_metabin0 -> 223 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cachebin0 -> 2116 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cachebin0 -> 3614 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_metabin0 -> 154 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cachebin0 -> 2440 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cachebin0 -> 9029 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_metabin0 -> 191 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cachebin0 -> 1836 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cachebin0 -> 1176 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_metabin0 -> 134 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cachebin0 -> 1864 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cachebin0 -> 6718 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_metabin0 -> 192 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cachebin0 -> 1500 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cachebin0 -> 551 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_metabin0 -> 60 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cachebin0 -> 1850 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cachebin0 -> 6239 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_metabin0 -> 227 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cachebin0 -> 2795 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cachebin0 -> 5955 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_metabin0 -> 213 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cachebin0 -> 2474 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cachebin0 -> 1442 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cachebin0 -> 1898 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cachebin0 -> 5669 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_metabin0 -> 152 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cachebin0 -> 2259 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cachebin0 -> 2090 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_metabin0 -> 208 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cachebin0 -> 2381 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cachebin0 -> 5112 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_metabin0 -> 157 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cachebin0 -> 1790 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cachebin0 -> 1922 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_metabin0 -> 135 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cachebin0 -> 1803 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cachebin0 -> 3185 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_metabin0 -> 174 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cachebin0 -> 1865 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cachebin0 -> 1810 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_metabin0 -> 236 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cachebin0 -> 1791 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_metabin0 -> 109 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cachebin0 -> 1830 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cachebin0 -> 3025 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_metabin0 -> 122 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cachebin0 -> 3200 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_metabin0 -> 118 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cachebin0 -> 3154 bytes
-rw-r--r--aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cachebin0 -> 6093 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_metabin0 -> 282 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cachebin0 -> 2544 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cachebin0 -> 4862 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cachebin0 -> 946 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cachebin0 -> 8073 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_metabin0 -> 166 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam.lock0
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cachebin0 -> 62994 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_metabin0 -> 114 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cachebin0 -> 28196 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_metabin0 -> 123 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cachebin0 -> 3151 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_metabin0 -> 96 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cachebin0 -> 14527 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_metabin0 -> 183 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cachebin0 -> 8209 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_metabin0 -> 64 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cachebin0 -> 4583 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_metabin0 -> 46 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cachebin0 -> 30776 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_metabin0 -> 66 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cachebin0 -> 12100 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_metabin0 -> 284 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cachebin0 -> 34044 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_metabin0 -> 201 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cachebin0 -> 8778 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_metabin0 -> 222 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cachebin0 -> 6493 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_metabin0 -> 166 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cachebin0 -> 3907 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_metabin0 -> 166 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cachebin0 -> 8918 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_metabin0 -> 122 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cachebin0 -> 2901 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_metabin0 -> 50 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cachebin0 -> 869 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cachebin0 -> 28539 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_metabin0 -> 72 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cachebin0 -> 3094 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_metabin0 -> 54 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cachebin0 -> 3322 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_metabin0 -> 46 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cachebin0 -> 31555 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_metabin0 -> 115 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cachebin0 -> 15465 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_metabin0 -> 149 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cachebin0 -> 4344 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_metabin0 -> 161 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cachebin0 -> 8254 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_metabin0 -> 195 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cachebin0 -> 5271 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_metabin0 -> 150 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cachebin0 -> 3225 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_metabin0 -> 138 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cachebin0 -> 4263 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_metabin0 -> 199 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cachebin0 -> 13713 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_metabin0 -> 196 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cachebin0 -> 2473 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cachebin0 -> 354 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cachebin0 -> 16820 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_metabin0 -> 200 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cachebin0 -> 5899 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_metabin0 -> 103 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cachebin0 -> 4453 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_metabin0 -> 78 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cachebin0 -> 728 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_metabin0 -> 130 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cachebin0 -> 1301 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_metabin0 -> 52 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cachebin0 -> 5029 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cachebin0 -> 4262 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_metabin0 -> 84 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cachebin0 -> 2010 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_metabin0 -> 52 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cachebin0 -> 7182 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_metabin0 -> 48 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cachebin0 -> 6332 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_metabin0 -> 98 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cachebin0 -> 12366 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cachebin0 -> 49488 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_metabin0 -> 173 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cachebin0 -> 11443 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_metabin0 -> 48 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cachebin0 -> 5891 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cachebin0 -> 18231 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cachebin0 -> 2936 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cachebin0 -> 38551 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_metabin0 -> 141 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cachebin0 -> 46400 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_metabin0 -> 120 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cachebin0 -> 4813 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_metabin0 -> 67 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cachebin0 -> 7376 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cachebin0 -> 2807 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cachebin0 -> 1961 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_metabin0 -> 29 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cachebin0 -> 7173 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cachebin0 -> 6995 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_metabin0 -> 49 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cachebin0 -> 10470 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cachebin0 -> 6578 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_metabin0 -> 85 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cachebin0 -> 21826 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_metabin0 -> 136 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cachebin0 -> 10647 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_metabin0 -> 47 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cachebin0 -> 8321 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_metabin0 -> 132 bytes
-rw-r--r--aoc2023/build/lsp/erlang/gleam_version1
-rw-r--r--aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cachebin0 -> 18769 bytes
-rw-r--r--aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_metabin0 -> 278 bytes
-rw-r--r--aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cachebin0 -> 20304 bytes
-rw-r--r--aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_metabin0 -> 214 bytes
-rw-r--r--aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cachebin0 -> 1675 bytes
-rw-r--r--aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_metabin0 -> 116 bytes
-rw-r--r--aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cachebin0 -> 20315 bytes
-rw-r--r--aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_metabin0 -> 110 bytes
-rw-r--r--aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cachebin0 -> 3751 bytes
-rw-r--r--aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_metabin0 -> 125 bytes
-rw-r--r--aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cachebin0 -> 33280 bytes
-rw-r--r--aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_metabin0 -> 140 bytes
-rw-r--r--aoc2023/build/lsp/javascript/gleam.lock0
-rw-r--r--aoc2023/build/packages/adglent/LICENSE201
-rw-r--r--aoc2023/build/packages/adglent/README.md115
-rw-r--r--aoc2023/build/packages/adglent/gleam.toml29
-rw-r--r--aoc2023/build/packages/adglent/include/adglent_Example.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl5
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl6
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl7
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl5
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl6
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl6
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl6
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl3
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl5
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl1
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl5
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl4
-rw-r--r--aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl4
-rw-r--r--aoc2023/build/packages/adglent/src/adglent.app.src45
-rw-r--r--aoc2023/build/packages/adglent/src/adglent.erl55
-rw-r--r--aoc2023/build/packages/adglent/src/adglent.gleam56
-rw-r--r--aoc2023/build/packages/adglent/src/adglent/day.gleam126
-rw-r--r--aoc2023/build/packages/adglent/src/adglent/init.gleam110
-rw-r--r--aoc2023/build/packages/adglent/src/adglent@day.erl278
-rw-r--r--aoc2023/build/packages/adglent/src/adglent@init.erl142
-rw-r--r--aoc2023/build/packages/adglent/src/adglent_ffi.erl12
-rw-r--r--aoc2023/build/packages/adglent/src/priv/aoc_client.gleam37
-rw-r--r--aoc2023/build/packages/adglent/src/priv/errors.gleam54
-rw-r--r--aoc2023/build/packages/adglent/src/priv/prompt.gleam38
-rw-r--r--aoc2023/build/packages/adglent/src/priv/template.gleam18
-rw-r--r--aoc2023/build/packages/adglent/src/priv/templates/solution.gleam27
-rw-r--r--aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam7
-rw-r--r--aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam41
-rw-r--r--aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam41
-rw-r--r--aoc2023/build/packages/adglent/src/priv/toml.gleam52
-rw-r--r--aoc2023/build/packages/adglent/src/priv@aoc_client.erl61
-rw-r--r--aoc2023/build/packages/adglent/src/priv@errors.erl74
-rw-r--r--aoc2023/build/packages/adglent/src/priv@prompt.erl53
-rw-r--r--aoc2023/build/packages/adglent/src/priv@template.erl25
-rw-r--r--aoc2023/build/packages/adglent/src/priv@templates@solution.erl1
-rw-r--r--aoc2023/build/packages/adglent/src/priv@templates@test_main.erl1
-rw-r--r--aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl1
-rw-r--r--aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl1
-rw-r--r--aoc2023/build/packages/adglent/src/priv@toml.erl83
-rw-r--r--aoc2023/build/packages/adglent/src/showtime.erl155
-rw-r--r--aoc2023/build/packages/adglent/src/showtime.gleam116
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam5
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam101
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam119
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam63
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam167
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam91
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam43
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam59
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam42
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam480
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam84
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam148
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam3
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/tests/should.gleam113
-rw-r--r--aoc2023/build/packages/adglent/src/showtime/tests/test.gleam57
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl8
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl131
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl54
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl30
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl230
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl76
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl53
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl46
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl61
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl749
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl93
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl229
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@tests@meta.erl8
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@tests@should.erl143
-rw-r--r--aoc2023/build/packages/adglent/src/showtime@tests@test.erl57
-rw-r--r--aoc2023/build/packages/adglent/src/showtime_ffi.erl187
-rw-r--r--aoc2023/build/packages/gap/LICENSE201
-rw-r--r--aoc2023/build/packages/gap/README.md202
-rw-r--r--aoc2023/build/packages/gap/gleam.toml18
-rw-r--r--aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl4
-rw-r--r--aoc2023/build/packages/gap/include/gap@comparison_Match.hrl1
-rw-r--r--aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl1
-rw-r--r--aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl4
-rw-r--r--aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl1
-rw-r--r--aoc2023/build/packages/gap/include/gap@styling_All.hrl1
-rw-r--r--aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl5
-rw-r--r--aoc2023/build/packages/gap/include/gap@styling_Part.hrl5
-rw-r--r--aoc2023/build/packages/gap/include/gap@styling_Styling.hrl5
-rw-r--r--aoc2023/build/packages/gap/src/gap.app.src13
-rw-r--r--aoc2023/build/packages/gap/src/gap.erl538
-rw-r--r--aoc2023/build/packages/gap/src/gap.gleam438
-rw-r--r--aoc2023/build/packages/gap/src/gap/comparison.gleam22
-rw-r--r--aoc2023/build/packages/gap/src/gap/myers.gleam122
-rw-r--r--aoc2023/build/packages/gap/src/gap/styled_comparison.gleam4
-rw-r--r--aoc2023/build/packages/gap/src/gap/styling.gleam233
-rw-r--r--aoc2023/build/packages/gap/src/gap@comparison.erl15
-rw-r--r--aoc2023/build/packages/gap/src/gap@myers.erl156
-rw-r--r--aoc2023/build/packages/gap/src/gap@styled_comparison.erl8
-rw-r--r--aoc2023/build/packages/gap/src/gap@styling.erl202
-rw-r--r--aoc2023/build/packages/gap/src/gap_ffi.mjs431
-rw-r--r--aoc2023/build/packages/gleam.lock0
-rw-r--r--aoc2023/build/packages/gleam_community_ansi/LICENCE190
-rw-r--r--aoc2023/build/packages/gleam_community_ansi/README.md72
-rw-r--r--aoc2023/build/packages/gleam_community_ansi/gleam.toml13
-rw-r--r--aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam2317
-rw-r--r--aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl263
-rw-r--r--aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src9
-rw-r--r--aoc2023/build/packages/gleam_community_colour/LICENCE190
-rw-r--r--aoc2023/build/packages/gleam_community_colour/README.md36
-rw-r--r--aoc2023/build/packages/gleam_community_colour/gleam.toml11
-rw-r--r--aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl1
-rw-r--r--aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl1
-rw-r--r--aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam1126
-rw-r--r--aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam173
-rw-r--r--aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl511
-rw-r--r--aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl73
-rw-r--r--aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src9
-rw-r--r--aoc2023/build/packages/gleam_community_maths/LICENCE190
-rw-r--r--aoc2023/build/packages/gleam_community_maths/README.md59
-rw-r--r--aoc2023/build/packages/gleam_community_maths/gleam.toml12
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam618
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam432
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam183
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam1256
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam560
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam1228
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam363
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam302
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam205
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl172
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl218
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl23
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl284
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl278
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl553
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl118
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl199
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl157
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src16
-rw-r--r--aoc2023/build/packages/gleam_community_maths/src/maths.mjs95
-rw-r--r--aoc2023/build/packages/gleam_erlang/LICENSE191
-rw-r--r--aoc2023/build/packages/gleam_erlang/README.md37
-rw-r--r--aoc2023/build/packages/gleam_erlang/gleam.toml18
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl15
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl1
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl1
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl1
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl4
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl4
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl1
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl4
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl4
-rw-r--r--aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl1
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam158
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam79
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam25
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam737
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam62
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam95
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam744
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl90
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl26
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl15
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl190
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl33
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl27
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl374
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src14
-rw-r--r--aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl263
-rw-r--r--aoc2023/build/packages/gleam_http/LICENSE191
-rw-r--r--aoc2023/build/packages/gleam_http/README.md67
-rw-r--r--aoc2023/build/packages/gleam_http/gleam.toml17
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl8
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl10
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl5
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl5
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl4
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl5
-rw-r--r--aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl4
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam/http.gleam560
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam128
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam267
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam141
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam82
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam@http.erl626
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl153
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam@http@request.erl202
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam@http@response.erl97
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam@http@service.erl82
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam_http.app.src12
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam_http_native.erl88
-rw-r--r--aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs38
-rw-r--r--aoc2023/build/packages/gleam_httpc/LICENSE191
-rw-r--r--aoc2023/build/packages/gleam_httpc/README.md52
-rw-r--r--aoc2023/build/packages/gleam_httpc/gleam.toml23
-rw-r--r--aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam105
-rw-r--r--aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl118
-rw-r--r--aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src12
-rw-r--r--aoc2023/build/packages/gleam_otp/LICENCE191
-rw-r--r--aoc2023/build/packages/gleam_otp/README.md91
-rw-r--r--aoc2023/build/packages/gleam_otp/gleam.toml19
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl4
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl1
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl5
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl5
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl5
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl6
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl7
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl1
-rw-r--r--aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl6
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam504
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam46
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam9
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam410
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam89
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam151
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl273
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl53
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl8
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl322
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl43
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl111
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src15
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam_otp.erl28
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam27
-rw-r--r--aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl43
-rw-r--r--aoc2023/build/packages/gleam_stdlib/LICENCE191
-rw-r--r--aoc2023/build/packages/gleam_stdlib/README.md39
-rw-r--r--aoc2023/build/packages/gleam_stdlib/gleam.toml16
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl5
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl1
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl1
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl1
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl1
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl4
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl1
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl1
-rw-r--r--aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl9
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/dict.mjs957
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam21
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam157
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam80
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam43
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam428
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam197
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam544
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam1508
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam546
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam162
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam874
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam117
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam1530
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam2154
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam127
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam346
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam133
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam85
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam292
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam214
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam482
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam264
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam906
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam298
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam462
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl20
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl102
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl66
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl33
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl162
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl87
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl97
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl808
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl181
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl67
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl332
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl27
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl744
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl1129
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl76
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl147
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl79
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl33
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl121
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl33
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl201
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl85
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl352
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl91
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl252
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src31
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl529
-rw-r--r--aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs875
-rw-r--r--aoc2023/build/packages/glint/LICENSE201
-rw-r--r--aoc2023/build/packages/glint/README.md104
-rw-r--r--aoc2023/build/packages/glint/gleam.toml23
-rw-r--r--aoc2023/build/packages/glint/include/glint@flag_Flag.hrl1
-rw-r--r--aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl6
-rw-r--r--aoc2023/build/packages/glint/include/glint@flag_Internal.hrl4
-rw-r--r--aoc2023/build/packages/glint/include/glint_Command.hrl5
-rw-r--r--aoc2023/build/packages/glint/include/glint_CommandInput.hrl4
-rw-r--r--aoc2023/build/packages/glint/include/glint_Config.hrl4
-rw-r--r--aoc2023/build/packages/glint/include/glint_Glint.hrl5
-rw-r--r--aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl5
-rw-r--r--aoc2023/build/packages/glint/include/glint_Stub.hrl6
-rw-r--r--aoc2023/build/packages/glint/src/glint.app.src13
-rw-r--r--aoc2023/build/packages/glint/src/glint.erl513
-rw-r--r--aoc2023/build/packages/glint/src/glint.gleam588
-rw-r--r--aoc2023/build/packages/glint/src/glint/flag.gleam478
-rw-r--r--aoc2023/build/packages/glint/src/glint/flag/constraint.gleam66
-rw-r--r--aoc2023/build/packages/glint/src/glint@flag.erl523
-rw-r--r--aoc2023/build/packages/glint/src/glint@flag@constraint.erl68
-rw-r--r--aoc2023/build/packages/packages.toml16
-rw-r--r--aoc2023/build/packages/pqueue/LICENSE21
-rw-r--r--aoc2023/build/packages/pqueue/README.markdown31
-rw-r--r--aoc2023/build/packages/pqueue/doc/edoc-info3
-rw-r--r--aoc2023/build/packages/pqueue/doc/erlang.pngbin0 -> 2109 bytes
-rw-r--r--aoc2023/build/packages/pqueue/doc/index.html17
-rw-r--r--aoc2023/build/packages/pqueue/doc/modules-frame.html15
-rw-r--r--aoc2023/build/packages/pqueue/doc/overview-summary.html16
-rw-r--r--aoc2023/build/packages/pqueue/doc/pqueue.html166
-rw-r--r--aoc2023/build/packages/pqueue/doc/pqueue2.html143
-rw-r--r--aoc2023/build/packages/pqueue/doc/pqueue3.html162
-rw-r--r--aoc2023/build/packages/pqueue/doc/pqueue4.html205
-rw-r--r--aoc2023/build/packages/pqueue/doc/stylesheet.css55
-rw-r--r--aoc2023/build/packages/pqueue/rebar.config14
-rw-r--r--aoc2023/build/packages/pqueue/src/pqueue.app.src10
-rw-r--r--aoc2023/build/packages/pqueue/src/pqueue.erl2246
-rw-r--r--aoc2023/build/packages/pqueue/src/pqueue2.erl483
-rw-r--r--aoc2023/build/packages/pqueue/src/pqueue3.erl404
-rw-r--r--aoc2023/build/packages/pqueue/src/pqueue4.erl11662
-rw-r--r--aoc2023/build/packages/pqueue/src/pqueue_test.hrl49
-rw-r--r--aoc2023/build/packages/pqueue/test/pqueue_proper.erl156
-rw-r--r--aoc2023/build/packages/pqueue/test/queue_srv.erl183
-rw-r--r--aoc2023/build/packages/simplifile/README.md29
-rw-r--r--aoc2023/build/packages/simplifile/gleam.toml17
-rw-r--r--aoc2023/build/packages/simplifile/src/simplifile.app.src8
-rw-r--r--aoc2023/build/packages/simplifile/src/simplifile.erl287
-rw-r--r--aoc2023/build/packages/simplifile/src/simplifile.gleam580
-rw-r--r--aoc2023/build/packages/simplifile/src/simplifile_erl.erl70
-rw-r--r--aoc2023/build/packages/simplifile/src/simplifile_js.mjs102
-rw-r--r--aoc2023/build/packages/snag/LICENCE211
-rw-r--r--aoc2023/build/packages/snag/README.md81
-rw-r--r--aoc2023/build/packages/snag/gleam.toml16
-rw-r--r--aoc2023/build/packages/snag/include/snag_Snag.hrl1
-rw-r--r--aoc2023/build/packages/snag/src/snag.app.src8
-rw-r--r--aoc2023/build/packages/snag/src/snag.erl74
-rw-r--r--aoc2023/build/packages/snag/src/snag.gleam141
-rw-r--r--aoc2023/build/packages/tom/README.md47
-rw-r--r--aoc2023/build/packages/tom/gleam.toml13
-rw-r--r--aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl5
-rw-r--r--aoc2023/build/packages/tom/include/tom_DateValue.hrl1
-rw-r--r--aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl1
-rw-r--r--aoc2023/build/packages/tom/include/tom_NotFound.hrl1
-rw-r--r--aoc2023/build/packages/tom/include/tom_Offset.hrl5
-rw-r--r--aoc2023/build/packages/tom/include/tom_TimeValue.hrl6
-rw-r--r--aoc2023/build/packages/tom/include/tom_Unexpected.hrl1
-rw-r--r--aoc2023/build/packages/tom/include/tom_WrongType.hrl5
-rw-r--r--aoc2023/build/packages/tom/src/tom.app.src8
-rw-r--r--aoc2023/build/packages/tom/src/tom.erl2140
-rw-r--r--aoc2023/build/packages/tom/src/tom.gleam1317
-rw-r--r--aoc2023/build/prod/erlang/gleam.lock0
-rw-r--r--aoc2023/build/prod/javascript/gleam.lock0
-rw-r--r--aoc2023/erl_crash.dump67195
-rw-r--r--aoc2023/src/day1/input.txt1000
-rw-r--r--aoc2023/src/day10/input.txt140
-rw-r--r--aoc2023/src/day11/input.txt140
-rw-r--r--aoc2023/src/day13/input.txt1379
-rw-r--r--aoc2023/src/day15/input.txt1
-rw-r--r--aoc2023/src/day16/input.txt110
-rw-r--r--aoc2023/src/day17/input.txt141
-rw-r--r--aoc2023/src/day18/input.txt676
-rw-r--r--aoc2023/src/day19/input.txt766
-rw-r--r--aoc2023/src/day2/input.txt100
-rw-r--r--aoc2023/src/day20/input.txt58
-rw-r--r--aoc2023/src/day3/input.txt140
-rw-r--r--aoc2023/src/day4/input.txt203
-rw-r--r--aoc2023/src/day6/input.txt2
-rw-r--r--aoc2023/src/day7/input.txt1000
-rw-r--r--aoc2023/src/day8/input.txt740
-rw-r--r--aoc2023/src/day9/input.txt200
1493 files changed, 194664 insertions, 0 deletions
diff --git a/aoc2023/aoc.toml b/aoc2023/aoc.toml
new file mode 100644
index 0000000..3843235
--- /dev/null
+++ b/aoc2023/aoc.toml
@@ -0,0 +1,4 @@
+version = 2
+year = "2023"
+session = "53616c7465645f5f9b329c2ce8962445c1bf7e50415667e182265b26a30deb203787e6f505943bd2ee4a7bbb39e99ac4cf724a722d58e3c1984b7f30af6be76d"
+showtime = true
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache
new file mode 100644
index 0000000..939bda2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_meta
new file mode 100644
index 0000000..0af4a84
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl
new file mode 100644
index 0000000..e3ceebe
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent.erl
@@ -0,0 +1,55 @@
+-module(adglent).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([inspect/1, get_input/1, get_test_folder/1, start_arguments/0, get_part/0]).
+-export_type([example/1, problem/0, charlist/0]).
+
+-type example(ODD) :: {example, binary(), ODD}.
+
+-type problem() :: first | second.
+
+-type charlist() :: any().
+
+-spec inspect(any()) -> binary().
+inspect(Value) ->
+ Inspected_value = gleam@string:inspect(Value),
+ case begin
+ _pipe = Inspected_value,
+ gleam@string:starts_with(_pipe, <<"\""/utf8>>)
+ end of
+ true ->
+ _pipe@1 = Inspected_value,
+ _pipe@2 = gleam@string:drop_left(_pipe@1, 1),
+ gleam@string:drop_right(_pipe@2, 1);
+
+ false ->
+ Inspected_value
+ end.
+
+-spec get_input(binary()) -> {ok, binary()} | {error, simplifile:file_error()}.
+get_input(Day) ->
+ simplifile:read(
+ <<<<"src/day"/utf8, Day/binary>>/binary, "/input.txt"/utf8>>
+ ).
+
+-spec get_test_folder(binary()) -> binary().
+get_test_folder(Day) ->
+ <<"test/day"/utf8, Day/binary>>.
+
+-spec start_arguments() -> list(binary()).
+start_arguments() ->
+ _pipe = init:get_plain_arguments(),
+ gleam@list:map(_pipe, fun unicode:characters_to_binary/1).
+
+-spec get_part() -> {ok, problem()} | {error, nil}.
+get_part() ->
+ case start_arguments() of
+ [<<"1"/utf8>>] ->
+ {ok, first};
+
+ [<<"2"/utf8>>] ->
+ {ok, second};
+
+ _ ->
+ {error, nil}
+ end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache
new file mode 100644
index 0000000..a39d38a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta
new file mode 100644
index 0000000..1637f81
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl
new file mode 100644
index 0000000..b80368f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@day.erl
@@ -0,0 +1,278 @@
+-module(adglent@day).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec create_file_if_not_present(binary(), binary()) -> {ok, binary()} |
+ {error, binary()}.
+create_file_if_not_present(Content, Path) ->
+ case simplifile:is_file(Path) of
+ true ->
+ {ok, <<Path/binary, " already exists - skipped"/utf8>>};
+
+ false ->
+ gleam@result:'try'(
+ begin
+ _pipe = simplifile:create_file(Path),
+ priv@errors:map_messages(
+ _pipe,
+ <<"Created "/utf8, Path/binary>>,
+ <<"Could not create "/utf8, Path/binary>>
+ )
+ end,
+ fun(_) -> _pipe@1 = simplifile:write(Path, Content),
+ priv@errors:map_messages(
+ _pipe@1,
+ <<"Wrote "/utf8, Path/binary>>,
+ <<"Could not write to "/utf8, Path/binary>>
+ ) end
+ )
+ end.
+
+-spec main() -> binary().
+main() ->
+ Day@1 = begin
+ _pipe = case adglent:start_arguments() of
+ [Day] ->
+ {ok, Day};
+
+ Args ->
+ {error,
+ <<"Expected day - found: "/utf8,
+ (gleam@string:join(Args, <<", "/utf8>>))/binary>>}
+ end,
+ _pipe@1 = priv@errors:map_error(
+ _pipe,
+ <<"Error when parsing command args"/utf8>>
+ ),
+ _pipe@2 = priv@errors:print_error(_pipe@1),
+ priv@errors:assert_ok(_pipe@2)
+ end,
+ Aoc_toml = begin
+ _pipe@3 = simplifile:read(<<"aoc.toml"/utf8>>),
+ _pipe@4 = priv@errors:map_error(
+ _pipe@3,
+ <<"Could not read aoc.toml"/utf8>>
+ ),
+ _pipe@5 = priv@errors:print_error(_pipe@4),
+ priv@errors:assert_ok(_pipe@5)
+ end,
+ Aoc_toml_version = priv@toml:get_int(Aoc_toml, [<<"version"/utf8>>]),
+ Year = begin
+ _pipe@6 = priv@toml:get_string(Aoc_toml, [<<"year"/utf8>>]),
+ _pipe@7 = priv@errors:map_error(
+ _pipe@6,
+ <<"Could not read \"year\" from aoc.toml"/utf8>>
+ ),
+ _pipe@8 = priv@errors:print_error(_pipe@7),
+ priv@errors:assert_ok(_pipe@8)
+ end,
+ Session = begin
+ _pipe@9 = priv@toml:get_string(Aoc_toml, [<<"session"/utf8>>]),
+ _pipe@10 = priv@errors:map_error(
+ _pipe@9,
+ <<"Could not read \"session\" from aoc.toml"/utf8>>
+ ),
+ _pipe@11 = priv@errors:print_error(_pipe@10),
+ priv@errors:assert_ok(_pipe@11)
+ end,
+ Showtime = case Aoc_toml_version of
+ {ok, 2} ->
+ _pipe@12 = priv@toml:get_bool(Aoc_toml, [<<"showtime"/utf8>>]),
+ _pipe@13 = priv@errors:map_error(
+ _pipe@12,
+ <<"Could not read \"showtime\" from aoc.toml"/utf8>>
+ ),
+ _pipe@14 = priv@errors:print_error(_pipe@13),
+ priv@errors:assert_ok(_pipe@14);
+
+ _ ->
+ _pipe@15 = priv@toml:get_string(Aoc_toml, [<<"showtime"/utf8>>]),
+ _pipe@16 = gleam@result:map(
+ _pipe@15,
+ fun(Bool_string) -> case Bool_string of
+ <<"True"/utf8>> ->
+ true;
+
+ _ ->
+ false
+ end end
+ ),
+ _pipe@17 = priv@errors:map_error(
+ _pipe@16,
+ <<"Could not read \"showtime\" from aoc.toml"/utf8>>
+ ),
+ _pipe@18 = priv@errors:print_error(_pipe@17),
+ priv@errors:assert_ok(_pipe@18)
+ end,
+ Test_folder = adglent:get_test_folder(Day@1),
+ Test_file = <<<<<<Test_folder/binary, "/day"/utf8>>/binary, Day@1/binary>>/binary,
+ "_test.gleam"/utf8>>,
+ _pipe@19 = simplifile:create_directory_all(Test_folder),
+ _pipe@20 = priv@errors:map_error(
+ _pipe@19,
+ <<<<"Could not create folder \""/utf8, Test_folder/binary>>/binary,
+ "\""/utf8>>
+ ),
+ _pipe@21 = priv@errors:print_error(_pipe@20),
+ priv@errors:assert_ok(_pipe@21),
+ Testfile_template = case Showtime of
+ true ->
+ <<"
+import gleam/list
+import showtime/tests/should
+import adglent.{type Example, Example}
+import day{{ day }}/solve
+
+type Problem1AnswerType =
+ String
+
+type Problem2AnswerType =
+ String
+
+/// Add examples for part 1 here:
+/// ```gleam
+///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part1_examples: List(Example(Problem1AnswerType)) = []
+
+/// Add examples for part 2 here:
+/// ```gleam
+///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part2_examples: List(Example(Problem2AnswerType)) = []
+
+pub fn part1_test() {
+ part1_examples
+ |> should.not_equal([])
+ use example <- list.map(part1_examples)
+ solve.part1(example.input)
+ |> should.equal(example.answer)
+}
+
+pub fn part2_test() {
+ part2_examples
+ |> should.not_equal([])
+ use example <- list.map(part2_examples)
+ solve.part2(example.input)
+ |> should.equal(example.answer)
+}
+
+"/utf8>>;
+
+ false ->
+ <<"
+import gleam/list
+import gleeunit/should
+import adglent.{type Example, Example}
+import day{{ day }}/solve
+
+type Problem1AnswerType =
+ String
+
+type Problem2AnswerType =
+ String
+
+/// Add examples for part 1 here:
+/// ```gleam
+///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part1_examples: List(Example(Problem1AnswerType)) = []
+
+/// Add examples for part 2 here:
+/// ```gleam
+///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part2_examples: List(Example(Problem2AnswerType)) = []
+
+pub fn part1_test() {
+ part1_examples
+ |> should.not_equal([])
+ use example <- list.map(part1_examples)
+ solve.part1(example.input)
+ |> should.equal(example.answer)
+}
+
+pub fn part2_test() {
+ part2_examples
+ |> should.not_equal([])
+ use example <- list.map(part2_examples)
+ solve.part2(example.input)
+ |> should.equal(example.answer)
+}
+
+"/utf8>>
+ end,
+ _pipe@22 = priv@template:render(
+ Testfile_template,
+ [{<<"day"/utf8>>, Day@1}]
+ ),
+ _pipe@23 = create_file_if_not_present(_pipe@22, Test_file),
+ _pipe@24 = priv@errors:print_result(_pipe@23),
+ priv@errors:assert_ok(_pipe@24),
+ Solutions_folder = <<"src/day"/utf8, Day@1/binary>>,
+ Solution_file = <<Solutions_folder/binary, "/solve.gleam"/utf8>>,
+ _pipe@25 = simplifile:create_directory_all(Solutions_folder),
+ _pipe@26 = priv@errors:map_error(
+ _pipe@25,
+ <<<<"Could not create folder \""/utf8, Solutions_folder/binary>>/binary,
+ "\""/utf8>>
+ ),
+ _pipe@27 = priv@errors:print_error(_pipe@26),
+ priv@errors:assert_ok(_pipe@27),
+ _pipe@28 = priv@template:render(
+ <<"
+import adglent.{First, Second}
+import gleam/io
+
+pub fn part1(input: String) {
+ todo as \"Implement solution to part 1\"
+}
+
+pub fn part2(input: String) {
+ todo as \"Implement solution to part 2\"
+}
+
+pub fn main() {
+ let assert Ok(part) = adglent.get_part()
+ let assert Ok(input) = adglent.get_input(\"{{ day }}\")
+ case part {
+ First ->
+ part1(input)
+ |> adglent.inspect
+ |> io.println
+ Second ->
+ part2(input)
+ |> adglent.inspect
+ |> io.println
+ }
+}
+"/utf8>>,
+ [{<<"day"/utf8>>, Day@1}]
+ ),
+ _pipe@29 = create_file_if_not_present(_pipe@28, Solution_file),
+ _pipe@30 = priv@errors:print_result(_pipe@29),
+ priv@errors:assert_ok(_pipe@30),
+ _pipe@31 = create_file_if_not_present(
+ <<"input.txt"/utf8>>,
+ <<Solutions_folder/binary, "/.gitignore"/utf8>>
+ ),
+ _pipe@32 = priv@errors:print_result(_pipe@31),
+ priv@errors:assert_ok(_pipe@32),
+ Input = begin
+ _pipe@33 = priv@aoc_client:get_input(Year, Day@1, Session),
+ _pipe@34 = priv@errors:map_error(
+ _pipe@33,
+ <<"Error when fetching input"/utf8>>
+ ),
+ _pipe@35 = priv@errors:print_error(_pipe@34),
+ priv@errors:assert_ok(_pipe@35)
+ end,
+ _pipe@36 = Input,
+ _pipe@37 = gleam@string:trim(_pipe@36),
+ _pipe@38 = create_file_if_not_present(
+ _pipe@37,
+ <<Solutions_folder/binary, "/input.txt"/utf8>>
+ ),
+ _pipe@39 = priv@errors:print_result(_pipe@38),
+ priv@errors:assert_ok(_pipe@39).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache
new file mode 100644
index 0000000..5337c50
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta
new file mode 100644
index 0000000..2751b68
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl
new file mode 100644
index 0000000..fb28101
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent@init.erl
@@ -0,0 +1,142 @@
+-module(adglent@init).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec main() -> {ok, binary()} | {error, binary()}.
+main() ->
+ Year = priv@prompt:value(<<"Year"/utf8>>, <<"2023"/utf8>>, false),
+ Session = priv@prompt:value(<<"Session Cookie"/utf8>>, <<""/utf8>>, false),
+ Use_showtime = priv@prompt:confirm(<<"Use showtime"/utf8>>, false),
+ Aoc_toml_file = <<"aoc.toml"/utf8>>,
+ Overwrite = case simplifile:create_file(Aoc_toml_file) of
+ {ok, _} ->
+ true;
+
+ {error, eexist} ->
+ priv@prompt:confirm(<<"aoc.toml exits - overwrite"/utf8>>, false);
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"Could not create aoc.toml"/utf8>>,
+ module => <<"adglent/init"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 29})
+ end,
+ _pipe@3 = case Overwrite of
+ true ->
+ _pipe@1 = priv@template:render(
+ <<"
+version = {{ version }}
+year = \"{{ year }}\"
+session = \"{{ session }}\"
+showtime = {{ showtime }}
+"/utf8>>,
+ [{<<"version"/utf8>>, <<"2"/utf8>>},
+ {<<"year"/utf8>>, Year},
+ {<<"session"/utf8>>, Session},
+ {<<"showtime"/utf8>>,
+ begin
+ _pipe = gleam@bool:to_string(Use_showtime),
+ gleam@string:lowercase(_pipe)
+ end}]
+ ),
+ _pipe@2 = simplifile:write(Aoc_toml_file, _pipe@1),
+ priv@errors:map_messages(
+ _pipe@2,
+ <<"aoc.toml - written"/utf8>>,
+ <<"Error when writing aoc.toml"/utf8>>
+ );
+
+ false ->
+ {ok, <<"aoc.toml - skipped"/utf8>>}
+ end,
+ priv@errors:print_result(_pipe@3),
+ Gleam_toml = begin
+ _pipe@4 = simplifile:read(<<"gleam.toml"/utf8>>),
+ _pipe@5 = priv@errors:map_error(
+ _pipe@4,
+ <<"Could not read gleam.toml"/utf8>>
+ ),
+ _pipe@6 = priv@errors:print_error(_pipe@5),
+ priv@errors:assert_ok(_pipe@6)
+ end,
+ Name = begin
+ _pipe@7 = priv@toml:get_string(Gleam_toml, [<<"name"/utf8>>]),
+ _pipe@8 = priv@errors:map_error(
+ _pipe@7,
+ <<"Could not read \"name\" from gleam.toml"/utf8>>
+ ),
+ _pipe@9 = priv@errors:print_error(_pipe@8),
+ priv@errors:assert_ok(_pipe@9)
+ end,
+ Test_main_file = <<<<"test/"/utf8, Name/binary>>/binary,
+ "_test.gleam"/utf8>>,
+ _pipe@12 = case Use_showtime of
+ true ->
+ _pipe@10 = priv@template:render(
+ <<"
+import showtime
+
+pub fn main() {
+ showtime.main()
+}
+"/utf8>>,
+ []
+ ),
+ _pipe@11 = simplifile:write(Test_main_file, _pipe@10),
+ priv@errors:map_messages(
+ _pipe@11,
+ <<"Wrote "/utf8, Test_main_file/binary>>,
+ <<"Could not write to "/utf8, Test_main_file/binary>>
+ );
+
+ false ->
+ {ok, <<"Using existing (gleeunit) "/utf8, Test_main_file/binary>>}
+ end,
+ _pipe@13 = priv@errors:print_result(_pipe@12),
+ priv@errors:assert_ok(_pipe@13),
+ _pipe@17 = case simplifile:is_file(<<".gitignore"/utf8>>) of
+ true ->
+ gleam@result:'try'(
+ begin
+ _pipe@14 = simplifile:read(<<".gitignore"/utf8>>),
+ gleam@result:map_error(
+ _pipe@14,
+ fun(Err) ->
+ <<"Could not read .gitignore: "/utf8,
+ (gleam@string:inspect(Err))/binary>>
+ end
+ )
+ end,
+ fun(Gitignore) ->
+ Aoc_toml_ignored = begin
+ _pipe@15 = gleam@string:split(Gitignore, <<"\n"/utf8>>),
+ gleam@list:find(
+ _pipe@15,
+ fun(Line) -> Line =:= <<"aoc.toml"/utf8>> end
+ )
+ end,
+ case Aoc_toml_ignored of
+ {error, _} ->
+ _pipe@16 = simplifile:append(
+ <<".gitignore"/utf8>>,
+ <<"\naoc.toml"/utf8>>
+ ),
+ priv@errors:map_messages(
+ _pipe@16,
+ <<".gitignore written"/utf8>>,
+ <<"Error when writing .gitignore"/utf8>>
+ );
+
+ {ok, _} ->
+ {ok,
+ <<".gitignore - skipped (already configured)"/utf8>>}
+ end
+ end
+ );
+
+ false ->
+ {error, <<"Could not find .gitignore"/utf8>>}
+ end,
+ priv@errors:print_result(_pipe@17).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl
new file mode 100644
index 0000000..a6a92e6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/adglent_ffi.erl
@@ -0,0 +1,12 @@
+-module(adglent_ffi).
+
+-export([get_line/1]).
+
+-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}.
+get_line(Prompt) ->
+ case io:get_line(Prompt) of
+ eof -> {error, eof};
+ {error, _} -> {error, no_data};
+ Data when is_binary(Data) -> {ok, Data};
+ Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)}
+ end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache
new file mode 100644
index 0000000..40f6caf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta
new file mode 100644
index 0000000..b6c1617
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl
new file mode 100644
index 0000000..1acb9b5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@aoc_client.erl
@@ -0,0 +1,61 @@
+-module(priv@aoc_client).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_input/3]).
+
+-spec get_input(binary(), binary(), binary()) -> {ok, binary()} |
+ {error, binary()}.
+get_input(Year, Day, Session) ->
+ Url = <<<<<<<<"https://adventofcode.com/"/utf8, Year/binary>>/binary,
+ "/day/"/utf8>>/binary,
+ Day/binary>>/binary,
+ "/input"/utf8>>,
+ gleam@result:'try'(
+ begin
+ _pipe = gleam@http@request:to(Url),
+ gleam@result:map_error(
+ _pipe,
+ fun(Error) ->
+ <<<<<<"Could not create request for \""/utf8, Url/binary>>/binary,
+ "\": "/utf8>>/binary,
+ (gleam@string:inspect(Error))/binary>>
+ end
+ )
+ end,
+ fun(Request) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = Request,
+ _pipe@2 = gleam@http@request:prepend_header(
+ _pipe@1,
+ <<"Accept"/utf8>>,
+ <<"application/json"/utf8>>
+ ),
+ _pipe@3 = gleam@http@request:prepend_header(
+ _pipe@2,
+ <<"Cookie"/utf8>>,
+ <<<<"session="/utf8, Session/binary>>/binary, ";"/utf8>>
+ ),
+ _pipe@4 = gleam@httpc:send(_pipe@3),
+ gleam@result:map_error(
+ _pipe@4,
+ fun(Error@1) ->
+ <<<<<<"Error when requesting \""/utf8, Url/binary>>/binary,
+ "\": "/utf8>>/binary,
+ (gleam@string:inspect(Error@1))/binary>>
+ end
+ )
+ end,
+ fun(Response) -> case erlang:element(2, Response) of
+ Status when (Status >= 200) andalso (Status < 300) ->
+ {ok, erlang:element(4, Response)};
+
+ Status@1 ->
+ {error,
+ <<<<(gleam@int:to_string(Status@1))/binary,
+ " - "/utf8>>/binary,
+ (erlang:element(4, Response))/binary>>}
+ end end
+ )
+ end
+ ).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache
new file mode 100644
index 0000000..7bfeea9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta
new file mode 100644
index 0000000..498e302
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl
new file mode 100644
index 0000000..41545be
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@errors.erl
@@ -0,0 +1,74 @@
+-module(priv@errors).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([map_messages/3, map_error/2, print_result/1, print_error/1, assert_ok/1]).
+
+-spec map_messages({ok, any()} | {error, any()}, binary(), binary()) -> {ok,
+ binary()} |
+ {error, binary()}.
+map_messages(Result, Success_message, Error_message) ->
+ _pipe = Result,
+ _pipe@1 = gleam@result:map_error(
+ _pipe,
+ fun(Error) ->
+ <<<<<<"Error - "/utf8, Error_message/binary>>/binary, ": "/utf8>>/binary,
+ (gleam@string:inspect(Error))/binary>>
+ end
+ ),
+ gleam@result:replace(_pipe@1, Success_message).
+
+-spec map_error({ok, OBD} | {error, any()}, binary()) -> {ok, OBD} |
+ {error, binary()}.
+map_error(Result, Error_message) ->
+ _pipe = Result,
+ gleam@result:map_error(
+ _pipe,
+ fun(Error) ->
+ <<<<Error_message/binary, ": "/utf8>>/binary,
+ (gleam@string:inspect(Error))/binary>>
+ end
+ ).
+
+-spec print_result({ok, binary()} | {error, binary()}) -> {ok, binary()} |
+ {error, binary()}.
+print_result(Result) ->
+ _pipe = Result,
+ _pipe@1 = gleam@result:unwrap_both(_pipe),
+ gleam@io:println(_pipe@1),
+ Result.
+
+-spec print_error({ok, OBM} | {error, binary()}) -> {ok, OBM} |
+ {error, binary()}.
+print_error(Result) ->
+ _pipe = Result,
+ gleam@result:map_error(
+ _pipe,
+ fun(Err) ->
+ gleam@io:println(Err),
+ Err
+ end
+ ).
+
+-spec assert_ok({ok, OBQ} | {error, binary()}) -> OBQ.
+assert_ok(Result) ->
+ _assert_subject = begin
+ _pipe = Result,
+ gleam@result:map_error(
+ _pipe,
+ fun(Err) ->
+ erlang:halt(1),
+ Err
+ end
+ )
+ end,
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"priv/errors"/utf8>>,
+ function => <<"assert_ok"/utf8>>,
+ line => 43})
+ end,
+ Value.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache
new file mode 100644
index 0000000..45d6e3e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta
new file mode 100644
index 0000000..b010daf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl
new file mode 100644
index 0000000..0277f14
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@prompt.erl
@@ -0,0 +1,53 @@
+-module(priv@prompt).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_line/1, confirm/2, value/3]).
+-export_type([get_line_error/0]).
+
+-type get_line_error() :: eof | no_data.
+
+-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}.
+get_line(Prompt) ->
+ adglent_ffi:get_line(Prompt).
+
+-spec confirm(binary(), boolean()) -> boolean().
+confirm(Message, Auto_accept) ->
+ Auto_accept orelse case begin
+ _pipe = adglent_ffi:get_line(<<Message/binary, "? (Y/N): "/utf8>>),
+ _pipe@1 = gleam@result:unwrap(_pipe, <<"n"/utf8>>),
+ gleam@string:trim(_pipe@1)
+ end of
+ <<"Y"/utf8>> ->
+ true;
+
+ <<"y"/utf8>> ->
+ true;
+
+ _ ->
+ false
+ end.
+
+-spec get_value_of_default(binary(), binary(), boolean()) -> binary().
+get_value_of_default(Message, Default, Auto_accept) ->
+ case Auto_accept of
+ true ->
+ Default;
+
+ false ->
+ _pipe = adglent_ffi:get_line(
+ <<<<<<Message/binary, "? ("/utf8>>/binary, Default/binary>>/binary,
+ "): "/utf8>>
+ ),
+ _pipe@1 = gleam@result:unwrap(_pipe, <<""/utf8>>),
+ gleam@string:trim(_pipe@1)
+ end.
+
+-spec value(binary(), binary(), boolean()) -> binary().
+value(Message, Default, Auto_accept) ->
+ case get_value_of_default(Message, Default, Auto_accept) of
+ <<""/utf8>> ->
+ Default;
+
+ Value ->
+ Value
+ end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache
new file mode 100644
index 0000000..8446302
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_meta
new file mode 100644
index 0000000..5e1f919
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl
new file mode 100644
index 0000000..6a5d0bf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@template.erl
@@ -0,0 +1,25 @@
+-module(priv@template).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([render/2]).
+
+-spec render(binary(), list({binary(), binary()})) -> binary().
+render(Template, Substitutions) ->
+ <<(begin
+ _pipe = Substitutions,
+ _pipe@2 = gleam@list:fold(
+ _pipe,
+ Template,
+ fun(Template@1, Substitution) ->
+ {Name, Value} = Substitution,
+ _pipe@1 = Template@1,
+ gleam@string:replace(
+ _pipe@1,
+ <<<<"{{ "/utf8, Name/binary>>/binary, " }}"/utf8>>,
+ Value
+ )
+ end
+ ),
+ gleam@string:trim(_pipe@2)
+ end)/binary,
+ "\n"/utf8>>.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache
new file mode 100644
index 0000000..d29fd97
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta
new file mode 100644
index 0000000..3397840
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl
new file mode 100644
index 0000000..7e36387
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@solution.erl
@@ -0,0 +1 @@
+-module(priv@templates@solution).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache
new file mode 100644
index 0000000..8cdc9df
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta
new file mode 100644
index 0000000..17c867f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl
new file mode 100644
index 0000000..ca6b127
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@test_main.erl
@@ -0,0 +1 @@
+-module(priv@templates@test_main).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache
new file mode 100644
index 0000000..2003723
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta
new file mode 100644
index 0000000..c996833
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl
new file mode 100644
index 0000000..2f5a41e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.erl
@@ -0,0 +1 @@
+-module(priv@templates@testfile_gleeunit).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache
new file mode 100644
index 0000000..155ee1e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta
new file mode 100644
index 0000000..120c91f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl
new file mode 100644
index 0000000..bbbc8b2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.erl
@@ -0,0 +1 @@
+-module(priv@templates@testfile_showtime).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache
new file mode 100644
index 0000000..e328098
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta
new file mode 100644
index 0000000..a423083
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl
new file mode 100644
index 0000000..6c41fbf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/priv@toml.erl
@@ -0,0 +1,83 @@
+-module(priv@toml).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_string/2, get_bool/2, get_int/2]).
+-export_type([tom_error/0]).
+
+-type tom_error() :: {tom_parse_error, tom:parse_error()} |
+ {tom_get_error, tom:get_error()}.
+
+-spec get_string(binary(), list(binary())) -> {ok, binary()} |
+ {error, tom_error()}.
+get_string(Toml_content, Key_path) ->
+ gleam@result:'try'(
+ begin
+ _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>),
+ gleam@result:map_error(
+ _pipe,
+ fun(Field@0) -> {tom_parse_error, Field@0} end
+ )
+ end,
+ fun(Toml) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = tom:get_string(Toml, Key_path),
+ gleam@result:map_error(
+ _pipe@1,
+ fun(Field@0) -> {tom_get_error, Field@0} end
+ )
+ end,
+ fun(Value) -> {ok, Value} end
+ )
+ end
+ ).
+
+-spec get_bool(binary(), list(binary())) -> {ok, boolean()} |
+ {error, tom_error()}.
+get_bool(Toml_content, Key_path) ->
+ gleam@result:'try'(
+ begin
+ _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>),
+ gleam@result:map_error(
+ _pipe,
+ fun(Field@0) -> {tom_parse_error, Field@0} end
+ )
+ end,
+ fun(Toml) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = tom:get_bool(Toml, Key_path),
+ gleam@result:map_error(
+ _pipe@1,
+ fun(Field@0) -> {tom_get_error, Field@0} end
+ )
+ end,
+ fun(Value) -> {ok, Value} end
+ )
+ end
+ ).
+
+-spec get_int(binary(), list(binary())) -> {ok, integer()} |
+ {error, tom_error()}.
+get_int(Toml_content, Key_path) ->
+ gleam@result:'try'(
+ begin
+ _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>),
+ gleam@result:map_error(
+ _pipe,
+ fun(Field@0) -> {tom_parse_error, Field@0} end
+ )
+ end,
+ fun(Toml) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = tom:get_int(Toml, Key_path),
+ gleam@result:map_error(
+ _pipe@1,
+ fun(Field@0) -> {tom_get_error, Field@0} end
+ )
+ end,
+ fun(Value) -> {ok, Value} end
+ )
+ end
+ ).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache
new file mode 100644
index 0000000..19b5f6b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_meta
new file mode 100644
index 0000000..96a5705
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl
new file mode 100644
index 0000000..d4c0030
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime.erl
@@ -0,0 +1,155 @@
+-module(showtime).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec mk_runner(
+ fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> NYW),
+ glint:command_input()
+) -> NYW.
+mk_runner(Func, Command) ->
+ _assert_subject = begin
+ _pipe = erlang:element(3, Command),
+ _pipe@1 = glint@flag:get_strings(_pipe, <<"modules"/utf8>>),
+ gleam@result:map(_pipe@1, fun(Modules) -> case Modules of
+ [] ->
+ none;
+
+ Modules@1 ->
+ {some, Modules@1}
+ end end)
+ end,
+ {ok, Module_list} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime"/utf8>>,
+ function => <<"mk_runner"/utf8>>,
+ line => 91})
+ end,
+ _assert_subject@1 = begin
+ _pipe@2 = erlang:element(3, Command),
+ glint@flag:get_strings(_pipe@2, <<"ignore"/utf8>>)
+ end,
+ {ok, Ignore_tags} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"showtime"/utf8>>,
+ function => <<"mk_runner"/utf8>>,
+ line => 100})
+ end,
+ _assert_subject@2 = begin
+ _pipe@3 = erlang:element(3, Command),
+ _pipe@4 = glint@flag:get_string(_pipe@3, <<"capture"/utf8>>),
+ _pipe@5 = gleam@result:map(
+ _pipe@4,
+ fun(Arg) -> gleam@string:lowercase(Arg) end
+ ),
+ gleam@result:map(_pipe@5, fun(Arg@1) -> case Arg@1 of
+ <<"no"/utf8>> ->
+ no;
+
+ <<"yes"/utf8>> ->
+ yes;
+
+ <<"mixed"/utf8>> ->
+ mixed
+ end end)
+ end,
+ {ok, Capture_output} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"showtime"/utf8>>,
+ function => <<"mk_runner"/utf8>>,
+ line => 104})
+ end,
+ Func(Module_list, Ignore_tags, Capture_output).
+
+-spec start_with_args(
+ list(binary()),
+ fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> any())
+) -> nil.
+start_with_args(Args, Func) ->
+ Modules_flag = begin
+ _pipe = glint@flag:string_list(),
+ _pipe@1 = glint@flag:default(_pipe, []),
+ glint@flag:description(
+ _pipe@1,
+ <<"Run only tests in the modules in this list"/utf8>>
+ )
+ end,
+ Ignore_flag = begin
+ _pipe@2 = glint@flag:string_list(),
+ _pipe@3 = glint@flag:default(_pipe@2, []),
+ glint@flag:description(
+ _pipe@3,
+ <<"Ignore tests that are have tags matching a tag in this list"/utf8>>
+ )
+ end,
+ Capture_flag = begin
+ _pipe@4 = glint@flag:string(),
+ _pipe@5 = glint@flag:default(_pipe@4, <<"no"/utf8>>),
+ _pipe@6 = glint@flag:constraint(
+ _pipe@5,
+ glint@flag@constraint:one_of(
+ [<<"yes"/utf8>>, <<"no"/utf8>>, <<"mixed"/utf8>>]
+ )
+ ),
+ glint@flag:description(
+ _pipe@6,
+ <<"Capture output: no (default) - output when tests are run, yes - output is captured and shown in report, mixed - output when run and in report"/utf8>>
+ )
+ end,
+ _pipe@7 = glint:new(),
+ _pipe@12 = glint:add(
+ _pipe@7,
+ [],
+ begin
+ _pipe@8 = glint:command(
+ fun(_capture) -> mk_runner(Func, _capture) end
+ ),
+ _pipe@9 = glint:flag(_pipe@8, <<"modules"/utf8>>, Modules_flag),
+ _pipe@10 = glint:flag(_pipe@9, <<"ignore"/utf8>>, Ignore_flag),
+ _pipe@11 = glint:flag(_pipe@10, <<"capture"/utf8>>, Capture_flag),
+ glint:description(_pipe@11, <<"Runs test"/utf8>>)
+ end
+ ),
+ _pipe@13 = glint:with_pretty_help(_pipe@12, glint:default_pretty_help()),
+ glint:run(_pipe@13, Args).
+
+-spec main() -> nil.
+main() ->
+ start_with_args(
+ gleam@erlang:start_arguments(),
+ fun(Module_list, Ignore_tags, Capture) ->
+ Test_event_handler = showtime@internal@erlang@event_handler:start(),
+ Test_module_handler = showtime@internal@erlang@module_handler:start(
+ Test_event_handler,
+ fun showtime@internal@erlang@discover:collect_test_functions/1,
+ fun showtime@internal@erlang@runner:run_test_suite/4,
+ Ignore_tags,
+ Capture
+ ),
+ Test_event_handler(start_test_run),
+ Modules = showtime@internal@erlang@discover:collect_modules(
+ Test_module_handler,
+ Module_list
+ ),
+ Test_event_handler(
+ {end_test_run,
+ begin
+ _pipe = Modules,
+ gleam@list:length(_pipe)
+ end}
+ ),
+ nil
+ end
+ ).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache
new file mode 100644
index 0000000..0dded35
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta
new file mode 100644
index 0000000..4c3ebd3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl
new file mode 100644
index 0000000..f2d2396
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.erl
@@ -0,0 +1,8 @@
+-module(showtime@internal@common@cli).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([capture/0]).
+
+-type capture() :: yes | no | mixed.
+
+
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache
new file mode 100644
index 0000000..df75ed9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta
new file mode 100644
index 0000000..cea0c4b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl
new file mode 100644
index 0000000..5ee9a85
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.erl
@@ -0,0 +1,131 @@
+-module(showtime@internal@common@common_event_handler).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([handle_event/3]).
+-export_type([test_state/0, handler_state/0]).
+
+-type test_state() :: not_started | running | {finished, integer()}.
+
+-type handler_state() :: {handler_state,
+ test_state(),
+ integer(),
+ gleam@dict:dict(binary(), gleam@dict:dict(binary(), showtime@internal@common@test_suite:test_run()))}.
+
+-spec handle_event(
+ showtime@internal@common@test_suite:test_event(),
+ fun(() -> integer()),
+ handler_state()
+) -> handler_state().
+handle_event(Msg, System_time, State) ->
+ Test_state = erlang:element(2, State),
+ Num_done = erlang:element(3, State),
+ Events = erlang:element(4, State),
+ {Updated_test_state, Updated_num_done, Updated_events} = case Msg of
+ start_test_run ->
+ {running, Num_done, Events};
+
+ {start_test_suite, Module} ->
+ Maybe_module_events = gleam@map:get(
+ Events,
+ erlang:element(2, Module)
+ ),
+ New_events = case Maybe_module_events of
+ {ok, _} ->
+ Events;
+
+ {error, _} ->
+ _pipe = Events,
+ gleam@map:insert(
+ _pipe,
+ erlang:element(2, Module),
+ gleam@map:new()
+ )
+ end,
+ {Test_state, Num_done, New_events};
+
+ {start_test, Module@1, Test} ->
+ Current_time = System_time(),
+ Maybe_module_events@1 = gleam@map:get(
+ Events,
+ erlang:element(2, Module@1)
+ ),
+ New_events@1 = case Maybe_module_events@1 of
+ {ok, Module_events} ->
+ Maybe_test_event = gleam@map:get(
+ Module_events,
+ erlang:element(2, Test)
+ ),
+ case Maybe_test_event of
+ {error, _} ->
+ _pipe@1 = Events,
+ gleam@map:insert(
+ _pipe@1,
+ erlang:element(2, Module@1),
+ begin
+ _pipe@2 = Module_events,
+ gleam@map:insert(
+ _pipe@2,
+ erlang:element(2, Test),
+ {ongoing_test_run, Test, Current_time}
+ )
+ end
+ );
+
+ {ok, _} ->
+ Events
+ end;
+
+ {error, _} ->
+ Events
+ end,
+ {Test_state, Num_done, New_events@1};
+
+ {end_test, Module@2, Test@1, Result} ->
+ Current_time@1 = System_time(),
+ Maybe_module_events@2 = gleam@map:get(
+ Events,
+ erlang:element(2, Module@2)
+ ),
+ New_events@2 = case Maybe_module_events@2 of
+ {ok, Module_events@1} ->
+ Maybe_test_run = begin
+ _pipe@3 = Module_events@1,
+ gleam@map:get(_pipe@3, erlang:element(2, Test@1))
+ end,
+ Updated_module_events = case Maybe_test_run of
+ {ok, {ongoing_test_run, Test_function, Started_at}} ->
+ _pipe@4 = Module_events@1,
+ gleam@map:insert(
+ _pipe@4,
+ erlang:element(2, Test@1),
+ {completed_test_run,
+ Test_function,
+ Current_time@1 - Started_at,
+ Result}
+ );
+
+ {error, _} ->
+ Module_events@1
+ end,
+ _pipe@5 = Events,
+ gleam@map:insert(
+ _pipe@5,
+ erlang:element(2, Module@2),
+ Updated_module_events
+ );
+
+ {error, _} ->
+ Events
+ end,
+ {Test_state, Num_done, New_events@2};
+
+ {end_test_suite, _} ->
+ {Test_state, Num_done + 1, Events};
+
+ {end_test_run, Num_modules} ->
+ {{finished, Num_modules}, Num_done, Events};
+
+ _ ->
+ {running, Num_done, Events}
+ end,
+ {handler_state, Updated_test_state, Updated_num_done, Updated_events}.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache
new file mode 100644
index 0000000..c0f776e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta
new file mode 100644
index 0000000..ae0cd95
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl
new file mode 100644
index 0000000..7f62f4f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.erl
@@ -0,0 +1,54 @@
+-module(showtime@internal@common@test_result).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([ignore_reason/0, test_return/0, exception/0, reason/0, reason_detail/0, gleam_error_detail/0, class/0, trace_list/0, trace/0, extra_info/0, arity_/0]).
+
+-type ignore_reason() :: ignore.
+
+-type test_return() :: {test_function_return,
+ gleam@dynamic:dynamic_(),
+ list(binary())} |
+ {ignored, ignore_reason()}.
+
+-type exception() :: {erlang_exception,
+ class(),
+ reason(),
+ trace_list(),
+ list(binary())}.
+
+-type reason() :: {assert_equal, list(reason_detail())} |
+ {assert_not_equal, list(reason_detail())} |
+ {assert_match, list(reason_detail())} |
+ {gleam_error, gleam_error_detail()} |
+ {gleam_assert, gleam@dynamic:dynamic_(), integer()} |
+ {generic_exception, gleam@dynamic:dynamic_()}.
+
+-type reason_detail() :: {module, binary()} |
+ {reason_line, integer()} |
+ {expression, binary()} |
+ {expected, gleam@dynamic:dynamic_()} |
+ {value, gleam@dynamic:dynamic_()} |
+ {pattern, binary()}.
+
+-type gleam_error_detail() :: {let_assert,
+ binary(),
+ binary(),
+ integer(),
+ binary(),
+ gleam@dynamic:dynamic_()}.
+
+-type class() :: erlang_error | exit | throw.
+
+-type trace_list() :: {trace_list, list(trace())}.
+
+-type trace() :: {trace, binary(), arity_(), list(extra_info())} |
+ {trace_module, binary(), binary(), arity_(), list(extra_info())}.
+
+-type extra_info() :: {error_info,
+ gleam@dict:dict(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_())} |
+ {file, binary()} |
+ {line, integer()}.
+
+-type arity_() :: {num, integer()} | {arg_list, list(gleam@dynamic:dynamic_())}.
+
+
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache
new file mode 100644
index 0000000..80885b8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta
new file mode 100644
index 0000000..b2139f9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl
new file mode 100644
index 0000000..6a56de8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.erl
@@ -0,0 +1,30 @@
+-module(showtime@internal@common@test_suite).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([test_run/0, test_module/0, test_function/0, test_suite/0, test_event/0]).
+
+-type test_run() :: {ongoing_test_run, test_function(), integer()} |
+ {completed_test_run,
+ test_function(),
+ integer(),
+ {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}}.
+
+-type test_module() :: {test_module, binary(), gleam@option:option(binary())}.
+
+-type test_function() :: {test_function, binary()}.
+
+-type test_suite() :: {test_suite, test_module(), list(test_function())}.
+
+-type test_event() :: start_test_run |
+ {start_test_suite, test_module()} |
+ {start_test, test_module(), test_function()} |
+ {end_test,
+ test_module(),
+ test_function(),
+ {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}} |
+ {end_test_suite, test_module()} |
+ {end_test_run, integer()}.
+
+
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache
new file mode 100644
index 0000000..68f7428
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta
new file mode 100644
index 0000000..236dd39
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl
new file mode 100644
index 0000000..f0548aa
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.erl
@@ -0,0 +1,230 @@
+-module(showtime@internal@erlang@discover).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([collect_modules/2, collect_test_functions/1]).
+
+-spec get_module_prefix(binary()) -> binary().
+get_module_prefix(Path) ->
+ Path_without_test = begin
+ _pipe = Path,
+ gleam@string:replace(_pipe, <<"./test"/utf8>>, <<""/utf8>>)
+ end,
+ Path_without_leading_slash = case gleam@string:starts_with(
+ Path_without_test,
+ <<"/"/utf8>>
+ ) of
+ true ->
+ gleam@string:drop_left(Path_without_test, 1);
+
+ false ->
+ Path_without_test
+ end,
+ Module_prefix = begin
+ _pipe@1 = Path_without_leading_slash,
+ gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"@"/utf8>>)
+ end,
+ case gleam@string:length(Module_prefix) of
+ 0 ->
+ Module_prefix;
+
+ _ ->
+ <<Module_prefix/binary, "@"/utf8>>
+ end.
+
+-spec collect_modules_in_folder(
+ binary(),
+ fun((showtime@internal@common@test_suite:test_module()) -> nil),
+ gleam@option:option(list(binary()))
+) -> list(showtime@internal@common@test_suite:test_module()).
+collect_modules_in_folder(Path, Test_module_handler, Only_modules) ->
+ Module_prefix = get_module_prefix(Path),
+ _assert_subject = simplifile:read_directory(Path),
+ {ok, Files} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/discover"/utf8>>,
+ function => <<"collect_modules_in_folder"/utf8>>,
+ line => 40})
+ end,
+ Test_modules_in_folder = begin
+ _pipe = Files,
+ _pipe@1 = gleam@list:filter(
+ _pipe,
+ fun(_capture) ->
+ gleam@string:ends_with(_capture, <<"_test.gleam"/utf8>>)
+ end
+ ),
+ gleam@list:filter_map(
+ _pipe@1,
+ fun(Test_module_file) ->
+ Module_name = <<Module_prefix/binary,
+ (begin
+ _pipe@2 = Test_module_file,
+ gleam@string:replace(
+ _pipe@2,
+ <<".gleam"/utf8>>,
+ <<""/utf8>>
+ )
+ end)/binary>>,
+ case Only_modules of
+ {some, Only_modules_list} ->
+ Module_in_list = begin
+ _pipe@3 = Only_modules_list,
+ gleam@list:any(
+ _pipe@3,
+ fun(Only_module_name) ->
+ Only_module_name =:= begin
+ _pipe@4 = Module_name,
+ gleam@string:replace(
+ _pipe@4,
+ <<"@"/utf8>>,
+ <<"/"/utf8>>
+ )
+ end
+ end
+ )
+ end,
+ case Module_in_list of
+ true ->
+ Test_module = {test_module,
+ Module_name,
+ {some, Test_module_file}},
+ Test_module_handler(Test_module),
+ {ok, Test_module};
+
+ false ->
+ {error, nil}
+ end;
+
+ none ->
+ Test_module@1 = {test_module,
+ Module_name,
+ {some, Test_module_file}},
+ Test_module_handler(Test_module@1),
+ {ok, Test_module@1}
+ end
+ end
+ )
+ end,
+ Test_modules_in_subfolders = begin
+ _pipe@5 = Files,
+ _pipe@6 = gleam@list:map(
+ _pipe@5,
+ fun(Filename) ->
+ <<<<Path/binary, "/"/utf8>>/binary, Filename/binary>>
+ end
+ ),
+ _pipe@7 = gleam@list:filter(
+ _pipe@6,
+ fun(File) -> simplifile:is_directory(File) end
+ ),
+ gleam@list:fold(
+ _pipe@7,
+ [],
+ fun(Modules, Subfolder) -> _pipe@8 = Modules,
+ gleam@list:append(
+ _pipe@8,
+ collect_modules_in_folder(
+ Subfolder,
+ Test_module_handler,
+ Only_modules
+ )
+ ) end
+ )
+ end,
+ _pipe@9 = Test_modules_in_folder,
+ gleam@list:append(_pipe@9, Test_modules_in_subfolders).
+
+-spec collect_modules(
+ fun((showtime@internal@common@test_suite:test_module()) -> nil),
+ gleam@option:option(list(binary()))
+) -> list(showtime@internal@common@test_suite:test_module()).
+collect_modules(Test_module_handler, Only_modules) ->
+ collect_modules_in_folder(
+ <<"./test"/utf8>>,
+ Test_module_handler,
+ Only_modules
+ ).
+
+-spec collect_test_functions(showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite().
+collect_test_functions(Module) ->
+ Test_functions = begin
+ _pipe = erlang:apply(
+ erlang:binary_to_atom(erlang:element(2, Module)),
+ erlang:binary_to_atom(<<"module_info"/utf8>>),
+ [gleam@dynamic:from(erlang:binary_to_atom(<<"exports"/utf8>>))]
+ ),
+ gleam@dynamic:unsafe_coerce(_pipe)
+ end,
+ Test_functions_filtered = begin
+ _pipe@1 = Test_functions,
+ _pipe@3 = gleam@list:map(
+ _pipe@1,
+ fun(Entry) ->
+ {Name, Arity} = case Entry of
+ {_, _} -> Entry;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/discover"/utf8>>,
+ function => <<"collect_test_functions"/utf8>>,
+ line => 131})
+ end,
+ {begin
+ _pipe@2 = Name,
+ erlang:atom_to_binary(_pipe@2)
+ end,
+ Arity}
+ end
+ ),
+ _pipe@4 = gleam@list:filter_map(
+ _pipe@3,
+ fun(Entry@1) ->
+ {Name@1, Arity@1} = case Entry@1 of
+ {_, _} -> Entry@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"showtime/internal/erlang/discover"/utf8>>,
+ function => <<"collect_test_functions"/utf8>>,
+ line => 139})
+ end,
+ case gleam@string:ends_with(Name@1, <<"_test"/utf8>>) of
+ true ->
+ case Arity@1 of
+ 0 ->
+ {ok, Name@1};
+
+ _ ->
+ gleam@io:println(
+ <<<<<<<<"WARNING: function \""/utf8,
+ Name@1/binary>>/binary,
+ "\" has arity: "/utf8>>/binary,
+ (gleam@int:to_string(Arity@1))/binary>>/binary,
+ " - cannot be used as test (needs to be 0)"/utf8>>
+ ),
+ {error, <<"Wrong arity"/utf8>>}
+ end;
+
+ false ->
+ {error, <<"Non matching name"/utf8>>}
+ end
+ end
+ ),
+ _pipe@5 = gleam@list:filter(
+ _pipe@4,
+ fun(_capture) ->
+ gleam@string:ends_with(_capture, <<"_test"/utf8>>)
+ end
+ ),
+ gleam@list:map(
+ _pipe@5,
+ fun(Function_name) -> {test_function, Function_name} end
+ )
+ end,
+ {test_suite, Module, Test_functions_filtered}.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache
new file mode 100644
index 0000000..60fea12
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta
new file mode 100644
index 0000000..1223c48
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl
new file mode 100644
index 0000000..d72ce2c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.erl
@@ -0,0 +1,76 @@
+-module(showtime@internal@erlang@event_handler).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([start/0]).
+-export_type([event_handler_message/0]).
+
+-type event_handler_message() :: {event_handler_message,
+ showtime@internal@common@test_suite:test_event(),
+ gleam@erlang@process:subject(integer())}.
+
+-spec system_time() -> integer().
+system_time() ->
+ os:system_time(millisecond).
+
+-spec start() -> fun((showtime@internal@common@test_suite:test_event()) -> nil).
+start() ->
+ _assert_subject = gleam@otp@actor:start(
+ {not_started, 0, gleam@map:new()},
+ fun(Msg, State) ->
+ {event_handler_message, Test_event, Reply_to} = Msg,
+ {Test_state, Num_done, Events} = State,
+ Updated_state = showtime@internal@common@common_event_handler:handle_event(
+ Test_event,
+ fun system_time/0,
+ {handler_state, Test_state, Num_done, Events}
+ ),
+ case Updated_state of
+ {handler_state, {finished, Num_modules}, Num_done@1, Events@1} when Num_done@1 =:= Num_modules ->
+ {Test_report, Num_failed} = showtime@internal@reports@formatter:create_test_report(
+ Events@1
+ ),
+ gleam@io:println(Test_report),
+ gleam@erlang@process:send(Reply_to, Num_failed),
+ {stop, normal};
+
+ {handler_state, Test_state@1, Num_done@2, Events@2} ->
+ {continue, {Test_state@1, Num_done@2, Events@2}, none}
+ end
+ end
+ ),
+ {ok, Subject} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/event_handler"/utf8>>,
+ function => <<"start"/utf8>>,
+ line => 32})
+ end,
+ Parent_subject = gleam@erlang@process:new_subject(),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ gleam@erlang@process:selecting(_pipe, Parent_subject, fun(X) -> X end)
+ end,
+ fun(Test_event@1) -> case Test_event@1 of
+ {end_test_run, _} ->
+ gleam@erlang@process:send(
+ Subject,
+ {event_handler_message, Test_event@1, Parent_subject}
+ ),
+ Num_failed@1 = gleam_erlang_ffi:select(Selector),
+ case Num_failed@1 > 0 of
+ true ->
+ erlang:halt(1);
+
+ false ->
+ erlang:halt(0)
+ end;
+
+ _ ->
+ gleam@erlang@process:send(
+ Subject,
+ {event_handler_message, Test_event@1, Parent_subject}
+ )
+ end end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache
new file mode 100644
index 0000000..6b896ec
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta
new file mode 100644
index 0000000..7cd0c75
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl
new file mode 100644
index 0000000..a6959f5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.erl
@@ -0,0 +1,53 @@
+-module(showtime@internal@erlang@module_handler).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([start/5]).
+
+-spec start(
+ fun((showtime@internal@common@test_suite:test_event()) -> nil),
+ fun((showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite()),
+ fun((showtime@internal@common@test_suite:test_suite(), fun((showtime@internal@common@test_suite:test_event()) -> nil), list(binary()), showtime@internal@common@cli:capture()) -> nil),
+ list(binary()),
+ showtime@internal@common@cli:capture()
+) -> fun((showtime@internal@common@test_suite:test_module()) -> nil).
+start(
+ Test_event_handler,
+ Test_function_collector,
+ Run_test_suite,
+ Ignore_tags,
+ Capture
+) ->
+ _assert_subject = gleam@otp@actor:start(
+ nil,
+ fun(Module, State) ->
+ gleam@erlang@process:start(
+ fun() ->
+ Test_suite = Test_function_collector(Module),
+ Test_event_handler({start_test_suite, Module}),
+ Run_test_suite(
+ Test_suite,
+ Test_event_handler,
+ Ignore_tags,
+ Capture
+ ),
+ Test_event_handler({end_test_suite, Module})
+ end,
+ false
+ ),
+ {continue, State, none}
+ end
+ ),
+ {ok, Subject} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/module_handler"/utf8>>,
+ function => <<"start"/utf8>>,
+ line => 23})
+ end,
+ fun(Test_module) ->
+ gleam@erlang@process:send(Subject, Test_module),
+ nil
+ end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache
new file mode 100644
index 0000000..91e7663
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta
new file mode 100644
index 0000000..069c9cf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl
new file mode 100644
index 0000000..702fb75
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.erl
@@ -0,0 +1,46 @@
+-module(showtime@internal@erlang@runner).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([run_test/4, run_test_suite/4]).
+
+-spec run_test(
+ binary(),
+ binary(),
+ list(binary()),
+ showtime@internal@common@cli:capture()
+) -> {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}.
+run_test(Module_name, Test_name, Ignore_tags, Capture) ->
+ Result = showtime_ffi:run_test(
+ erlang:binary_to_atom(Module_name),
+ erlang:binary_to_atom(Test_name),
+ Ignore_tags,
+ Capture
+ ),
+ Result.
+
+-spec run_test_suite(
+ showtime@internal@common@test_suite:test_suite(),
+ fun((showtime@internal@common@test_suite:test_event()) -> nil),
+ list(binary()),
+ showtime@internal@common@cli:capture()
+) -> nil.
+run_test_suite(Test_suite, Test_event_handler, Ignore_tags, Capture) ->
+ _pipe = erlang:element(3, Test_suite),
+ gleam@list:each(
+ _pipe,
+ fun(Test) ->
+ Test_event_handler(
+ {start_test, erlang:element(2, Test_suite), Test}
+ ),
+ Result = run_test(
+ erlang:element(2, erlang:element(2, Test_suite)),
+ erlang:element(2, Test),
+ Ignore_tags,
+ Capture
+ ),
+ Test_event_handler(
+ {end_test, erlang:element(2, Test_suite), Test, Result}
+ )
+ end
+ ).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache
new file mode 100644
index 0000000..bf88ac7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta
new file mode 100644
index 0000000..be99189
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl
new file mode 100644
index 0000000..d2969b2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.erl
@@ -0,0 +1,61 @@
+-module(showtime@internal@reports@compare).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([compare/2]).
+
+-spec compare(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> {binary(),
+ binary()}.
+compare(Expected, Got) ->
+ Expected_as_list = begin
+ _pipe = Expected,
+ (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe)
+ end,
+ Got_as_list = begin
+ _pipe@1 = Got,
+ (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe@1)
+ end,
+ Expected_as_string = begin
+ _pipe@2 = Expected,
+ gleam@dynamic:string(_pipe@2)
+ end,
+ Got_as_string = begin
+ _pipe@3 = Got,
+ gleam@dynamic:string(_pipe@3)
+ end,
+ case {Expected_as_list, Got_as_list, Expected_as_string, Got_as_string} of
+ {{ok, Expected_list}, {ok, Got_list}, _, _} ->
+ Comparison = begin
+ _pipe@4 = gap:compare_lists(Expected_list, Got_list),
+ _pipe@5 = gap@styling:from_comparison(_pipe@4),
+ _pipe@6 = gap@styling:highlight(
+ _pipe@5,
+ fun showtime@internal@reports@styles:expected_highlight/1,
+ fun showtime@internal@reports@styles:got_highlight/1,
+ fun(Item) -> Item end
+ ),
+ gap@styling:to_styled_comparison(_pipe@6)
+ end,
+ {erlang:element(2, Comparison), erlang:element(3, Comparison)};
+
+ {_, _, {ok, Expected_string}, {ok, Got_string}} ->
+ Comparison@1 = begin
+ _pipe@7 = gap:compare_strings(Expected_string, Got_string),
+ _pipe@8 = gap@styling:from_comparison(_pipe@7),
+ _pipe@9 = gap@styling:highlight(
+ _pipe@8,
+ fun showtime@internal@reports@styles:expected_highlight/1,
+ fun showtime@internal@reports@styles:got_highlight/1,
+ fun(Item@1) -> Item@1 end
+ ),
+ gap@styling:to_styled_comparison(_pipe@9)
+ end,
+ {erlang:element(2, Comparison@1), erlang:element(3, Comparison@1)};
+
+ {_, _, _, _} ->
+ {showtime@internal@reports@styles:expected_highlight(
+ gleam@string:inspect(Expected)
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Got)
+ )}
+ end.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache
new file mode 100644
index 0000000..58b0250
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta
new file mode 100644
index 0000000..86e3c59
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl
new file mode 100644
index 0000000..4022bed
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.erl
@@ -0,0 +1,749 @@
+-module(showtime@internal@reports@formatter).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([create_test_report/1]).
+-export_type([glee_unit_assertion_type/0, module_and_test/0, unified_error/0]).
+
+-type glee_unit_assertion_type() :: {glee_unit_assert_equal, binary()} |
+ {glee_unit_assert_not_equal, binary()} |
+ {glee_unit_assert_match, binary()}.
+
+-type module_and_test() :: {module_and_test_run,
+ binary(),
+ showtime@internal@common@test_suite:test_run()}.
+
+-type unified_error() :: {unified_error,
+ gleam@option:option(showtime@tests@meta:meta()),
+ binary(),
+ binary(),
+ binary(),
+ binary(),
+ gleam@option:option(integer()),
+ list(showtime@internal@common@test_result:trace())}.
+
+-spec erlang_error_to_unified(
+ list(showtime@internal@common@test_result:reason_detail()),
+ glee_unit_assertion_type(),
+ list(showtime@internal@common@test_result:trace())
+) -> unified_error().
+erlang_error_to_unified(Error_details, Assertion_type, Stacktrace) ->
+ _pipe = Error_details,
+ gleam@list:fold(
+ _pipe,
+ {unified_error,
+ none,
+ <<"not_set"/utf8>>,
+ erlang:element(2, Assertion_type),
+ <<""/utf8>>,
+ <<""/utf8>>,
+ none,
+ Stacktrace},
+ fun(Unified, Reason) -> case Reason of
+ {expression, Expression} ->
+ erlang:setelement(3, Unified, Expression);
+
+ {expected, Value} ->
+ case Assertion_type of
+ {glee_unit_assert_equal, _} ->
+ erlang:setelement(
+ 5,
+ Unified,
+ showtime@internal@reports@styles:expected_highlight(
+ gleam@string:inspect(Value)
+ )
+ );
+
+ _ ->
+ Unified
+ end;
+
+ {value, Value@1} ->
+ case Assertion_type of
+ {glee_unit_assert_not_equal, _} ->
+ erlang:setelement(
+ 6,
+ erlang:setelement(
+ 5,
+ Unified,
+ <<(showtime@internal@reports@styles:not_style(
+ <<"not "/utf8>>
+ ))/binary,
+ (gleam@string:inspect(Value@1))/binary>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Value@1)
+ )
+ );
+
+ _ ->
+ erlang:setelement(
+ 6,
+ Unified,
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Value@1)
+ )
+ )
+ end;
+
+ {pattern, Pattern} ->
+ case Pattern of
+ <<"{ ok , _ }"/utf8>> ->
+ erlang:setelement(
+ 5,
+ Unified,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Ok(_)"/utf8>>
+ )
+ );
+
+ <<"{ error , _ }"/utf8>> ->
+ erlang:setelement(
+ 5,
+ Unified,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Error(_)"/utf8>>
+ )
+ );
+
+ _ ->
+ Unified
+ end;
+
+ _ ->
+ Unified
+ end end
+ ).
+
+-spec gleam_error_to_unified(
+ showtime@internal@common@test_result:gleam_error_detail(),
+ list(showtime@internal@common@test_result:trace())
+) -> unified_error().
+gleam_error_to_unified(Gleam_error, Stacktrace) ->
+ case Gleam_error of
+ {let_assert, _, _, _, _, Value} ->
+ Result = gleam@dynamic:unsafe_coerce(Value),
+ {error, Assertion} = case Result of
+ {error, _} -> Result;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/reports/formatter"/utf8>>,
+ function => <<"gleam_error_to_unified"/utf8>>,
+ line => 293})
+ end,
+ case Assertion of
+ {eq, Got, Expected, Meta} ->
+ {Expected@1, Got@1} = showtime@internal@reports@compare:compare(
+ Expected,
+ Got
+ ),
+ {unified_error,
+ Meta,
+ <<"assert"/utf8>>,
+ <<"Assert equal"/utf8>>,
+ Expected@1,
+ Got@1,
+ none,
+ Stacktrace};
+
+ {not_eq, Got@2, Expected@2, Meta@1} ->
+ {unified_error,
+ Meta@1,
+ <<"assert"/utf8>>,
+ <<"Assert not equal"/utf8>>,
+ <<(showtime@internal@reports@styles:not_style(
+ <<"not "/utf8>>
+ ))/binary,
+ (gleam@string:inspect(Expected@2))/binary>>,
+ gleam@string:inspect(Got@2),
+ none,
+ Stacktrace};
+
+ {is_ok, Got@3, Meta@2} ->
+ {unified_error,
+ Meta@2,
+ <<"assert"/utf8>>,
+ <<"Assert is Ok"/utf8>>,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Ok(_)"/utf8>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Got@3)
+ ),
+ none,
+ Stacktrace};
+
+ {is_error, Got@4, Meta@3} ->
+ {unified_error,
+ Meta@3,
+ <<"assert"/utf8>>,
+ <<"Assert is Ok"/utf8>>,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Error(_)"/utf8>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Got@4)
+ ),
+ none,
+ Stacktrace};
+
+ {fail, Meta@4} ->
+ {unified_error,
+ Meta@4,
+ <<"assert"/utf8>>,
+ <<"Assert is Ok"/utf8>>,
+ showtime@internal@reports@styles:got_highlight(
+ <<"should.fail()"/utf8>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ <<"N/A - test always expected to fail"/utf8>>
+ ),
+ none,
+ Stacktrace}
+ end
+ end.
+
+-spec format_reason(unified_error(), binary(), binary(), list(binary())) -> list(list(showtime@internal@reports@table:col())).
+format_reason(Error, Module, Function, Output_buffer) ->
+ Meta@1 = case erlang:element(2, Error) of
+ {some, Meta} ->
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Description"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left, {content, erlang:element(2, Meta)}, 0}]};
+
+ none ->
+ none
+ end,
+ Stacktrace = begin
+ _pipe = erlang:element(8, Error),
+ gleam@list:map(_pipe, fun(Trace) -> case Trace of
+ {trace, Function@1, _, _} when Function@1 =:= <<""/utf8>> ->
+ <<"(anonymous)"/utf8>>;
+
+ {trace_module, Module@1, Function@2, _, _} when Function@2 =:= <<""/utf8>> ->
+ <<<<Module@1/binary, "."/utf8>>/binary,
+ "(anonymous)"/utf8>>;
+
+ {trace, Function@3, _, _} ->
+ Function@3;
+
+ {trace_module, Module@2, Function@4, _, _} ->
+ <<<<Module@2/binary, "."/utf8>>/binary,
+ Function@4/binary>>
+ end end)
+ end,
+ Stacktrace_rows = case Stacktrace of
+ [] ->
+ [];
+
+ [First | Rest] ->
+ First_row = {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Stacktrace"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ First
+ )},
+ 0}]},
+ Rest_rows = begin
+ _pipe@1 = Rest,
+ gleam@list:map(
+ _pipe@1,
+ fun(Row) ->
+ {some,
+ [{align_right, {content, <<""/utf8>>}, 2},
+ {separator, <<" "/utf8>>},
+ {align_left,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ Row
+ )},
+ 0}]}
+ end
+ )
+ end,
+ [First_row | Rest_rows]
+ end,
+ Output_rows = case begin
+ _pipe@2 = Output_buffer,
+ _pipe@3 = gleam@list:reverse(_pipe@2),
+ gleam@list:map(
+ _pipe@3,
+ fun(Row@1) -> gleam@string:trim_right(Row@1) end
+ )
+ end of
+ [] ->
+ [];
+
+ [First@1 | Rest@1] ->
+ First_row@1 = {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Output"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left_overflow,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ First@1
+ )},
+ 0}]},
+ Rest_rows@1 = begin
+ _pipe@4 = Rest@1,
+ gleam@list:map(
+ _pipe@4,
+ fun(Row@2) ->
+ {some,
+ [{align_right, {content, <<""/utf8>>}, 2},
+ {separator, <<" "/utf8>>},
+ {align_left_overflow,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ Row@2
+ )},
+ 0}]}
+ end
+ )
+ end,
+ [First_row@1 | Rest_rows@1]
+ end,
+ Line@1 = begin
+ _pipe@5 = erlang:element(7, Error),
+ _pipe@6 = gleam@option:map(
+ _pipe@5,
+ fun(Line) -> <<":"/utf8, (gleam@int:to_string(Line))/binary>> end
+ ),
+ gleam@option:unwrap(_pipe@6, <<""/utf8>>)
+ end,
+ Arrow = <<(gleam@string:join(
+ gleam@list:repeat(
+ <<"-"/utf8>>,
+ (gleam@string:length(Module) + 1) + ((gleam@string:length(
+ Function
+ )
+ + gleam@string:length(Line@1))
+ div 2)
+ ),
+ <<""/utf8>>
+ ))/binary,
+ "⌄"/utf8>>,
+ Standard_table_rows = [{some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:error_style(
+ <<"Failed"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left, {content, Arrow}, 0}]},
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Test"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left,
+ {styled_content,
+ <<<<Module/binary, "."/utf8>>/binary,
+ (showtime@internal@reports@styles:function_style(
+ <<Function/binary, Line@1/binary>>
+ ))/binary>>},
+ 0}]},
+ Meta@1,
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Expected"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left_overflow,
+ {styled_content, erlang:element(5, Error)},
+ 0}]},
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Got"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left_overflow,
+ {styled_content, erlang:element(6, Error)},
+ 0}]}],
+ _pipe@7 = Standard_table_rows,
+ _pipe@8 = gleam@list:append(_pipe@7, Stacktrace_rows),
+ _pipe@9 = gleam@list:append(_pipe@8, Output_rows),
+ _pipe@10 = gleam@list:append(
+ _pipe@9,
+ [{some,
+ [{align_right, {content, <<""/utf8>>}, 0},
+ {align_right, {content, <<""/utf8>>}, 0},
+ {align_right, {content, <<""/utf8>>}, 0}]}]
+ ),
+ gleam@list:filter_map(
+ _pipe@10,
+ fun(Row@3) -> gleam@option:to_result(Row@3, nil) end
+ ).
+
+-spec create_test_report(
+ gleam@dict:dict(binary(), gleam@dict:dict(binary(), showtime@internal@common@test_suite:test_run()))
+) -> {binary(), integer()}.
+create_test_report(Test_results) ->
+ All_test_runs = begin
+ _pipe = Test_results,
+ _pipe@1 = gleam@map:values(_pipe),
+ gleam@list:flat_map(_pipe@1, fun gleam@map:values/1)
+ end,
+ Failed_test_runs = begin
+ _pipe@2 = Test_results,
+ _pipe@3 = gleam@map:to_list(_pipe@2),
+ gleam@list:flat_map(
+ _pipe@3,
+ fun(Entry) ->
+ {Module_name, Test_module_results} = Entry,
+ _pipe@4 = Test_module_results,
+ _pipe@5 = gleam@map:values(_pipe@4),
+ gleam@list:filter_map(_pipe@5, fun(Test_run) -> case Test_run of
+ {completed_test_run, _, _, Result} ->
+ case Result of
+ {error, _} ->
+ {ok,
+ {module_and_test_run,
+ Module_name,
+ Test_run}};
+
+ {ok, {ignored, _}} ->
+ {error, nil};
+
+ {ok, _} ->
+ {error, nil}
+ end;
+
+ _ ->
+ _pipe@6 = Test_run,
+ gleam@io:debug(_pipe@6),
+ {error, nil}
+ end end)
+ end
+ )
+ end,
+ Ignored_test_runs = begin
+ _pipe@7 = Test_results,
+ _pipe@8 = gleam@map:to_list(_pipe@7),
+ gleam@list:flat_map(
+ _pipe@8,
+ fun(Entry@1) ->
+ {Module_name@1, Test_module_results@1} = Entry@1,
+ _pipe@9 = Test_module_results@1,
+ _pipe@10 = gleam@map:values(_pipe@9),
+ gleam@list:filter_map(
+ _pipe@10,
+ fun(Test_run@1) -> case Test_run@1 of
+ {completed_test_run, Test_function, _, Result@1} ->
+ case Result@1 of
+ {ok, {ignored, Reason}} ->
+ {ok,
+ {<<<<Module_name@1/binary,
+ "."/utf8>>/binary,
+ (erlang:element(
+ 2,
+ Test_function
+ ))/binary>>,
+ Reason}};
+
+ _ ->
+ {error, nil}
+ end;
+
+ _ ->
+ {error, nil}
+ end end
+ )
+ end
+ )
+ end,
+ Failed_tests_report = begin
+ _pipe@11 = Failed_test_runs,
+ _pipe@12 = gleam@list:filter_map(
+ _pipe@11,
+ fun(Module_and_test_run) ->
+ case erlang:element(3, Module_and_test_run) of
+ {completed_test_run, Test_function@1, _, Result@2} ->
+ case Result@2 of
+ {error, Exception} ->
+ case erlang:element(3, Exception) of
+ {assert_equal, Reason_details} ->
+ {ok,
+ format_reason(
+ erlang_error_to_unified(
+ Reason_details,
+ {glee_unit_assert_equal,
+ <<"Assert equal"/utf8>>},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {assert_not_equal, Reason_details@1} ->
+ {ok,
+ format_reason(
+ erlang_error_to_unified(
+ Reason_details@1,
+ {glee_unit_assert_not_equal,
+ <<"Assert not equal"/utf8>>},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {assert_match, Reason_details@2} ->
+ {ok,
+ format_reason(
+ erlang_error_to_unified(
+ Reason_details@2,
+ {glee_unit_assert_match,
+ <<"Assert match"/utf8>>},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {gleam_error, Reason@1} ->
+ {ok,
+ format_reason(
+ gleam_error_to_unified(
+ Reason@1,
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {gleam_assert, Value, Line_no} ->
+ {ok,
+ format_reason(
+ {unified_error,
+ none,
+ <<"gleam assert"/utf8>>,
+ <<"Assert failed"/utf8>>,
+ <<"Patterns should match"/utf8>>,
+ showtime@internal@reports@styles:error_style(
+ gleam@string:inspect(
+ Value
+ )
+ ),
+ {some, Line_no},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )},
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {generic_exception, Value@1} ->
+ {ok,
+ format_reason(
+ {unified_error,
+ none,
+ <<"generic exception"/utf8>>,
+ <<"Test function threw an exception"/utf8>>,
+ <<"Exception in test function"/utf8>>,
+ showtime@internal@reports@styles:error_style(
+ gleam@string:inspect(
+ Value@1
+ )
+ ),
+ none,
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )},
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ Other ->
+ gleam@io:println(
+ <<"Other: "/utf8,
+ (gleam@string:inspect(Other))/binary>>
+ ),
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"showtime/internal/reports/formatter"/utf8>>,
+ function => <<"create_test_report"/utf8>>,
+ line => 178}),
+ {error, nil}
+ end;
+
+ _ ->
+ {error, nil}
+ end;
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ),
+ gleam@list:fold(
+ _pipe@12,
+ [],
+ fun(Rows, Test_rows) -> gleam@list:append(Rows, Test_rows) end
+ )
+ end,
+ All_test_execution_time_reports = begin
+ _pipe@13 = All_test_runs,
+ gleam@list:filter_map(_pipe@13, fun(Test_run@2) -> case Test_run@2 of
+ {completed_test_run, Test_function@2, Total_time, _} ->
+ {ok,
+ <<<<<<(erlang:element(2, Test_function@2))/binary,
+ ": "/utf8>>/binary,
+ (gleam@int:to_string(Total_time))/binary>>/binary,
+ " ms"/utf8>>};
+
+ _ ->
+ {error, nil}
+ end end)
+ end,
+ _ = begin
+ _pipe@14 = All_test_execution_time_reports,
+ gleam@string:join(_pipe@14, <<"\n"/utf8>>)
+ end,
+ All_tests_count = begin
+ _pipe@15 = All_test_runs,
+ gleam@list:length(_pipe@15)
+ end,
+ Ignored_tests_count = begin
+ _pipe@16 = Ignored_test_runs,
+ gleam@list:length(_pipe@16)
+ end,
+ Failed_tests_count = begin
+ _pipe@17 = Failed_test_runs,
+ gleam@list:length(_pipe@17)
+ end,
+ Passed = showtime@internal@reports@styles:passed_style(
+ <<(gleam@int:to_string(
+ (All_tests_count - Failed_tests_count) - Ignored_tests_count
+ ))/binary,
+ " passed"/utf8>>
+ ),
+ Failed = showtime@internal@reports@styles:failed_style(
+ <<(gleam@int:to_string(Failed_tests_count))/binary, " failed"/utf8>>
+ ),
+ Ignored = case Ignored_tests_count of
+ 0 ->
+ <<""/utf8>>;
+
+ _ ->
+ <<", "/utf8,
+ (showtime@internal@reports@styles:ignored_style(
+ <<(gleam@int:to_string(Ignored_tests_count))/binary,
+ " ignored"/utf8>>
+ ))/binary>>
+ end,
+ Failed_tests_table = begin
+ _pipe@18 = {table, none, Failed_tests_report},
+ _pipe@19 = showtime@internal@reports@table:align_table(_pipe@18),
+ showtime@internal@reports@table:to_string(_pipe@19)
+ end,
+ Test_report = <<<<<<<<<<<<"\n"/utf8, Failed_tests_table/binary>>/binary,
+ "\n"/utf8>>/binary,
+ Passed/binary>>/binary,
+ ", "/utf8>>/binary,
+ Failed/binary>>/binary,
+ Ignored/binary>>,
+ {Test_report, Failed_tests_count}.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache
new file mode 100644
index 0000000..7dd3121
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta
new file mode 100644
index 0000000..c0078b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl
new file mode 100644
index 0000000..ec6230c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.erl
@@ -0,0 +1,93 @@
+-module(showtime@internal@reports@styles).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([not_style/1, module_style/1, heading_style/1, stacktrace_style/1, failed_style/1, error_style/1, got_highlight/1, passed_style/1, expected_highlight/1, ignored_style/1, function_style/1, strip_style/1]).
+
+-spec not_style(binary()) -> binary().
+not_style(Text) ->
+ gleam_community@ansi:bold(Text).
+
+-spec module_style(binary()) -> binary().
+module_style(Text) ->
+ gleam_community@ansi:cyan(Text).
+
+-spec heading_style(binary()) -> binary().
+heading_style(Text) ->
+ gleam_community@ansi:cyan(Text).
+
+-spec stacktrace_style(binary()) -> binary().
+stacktrace_style(Text) ->
+ Text.
+
+-spec bold_red(binary()) -> binary().
+bold_red(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:red(Text)).
+
+-spec failed_style(binary()) -> binary().
+failed_style(Text) ->
+ bold_red(Text).
+
+-spec error_style(binary()) -> binary().
+error_style(Text) ->
+ bold_red(Text).
+
+-spec got_highlight(binary()) -> binary().
+got_highlight(Text) ->
+ bold_red(Text).
+
+-spec bold_green(binary()) -> binary().
+bold_green(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:green(Text)).
+
+-spec passed_style(binary()) -> binary().
+passed_style(Text) ->
+ bold_green(Text).
+
+-spec expected_highlight(binary()) -> binary().
+expected_highlight(Text) ->
+ bold_green(Text).
+
+-spec bold_yellow(binary()) -> binary().
+bold_yellow(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:yellow(Text)).
+
+-spec ignored_style(binary()) -> binary().
+ignored_style(Text) ->
+ bold_yellow(Text).
+
+-spec bold_cyan(binary()) -> binary().
+bold_cyan(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:cyan(Text)).
+
+-spec function_style(binary()) -> binary().
+function_style(Text) ->
+ bold_cyan(Text).
+
+-spec strip_style(binary()) -> binary().
+strip_style(Text) ->
+ {New_text, _} = begin
+ _pipe = Text,
+ _pipe@1 = gleam@string:to_graphemes(_pipe),
+ gleam@list:fold(
+ _pipe@1,
+ {<<""/utf8>>, false},
+ fun(Acc, Char) ->
+ {Str, Removing} = Acc,
+ Bit_char = gleam_stdlib:identity(Char),
+ case {Bit_char, Removing} of
+ {<<16#1b>>, _} ->
+ {Str, true};
+
+ {<<16#6d>>, true} ->
+ {Str, false};
+
+ {_, true} ->
+ {Str, true};
+
+ {_, false} ->
+ {<<Str/binary, Char/binary>>, false}
+ end
+ end
+ )
+ end,
+ New_text.
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache
new file mode 100644
index 0000000..61c532d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta
new file mode 100644
index 0000000..080524c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl
new file mode 100644
index 0000000..35dbba3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.erl
@@ -0,0 +1,229 @@
+-module(showtime@internal@reports@table).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_string/1, align_table/1]).
+-export_type([content/0, col/0, table/0]).
+
+-type content() :: {content, binary()} | {styled_content, binary()}.
+
+-type col() :: {align_right, content(), integer()} |
+ {align_left, content(), integer()} |
+ {align_right_overflow, content(), integer()} |
+ {align_left_overflow, content(), integer()} |
+ {separator, binary()} |
+ {aligned, binary()}.
+
+-type table() :: {table, gleam@option:option(binary()), list(list(col()))}.
+
+-spec to_string(table()) -> binary().
+to_string(Table) ->
+ Rows = begin
+ _pipe = erlang:element(3, Table),
+ _pipe@3 = gleam@list:map(_pipe, fun(Row) -> _pipe@1 = Row,
+ _pipe@2 = gleam@list:filter_map(_pipe@1, fun(Col) -> case Col of
+ {separator, Char} ->
+ {ok, Char};
+
+ {aligned, Content} ->
+ {ok, Content};
+
+ _ ->
+ {error, nil}
+ end end),
+ gleam@string:join(_pipe@2, <<""/utf8>>) end),
+ gleam@string:join(_pipe@3, <<"\n"/utf8>>)
+ end,
+ Header@1 = begin
+ _pipe@4 = erlang:element(2, Table),
+ _pipe@5 = gleam@option:map(
+ _pipe@4,
+ fun(Header) -> <<Header/binary, "\n"/utf8>> end
+ ),
+ gleam@option:unwrap(_pipe@5, <<""/utf8>>)
+ end,
+ <<Header@1/binary, Rows/binary>>.
+
+-spec pad_left(binary(), integer(), binary()) -> binary().
+pad_left(Str, Num, Char) ->
+ Padding = begin
+ _pipe = gleam@list:repeat(Char, Num),
+ gleam@string:join(_pipe, <<""/utf8>>)
+ end,
+ <<Padding/binary, Str/binary>>.
+
+-spec pad_right(binary(), integer(), binary()) -> binary().
+pad_right(Str, Num, Char) ->
+ Padding = begin
+ _pipe = gleam@list:repeat(Char, Num),
+ gleam@string:join(_pipe, <<""/utf8>>)
+ end,
+ <<Str/binary, Padding/binary>>.
+
+-spec align_table(table()) -> table().
+align_table(Table) ->
+ Cols = begin
+ _pipe = erlang:element(3, Table),
+ gleam@list:transpose(_pipe)
+ end,
+ Col_width = begin
+ _pipe@1 = Cols,
+ gleam@list:map(_pipe@1, fun(Col) -> _pipe@2 = Col,
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(Content) -> case Content of
+ {align_right, {content, Unstyled}, _} ->
+ Unstyled;
+
+ {align_right, {styled_content, Styled}, _} ->
+ showtime@internal@reports@styles:strip_style(
+ Styled
+ );
+
+ {align_left, {content, Unstyled@1}, _} ->
+ Unstyled@1;
+
+ {align_left, {styled_content, Styled@1}, _} ->
+ showtime@internal@reports@styles:strip_style(
+ Styled@1
+ );
+
+ {align_left_overflow, _, _} ->
+ <<""/utf8>>;
+
+ {align_right_overflow, _, _} ->
+ <<""/utf8>>;
+
+ {separator, Char} ->
+ Char;
+
+ {aligned, Content@1} ->
+ Content@1
+ end end
+ ),
+ gleam@list:fold(
+ _pipe@3,
+ 0,
+ fun(Max, Str) ->
+ gleam@int:max(Max, gleam@string:length(Str))
+ end
+ ) end)
+ end,
+ Aligned_col = begin
+ _pipe@4 = Cols,
+ _pipe@5 = gleam@list:zip(_pipe@4, Col_width),
+ gleam@list:map(
+ _pipe@5,
+ fun(Col_and_width) ->
+ {Col@1, Width} = Col_and_width,
+ _pipe@6 = Col@1,
+ gleam@list:map(_pipe@6, fun(Content@2) -> case Content@2 of
+ {align_right, {content, Unstyled@2}, Margin} ->
+ {aligned,
+ pad_left(
+ Unstyled@2,
+ (Width + Margin) - gleam@string:length(
+ Unstyled@2
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_right, {styled_content, Styled@2}, Margin@1} ->
+ {aligned,
+ pad_left(
+ Styled@2,
+ (Width + Margin@1) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@2
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_right_overflow,
+ {content, Unstyled@3},
+ Margin@2} ->
+ {aligned,
+ pad_left(
+ Unstyled@3,
+ (Width + Margin@2) - gleam@string:length(
+ Unstyled@3
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_right_overflow,
+ {styled_content, Styled@3},
+ Margin@3} ->
+ {aligned,
+ pad_left(
+ Styled@3,
+ (Width + Margin@3) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@3
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left, {content, Unstyled@4}, Margin@4} ->
+ {aligned,
+ pad_right(
+ Unstyled@4,
+ (Width + Margin@4) - gleam@string:length(
+ Unstyled@4
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left, {styled_content, Styled@4}, Margin@5} ->
+ {aligned,
+ pad_right(
+ Styled@4,
+ (Width + Margin@5) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@4
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left_overflow,
+ {content, Unstyled@5},
+ Margin@6} ->
+ {aligned,
+ pad_right(
+ Unstyled@5,
+ (Width + Margin@6) - gleam@string:length(
+ Unstyled@5
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left_overflow,
+ {styled_content, Styled@5},
+ Margin@7} ->
+ {aligned,
+ pad_right(
+ Styled@5,
+ (Width + Margin@7) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@5
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {separator, Char@1} ->
+ {separator, Char@1};
+
+ {aligned, Content@3} ->
+ {aligned, Content@3}
+ end end)
+ end
+ )
+ end,
+ Aligned_rows = begin
+ _pipe@7 = Aligned_col,
+ gleam@list:transpose(_pipe@7)
+ end,
+ erlang:setelement(3, Table, Aligned_rows).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache
new file mode 100644
index 0000000..4aa8df1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta
new file mode 100644
index 0000000..7f1bdda
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl
new file mode 100644
index 0000000..c975467
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@meta.erl
@@ -0,0 +1,8 @@
+-module(showtime@tests@meta).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([meta/0]).
+
+-type meta() :: {meta, binary(), list(binary())}.
+
+
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache
new file mode 100644
index 0000000..90d3838
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta
new file mode 100644
index 0000000..fcc4e8a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl
new file mode 100644
index 0000000..05bea8f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@should.erl
@@ -0,0 +1,143 @@
+-module(showtime@tests@should).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([evaluate/1, equal/2, equal_meta/3, not_equal/2, not_equal_meta/3, be_ok/1, be_ok_meta/2, be_error/1, be_error_meta/2, fail/0, fail_meta/1, be_true/1, be_true_meta/2, be_false/1, be_false_meta/2]).
+-export_type([assertion/2]).
+
+-type assertion(MXN, MXO) :: {eq,
+ MXN,
+ MXN,
+ gleam@option:option(showtime@tests@meta:meta())} |
+ {not_eq, MXN, MXN, gleam@option:option(showtime@tests@meta:meta())} |
+ {is_ok,
+ {ok, MXN} | {error, MXO},
+ gleam@option:option(showtime@tests@meta:meta())} |
+ {is_error,
+ {ok, MXN} | {error, MXO},
+ gleam@option:option(showtime@tests@meta:meta())} |
+ {fail, gleam@option:option(showtime@tests@meta:meta())}.
+
+-spec evaluate(assertion(any(), any())) -> nil.
+evaluate(Assertion) ->
+ case Assertion of
+ {eq, A, B, _} ->
+ case A =:= B of
+ true ->
+ nil;
+
+ false ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {not_eq, A@1, B@1, _} ->
+ case A@1 /= B@1 of
+ true ->
+ nil;
+
+ false ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {is_ok, A@2, _} ->
+ case A@2 of
+ {ok, _} ->
+ nil;
+
+ {error, _} ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {is_error, A@3, _} ->
+ case A@3 of
+ {error, _} ->
+ nil;
+
+ {ok, _} ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {fail, _} ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end.
+
+-spec equal(MXP, MXP) -> nil.
+equal(A, B) ->
+ evaluate({eq, A, B, none}).
+
+-spec equal_meta(MXR, MXR, showtime@tests@meta:meta()) -> nil.
+equal_meta(A, B, Meta) ->
+ evaluate({eq, A, B, {some, Meta}}).
+
+-spec not_equal(MXT, MXT) -> nil.
+not_equal(A, B) ->
+ evaluate({not_eq, A, B, none}).
+
+-spec not_equal_meta(MXV, MXV, showtime@tests@meta:meta()) -> nil.
+not_equal_meta(A, B, Meta) ->
+ evaluate({not_eq, A, B, {some, Meta}}).
+
+-spec be_ok({ok, MXX} | {error, any()}) -> MXX.
+be_ok(A) ->
+ evaluate({is_ok, A, none}),
+ {ok, Value} = case A of
+ {ok, _} -> A;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/tests/should"/utf8>>,
+ function => <<"be_ok"/utf8>>,
+ line => 30})
+ end,
+ Value.
+
+-spec be_ok_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_ok_meta(A, Meta) ->
+ evaluate({is_ok, A, {some, Meta}}).
+
+-spec be_error({ok, any()} | {error, MYI}) -> MYI.
+be_error(A) ->
+ evaluate({is_error, A, none}),
+ {error, Value} = case A of
+ {error, _} -> A;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/tests/should"/utf8>>,
+ function => <<"be_error"/utf8>>,
+ line => 40})
+ end,
+ Value.
+
+-spec be_error_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_error_meta(A, Meta) ->
+ evaluate({is_error, A, {some, Meta}}).
+
+-spec fail() -> nil.
+fail() ->
+ evaluate({fail, none}).
+
+-spec fail_meta(showtime@tests@meta:meta()) -> nil.
+fail_meta(Meta) ->
+ evaluate({fail, {some, Meta}}).
+
+-spec be_true(boolean()) -> nil.
+be_true(A) ->
+ _pipe = A,
+ equal(_pipe, true).
+
+-spec be_true_meta(boolean(), showtime@tests@meta:meta()) -> nil.
+be_true_meta(A, Meta) ->
+ _pipe = A,
+ equal_meta(_pipe, true, Meta).
+
+-spec be_false(boolean()) -> nil.
+be_false(A) ->
+ _pipe = A,
+ equal(_pipe, false).
+
+-spec be_false_meta(boolean(), showtime@tests@meta:meta()) -> nil.
+be_false_meta(A, Meta) ->
+ _pipe = A,
+ equal_meta(_pipe, false, Meta).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache
new file mode 100644
index 0000000..d07ea1b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta
new file mode 100644
index 0000000..8354c6f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl
new file mode 100644
index 0000000..2f65614
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime@tests@test.erl
@@ -0,0 +1,57 @@
+-module(showtime@tests@test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([test/2, equal/3, not_equal/3, with_meta/2, be_ok/2, be_error/2, fail/1, be_true/2, be_false/2]).
+-export_type([test/0, meta_should/1]).
+
+-type test() :: {test, showtime@tests@meta:meta(), fun(() -> nil)}.
+
+-type meta_should(OKH) :: {meta_should,
+ fun((OKH, OKH) -> nil),
+ fun((OKH, OKH) -> nil)}.
+
+-spec test(showtime@tests@meta:meta(), fun((showtime@tests@meta:meta()) -> nil)) -> test().
+test(Meta, Test_function) ->
+ {test, Meta, fun() -> Test_function(Meta) end}.
+
+-spec equal(OKM, OKM, showtime@tests@meta:meta()) -> nil.
+equal(A, B, Meta) ->
+ gleam@io:debug(A),
+ gleam@io:debug(B),
+ showtime@tests@should:equal_meta(A, B, Meta).
+
+-spec not_equal(OKO, OKO, showtime@tests@meta:meta()) -> nil.
+not_equal(A, B, Meta) ->
+ showtime@tests@should:equal_meta(A, B, Meta).
+
+-spec with_meta(showtime@tests@meta:meta(), fun((meta_should(any())) -> nil)) -> test().
+with_meta(Meta, Test_function) ->
+ {test,
+ Meta,
+ fun() ->
+ Test_function(
+ {meta_should,
+ fun(A, B) -> equal(A, B, Meta) end,
+ fun(A@1, B@1) -> not_equal(A@1, B@1, Meta) end}
+ )
+ end}.
+
+-spec be_ok({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_ok(A, Meta) ->
+ showtime@tests@should:be_ok_meta(A, Meta).
+
+-spec be_error({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_error(A, Meta) ->
+ showtime@tests@should:be_error_meta(A, Meta).
+
+-spec fail(showtime@tests@meta:meta()) -> nil.
+fail(Meta) ->
+ showtime@tests@should:fail_meta(Meta).
+
+-spec be_true(boolean(), showtime@tests@meta:meta()) -> nil.
+be_true(A, Meta) ->
+ showtime@tests@should:be_true_meta(A, Meta).
+
+-spec be_false(boolean(), showtime@tests@meta:meta()) -> nil.
+be_false(A, Meta) ->
+ showtime@tests@should:be_false_meta(A, Meta).
diff --git a/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl
new file mode 100644
index 0000000..3259623
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/_gleam_artefacts/showtime_ffi.erl
@@ -0,0 +1,187 @@
+-module(showtime_ffi).
+
+-export([run_test/4, functions/0, capture_output/1, gleam_error/1]).
+
+gleam_error(Value) ->
+ erlang:error(#{
+ gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => Value,
+ module => <<"this/is/not/used"/utf8>>,
+ function => <<"gleam_error"/utf8>>,
+ % Not used
+ line => 0
+ }).
+
+start_output_capture(Capture) ->
+ OldGroupLeader = group_leader(),
+ CapturePid = spawn(showtime_ffi, capture_output, [{[], {OldGroupLeader, Capture}}]),
+ group_leader(CapturePid, self()),
+ {CapturePid, OldGroupLeader}.
+
+stop_output_capture({CapturePid, OldGroupLeader}) ->
+ group_leader(OldGroupLeader, self()),
+ CapturePid ! {capture_done, self()},
+ receive
+ Buffer ->
+ Buffer
+ end.
+
+capture_output({Buffer, {OldGroupLeader, Capture}}) ->
+ receive
+ {io_request, From, ReplyAs, {put_chars, unicode, BitString}} ->
+ case Capture of
+ yes ->
+ From ! {io_reply, ReplyAs, ok},
+ capture_output({[BitString | Buffer], {OldGroupLeader, Capture}});
+ mixed ->
+ OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}},
+ capture_output({[BitString | Buffer], {OldGroupLeader, Capture}});
+ no ->
+ OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}},
+ capture_output({Buffer, {OldGroupLeader, Capture}})
+ end;
+ {capture_done, SenderPid} ->
+ SenderPid ! Buffer;
+ OtherMessage ->
+ OldGroupLeader ! OtherMessage,
+ capture_output({Buffer, {OldGroupLeader, Capture}})
+ end.
+
+run_test(Module, Function, IgnoreTags, Capture) ->
+ OutputCapture = start_output_capture(Capture),
+ try
+ Result = apply(Module, Function, []),
+ {ResultType, FinalResult} =
+ case Result of
+ {test, {meta, _Description, Tags}, TestFun} ->
+ case
+ lists:any(
+ fun(Tag) ->
+ lists:any(fun(IgnoreTag) -> IgnoreTag == Tag end, IgnoreTags)
+ end,
+ Tags
+ )
+ of
+ true ->
+ {ignored, ignore};
+ false ->
+ {test_function_return, TestFun()}
+ end;
+ DirectResult ->
+ {test_function_return, DirectResult}
+ end,
+ OutputCaptureBuffer = stop_output_capture(OutputCapture),
+ case ResultType of
+ ignored -> {ok, {ResultType, FinalResult}};
+ _ -> {ok, {ResultType, FinalResult, OutputCaptureBuffer}}
+ end
+ catch
+ Class:Reason:Stacktrace ->
+ GleamReason =
+ case Reason of
+ {Assertion, ReasonList} ->
+ ErlangReasonList =
+ lists:map(
+ fun(ReasonDetail) ->
+ case ReasonDetail of
+ {line, LineNo} ->
+ {reason_line, LineNo};
+ {expression, List} ->
+ {expression, list_to_binary(List)};
+ {module, ModuleAtom} ->
+ {module, atom_to_binary(ModuleAtom)};
+ {pattern, Pattern} ->
+ {pattern, list_to_binary(Pattern)};
+ Other ->
+ Other
+ end
+ end,
+ ReasonList
+ ),
+ GleamAssertionType =
+ case Assertion of
+ assertEqual ->
+ assert_equal;
+ assertNotEqual ->
+ assert_not_equal;
+ assertMatch ->
+ assert_match;
+ OtherAssertionType ->
+ OtherAssertionType
+ end,
+ {GleamAssertionType, ErlangReasonList};
+ #{
+ function := GleamFunction,
+ gleam_error := GleamError,
+ line := Line,
+ message := Message,
+ module := GleamModule,
+ value := Value
+ } ->
+ case Value of
+ {error, {OkValue, _, _, _}} when OkValue == not_eq; OkValue == eq ->
+ {gleam_error,
+ {GleamError, GleamModule, GleamFunction, Line, Message, Value}};
+ {error, {OkValue, _, _}} when OkValue == is_ok; OkValue == is_error ->
+ {gleam_error,
+ {GleamError, GleamModule, GleamFunction, Line, Message, Value}};
+ {error, {OkValue, _}} when OkValue == fail ->
+ {gleam_error,
+ {GleamError, GleamModule, GleamFunction, Line, Message, Value}};
+ _ ->
+ {gleam_assert, Value, Line}
+ end;
+ OtherReason ->
+ {generic_exception, OtherReason}
+ end,
+ GleamClass =
+ case Class of
+ error ->
+ erlang_error;
+ Other ->
+ Other
+ end,
+ GleamTraceList =
+ lists:map(
+ fun(Trace) ->
+ case Trace of
+ {ModuleName, FunctionName, Arity, ExtraInfoList} ->
+ {trace_module, atom_to_binary(ModuleName),
+ atom_to_binary(FunctionName), map_arity(Arity),
+ map_extra_info_list(ExtraInfoList)};
+ {FunctionName, Arity, ExtraInfoList} ->
+ {trace, atom_to_binary(FunctionName), map_arity(Arity),
+ map_extra_info_list(ExtraInfoList)}
+ end
+ end,
+ Stacktrace
+ ),
+ OutputCaptureBufferCatch = stop_output_capture(OutputCapture),
+ {error,
+ {erlang_exception, GleamClass, GleamReason, {trace_list, GleamTraceList},
+ OutputCaptureBufferCatch}}
+ end.
+
+map_extra_info_list(ExtraInfoList) ->
+ lists:map(
+ fun(ExtraInfo) ->
+ case ExtraInfo of
+ {file, FileNameList} -> {file, list_to_binary(FileNameList)};
+ Other -> Other
+ end
+ end,
+ ExtraInfoList
+ ).
+
+map_arity(Arity) ->
+ if
+ is_list(Arity) ->
+ {arg_list, Arity};
+ is_integer(Arity) ->
+ {num, Arity}
+ end.
+
+functions() ->
+ Funs = module_info(exports),
+ Funs.
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent.app b/aoc2023/build/dev/erlang/adglent/ebin/adglent.app
new file mode 100644
index 0000000..f8e1aa6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent.app
@@ -0,0 +1,17 @@
+{application, adglent, [
+ {vsn, "1.2.0"},
+ {applications, [gap,
+ gleam_community_ansi,
+ gleam_erlang,
+ gleam_http,
+ gleam_httpc,
+ gleam_otp,
+ gleam_stdlib,
+ glint,
+ simplifile,
+ snag,
+ tom]},
+ {description, "Advent of code helper - automating setup of tests, solution template and problem input"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent.beam
new file mode 100644
index 0000000..c53eb59
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beam
new file mode 100644
index 0000000..9ad63c2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent@day.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beam
new file mode 100644
index 0000000..37d94e6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent@init.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beam b/aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beam
new file mode 100644
index 0000000..259f958
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/adglent_ffi.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beam
new file mode 100644
index 0000000..9a78e8e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@aoc_client.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beam
new file mode 100644
index 0000000..c97eda5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@errors.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beam
new file mode 100644
index 0000000..50b7d68
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@prompt.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@template.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@template.beam
new file mode 100644
index 0000000..cbe144e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@template.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beam
new file mode 100644
index 0000000..54c7937
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@solution.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beam
new file mode 100644
index 0000000..7e35186
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@test_main.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beam
new file mode 100644
index 0000000..7acb10e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_gleeunit.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beam
new file mode 100644
index 0000000..a77da82
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@templates@testfile_showtime.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beam b/aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beam
new file mode 100644
index 0000000..1788e31
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/priv@toml.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime.beam
new file mode 100644
index 0000000..d3a477e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beam
new file mode 100644
index 0000000..e9be51d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@cli.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beam
new file mode 100644
index 0000000..de943fd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@common_event_handler.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beam
new file mode 100644
index 0000000..f7b2f57
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_result.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beam
new file mode 100644
index 0000000..6146227
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@common@test_suite.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beam
new file mode 100644
index 0000000..4f28602
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@discover.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beam
new file mode 100644
index 0000000..ed9bbda
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@event_handler.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beam
new file mode 100644
index 0000000..75e190f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@module_handler.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beam
new file mode 100644
index 0000000..d0a69a6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@erlang@runner.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beam
new file mode 100644
index 0000000..dc16640
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@compare.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beam
new file mode 100644
index 0000000..7d6a27a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@formatter.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beam
new file mode 100644
index 0000000..3a5c720
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@styles.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beam
new file mode 100644
index 0000000..7778cd8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@internal@reports@table.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beam
new file mode 100644
index 0000000..2f911da
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@meta.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beam
new file mode 100644
index 0000000..14ead72
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@should.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beam
new file mode 100644
index 0000000..f3d21e6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime@tests@test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beam b/aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beam
new file mode 100644
index 0000000..95c965e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/ebin/showtime_ffi.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl b/aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl
new file mode 100644
index 0000000..615e473
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/adglent_Example.hrl
@@ -0,0 +1 @@
+-record(example, {input :: binary(), answer :: any()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl
new file mode 100644
index 0000000..4cd5ddd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomGetError.hrl
@@ -0,0 +1 @@
+-record(tom_get_error, {error :: tom:get_error()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl
new file mode 100644
index 0000000..7306934
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/priv@toml_TomParseError.hrl
@@ -0,0 +1 @@
+-record(tom_parse_error, {error :: tom:parse_error()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl
new file mode 100644
index 0000000..7d24e52
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl
@@ -0,0 +1 @@
+-record(finished, {num_modules :: integer()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl
new file mode 100644
index 0000000..3efcd39
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl
@@ -0,0 +1,5 @@
+-record(handler_state, {
+ test_state :: showtime@internal@common@common_event_handler:test_state(),
+ num_done :: integer(),
+ events :: gleam@dict:dict(binary(), gleam@dict:dict(binary(), showtime@internal@common@test_suite:test_run()))
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl
new file mode 100644
index 0000000..79f34f8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ArgList.hrl
@@ -0,0 +1 @@
+-record(arg_list, {arg_list :: list(gleam@dynamic:dynamic_())}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl
new file mode 100644
index 0000000..c6458ba
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl
@@ -0,0 +1,3 @@
+-record(assert_equal, {
+ details :: list(showtime@internal@common@test_result:reason_detail())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl
new file mode 100644
index 0000000..4920304
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl
@@ -0,0 +1,3 @@
+-record(assert_match, {
+ details :: list(showtime@internal@common@test_result:reason_detail())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl
new file mode 100644
index 0000000..221c15f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl
@@ -0,0 +1,3 @@
+-record(assert_not_equal, {
+ details :: list(showtime@internal@common@test_result:reason_detail())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl
new file mode 100644
index 0000000..9a31ba8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErlangException.hrl
@@ -0,0 +1,6 @@
+-record(erlang_exception, {
+ class :: showtime@internal@common@test_result:class(),
+ reason :: showtime@internal@common@test_result:reason(),
+ stacktrace :: showtime@internal@common@test_result:trace_list(),
+ output_buffer :: list(binary())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl
new file mode 100644
index 0000000..4e0244d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl
@@ -0,0 +1,3 @@
+-record(error_info, {
+ error_info :: gleam@dict:dict(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl
new file mode 100644
index 0000000..5e40ad3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expected.hrl
@@ -0,0 +1 @@
+-record(expected, {value :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl
new file mode 100644
index 0000000..7aa0c35
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Expression.hrl
@@ -0,0 +1 @@
+-record(expression, {expression :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl
new file mode 100644
index 0000000..1274b74
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_File.hrl
@@ -0,0 +1 @@
+-record(file, {filename :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl
new file mode 100644
index 0000000..7c33d0d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GenericException.hrl
@@ -0,0 +1 @@
+-record(generic_exception, {value :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl
new file mode 100644
index 0000000..095748c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl
@@ -0,0 +1 @@
+-record(gleam_assert, {value :: gleam@dynamic:dynamic_(), line_no :: integer()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl
new file mode 100644
index 0000000..68e6645
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_GleamError.hrl
@@ -0,0 +1,3 @@
+-record(gleam_error, {
+ details :: showtime@internal@common@test_result:gleam_error_detail()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl
new file mode 100644
index 0000000..87b7e2f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Ignored.hrl
@@ -0,0 +1 @@
+-record(ignored, {reason :: showtime@internal@common@test_result:ignore_reason()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl
new file mode 100644
index 0000000..5f3f60d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_LetAssert.hrl
@@ -0,0 +1,7 @@
+-record(let_assert, {
+ module :: binary(),
+ function :: binary(),
+ line_no :: integer(),
+ message :: binary(),
+ value :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl
new file mode 100644
index 0000000..9807df6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Line.hrl
@@ -0,0 +1 @@
+-record(line, {line_no :: integer()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl
new file mode 100644
index 0000000..8002c0c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Module.hrl
@@ -0,0 +1 @@
+-record(module, {name :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl
new file mode 100644
index 0000000..c36efa3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Num.hrl
@@ -0,0 +1 @@
+-record(num, {arity :: integer()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl
new file mode 100644
index 0000000..6aa9c84
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Pattern.hrl
@@ -0,0 +1 @@
+-record(pattern, {pattern :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl
new file mode 100644
index 0000000..b7ad1ab
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl
@@ -0,0 +1 @@
+-record(reason_line, {line_no :: integer()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl
new file mode 100644
index 0000000..b0bc294
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl
@@ -0,0 +1,4 @@
+-record(test_function_return, {
+ value :: gleam@dynamic:dynamic_(),
+ output_buffer :: list(binary())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl
new file mode 100644
index 0000000..4cb007c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Trace.hrl
@@ -0,0 +1,5 @@
+-record(trace, {
+ function :: binary(),
+ arity :: showtime@internal@common@test_result:arity_(),
+ extra_info :: list(showtime@internal@common@test_result:extra_info())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl
new file mode 100644
index 0000000..c1aa9c5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceList.hrl
@@ -0,0 +1,3 @@
+-record(trace_list, {
+ traces :: list(showtime@internal@common@test_result:trace())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl
new file mode 100644
index 0000000..595362f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_TraceModule.hrl
@@ -0,0 +1,6 @@
+-record(trace_module, {
+ module :: binary(),
+ function :: binary(),
+ arity :: showtime@internal@common@test_result:arity_(),
+ extra_info :: list(showtime@internal@common@test_result:extra_info())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl
new file mode 100644
index 0000000..3a4b0dd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_result_Value.hrl
@@ -0,0 +1 @@
+-record(value, {value :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl
new file mode 100644
index 0000000..927a0cf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl
@@ -0,0 +1,6 @@
+-record(completed_test_run, {
+ test_function :: showtime@internal@common@test_suite:test_function(),
+ total_time :: integer(),
+ result :: {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl
new file mode 100644
index 0000000..13df1bf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTest.hrl
@@ -0,0 +1,6 @@
+-record(end_test, {
+ test_module :: showtime@internal@common@test_suite:test_module(),
+ test_function :: showtime@internal@common@test_suite:test_function(),
+ result :: {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl
new file mode 100644
index 0000000..3f78991
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl
@@ -0,0 +1 @@
+-record(end_test_run, {num_modules :: integer()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl
new file mode 100644
index 0000000..a7f37b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl
@@ -0,0 +1,3 @@
+-record(end_test_suite, {
+ test_module :: showtime@internal@common@test_suite:test_module()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl
new file mode 100644
index 0000000..f52e5cc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl
@@ -0,0 +1,4 @@
+-record(ongoing_test_run, {
+ test_function :: showtime@internal@common@test_suite:test_function(),
+ started_at :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl
new file mode 100644
index 0000000..d532609
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTest.hrl
@@ -0,0 +1,4 @@
+-record(start_test, {
+ test_module :: showtime@internal@common@test_suite:test_module(),
+ test_function :: showtime@internal@common@test_suite:test_function()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl
new file mode 100644
index 0000000..d5a03d3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl
@@ -0,0 +1,3 @@
+-record(start_test_suite, {
+ test_module :: showtime@internal@common@test_suite:test_module()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl
new file mode 100644
index 0000000..a783ba4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl
@@ -0,0 +1 @@
+-record(test_function, {name :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl
new file mode 100644
index 0000000..ee9baaf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestModule.hrl
@@ -0,0 +1 @@
+-record(test_module, {name :: binary(), path :: gleam@option:option(binary())}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl
new file mode 100644
index 0000000..253a946
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl
@@ -0,0 +1,4 @@
+-record(test_suite, {
+ module :: showtime@internal@common@test_suite:test_module(),
+ tests :: list(showtime@internal@common@test_suite:test_function())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl
new file mode 100644
index 0000000..ca52968
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeft.hrl
@@ -0,0 +1,4 @@
+-record(align_left, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl
new file mode 100644
index 0000000..8d5a673
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl
@@ -0,0 +1,4 @@
+-record(align_left_overflow, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl
new file mode 100644
index 0000000..7f7a3f0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRight.hrl
@@ -0,0 +1,4 @@
+-record(align_right, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl
new file mode 100644
index 0000000..4fc4536
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl
@@ -0,0 +1,4 @@
+-record(align_right_overflow, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl
new file mode 100644
index 0000000..2343dfd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Aligned.hrl
@@ -0,0 +1 @@
+-record(aligned, {content :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl
new file mode 100644
index 0000000..044891b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Content.hrl
@@ -0,0 +1 @@
+-record(content, {unstyled_text :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl
new file mode 100644
index 0000000..db3f822
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Separator.hrl
@@ -0,0 +1 @@
+-record(separator, {char :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl
new file mode 100644
index 0000000..ed500df
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_StyledContent.hrl
@@ -0,0 +1 @@
+-record(styled_content, {styled_text :: binary()}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl
new file mode 100644
index 0000000..5b41bb1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@internal@reports@table_Table.hrl
@@ -0,0 +1,4 @@
+-record(table, {
+ header :: gleam@option:option(binary()),
+ rows :: list(list(showtime@internal@reports@table:col()))
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl
new file mode 100644
index 0000000..14184fb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@meta_Meta.hrl
@@ -0,0 +1 @@
+-record(meta, {description :: binary(), tags :: list(binary())}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl
new file mode 100644
index 0000000..6ebea34
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Eq.hrl
@@ -0,0 +1,5 @@
+-record(eq, {
+ a :: any(),
+ b :: any(),
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl
new file mode 100644
index 0000000..cf06a3c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_Fail.hrl
@@ -0,0 +1 @@
+-record(fail, {meta :: gleam@option:option(showtime@tests@meta:meta())}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl
new file mode 100644
index 0000000..e9cabf3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsError.hrl
@@ -0,0 +1,4 @@
+-record(is_error, {
+ a :: {ok, any()} | {error, any()},
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl
new file mode 100644
index 0000000..37c24ca
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_IsOk.hrl
@@ -0,0 +1,4 @@
+-record(is_ok, {
+ a :: {ok, any()} | {error, any()},
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl
new file mode 100644
index 0000000..2a6bf48
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@should_NotEq.hrl
@@ -0,0 +1,5 @@
+-record(not_eq, {
+ a :: any(),
+ b :: any(),
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl
new file mode 100644
index 0000000..a814a93
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_MetaShould.hrl
@@ -0,0 +1,4 @@
+-record(meta_should, {
+ equal :: fun((any(), any()) -> nil),
+ not_equal :: fun((any(), any()) -> nil)
+}).
diff --git a/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl
new file mode 100644
index 0000000..e75a0b7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/adglent/include/showtime@tests@test_Test.hrl
@@ -0,0 +1,4 @@
+-record(test, {
+ meta :: showtime@tests@meta:meta(),
+ test_function :: fun(() -> nil)
+}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache
new file mode 100644
index 0000000..e31a66a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta
new file mode 100644
index 0000000..7d66c62
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl
new file mode 100644
index 0000000..12159d0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023.erl
@@ -0,0 +1,21 @@
+-module(aoc2023).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec main() -> bitstring().
+main() ->
+ Trim = 8,
+ _assert_subject = gleam_stdlib:identity(<<"abcdefgh
+abcdefgh"/utf8>>),
+ <<_:Trim/binary, "\n"/utf8, Rest/binary>> = case _assert_subject of
+ <<_:Trim/binary, "\n"/utf8, _/binary>> -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"aoc2023"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 9})
+ end,
+ gleam@io:debug(Rest).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl
new file mode 100644
index 0000000..ad291f1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023@@main.erl
@@ -0,0 +1,35 @@
+-module('aoc2023@@main').
+
+-export([run/1]).
+
+run(Module) ->
+ io:setopts(standard_io, [binary, {encoding, utf8}]),
+ io:setopts(standard_error, [{encoding, utf8}]),
+ try
+ {ok, _} = application:ensure_all_started('aoc2023'),
+ erlang:process_flag(trap_exit, false),
+ Module:main(),
+ erlang:halt(0)
+ catch
+ Class:Reason:StackTrace ->
+ print_error(Class, Reason, StackTrace),
+ erlang:halt(127, [{flush, true}])
+ end.
+
+print_error(Class, Reason, StackTrace) ->
+ E = erl_error:format_exception(
+ 1, Class, Reason, StackTrace, fun stack_filter/3,
+ fun print_stack_frame/2, unicode
+ ),
+ io:put_chars(E).
+
+stack_filter(Module, _F, _A) ->
+ case Module of
+ ?MODULE -> true;
+ erl_eval -> true;
+ init -> true;
+ _ -> false
+ end.
+
+print_stack_frame(Term, I) ->
+ io_lib:format("~." ++ integer_to_list(I) ++ "tP", [Term, 50]). \ No newline at end of file
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache
new file mode 100644
index 0000000..cb20c74
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta
new file mode 100644
index 0000000..f568aaf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl
new file mode 100644
index 0000000..7382e40
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/aoc2023_test.erl
@@ -0,0 +1,8 @@
+-module(aoc2023_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec main() -> nil.
+main() ->
+ showtime:main().
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache
new file mode 100644
index 0000000..40fbdcf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta
new file mode 100644
index 0000000..f13b8dc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl
new file mode 100644
index 0000000..5fd5c16
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@day10_test.erl
@@ -0,0 +1,52 @@
+-module(day10@day10_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example, <<"7-F7-
+.FJ|7
+SJLL7
+|F--J
+LJ.LJ"/utf8>>, <<"8"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example, <<"7-F7-
+.FJ|7
+SJLL7
+|F--J
+LJ.LJ"/utf8>>, <<"8"/utf8>>}],
+ fun(Example) -> _pipe@1 = day10@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"...........
+.S-------7.
+.|F-----7|.
+.||OOOOO||.
+.||OOOOO||.
+.|L-7OF-J|.
+.|II|O|II|.
+.L--JOL--J.
+.....O....."/utf8>>,
+ <<"4"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"...........
+.S-------7.
+.|F-----7|.
+.||OOOOO||.
+.||OOOOO||.
+.|L-7OF-J|.
+.|II|O|II|.
+.L--JOL--J.
+.....O....."/utf8>>,
+ <<"4"/utf8>>}],
+ fun(Example) -> _pipe@1 = day10@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache
new file mode 100644
index 0000000..65500d7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta
new file mode 100644
index 0000000..51c9047
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl
new file mode 100644
index 0000000..d6802a6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day10@solve.erl
@@ -0,0 +1,340 @@
+-module(day10@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([posn/0]).
+
+-type posn() :: {posn, integer(), integer()}.
+
+-spec add_posns(posn(), posn()) -> posn().
+add_posns(P1, P2) ->
+ {posn,
+ erlang:element(2, P1) + erlang:element(2, P2),
+ erlang:element(3, P1) + erlang:element(3, P2)}.
+
+-spec pipe_neighbors(binary()) -> list(posn()).
+pipe_neighbors(Pipe) ->
+ case Pipe of
+ <<"|"/utf8>> ->
+ [{posn, -1, 0}, {posn, 1, 0}];
+
+ <<"-"/utf8>> ->
+ [{posn, 0, 1}, {posn, 0, -1}];
+
+ <<"L"/utf8>> ->
+ [{posn, -1, 0}, {posn, 0, 1}];
+
+ <<"F"/utf8>> ->
+ [{posn, 1, 0}, {posn, 0, 1}];
+
+ <<"7"/utf8>> ->
+ [{posn, 1, 0}, {posn, 0, -1}];
+
+ <<"J"/utf8>> ->
+ [{posn, -1, 0}, {posn, 0, -1}];
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"bad pipe"/utf8>>,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"pipe_neighbors"/utf8>>,
+ line => 44})
+ end.
+
+-spec make_grid(binary()) -> gleam@dict:dict(posn(), binary()).
+make_grid(Input) ->
+ _pipe = (gleam@list:index_map(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ fun(R, Row) ->
+ gleam@list:index_map(
+ gleam@string:to_graphemes(Row),
+ fun(C, Col) -> {{posn, R, C}, Col} end
+ )
+ end
+ )),
+ _pipe@1 = gleam@list:flatten(_pipe),
+ gleam@dict:from_list(_pipe@1).
+
+-spec valid_start_direction(gleam@dict:dict(posn(), binary()), posn()) -> posn().
+valid_start_direction(Grid, S) ->
+ _assert_subject = (gleam@list:filter_map(
+ [{{posn, -1, 0}, [<<"|"/utf8>>, <<"7"/utf8>>, <<"F"/utf8>>]},
+ {{posn, 1, 0}, [<<"|"/utf8>>, <<"J"/utf8>>, <<"L"/utf8>>]},
+ {{posn, 0, 1}, [<<"-"/utf8>>, <<"J"/utf8>>, <<"7"/utf8>>]},
+ {{posn, 0, -1}, [<<"-"/utf8>>, <<"F"/utf8>>, <<"L"/utf8>>]}],
+ fun(D) ->
+ {Delta, Valids} = D,
+ Neighbor = add_posns(S, Delta),
+ case gleam@dict:get(Grid, Neighbor) of
+ {ok, Pipe} ->
+ case gleam@list:contains(Valids, Pipe) of
+ true ->
+ {ok, Neighbor};
+
+ false ->
+ {error, nil}
+ end;
+
+ {error, _} ->
+ {error, nil}
+ end
+ end
+ )),
+ [Dir | _] = case _assert_subject of
+ [_ | _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"valid_start_direction"/utf8>>,
+ line => 59})
+ end,
+ Dir.
+
+-spec to_next_pipe(posn(), gleam@dict:dict(posn(), binary()), list(posn())) -> list(posn()).
+to_next_pipe(Current, Grid, Acc) ->
+ [Prev | _] = case Acc of
+ [_ | _] -> Acc;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"to_next_pipe"/utf8>>,
+ line => 76})
+ end,
+ _assert_subject = gleam@dict:get(Grid, Current),
+ {ok, Pipe} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"to_next_pipe"/utf8>>,
+ line => 77})
+ end,
+ gleam@bool:guard(
+ Pipe =:= <<"S"/utf8>>,
+ [Current | Acc],
+ fun() ->
+ _assert_subject@1 = begin
+ _pipe = Pipe,
+ _pipe@1 = pipe_neighbors(_pipe),
+ gleam@list:filter_map(
+ _pipe@1,
+ fun(P) -> case add_posns(P, Current) of
+ Neighbor when Neighbor =:= Prev ->
+ {error, nil};
+
+ Neighbor@1 ->
+ {ok, Neighbor@1}
+ end end
+ )
+ end,
+ [Next] = case _assert_subject@1 of
+ [_] -> _assert_subject@1;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"to_next_pipe"/utf8>>,
+ line => 79})
+ end,
+ to_next_pipe(Next, Grid, [Current | Acc])
+ end
+ ).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ Grid = begin
+ _pipe = Input,
+ make_grid(_pipe)
+ end,
+ _assert_subject = begin
+ _pipe@1 = Grid,
+ _pipe@2 = gleam@dict:filter(
+ _pipe@1,
+ fun(_, V) -> V =:= <<"S"/utf8>> end
+ ),
+ _pipe@3 = gleam@dict:keys(_pipe@2),
+ gleam@list:first(_pipe@3)
+ end,
+ {ok, S} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 97})
+ end,
+ _pipe@4 = Grid,
+ _pipe@5 = valid_start_direction(_pipe@4, S),
+ _pipe@6 = to_next_pipe(_pipe@5, Grid, [S]),
+ _pipe@7 = gleam@list:length(_pipe@6),
+ _pipe@8 = (fun(I) -> ((I - 1) div 2) end)(_pipe@7),
+ gleam@string:inspect(_pipe@8).
+
+-spec count_crossings(
+ posn(),
+ gleam@set:set(posn()),
+ gleam@dict:dict(posn(), binary()),
+ integer(),
+ binary()
+) -> integer().
+count_crossings(P, Loop, Grid, Acc, Corner) ->
+ Maybe_cell = gleam@dict:get(Grid, P),
+ gleam@bool:guard(
+ Maybe_cell =:= {error, nil},
+ Acc,
+ fun() ->
+ {ok, Cell} = case Maybe_cell of
+ {ok, _} -> Maybe_cell;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"count_crossings"/utf8>>,
+ line => 125})
+ end,
+ Next = add_posns(P, {posn, 0, 1}),
+ case gleam@set:contains(Loop, P) of
+ false ->
+ count_crossings(Next, Loop, Grid, Acc, Corner);
+
+ true ->
+ case {Corner, Cell} of
+ {_, <<"|"/utf8>>} ->
+ count_crossings(Next, Loop, Grid, Acc + 1, Corner);
+
+ {_, <<"F"/utf8>>} ->
+ count_crossings(Next, Loop, Grid, Acc, Cell);
+
+ {_, <<"L"/utf8>>} ->
+ count_crossings(Next, Loop, Grid, Acc, Cell);
+
+ {<<"F"/utf8>>, <<"J"/utf8>>} ->
+ count_crossings(
+ Next,
+ Loop,
+ Grid,
+ Acc + 1,
+ <<""/utf8>>
+ );
+
+ {<<"L"/utf8>>, <<"7"/utf8>>} ->
+ count_crossings(
+ Next,
+ Loop,
+ Grid,
+ Acc + 1,
+ <<""/utf8>>
+ );
+
+ {<<"F"/utf8>>, <<"7"/utf8>>} ->
+ count_crossings(Next, Loop, Grid, Acc, <<""/utf8>>);
+
+ {<<"L"/utf8>>, <<"J"/utf8>>} ->
+ count_crossings(Next, Loop, Grid, Acc, <<""/utf8>>);
+
+ {_, _} ->
+ count_crossings(Next, Loop, Grid, Acc, Corner)
+ end
+ end
+ end
+ ).
+
+-spec trace_ray(
+ posn(),
+ gleam@set:set(posn()),
+ gleam@dict:dict(posn(), binary())
+) -> boolean().
+trace_ray(P, Loop, Grid) ->
+ gleam@bool:guard(
+ gleam@set:contains(Loop, P),
+ false,
+ fun() ->
+ gleam@int:is_odd(count_crossings(P, Loop, Grid, 0, <<""/utf8>>))
+ end
+ ).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ Grid = begin
+ _pipe = Input,
+ make_grid(_pipe)
+ end,
+ _assert_subject = begin
+ _pipe@1 = Grid,
+ _pipe@2 = gleam@dict:filter(
+ _pipe@1,
+ fun(_, V) -> V =:= <<"S"/utf8>> end
+ ),
+ _pipe@3 = gleam@dict:keys(_pipe@2),
+ gleam@list:first(_pipe@3)
+ end,
+ {ok, S} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"part2"/utf8>>,
+ line => 145})
+ end,
+ Loop_pipes = begin
+ _pipe@4 = Grid,
+ _pipe@5 = valid_start_direction(_pipe@4, S),
+ _pipe@6 = to_next_pipe(_pipe@5, Grid, [S]),
+ gleam@set:from_list(_pipe@6)
+ end,
+ _pipe@7 = Grid,
+ _pipe@8 = gleam@dict:keys(_pipe@7),
+ _pipe@9 = gleam@list:filter(
+ _pipe@8,
+ fun(_capture) -> trace_ray(_capture, Loop_pipes, Grid) end
+ ),
+ _pipe@10 = gleam@list:length(_pipe@9),
+ gleam@string:inspect(_pipe@10).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 165})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"10"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day10/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 166})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache
new file mode 100644
index 0000000..dd328a5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta
new file mode 100644
index 0000000..8698a6e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl
new file mode 100644
index 0000000..8190b1e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@day11_test.erl
@@ -0,0 +1,68 @@
+-module(day11@day11_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#....."/utf8>>,
+ <<"374"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#....."/utf8>>,
+ <<"374"/utf8>>}],
+ fun(Example) -> _pipe@1 = day11@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#....."/utf8>>,
+ <<"8410"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#....."/utf8>>,
+ <<"8410"/utf8>>}],
+ fun(Example) -> _pipe@1 = day11@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache
new file mode 100644
index 0000000..db28325
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta
new file mode 100644
index 0000000..3765d62
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl
new file mode 100644
index 0000000..2dd8574
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day11@solve.erl
@@ -0,0 +1,130 @@
+-module(day11@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([posn/0]).
+
+-type posn() :: {posn, integer(), integer()}.
+
+-spec find_empty(list(list(binary()))) -> list(integer()).
+find_empty(Grid) ->
+ gleam@list:index_fold(
+ Grid,
+ [],
+ fun(Acc, Row, R) -> case gleam@list:unique(Row) of
+ [<<"."/utf8>>] ->
+ [R | Acc];
+
+ _ ->
+ Acc
+ end end
+ ).
+
+-spec count_prior_empty_ranks(integer(), list(integer())) -> integer().
+count_prior_empty_ranks(Rank, Empty_ranks) ->
+ _pipe = Empty_ranks,
+ _pipe@1 = gleam@list:drop_while(_pipe, fun(R_empty) -> R_empty > Rank end),
+ gleam@list:length(_pipe@1).
+
+-spec parse_with_expansion(binary(), integer()) -> list(posn()).
+parse_with_expansion(Input, Expansion) ->
+ Add = Expansion - 1,
+ Grid = begin
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ gleam@list:map(_pipe@1, fun gleam@string:to_graphemes/1)
+ end,
+ Empty_row_list = find_empty(Grid),
+ Empty_col_list = find_empty(gleam@list:transpose(Grid)),
+ _pipe@2 = (gleam@list:index_map(
+ Grid,
+ fun(R, Row) ->
+ gleam@list:index_fold(
+ Row,
+ [],
+ fun(Acc, Cell, C) ->
+ P = {posn, R, C},
+ Empty_r = count_prior_empty_ranks(R, Empty_row_list),
+ Empty_c = count_prior_empty_ranks(C, Empty_col_list),
+ case Cell of
+ <<"#"/utf8>> ->
+ [{posn,
+ erlang:element(2, P) + (Empty_r * Add),
+ erlang:element(3, P) + (Empty_c * Add)} |
+ Acc];
+
+ _ ->
+ Acc
+ end
+ end
+ )
+ end
+ )),
+ gleam@list:flatten(_pipe@2).
+
+-spec all_distances(list(posn())) -> integer().
+all_distances(Stars) ->
+ gleam@list:fold(
+ gleam@list:combination_pairs(Stars),
+ 0,
+ fun(Acc, Pair) ->
+ {S1, S2} = Pair,
+ (Acc + gleam@int:absolute_value(
+ erlang:element(2, S1) - erlang:element(2, S2)
+ ))
+ + gleam@int:absolute_value(
+ erlang:element(3, S1) - erlang:element(3, S2)
+ )
+ end
+ ).
+
+-spec find_distances(binary(), integer()) -> binary().
+find_distances(Input, Expand_by) ->
+ _pipe = Input,
+ _pipe@1 = parse_with_expansion(_pipe, Expand_by),
+ _pipe@2 = all_distances(_pipe@1),
+ gleam@string:inspect(_pipe@2).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ find_distances(Input, 2).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ find_distances(Input, 1000000).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day11/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 72})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"11"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day11/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 73})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache
new file mode 100644
index 0000000..13fcba5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta
new file mode 100644
index 0000000..d8d6ce0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl
new file mode 100644
index 0000000..fcbec4b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@day12_test.erl
@@ -0,0 +1,38 @@
+-module(day12@day12_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"???.### 1,1,3
+.??..??...?##. 1,1,3
+?#?#?#?#?#?#?#? 1,3,1,6
+????.#...#... 4,1,1
+????.######..#####. 1,6,5
+?###???????? 3,2,1"/utf8>>,
+ <<"21"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"???.### 1,1,3
+.??..??...?##. 1,1,3
+?#?#?#?#?#?#?#? 1,3,1,6
+????.#...#... 4,1,1
+????.######..#####. 1,6,5
+?###???????? 3,2,1"/utf8>>,
+ <<"21"/utf8>>}],
+ fun(Example) -> _pipe@1 = day12@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [],
+ fun(Example) -> _pipe@1 = day12@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache
new file mode 100644
index 0000000..380635a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta
new file mode 100644
index 0000000..ba4b411
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl
new file mode 100644
index 0000000..4ca87c8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day12@solve.erl
@@ -0,0 +1,145 @@
+-module(day12@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+
+-spec parse_folds(binary(), integer()) -> list({binary(), list(integer())}).
+parse_folds(Input, Folds) ->
+ Records = gleam@string:split(Input, <<"\n"/utf8>>),
+ gleam@list:map(
+ Records,
+ fun(Record) ->
+ _assert_subject = gleam@string:split_once(Record, <<" "/utf8>>),
+ {ok, {Template, Sets_str}} = case _assert_subject of
+ {ok, {_, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day12/solve"/utf8>>,
+ function => <<"parse_folds"/utf8>>,
+ line => 15})
+ end,
+ Template@1 = begin
+ _pipe = Template,
+ _pipe@1 = gleam@list:repeat(_pipe, Folds),
+ _pipe@2 = gleam@list:intersperse(_pipe@1, <<"?"/utf8>>),
+ gleam@string:concat(_pipe@2)
+ end,
+ Sets = begin
+ _pipe@3 = Sets_str,
+ _pipe@4 = gleam@string:split(_pipe@3, <<","/utf8>>),
+ _pipe@5 = gleam@list:map(_pipe@4, fun gleam@int:parse/1),
+ _pipe@6 = gleam@result:values(_pipe@5),
+ _pipe@7 = gleam@list:repeat(_pipe@6, Folds),
+ gleam@list:flatten(_pipe@7)
+ end,
+ {Template@1, Sets}
+ end
+ ).
+
+-spec do_count(
+ binary(),
+ list(integer()),
+ integer(),
+ boolean(),
+ utilities@memo:cache({binary(), list(integer()), integer(), boolean()}, integer())
+) -> integer().
+do_count(Template, Groups, Left, Gap, Cache) ->
+ utilities@memo:memoize(
+ Cache,
+ {Template, Groups, Left, Gap},
+ fun() -> case {Template, Groups, Left, Gap} of
+ {<<""/utf8>>, [], 0, _} ->
+ 1;
+
+ {<<"?"/utf8, T_rest/binary>>, [G | G_rest], 0, false} ->
+ do_count(T_rest, G_rest, G - 1, G =:= 1, Cache) + (do_count(
+ T_rest,
+ Groups,
+ 0,
+ false,
+ Cache
+ ));
+
+ {<<"?"/utf8, T_rest@1/binary>>, [], 0, false} ->
+ do_count(T_rest@1, Groups, 0, false, Cache);
+
+ {<<"?"/utf8, T_rest@1/binary>>, _, 0, true} ->
+ do_count(T_rest@1, Groups, 0, false, Cache);
+
+ {<<"."/utf8, T_rest@1/binary>>, _, 0, _} ->
+ do_count(T_rest@1, Groups, 0, false, Cache);
+
+ {<<"#"/utf8, T_rest@2/binary>>, [G@1 | G_rest@1], 0, false} ->
+ do_count(T_rest@2, G_rest@1, G@1 - 1, G@1 =:= 1, Cache);
+
+ {<<"?"/utf8, T_rest@3/binary>>, Gs, L, false} ->
+ do_count(T_rest@3, Gs, L - 1, L =:= 1, Cache);
+
+ {<<"#"/utf8, T_rest@3/binary>>, Gs, L, false} ->
+ do_count(T_rest@3, Gs, L - 1, L =:= 1, Cache);
+
+ {_, _, _, _} ->
+ 0
+ end end
+ ).
+
+-spec count_solutions(integer(), {binary(), list(integer())}) -> integer().
+count_solutions(Acc, Condition) ->
+ utilities@memo:create(
+ fun(Cache) ->
+ {Template, Groups} = Condition,
+ Acc + do_count(Template, Groups, 0, false, Cache)
+ end
+ ).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ _pipe = Input,
+ _pipe@1 = parse_folds(_pipe, 1),
+ _pipe@2 = gleam@list:fold(_pipe@1, 0, fun count_solutions/2),
+ gleam@string:inspect(_pipe@2).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _pipe = Input,
+ _pipe@1 = parse_folds(_pipe, 5),
+ _pipe@2 = gleam@list:fold(_pipe@1, 0, fun count_solutions/2),
+ gleam@string:inspect(_pipe@2).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day12/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 79})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"12"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day12/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 80})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache
new file mode 100644
index 0000000..dbe362b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta
new file mode 100644
index 0000000..ccd4923
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl
new file mode 100644
index 0000000..9aa0038
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@day13_test.erl
@@ -0,0 +1,88 @@
+-module(day13@day13_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"#.##..##.
+..#.##.#.
+##......#
+##......#
+..#.##.#.
+..##..##.
+#.#.##.#.
+
+#...##..#
+#....#..#
+..##..###
+#####.##.
+#####.##.
+..##..###
+#....#..#"/utf8>>,
+ <<"405"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"#.##..##.
+..#.##.#.
+##......#
+##......#
+..#.##.#.
+..##..##.
+#.#.##.#.
+
+#...##..#
+#....#..#
+..##..###
+#####.##.
+#####.##.
+..##..###
+#....#..#"/utf8>>,
+ <<"405"/utf8>>}],
+ fun(Example) -> _pipe@1 = day13@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"#.##..##.
+..#.##.#.
+##......#
+##......#
+..#.##.#.
+..##..##.
+#.#.##.#.
+
+#...##..#
+#....#..#
+..##..###
+#####.##.
+#####.##.
+..##..###
+#....#..#"/utf8>>,
+ <<"400"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"#.##..##.
+..#.##.#.
+##......#
+##......#
+..#.##.#.
+..##..##.
+#.#.##.#.
+
+#...##..#
+#....#..#
+..##..###
+#####.##.
+#####.##.
+..##..###
+#....#..#"/utf8>>,
+ <<"400"/utf8>>}],
+ fun(Example) -> _pipe@1 = day13@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache
new file mode 100644
index 0000000..001ba22
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta
new file mode 100644
index 0000000..543c3ff
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl
new file mode 100644
index 0000000..5e94b0b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day13@solve.erl
@@ -0,0 +1,149 @@
+-module(day13@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([symmetry_type/0]).
+
+-type symmetry_type() :: {horizontal, integer()} | {vertical, integer()}.
+
+-spec do_is_symmetric(list(list(BLS)), list(list(BLS)), integer()) -> {ok,
+ integer()} |
+ {error, nil}.
+do_is_symmetric(Left, Right, Errors) ->
+ gleam@bool:guard(
+ gleam@list:is_empty(Right),
+ {error, nil},
+ fun() ->
+ [H | T] = case Right of
+ [_ | _] -> Right;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day13/solve"/utf8>>,
+ function => <<"do_is_symmetric"/utf8>>,
+ line => 23})
+ end,
+ Found_errors = begin
+ _pipe = gleam@list:zip(
+ gleam@list:flatten(Left),
+ gleam@list:flatten(Right)
+ ),
+ _pipe@1 = gleam@list:filter(
+ _pipe,
+ fun(Tup) ->
+ erlang:element(2, Tup) /= erlang:element(1, Tup)
+ end
+ ),
+ gleam@list:length(_pipe@1)
+ end,
+ case Found_errors =:= Errors of
+ true ->
+ {ok, gleam@list:length(Left)};
+
+ false ->
+ do_is_symmetric([H | Left], T, Errors)
+ end
+ end
+ ).
+
+-spec is_symmetric(list(list(any())), integer()) -> {ok, integer()} |
+ {error, nil}.
+is_symmetric(Xss, Errs) ->
+ [Left | Right] = case Xss of
+ [_ | _] -> Xss;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day13/solve"/utf8>>,
+ function => <<"is_symmetric"/utf8>>,
+ line => 13})
+ end,
+ do_is_symmetric([Left], Right, Errs).
+
+-spec get_symmetry_type(list(list(binary())), integer()) -> symmetry_type().
+get_symmetry_type(Xss, Errors) ->
+ case is_symmetric(Xss, Errors) of
+ {ok, N} ->
+ {horizontal, N};
+
+ _ ->
+ _assert_subject = is_symmetric(gleam@list:transpose(Xss), Errors),
+ {ok, N@1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day13/solve"/utf8>>,
+ function => <<"get_symmetry_type"/utf8>>,
+ line => 38})
+ end,
+ {vertical, N@1}
+ end.
+
+-spec summarize_notes(list(symmetry_type())) -> integer().
+summarize_notes(Symmetries) ->
+ gleam@list:fold(Symmetries, 0, fun(Acc, Note) -> case Note of
+ {horizontal, N} ->
+ 100 * N;
+
+ {vertical, N@1} ->
+ N@1
+ end + Acc end).
+
+-spec solve(binary(), integer()) -> binary().
+solve(Input, Errors) ->
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n\n"/utf8>>),
+ _pipe@5 = gleam@list:map(_pipe@1, fun(Strs) -> _pipe@2 = Strs,
+ _pipe@3 = gleam@string:split(_pipe@2, <<"\n"/utf8>>),
+ _pipe@4 = gleam@list:map(_pipe@3, fun gleam@string:to_graphemes/1),
+ get_symmetry_type(_pipe@4, Errors) end),
+ _pipe@6 = summarize_notes(_pipe@5),
+ gleam@string:inspect(_pipe@6).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ solve(Input, 0).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ solve(Input, 1).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day13/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 74})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"13"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day13/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 75})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache
new file mode 100644
index 0000000..4577a2b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta
new file mode 100644
index 0000000..9b11f88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl
new file mode 100644
index 0000000..12ea788
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@day14_test.erl
@@ -0,0 +1,68 @@
+-module(day14@day14_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"O....#....
+O.OO#....#
+.....##...
+OO.#O....O
+.O.....O#.
+O.#..O.#.#
+..O..#O..O
+.......O..
+#....###..
+#OO..#...."/utf8>>,
+ <<"136"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"O....#....
+O.OO#....#
+.....##...
+OO.#O....O
+.O.....O#.
+O.#..O.#.#
+..O..#O..O
+.......O..
+#....###..
+#OO..#...."/utf8>>,
+ <<"136"/utf8>>}],
+ fun(Example) -> _pipe@1 = day14@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"O....#....
+O.OO#....#
+.....##...
+OO.#O....O
+.O.....O#.
+O.#..O.#.#
+..O..#O..O
+.......O..
+#....###..
+#OO..#...."/utf8>>,
+ <<"64"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"O....#....
+O.OO#....#
+.....##...
+OO.#O....O
+.O.....O#.
+O.#..O.#.#
+..O..#O..O
+.......O..
+#....###..
+#OO..#...."/utf8>>,
+ <<"64"/utf8>>}],
+ fun(Example) -> _pipe@1 = day14@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache
new file mode 100644
index 0000000..0c6bea3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta
new file mode 100644
index 0000000..91ec775
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl
new file mode 100644
index 0000000..6c370da
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day14@solve.erl
@@ -0,0 +1,149 @@
+-module(day14@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+
+-spec parse(binary()) -> list(list(binary())).
+parse(Input) ->
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ _pipe@2 = gleam@list:map(_pipe@1, fun gleam@string:to_graphemes/1),
+ gleam@list:transpose(_pipe@2).
+
+-spec roll_boulders(list(binary())) -> list(binary()).
+roll_boulders(Strs) ->
+ _pipe = (gleam@list:map(
+ gleam@list:chunk(
+ Strs,
+ fun(C) -> (C =:= <<"O"/utf8>>) orelse (C =:= <<"."/utf8>>) end
+ ),
+ fun(Chunks) ->
+ gleam@list:sort(
+ Chunks,
+ gleam@order:reverse(fun gleam@string:compare/2)
+ )
+ end
+ )),
+ gleam@list:flatten(_pipe).
+
+-spec score(list(list(binary()))) -> integer().
+score(Matrix) ->
+ gleam@list:fold(
+ Matrix,
+ 0,
+ fun(Acc, Col) ->
+ Acc + (gleam@list:index_fold(
+ gleam@list:reverse(Col),
+ 0,
+ fun(Col_acc, Char, N) -> case Char of
+ <<"O"/utf8>> ->
+ (Col_acc + N) + 1;
+
+ _ ->
+ Col_acc
+ end end
+ ))
+ end
+ ).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ _pipe = Input,
+ _pipe@1 = parse(_pipe),
+ _pipe@2 = gleam@list:map(_pipe@1, fun roll_boulders/1),
+ _pipe@3 = score(_pipe@2),
+ gleam@string:inspect(_pipe@3).
+
+-spec rotate(list(list(BBU))) -> list(list(BBU)).
+rotate(Matrix) ->
+ _pipe = Matrix,
+ _pipe@1 = gleam@list:map(_pipe, fun gleam@list:reverse/1),
+ gleam@list:transpose(_pipe@1).
+
+-spec spin(list(list(binary()))) -> list(list(binary())).
+spin(Matrix) ->
+ gleam@list:fold(gleam@list:range(1, 4), Matrix, fun(Acc, _) -> _pipe = Acc,
+ _pipe@1 = gleam@list:map(_pipe, fun roll_boulders/1),
+ rotate(_pipe@1) end).
+
+-spec check_if_seen(
+ list(list(binary())),
+ gleam@dict:dict(list(list(binary())), integer()),
+ integer()
+) -> integer().
+check_if_seen(Matrix, Cache, Count) ->
+ case gleam@dict:get(Cache, Matrix) of
+ {error, nil} ->
+ check_if_seen(
+ spin(Matrix),
+ gleam@dict:insert(Cache, Matrix, Count),
+ Count - 1
+ );
+
+ {ok, N} ->
+ _assert_subject = gleam@int:modulo(Count, N - Count),
+ {ok, Extra} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day14/solve"/utf8>>,
+ function => <<"check_if_seen"/utf8>>,
+ line => 66})
+ end,
+ _pipe = gleam@list:fold(
+ gleam@list:range(1, Extra),
+ Matrix,
+ fun(Acc, _) -> spin(Acc) end
+ ),
+ score(_pipe)
+ end.
+
+-spec spin_cycle(list(list(binary()))) -> integer().
+spin_cycle(Matrix) ->
+ Cache = gleam@dict:new(),
+ check_if_seen(Matrix, Cache, 1000000000).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _pipe = Input,
+ _pipe@1 = parse(_pipe),
+ _pipe@2 = spin_cycle(_pipe@1),
+ gleam@string:inspect(_pipe@2).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day14/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 81})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"14"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day14/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 82})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache
new file mode 100644
index 0000000..40f928f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta
new file mode 100644
index 0000000..7571773
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl
new file mode 100644
index 0000000..ad28e90
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@day15_test.erl
@@ -0,0 +1,32 @@
+-module(day15@day15_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>,
+ <<"1320"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>,
+ <<"1320"/utf8>>}],
+ fun(Example) -> _pipe@1 = day15@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>,
+ <<"145"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"/utf8>>,
+ <<"145"/utf8>>}],
+ fun(Example) -> _pipe@1 = day15@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache
new file mode 100644
index 0000000..1b2e2ab
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta
new file mode 100644
index 0000000..8cfc051
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl
new file mode 100644
index 0000000..623b454
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day15@solve.erl
@@ -0,0 +1,177 @@
+-module(day15@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([instruction/0]).
+
+-type instruction() :: {remove, binary()} | {insert, binary(), integer()}.
+
+-spec split(binary()) -> list(binary()).
+split(Input) ->
+ _pipe = Input,
+ gleam@string:split(_pipe, <<","/utf8>>).
+
+-spec hash_algorithm(binary()) -> integer().
+hash_algorithm(Str) ->
+ Codepoints = begin
+ _pipe = Str,
+ _pipe@1 = gleam@string:to_utf_codepoints(_pipe),
+ gleam@list:map(_pipe@1, fun gleam@string:utf_codepoint_to_int/1)
+ end,
+ gleam@list:fold(
+ Codepoints,
+ 0,
+ fun(Acc, C) ->
+ _assert_subject = gleam@int:modulo((Acc + C) * 17, 256),
+ {ok, Acc@1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day15/solve"/utf8>>,
+ function => <<"hash_algorithm"/utf8>>,
+ line => 20})
+ end,
+ Acc@1
+ end
+ ).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ _pipe = Input,
+ _pipe@1 = split(_pipe),
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ 0,
+ fun(Acc, Str) -> Acc + hash_algorithm(Str) end
+ ),
+ gleam@string:inspect(_pipe@2).
+
+-spec read_instruction(binary()) -> instruction().
+read_instruction(Str) ->
+ case gleam@string:split(Str, <<"="/utf8>>) of
+ [Label, Focal_str] ->
+ _assert_subject = gleam@int:parse(Focal_str),
+ {ok, Focal} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day15/solve"/utf8>>,
+ function => <<"read_instruction"/utf8>>,
+ line => 39})
+ end,
+ {insert, Label, Focal};
+
+ _ ->
+ {remove, gleam@string:drop_right(Str, 1)}
+ end.
+
+-spec remove_lens(gleam@dict:dict(integer(), list({binary(), BPV})), binary()) -> gleam@dict:dict(integer(), list({binary(),
+ BPV})).
+remove_lens(Boxes, Label) ->
+ gleam@dict:update(Boxes, hash_algorithm(Label), fun(V) -> case V of
+ {some, Lenses} ->
+ case gleam@list:key_pop(Lenses, Label) of
+ {ok, {_, Updated}} ->
+ Updated;
+
+ {error, nil} ->
+ Lenses
+ end;
+
+ none ->
+ []
+ end end).
+
+-spec insert_lens(
+ gleam@dict:dict(integer(), list({binary(), BON})),
+ binary(),
+ BON
+) -> gleam@dict:dict(integer(), list({binary(), BON})).
+insert_lens(Boxes, Label, Focal) ->
+ gleam@dict:update(Boxes, hash_algorithm(Label), fun(V) -> case V of
+ {some, Lenses} ->
+ gleam@list:key_set(Lenses, Label, Focal);
+
+ none ->
+ [{Label, Focal}]
+ end end).
+
+-spec parse_instructions(list(binary())) -> gleam@dict:dict(integer(), list({binary(),
+ integer()})).
+parse_instructions(Insts) ->
+ gleam@list:fold(
+ Insts,
+ gleam@dict:new(),
+ fun(Acc, Inst) -> case read_instruction(Inst) of
+ {remove, Label} ->
+ remove_lens(Acc, Label);
+
+ {insert, Label@1, Focal} ->
+ insert_lens(Acc, Label@1, Focal)
+ end end
+ ).
+
+-spec focusing_power(gleam@dict:dict(integer(), list({binary(), integer()}))) -> integer().
+focusing_power(Boxes) ->
+ gleam@dict:fold(
+ Boxes,
+ 0,
+ fun(Acc, K, V) ->
+ Box_acc = (gleam@list:index_fold(
+ V,
+ 0,
+ fun(Acc@1, Lens, I) ->
+ Acc@1 + (erlang:element(2, Lens) * (I + 1))
+ end
+ )),
+ Acc + ((K + 1) * Box_acc)
+ end
+ ).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _pipe = Input,
+ _pipe@1 = split(_pipe),
+ _pipe@2 = parse_instructions(_pipe@1),
+ _pipe@3 = focusing_power(_pipe@2),
+ gleam@string:inspect(_pipe@3).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day15/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 92})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"15"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day15/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 93})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache
new file mode 100644
index 0000000..bc9a034
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta
new file mode 100644
index 0000000..2320e16
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl
new file mode 100644
index 0000000..978ab14
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@day16_test.erl
@@ -0,0 +1,68 @@
+-module(day16@day16_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<".|...\\....
+|.-.\\.....
+.....|-...
+........|.
+..........
+.........\\
+..../.\\\\..
+.-.-/..|..
+.|....-|.\\
+..//.|...."/utf8>>,
+ 46}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<".|...\\....
+|.-.\\.....
+.....|-...
+........|.
+..........
+.........\\
+..../.\\\\..
+.-.-/..|..
+.|....-|.\\
+..//.|...."/utf8>>,
+ 46}],
+ fun(Example) -> _pipe@1 = day16@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<".|...\\....
+|.-.\\.....
+.....|-...
+........|.
+..........
+.........\\
+..../.\\\\..
+.-.-/..|..
+.|....-|.\\
+..//.|...."/utf8>>,
+ 51}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<".|...\\....
+|.-.\\.....
+.....|-...
+........|.
+..........
+.........\\
+..../.\\\\..
+.-.-/..|..
+.|....-|.\\
+..//.|...."/utf8>>,
+ 51}],
+ fun(Example) -> _pipe@1 = day16@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache
new file mode 100644
index 0000000..359bdc2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta
new file mode 100644
index 0000000..e7cf5c0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl
new file mode 100644
index 0000000..a07c02a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day16@solve.erl
@@ -0,0 +1,253 @@
+-module(day16@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([direction/0, light/0]).
+
+-type direction() :: up | right | down | left.
+
+-type light() :: {light, utilities@array2d:posn(), direction()}.
+
+-spec move(light()) -> light().
+move(L) ->
+ {light, P, Dir} = L,
+ case Dir of
+ up ->
+ erlang:setelement(
+ 2,
+ L,
+ erlang:setelement(2, P, erlang:element(2, P) - 1)
+ );
+
+ down ->
+ erlang:setelement(
+ 2,
+ L,
+ erlang:setelement(2, P, erlang:element(2, P) + 1)
+ );
+
+ left ->
+ erlang:setelement(
+ 2,
+ L,
+ erlang:setelement(3, P, erlang:element(3, P) - 1)
+ );
+
+ right ->
+ erlang:setelement(
+ 2,
+ L,
+ erlang:setelement(3, P, erlang:element(3, P) + 1)
+ )
+ end.
+
+-spec transform(light(), {ok, binary()} | {error, nil}) -> list(light()).
+transform(L, Cell) ->
+ gleam@bool:guard(
+ gleam@result:is_error(Cell),
+ [],
+ fun() ->
+ {ok, C} = case Cell of
+ {ok, _} -> Cell;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day16/solve"/utf8>>,
+ function => <<"transform"/utf8>>,
+ line => 33})
+ end,
+ {light, P, Dir} = L,
+ case {Dir, C} of
+ {_, <<"."/utf8>>} ->
+ [L];
+
+ {up, <<"|"/utf8>>} ->
+ [L];
+
+ {down, <<"|"/utf8>>} ->
+ [L];
+
+ {left, <<"-"/utf8>>} ->
+ [L];
+
+ {right, <<"-"/utf8>>} ->
+ [L];
+
+ {left, <<"/"/utf8>>} ->
+ [{light, P, down}];
+
+ {down, <<"/"/utf8>>} ->
+ [{light, P, left}];
+
+ {right, <<"/"/utf8>>} ->
+ [{light, P, up}];
+
+ {up, <<"/"/utf8>>} ->
+ [{light, P, right}];
+
+ {left, <<"\\"/utf8>>} ->
+ [{light, P, up}];
+
+ {up, <<"\\"/utf8>>} ->
+ [{light, P, left}];
+
+ {right, <<"\\"/utf8>>} ->
+ [{light, P, down}];
+
+ {down, <<"\\"/utf8>>} ->
+ [{light, P, right}];
+
+ {left, <<"|"/utf8>>} ->
+ [{light, P, up}, {light, P, down}];
+
+ {right, <<"|"/utf8>>} ->
+ [{light, P, up}, {light, P, down}];
+
+ {up, <<"-"/utf8>>} ->
+ [{light, P, left}, {light, P, right}];
+
+ {down, <<"-"/utf8>>} ->
+ [{light, P, left}, {light, P, right}];
+
+ {_, _} ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"unrecognized cell type"/utf8>>,
+ module => <<"day16/solve"/utf8>>,
+ function => <<"transform"/utf8>>,
+ line => 50})
+ end
+ end
+ ).
+
+-spec energize(
+ list(light()),
+ gleam@set:set(light()),
+ gleam@dict:dict(utilities@array2d:posn(), binary())
+) -> integer().
+energize(Lights, Visited, Grid) ->
+ Next_positions = begin
+ _pipe = Lights,
+ _pipe@1 = gleam@list:flat_map(
+ _pipe,
+ fun(L) ->
+ Next = move(L),
+ transform(Next, gleam@dict:get(Grid, erlang:element(2, Next)))
+ end
+ ),
+ gleam@list:filter(
+ _pipe@1,
+ fun(L@1) -> not gleam@set:contains(Visited, L@1) end
+ )
+ end,
+ All_visited = gleam@set:union(gleam@set:from_list(Next_positions), Visited),
+ case Visited =:= All_visited of
+ true ->
+ _pipe@2 = gleam@set:fold(
+ Visited,
+ gleam@set:new(),
+ fun(Acc, L@2) ->
+ gleam@set:insert(Acc, erlang:element(2, L@2))
+ end
+ ),
+ _pipe@3 = gleam@set:to_list(_pipe@2),
+ gleam@list:length(_pipe@3);
+
+ false ->
+ energize(Next_positions, All_visited, Grid)
+ end.
+
+-spec part1(binary()) -> integer().
+part1(Input) ->
+ Grid = utilities@array2d:parse_grid(Input),
+ _pipe = [{light, {posn, 0, -1}, right}],
+ energize(_pipe, gleam@set:new(), Grid).
+
+-spec part2(binary()) -> integer().
+part2(Input) ->
+ Grid = utilities@array2d:parse_grid(Input),
+ {posn, Rows, Cols} = (gleam@list:fold(
+ gleam@dict:keys(Grid),
+ {posn, 0, 0},
+ fun(Acc, P) ->
+ case (erlang:element(2, Acc) + erlang:element(3, Acc)) > (erlang:element(
+ 2,
+ P
+ )
+ + erlang:element(3, P)) of
+ true ->
+ Acc;
+
+ false ->
+ P
+ end
+ end
+ )),
+ All_starts = gleam@list:concat(
+ [gleam@list:map(
+ gleam@list:range(0, Rows),
+ fun(R) -> {light, {posn, R, -1}, right} end
+ ),
+ gleam@list:map(
+ gleam@list:range(0, Rows),
+ fun(R@1) -> {light, {posn, R@1, Cols + 1}, left} end
+ ),
+ gleam@list:map(
+ gleam@list:range(0, Cols),
+ fun(C) -> {light, {posn, -1, C}, down} end
+ ),
+ gleam@list:map(
+ gleam@list:range(0, Cols),
+ fun(C@1) -> {light, {posn, Rows + 1, C@1}, up} end
+ )]
+ ),
+ gleam@list:fold(
+ All_starts,
+ 0,
+ fun(Acc@1, P@1) ->
+ Energized = energize([P@1], gleam@set:new(), Grid),
+ case Acc@1 > Energized of
+ true ->
+ Acc@1;
+
+ false ->
+ Energized
+ end
+ end
+ ).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day16/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 107})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"16"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day16/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 108})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache
new file mode 100644
index 0000000..a6202af
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta
new file mode 100644
index 0000000..8198a7b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl
new file mode 100644
index 0000000..38e725d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@day17_test.erl
@@ -0,0 +1,52 @@
+-module(day17@day17_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"2413432311323
+3215453535623
+3255245654254
+3446585845452
+4546657867536
+1438598798454
+4457876987766
+3637877979653
+4654967986887
+4564679986453
+1224686865563
+2546548887735
+4322674655533"/utf8>>,
+ <<"102"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"2413432311323
+3215453535623
+3255245654254
+3446585845452
+4546657867536
+1438598798454
+4457876987766
+3637877979653
+4654967986887
+4564679986453
+1224686865563
+2546548887735
+4322674655533"/utf8>>,
+ <<"102"/utf8>>}],
+ fun(Example) -> _pipe@1 = day17@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [],
+ fun(Example) -> _pipe@1 = day17@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache
new file mode 100644
index 0000000..f57cf43
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta
new file mode 100644
index 0000000..de4425a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl
new file mode 100644
index 0000000..1eddde6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day17@solve.erl
@@ -0,0 +1,231 @@
+-module(day17@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([state/0]).
+
+-type state() :: {state,
+ utilities@array2d:posn(),
+ integer(),
+ utilities@array2d:posn(),
+ list(utilities@array2d:posn())}.
+
+-spec same_dir(state()) -> list(utilities@array2d:posn()).
+same_dir(S) ->
+ case erlang:element(5, S) of
+ [] ->
+ [];
+
+ [First | _] = Deltas ->
+ _pipe = gleam@list:take_while(Deltas, fun(D) -> D =:= First end),
+ gleam@list:take(_pipe, 10)
+ end.
+
+-spec make_key(state()) -> {utilities@array2d:posn(),
+ list(utilities@array2d:posn())}.
+make_key(S) ->
+ {erlang:element(2, S), same_dir(S)}.
+
+-spec is_goal(state(), integer(), utilities@array2d:posn()) -> boolean().
+is_goal(S, Min_run, Goal) ->
+ (Goal =:= erlang:element(2, S)) andalso (gleam@list:length(same_dir(S)) >= Min_run).
+
+-spec eliminate_bad_neighbors(
+ utilities@array2d:posn(),
+ state(),
+ integer(),
+ integer(),
+ gleam@dict:dict(utilities@array2d:posn(), any())
+) -> boolean().
+eliminate_bad_neighbors(D, S, Max, Min, Grid) ->
+ Neighbor = utilities@array2d:add_posns(D, erlang:element(2, S)),
+ gleam@bool:guard(
+ (Neighbor =:= erlang:element(4, S)) orelse not gleam@dict:has_key(
+ Grid,
+ Neighbor
+ ),
+ false,
+ fun() -> case {same_dir(S), gleam@list:length(same_dir(S))} of
+ {[Prev | _], L} when L =:= Max ->
+ D /= Prev;
+
+ {_, 0} ->
+ true;
+
+ {[Prev@1 | _], L@1} when L@1 < Min ->
+ D =:= Prev@1;
+
+ {_, _} ->
+ true
+ end end
+ ).
+
+-spec make_state(
+ utilities@array2d:posn(),
+ state(),
+ gleam@dict:dict(utilities@array2d:posn(), integer())
+) -> state().
+make_state(D, S, Grid) ->
+ Neighbor = utilities@array2d:add_posns(D, erlang:element(2, S)),
+ _assert_subject = gleam@dict:get(Grid, Neighbor),
+ {ok, Heat_lost} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day17/solve"/utf8>>,
+ function => <<"make_state"/utf8>>,
+ line => 58})
+ end,
+ {state,
+ Neighbor,
+ erlang:element(3, S) + Heat_lost,
+ erlang:element(2, S),
+ [D | erlang:element(5, S)]}.
+
+-spec find_good_neighbors(
+ integer(),
+ integer(),
+ state(),
+ gleam@dict:dict(utilities@array2d:posn(), integer())
+) -> list(state()).
+find_good_neighbors(Max, Min, S, Grid) ->
+ _pipe = [{posn, -1, 0}, {posn, 1, 0}, {posn, 0, -1}, {posn, 0, 1}],
+ _pipe@1 = gleam@list:filter(
+ _pipe,
+ fun(_capture) ->
+ eliminate_bad_neighbors(_capture, S, Max, Min, Grid)
+ end
+ ),
+ gleam@list:map(
+ _pipe@1,
+ fun(_capture@1) -> make_state(_capture@1, S, Grid) end
+ ).
+
+-spec find_path(
+ gleam@dict:dict(utilities@array2d:posn(), integer()),
+ utilities@prioqueue:priority_queue(state()),
+ gleam@set:set({utilities@array2d:posn(), list(utilities@array2d:posn())}),
+ fun((state()) -> list(state())),
+ fun((state()) -> boolean())
+) -> integer().
+find_path(Grid, Queue, Seen, Get_neighbors, Is_goal) ->
+ _assert_subject = utilities@prioqueue:pop(Queue),
+ {ok, {State, Rest}} = case _assert_subject of
+ {ok, {_, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day17/solve"/utf8>>,
+ function => <<"find_path"/utf8>>,
+ line => 74})
+ end,
+ Key = make_key(
+ begin
+ _pipe = State,
+ gleam@io:debug(_pipe)
+ end
+ ),
+ case gleam@set:contains(Seen, Key) of
+ true ->
+ find_path(Grid, Rest, Seen, Get_neighbors, Is_goal);
+
+ false ->
+ Now_seen = gleam@set:insert(Seen, Key),
+ Neighbors = Get_neighbors(State),
+ case gleam@list:find(Neighbors, Is_goal) of
+ {ok, Final} ->
+ erlang:element(3, Final);
+
+ _ ->
+ Now_queue = gleam@list:fold(
+ Neighbors,
+ Rest,
+ fun(Acc, N) ->
+ utilities@prioqueue:insert(
+ Acc,
+ N,
+ erlang:element(3, N)
+ )
+ end
+ ),
+ find_path(Grid, Now_queue, Now_seen, Get_neighbors, Is_goal)
+ end
+ end.
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ Raw_grid = begin
+ _pipe = Input,
+ utilities@array2d:to_list_of_lists(_pipe)
+ end,
+ Grid = utilities@array2d:to_2d_intarray(Raw_grid),
+ Rmax = gleam@list:length(Raw_grid),
+ _assert_subject = begin
+ _pipe@1 = Raw_grid,
+ _pipe@2 = gleam@list:first(_pipe@1),
+ gleam@result:map(_pipe@2, fun gleam@list:length/1)
+ end,
+ {ok, Cmax} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day17/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 107})
+ end,
+ Start = {state, {posn, 0, 0}, 0, {posn, 0, 0}, []},
+ Goal = {posn, Rmax, Cmax},
+ _pipe@3 = find_path(
+ Grid,
+ utilities@prioqueue:insert(utilities@prioqueue:new(), Start, 0),
+ gleam@set:new(),
+ fun(_capture) -> find_good_neighbors(0, 3, _capture, Grid) end,
+ fun(_capture@1) -> is_goal(_capture@1, 1, Goal) end
+ ),
+ gleam@string:inspect(_pipe@3).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _pipe = Input,
+ gleam@string:inspect(_pipe).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day17/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 131})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"17"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day17/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 132})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache
new file mode 100644
index 0000000..03f5c97
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta
new file mode 100644
index 0000000..4d0ad03
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl
new file mode 100644
index 0000000..9763a38
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@day18_test.erl
@@ -0,0 +1,84 @@
+-module(day18@day18_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"R 6 (#70c710)
+D 5 (#0dc571)
+L 2 (#5713f0)
+D 2 (#d2c081)
+R 2 (#59c680)
+D 2 (#411b91)
+L 5 (#8ceee2)
+U 2 (#caa173)
+L 1 (#1b58a2)
+U 2 (#caa171)
+R 2 (#7807d2)
+U 3 (#a77fa3)
+L 2 (#015232)
+U 2 (#7a21e3)"/utf8>>,
+ <<"62"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"R 6 (#70c710)
+D 5 (#0dc571)
+L 2 (#5713f0)
+D 2 (#d2c081)
+R 2 (#59c680)
+D 2 (#411b91)
+L 5 (#8ceee2)
+U 2 (#caa173)
+L 1 (#1b58a2)
+U 2 (#caa171)
+R 2 (#7807d2)
+U 3 (#a77fa3)
+L 2 (#015232)
+U 2 (#7a21e3)"/utf8>>,
+ <<"62"/utf8>>}],
+ fun(Example) -> _pipe@1 = day18@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"R 6 (#70c710)
+D 5 (#0dc571)
+L 2 (#5713f0)
+D 2 (#d2c081)
+R 2 (#59c680)
+D 2 (#411b91)
+L 5 (#8ceee2)
+U 2 (#caa173)
+L 1 (#1b58a2)
+U 2 (#caa171)
+R 2 (#7807d2)
+U 3 (#a77fa3)
+L 2 (#015232)
+U 2 (#7a21e3)"/utf8>>,
+ <<"952408144115"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"R 6 (#70c710)
+D 5 (#0dc571)
+L 2 (#5713f0)
+D 2 (#d2c081)
+R 2 (#59c680)
+D 2 (#411b91)
+L 5 (#8ceee2)
+U 2 (#caa173)
+L 1 (#1b58a2)
+U 2 (#caa171)
+R 2 (#7807d2)
+U 3 (#a77fa3)
+L 2 (#015232)
+U 2 (#7a21e3)"/utf8>>,
+ <<"952408144115"/utf8>>}],
+ fun(Example) -> _pipe@1 = day18@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache
new file mode 100644
index 0000000..6fa850f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta
new file mode 100644
index 0000000..5a4d476
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl
new file mode 100644
index 0000000..3dc5e00
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day18@solve.erl
@@ -0,0 +1,218 @@
+-module(day18@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([coord/0, direction/0, dig/0]).
+
+-type coord() :: {coord, integer(), integer()}.
+
+-type direction() :: up | right | down | left.
+
+-type dig() :: {dig, direction(), integer()}.
+
+-spec to_direction(binary()) -> direction().
+to_direction(C) ->
+ case C of
+ <<"R"/utf8>> ->
+ right;
+
+ <<"0"/utf8>> ->
+ right;
+
+ <<"D"/utf8>> ->
+ down;
+
+ <<"1"/utf8>> ->
+ down;
+
+ <<"L"/utf8>> ->
+ left;
+
+ <<"2"/utf8>> ->
+ left;
+
+ <<"U"/utf8>> ->
+ up;
+
+ <<"3"/utf8>> ->
+ up;
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"to_direction"/utf8>>,
+ line => 30})
+ end.
+
+-spec parse_front(binary()) -> dig().
+parse_front(Line) ->
+ _assert_subject = gleam@regex:from_string(<<"(.) (.*) \\(.*\\)"/utf8>>),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"parse_front"/utf8>>,
+ line => 35})
+ end,
+ _assert_subject@1 = gleam@regex:scan(Re, Line),
+ [{match, _, [{some, Dir}, {some, Dist}]}] = case _assert_subject@1 of
+ [{match, _, [{some, _}, {some, _}]}] -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"parse_front"/utf8>>,
+ line => 36})
+ end,
+ _assert_subject@2 = gleam@int:parse(Dist),
+ {ok, N} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"parse_front"/utf8>>,
+ line => 38})
+ end,
+ {dig, to_direction(Dir), N}.
+
+-spec parse_hex(binary()) -> dig().
+parse_hex(Line) ->
+ _assert_subject = gleam@regex:from_string(<<"\\(#(.....)(.)\\)"/utf8>>),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"parse_hex"/utf8>>,
+ line => 43})
+ end,
+ _assert_subject@1 = gleam@regex:scan(Re, Line),
+ [{match, _, [{some, Dist}, {some, Dir}]}] = case _assert_subject@1 of
+ [{match, _, [{some, _}, {some, _}]}] -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"parse_hex"/utf8>>,
+ line => 44})
+ end,
+ _assert_subject@2 = gleam@int:base_parse(Dist, 16),
+ {ok, N} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"parse_hex"/utf8>>,
+ line => 46})
+ end,
+ {dig, to_direction(Dir), N}.
+
+-spec go(coord(), dig()) -> coord().
+go(Current, Dig) ->
+ case Dig of
+ {dig, up, N} ->
+ {coord, erlang:element(2, Current), erlang:element(3, Current) + N};
+
+ {dig, right, N@1} ->
+ {coord,
+ erlang:element(2, Current) + N@1,
+ erlang:element(3, Current)};
+
+ {dig, down, N@2} ->
+ {coord,
+ erlang:element(2, Current),
+ erlang:element(3, Current) - N@2};
+
+ {dig, left, N@3} ->
+ {coord,
+ erlang:element(2, Current) - N@3,
+ erlang:element(3, Current)}
+ end.
+
+-spec double_triangle(coord(), coord()) -> integer().
+double_triangle(C1, C2) ->
+ (erlang:element(2, C1) * erlang:element(3, C2)) - (erlang:element(2, C2) * erlang:element(
+ 3,
+ C1
+ )).
+
+-spec do_next_dig(list(dig()), coord(), integer(), integer()) -> integer().
+do_next_dig(Digs, Current, Area, Perimeter) ->
+ case Digs of
+ [] ->
+ ((gleam@int:absolute_value(Area) div 2) + (Perimeter div 2)) + 1;
+
+ [Dig | Rest] ->
+ Next = go(Current, Dig),
+ Area@1 = Area + double_triangle(Current, Next),
+ Perimeter@1 = Perimeter + erlang:element(3, Dig),
+ do_next_dig(Rest, Next, Area@1, Perimeter@1)
+ end.
+
+-spec start_dig(list(dig())) -> integer().
+start_dig(Digs) ->
+ do_next_dig(Digs, {coord, 0, 0}, 0, 0).
+
+-spec solve_with(binary(), fun((binary()) -> dig())) -> binary().
+solve_with(Input, F) ->
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ _pipe@2 = gleam@list:map(_pipe@1, F),
+ _pipe@3 = start_dig(_pipe@2),
+ gleam@string:inspect(_pipe@3).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ solve_with(Input, fun parse_front/1).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ solve_with(Input, fun parse_hex/1).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 101})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"18"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day18/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 102})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache
new file mode 100644
index 0000000..3b5eab2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta
new file mode 100644
index 0000000..e633833
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl
new file mode 100644
index 0000000..2404595
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@day19_test.erl
@@ -0,0 +1,96 @@
+-module(day19@day19_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"px{a<2006:qkq,m>2090:A,rfg}
+pv{a>1716:R,A}
+lnx{m>1548:A,A}
+rfg{s<537:gd,x>2440:R,A}
+qs{s>3448:A,lnx}
+qkq{x<1416:A,crn}
+crn{x>2662:A,R}
+in{s<1351:px,qqz}
+qqz{s>2770:qs,m<1801:hdj,R}
+gd{a>3333:R,R}
+hdj{m>838:A,pv}
+
+{x=787,m=2655,a=1222,s=2876}
+{x=1679,m=44,a=2067,s=496}
+{x=2036,m=264,a=79,s=2244}
+{x=2461,m=1339,a=466,s=291}
+{x=2127,m=1623,a=2188,s=1013}"/utf8>>,
+ <<"19114"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"px{a<2006:qkq,m>2090:A,rfg}
+pv{a>1716:R,A}
+lnx{m>1548:A,A}
+rfg{s<537:gd,x>2440:R,A}
+qs{s>3448:A,lnx}
+qkq{x<1416:A,crn}
+crn{x>2662:A,R}
+in{s<1351:px,qqz}
+qqz{s>2770:qs,m<1801:hdj,R}
+gd{a>3333:R,R}
+hdj{m>838:A,pv}
+
+{x=787,m=2655,a=1222,s=2876}
+{x=1679,m=44,a=2067,s=496}
+{x=2036,m=264,a=79,s=2244}
+{x=2461,m=1339,a=466,s=291}
+{x=2127,m=1623,a=2188,s=1013}"/utf8>>,
+ <<"19114"/utf8>>}],
+ fun(Example) -> _pipe@1 = day19@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"px{a<2006:qkq,m>2090:A,rfg}
+pv{a>1716:R,A}
+lnx{m>1548:A,A}
+rfg{s<537:gd,x>2440:R,A}
+qs{s>3448:A,lnx}
+qkq{x<1416:A,crn}
+crn{x>2662:A,R}
+in{s<1351:px,qqz}
+qqz{s>2770:qs,m<1801:hdj,R}
+gd{a>3333:R,R}
+hdj{m>838:A,pv}
+
+{x=787,m=2655,a=1222,s=2876}
+{x=1679,m=44,a=2067,s=496}
+{x=2036,m=264,a=79,s=2244}
+{x=2461,m=1339,a=466,s=291}
+{x=2127,m=1623,a=2188,s=1013}"/utf8>>,
+ <<"167409079868000"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"px{a<2006:qkq,m>2090:A,rfg}
+pv{a>1716:R,A}
+lnx{m>1548:A,A}
+rfg{s<537:gd,x>2440:R,A}
+qs{s>3448:A,lnx}
+qkq{x<1416:A,crn}
+crn{x>2662:A,R}
+in{s<1351:px,qqz}
+qqz{s>2770:qs,m<1801:hdj,R}
+gd{a>3333:R,R}
+hdj{m>838:A,pv}
+
+{x=787,m=2655,a=1222,s=2876}
+{x=1679,m=44,a=2067,s=496}
+{x=2036,m=264,a=79,s=2244}
+{x=2461,m=1339,a=466,s=291}
+{x=2127,m=1623,a=2188,s=1013}"/utf8>>,
+ <<"167409079868000"/utf8>>}],
+ fun(Example) -> _pipe@1 = day19@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache
new file mode 100644
index 0000000..c7e00e3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta
new file mode 100644
index 0000000..0424b05
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl
new file mode 100644
index 0000000..242bd74
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day19@solve.erl
@@ -0,0 +1,459 @@
+-module(day19@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([rating/0, part/0, action/0, rule/0, interval/0, part_range/0]).
+
+-type rating() :: xtremely_cool | musical | aerodynamic | shiny.
+
+-type part() :: {part, integer(), integer(), integer(), integer()}.
+
+-type action() :: accept | reject | {send_to, binary()}.
+
+-type rule() :: {'if', rating(), gleam@order:order(), integer(), action()} |
+ {just, action()}.
+
+-type interval() :: {interval, integer(), integer()}.
+
+-type part_range() :: {part_range,
+ interval(),
+ interval(),
+ interval(),
+ interval()}.
+
+-spec to_instruction(binary()) -> action().
+to_instruction(Rule) ->
+ case Rule of
+ <<"A"/utf8>> ->
+ accept;
+
+ <<"R"/utf8>> ->
+ reject;
+
+ Name ->
+ {send_to, Name}
+ end.
+
+-spec to_rating(binary()) -> rating().
+to_rating(Rating) ->
+ case Rating of
+ <<"x"/utf8>> ->
+ xtremely_cool;
+
+ <<"m"/utf8>> ->
+ musical;
+
+ <<"a"/utf8>> ->
+ aerodynamic;
+
+ _ ->
+ shiny
+ end.
+
+-spec get_rating(part(), rating()) -> integer().
+get_rating(Part, Rating) ->
+ case Rating of
+ xtremely_cool ->
+ erlang:element(2, Part);
+
+ musical ->
+ erlang:element(3, Part);
+
+ aerodynamic ->
+ erlang:element(4, Part);
+
+ shiny ->
+ erlang:element(5, Part)
+ end.
+
+-spec to_comp(binary()) -> gleam@order:order().
+to_comp(Comp) ->
+ case Comp of
+ <<"<"/utf8>> ->
+ lt;
+
+ _ ->
+ gt
+ end.
+
+-spec to_val(binary()) -> integer().
+to_val(Val) ->
+ _assert_subject = gleam@int:parse(Val),
+ {ok, N} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"to_val"/utf8>>,
+ line => 100})
+ end,
+ N.
+
+-spec parse_rules(list(binary())) -> list(rule()).
+parse_rules(Rules) ->
+ _assert_subject = gleam@regex:from_string(<<"(.*)(>|<)(.*):(.*)"/utf8>>),
+ {ok, Re_rule} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"parse_rules"/utf8>>,
+ line => 57})
+ end,
+ gleam@list:map(Rules, fun(Rule) -> case gleam@regex:scan(Re_rule, Rule) of
+ [{match, _, [{some, R}, {some, C}, {some, T}, {some, I}]}] ->
+ {'if',
+ to_rating(R),
+ to_comp(C),
+ to_val(T),
+ to_instruction(I)};
+
+ _ ->
+ {just, to_instruction(Rule)}
+ end end).
+
+-spec parse_workflow(binary()) -> gleam@dict:dict(binary(), list(rule())).
+parse_workflow(Input) ->
+ _assert_subject = gleam@regex:from_string(<<"(.*){(.*)}"/utf8>>),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"parse_workflow"/utf8>>,
+ line => 45})
+ end,
+ gleam@list:fold(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ gleam@dict:new(),
+ fun(Acc, Line) ->
+ _assert_subject@1 = gleam@regex:scan(Re, Line),
+ [{match, _, [{some, Name}, {some, All_rules}]}] = case _assert_subject@1 of
+ [{match, _, [{some, _}, {some, _}]}] -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"parse_workflow"/utf8>>,
+ line => 48})
+ end,
+ Rules = begin
+ _pipe = gleam@string:split(All_rules, <<","/utf8>>),
+ parse_rules(_pipe)
+ end,
+ gleam@dict:insert(Acc, Name, Rules)
+ end
+ ).
+
+-spec parse_parts(binary()) -> list(part()).
+parse_parts(Input) ->
+ _assert_subject = gleam@regex:from_string(
+ <<"{x=(.*),m=(.*),a=(.*),s=(.*)}"/utf8>>
+ ),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"parse_parts"/utf8>>,
+ line => 105})
+ end,
+ gleam@list:map(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ fun(Part) ->
+ _assert_subject@1 = gleam@regex:scan(Re, Part),
+ [{match, _, [{some, X}, {some, M}, {some, A}, {some, S}]}] = case _assert_subject@1 of
+ [{match, _, [{some, _}, {some, _}, {some, _}, {some, _}]}] -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"parse_parts"/utf8>>,
+ line => 108})
+ end,
+ {part, to_val(X), to_val(M), to_val(A), to_val(S)}
+ end
+ ).
+
+-spec evaluate_rules(part(), list(rule())) -> action().
+evaluate_rules(Part, Rules) ->
+ case Rules of
+ [] ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"evaluate_rules"/utf8>>,
+ line => 128});
+
+ [{just, Do} | _] ->
+ Do;
+
+ [{'if', Rating, Comparison, Threshold, Do@1} | Rest] ->
+ case gleam@int:compare(get_rating(Part, Rating), Threshold) =:= Comparison of
+ true ->
+ Do@1;
+
+ false ->
+ evaluate_rules(Part, Rest)
+ end
+ end.
+
+-spec evaluate_workflow(
+ part(),
+ binary(),
+ gleam@dict:dict(binary(), list(rule()))
+) -> integer().
+evaluate_workflow(Part, Name, Workflow) ->
+ _assert_subject = gleam@dict:get(Workflow, Name),
+ {ok, Rules} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"evaluate_workflow"/utf8>>,
+ line => 118})
+ end,
+ case evaluate_rules(Part, Rules) of
+ accept ->
+ ((erlang:element(2, Part) + erlang:element(3, Part)) + erlang:element(
+ 4,
+ Part
+ ))
+ + erlang:element(5, Part);
+
+ reject ->
+ 0;
+
+ {send_to, Name@1} ->
+ evaluate_workflow(Part, Name@1, Workflow)
+ end.
+
+-spec start_evaluating_workflow(part(), gleam@dict:dict(binary(), list(rule()))) -> integer().
+start_evaluating_workflow(Part, Workflow) ->
+ evaluate_workflow(Part, <<"in"/utf8>>, Workflow).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ _assert_subject = gleam@string:split_once(Input, <<"\n\n"/utf8>>),
+ {ok, {Workflows_str, Parts_str}} = case _assert_subject of
+ {ok, {_, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 139})
+ end,
+ Workflows = parse_workflow(Workflows_str),
+ Parts = parse_parts(Parts_str),
+ _pipe = gleam@list:map(
+ Parts,
+ fun(_capture) -> start_evaluating_workflow(_capture, Workflows) end
+ ),
+ _pipe@1 = gleam@int:sum(_pipe),
+ gleam@string:inspect(_pipe@1).
+
+-spec size(interval()) -> integer().
+size(Interval) ->
+ (erlang:element(3, Interval) - erlang:element(2, Interval)) + 1.
+
+-spec all_in_range(part_range()) -> integer().
+all_in_range(Pr) ->
+ ((size(erlang:element(2, Pr)) * size(erlang:element(3, Pr))) * size(
+ erlang:element(4, Pr)
+ ))
+ * size(erlang:element(5, Pr)).
+
+-spec get_partrange(part_range(), rating()) -> interval().
+get_partrange(Pr, Rating) ->
+ case Rating of
+ xtremely_cool ->
+ erlang:element(2, Pr);
+
+ musical ->
+ erlang:element(3, Pr);
+
+ aerodynamic ->
+ erlang:element(4, Pr);
+
+ shiny ->
+ erlang:element(5, Pr)
+ end.
+
+-spec update_partrange(part_range(), rating(), interval()) -> part_range().
+update_partrange(Pr, Rating, I) ->
+ case Rating of
+ xtremely_cool ->
+ erlang:setelement(2, Pr, I);
+
+ musical ->
+ erlang:setelement(3, Pr, I);
+
+ aerodynamic ->
+ erlang:setelement(4, Pr, I);
+
+ shiny ->
+ erlang:setelement(5, Pr, I)
+ end.
+
+-spec evaluate_rules_on_range(
+ part_range(),
+ list(rule()),
+ gleam@dict:dict(binary(), list(rule()))
+) -> integer().
+evaluate_rules_on_range(Pr, Rules, Workflow) ->
+ case Rules of
+ [{just, accept} | _] ->
+ all_in_range(Pr);
+
+ [{just, reject} | _] ->
+ 0;
+
+ [{just, {send_to, Name}} | _] ->
+ evaluate_workflow_on_range(Pr, Name, Workflow);
+
+ [{'if', Rating, Comparison, T, Action} | Rest] ->
+ Mod_i = get_partrange(Pr, Rating),
+ case Comparison of
+ lt ->
+ split_range(
+ update_partrange(
+ Pr,
+ Rating,
+ {interval, erlang:element(2, Mod_i), T - 1}
+ ),
+ Action,
+ update_partrange(
+ Pr,
+ Rating,
+ {interval, T, erlang:element(3, Mod_i)}
+ ),
+ Rest,
+ Workflow
+ );
+
+ _ ->
+ split_range(
+ update_partrange(
+ Pr,
+ Rating,
+ {interval, T + 1, erlang:element(3, Mod_i)}
+ ),
+ Action,
+ update_partrange(
+ Pr,
+ Rating,
+ {interval, erlang:element(2, Mod_i), T}
+ ),
+ Rest,
+ Workflow
+ )
+ end;
+
+ [] ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"evaluate_rules_on_range"/utf8>>,
+ line => 225})
+ end.
+
+-spec evaluate_workflow_on_range(
+ part_range(),
+ binary(),
+ gleam@dict:dict(binary(), list(rule()))
+) -> integer().
+evaluate_workflow_on_range(Pr, Name, Workflow) ->
+ _assert_subject = gleam@dict:get(Workflow, Name),
+ {ok, Rules} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"evaluate_workflow_on_range"/utf8>>,
+ line => 191})
+ end,
+ evaluate_rules_on_range(Pr, Rules, Workflow).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _assert_subject = gleam@string:split_once(Input, <<"\n\n"/utf8>>),
+ {ok, {Workflows_str, _}} = case _assert_subject of
+ {ok, {_, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"part2"/utf8>>,
+ line => 176})
+ end,
+ Workflow = parse_workflow(Workflows_str),
+ Start = {interval, 1, 4000},
+ _pipe = {part_range, Start, Start, Start, Start},
+ _pipe@1 = evaluate_workflow_on_range(_pipe, <<"in"/utf8>>, Workflow),
+ gleam@string:inspect(_pipe@1).
+
+-spec split_range(
+ part_range(),
+ action(),
+ part_range(),
+ list(rule()),
+ gleam@dict:dict(binary(), list(rule()))
+) -> integer().
+split_range(Keep, Action, Pass, Rest, Workflow) ->
+ gleam@int:add(
+ evaluate_rules_on_range(Keep, [{just, Action}], Workflow),
+ evaluate_rules_on_range(Pass, Rest, Workflow)
+ ).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 243})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"19"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day19/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 244})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache
new file mode 100644
index 0000000..67b16ce
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta
new file mode 100644
index 0000000..54af03d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl
new file mode 100644
index 0000000..8c7ab53
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@day1_test.erl
@@ -0,0 +1,50 @@
+-module(day1@day1_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"1abc2
+pqr3stu8vwx
+a1b2c3d4e5f
+treb7uchet"/utf8>>,
+ <<"142"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"1abc2
+pqr3stu8vwx
+a1b2c3d4e5f
+treb7uchet"/utf8>>,
+ <<"142"/utf8>>}],
+ fun(Example) -> _pipe@1 = day1@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"two1nine
+eightwothree
+abcone2threexyz
+xtwone3four
+4nineeightseven2
+zoneight234
+7pqrstsixteen"/utf8>>,
+ <<"281"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"two1nine
+eightwothree
+abcone2threexyz
+xtwone3four
+4nineeightseven2
+zoneight234
+7pqrstsixteen"/utf8>>,
+ <<"281"/utf8>>}],
+ fun(Example) -> _pipe@1 = day1@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache
new file mode 100644
index 0000000..ea9b785
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta
new file mode 100644
index 0000000..8291feb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl
new file mode 100644
index 0000000..15dd24e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day1@solve.erl
@@ -0,0 +1,118 @@
+-module(day1@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ _assert_subject = gleam@regex:from_string(<<"[1-9]"/utf8>>),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day1/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 9})
+ end,
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ 0,
+ fun(Acc, S) ->
+ Matches = gleam@regex:scan(Re, S),
+ _assert_subject@1 = gleam@list:first(Matches),
+ {ok, {match, First, _}} = case _assert_subject@1 of
+ {ok, {match, _, _}} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day1/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 18})
+ end,
+ _assert_subject@2 = gleam@list:last(Matches),
+ {ok, {match, Last, _}} = case _assert_subject@2 of
+ {ok, {match, _, _}} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day1/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 19})
+ end,
+ _assert_subject@3 = gleam@int:parse(<<First/binary, Last/binary>>),
+ {ok, I} = case _assert_subject@3 of
+ {ok, _} -> _assert_subject@3;
+ _assert_fail@3 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@3,
+ module => <<"day1/solve"/utf8>>,
+ function => <<"part1"/utf8>>,
+ line => 20})
+ end,
+ Acc + I
+ end
+ ),
+ gleam@string:inspect(_pipe@2).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _pipe = gleam@list:fold(
+ [{<<"one"/utf8>>, <<"o1e"/utf8>>},
+ {<<"two"/utf8>>, <<"t2o"/utf8>>},
+ {<<"three"/utf8>>, <<"t3e"/utf8>>},
+ {<<"four"/utf8>>, <<"4"/utf8>>},
+ {<<"five"/utf8>>, <<"5e"/utf8>>},
+ {<<"six"/utf8>>, <<"6"/utf8>>},
+ {<<"seven"/utf8>>, <<"7n"/utf8>>},
+ {<<"eight"/utf8>>, <<"e8t"/utf8>>},
+ {<<"nine"/utf8>>, <<"n9e"/utf8>>}],
+ Input,
+ fun(Acc, Sub) ->
+ {From, To} = Sub,
+ gleam@string:replace(Acc, From, To)
+ end
+ ),
+ part1(_pipe).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day1/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 52})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"1"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day1/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 53})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache
new file mode 100644
index 0000000..7b0c4ff
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta
new file mode 100644
index 0000000..684b2f3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl
new file mode 100644
index 0000000..145fc1c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@day20_test.erl
@@ -0,0 +1,52 @@
+-module(day20@day20_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"broadcaster -> a, b, c
+%a -> b
+%b -> c
+%c -> inv
+&inv -> a"/utf8>>,
+ <<"32000000"/utf8>>},
+ {example,
+ <<"broadcaster -> a
+%a -> inv, con
+&inv -> b
+%b -> con
+&con -> output
+output -> "/utf8>>,
+ <<"11687500"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"broadcaster -> a, b, c
+%a -> b
+%b -> c
+%c -> inv
+&inv -> a"/utf8>>,
+ <<"32000000"/utf8>>},
+ {example,
+ <<"broadcaster -> a
+%a -> inv, con
+&inv -> b
+%b -> con
+&con -> output
+output -> "/utf8>>,
+ <<"11687500"/utf8>>}],
+ fun(Example) -> _pipe@1 = day20@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [],
+ fun(Example) -> _pipe@1 = day20@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache
new file mode 100644
index 0000000..74900a3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta
new file mode 100644
index 0000000..e37bfb8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl
new file mode 100644
index 0000000..a4442a0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day20@solve.erl
@@ -0,0 +1,237 @@
+-module(day20@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([node_/0, tone/0, power/0, tone_pitch/0]).
+
+-type node_() :: {broadcaster, list(binary())} |
+ {flipflop, list(binary()), power()} |
+ {conjunction, list(binary()), gleam@dict:dict(binary(), tone_pitch())} |
+ {ground, list(binary())}.
+
+-type tone() :: {tone, binary(), binary(), tone_pitch()}.
+
+-type power() :: on | off.
+
+-type tone_pitch() :: low | high.
+
+-spec flip_power(power()) -> power().
+flip_power(P) ->
+ case P of
+ on ->
+ off;
+
+ off ->
+ on
+ end.
+
+-spec flip_flop_pitch(power()) -> tone_pitch().
+flip_flop_pitch(P) ->
+ case P of
+ off ->
+ high;
+
+ on ->
+ low
+ end.
+
+-spec parse_node(binary()) -> {binary(), node_()}.
+parse_node(Input) ->
+ _assert_subject = gleam@string:split(Input, <<" -> "/utf8>>),
+ [Full_name, Children_str] = case _assert_subject of
+ [_, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"parse_node"/utf8>>,
+ line => 45})
+ end,
+ Children = gleam@string:split(Children_str, <<", "/utf8>>),
+ case Full_name of
+ <<"%"/utf8, Name/binary>> ->
+ {Name, {flipflop, Children, off}};
+
+ <<"&"/utf8, Name@1/binary>> ->
+ {Name@1, {conjunction, Children, gleam@dict:new()}};
+
+ <<"broadcaster"/utf8>> ->
+ {<<"broadcaster"/utf8>>, {broadcaster, Children}};
+
+ Name@2 ->
+ {Name@2, {ground, []}}
+ end.
+
+-spec to_initial_state(list({binary(), node_()})) -> gleam@dict:dict(binary(), node_()).
+to_initial_state(Nodes) ->
+ Node_dict = gleam@dict:from_list(Nodes),
+ Node_names = gleam@dict:keys(Node_dict),
+ gleam@dict:map_values(Node_dict, fun(Name, Node) -> case Node of
+ {conjunction, Chs, _} ->
+ _pipe = Node_names,
+ _pipe@1 = gleam@list:filter(
+ _pipe,
+ fun(N) ->
+ _assert_subject = gleam@dict:get(Node_dict, N),
+ {ok, Node@1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"to_initial_state"/utf8>>,
+ line => 65})
+ end,
+ gleam@list:contains(erlang:element(2, Node@1), Name)
+ end
+ ),
+ _pipe@2 = gleam@list:map(
+ _pipe@1,
+ fun(N@1) -> {N@1, low} end
+ ),
+ _pipe@3 = gleam@dict:from_list(_pipe@2),
+ (fun(Dict) -> {conjunction, Chs, Dict} end)(_pipe@3);
+
+ Other ->
+ Other
+ end end).
+
+-spec press_button_once(
+ {gleam@dict:dict(binary(), node_()), integer(), integer()},
+ gleam@queue:queue(tone())
+) -> {gleam@dict:dict(binary(), node_()), integer(), integer()}.
+press_button_once(Initial, Queue) ->
+ {Nodes, High, Low} = Initial,
+ gleam@bool:guard(
+ gleam@queue:is_empty(Queue),
+ Initial,
+ fun() ->
+ _assert_subject = gleam@queue:pop_front(Queue),
+ {ok, {{tone, From_name, To_name, Pitch} = Tone, Rest}} = case _assert_subject of
+ {ok, {{tone, _, _, _}, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"press_button_once"/utf8>>,
+ line => 81})
+ end,
+ gleam@io:debug(Tone),
+ _assert_subject@1 = gleam@dict:get(Nodes, To_name),
+ {ok, To_node} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"press_button_once"/utf8>>,
+ line => 84})
+ end,
+ case To_node of
+ {broadcaster, Children} ->
+ _pipe = gleam@list:fold(
+ Children,
+ Rest,
+ fun(Acc, C) ->
+ gleam@queue:push_back(
+ Acc,
+ {tone, To_name, C, Pitch}
+ )
+ end
+ ),
+ press_button_once(Initial, _pipe);
+
+ {conjunction, _, _} ->
+ press_button_once(Initial, Rest);
+
+ {flipflop, _, _} when Pitch =:= high ->
+ press_button_once(Initial, Rest);
+
+ {flipflop, Children@1, State} ->
+ Updated_nodes = gleam@dict:insert(
+ Nodes,
+ To_name,
+ {flipflop, Children@1, flip_power(State)}
+ ),
+ Updated_queue = gleam@list:fold(
+ Children@1,
+ Rest,
+ fun(Acc@1, C@1) ->
+ gleam@queue:push_back(
+ Acc@1,
+ {tone, To_name, C@1, flip_flop_pitch(State)}
+ )
+ end
+ ),
+ press_button_once({Updated_nodes, 0, 0}, Updated_queue);
+
+ {ground, _} ->
+ press_button_once(Initial, Rest)
+ end
+ end
+ ).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ Initial_state = begin
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ _pipe@2 = gleam@list:map(_pipe@1, fun parse_node/1),
+ to_initial_state(_pipe@2)
+ end,
+ press_button_once(
+ {Initial_state, 0, 1},
+ begin
+ _pipe@3 = [{tone, <<"button"/utf8>>, <<"broadcaster"/utf8>>, low}],
+ gleam@queue:from_list(_pipe@3)
+ end
+ ),
+ <<"1"/utf8>>.
+
+-spec part2(binary()) -> any().
+part2(Input) ->
+ erlang:error(#{gleam_error => todo,
+ message => <<"Implement solution to part 2"/utf8>>,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"part2"/utf8>>,
+ line => 130}).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 134})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"20"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day20/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 135})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache
new file mode 100644
index 0000000..8014a5c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta
new file mode 100644
index 0000000..7f44851
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl
new file mode 100644
index 0000000..8795f58
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@day2_test.erl
@@ -0,0 +1,54 @@
+-module(day2@day2_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>,
+ 8}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>,
+ 8}],
+ fun(Example) -> _pipe@1 = day2@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>,
+ 2286},
+ {example,
+ <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green"/utf8>>,
+ 48}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
+Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
+Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
+Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
+Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"/utf8>>,
+ 2286},
+ {example,
+ <<"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green"/utf8>>,
+ 48}],
+ fun(Example) -> _pipe@1 = day2@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache
new file mode 100644
index 0000000..7533395
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta
new file mode 100644
index 0000000..237d90e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl
new file mode 100644
index 0000000..0cd8105
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day2@solve.erl
@@ -0,0 +1,166 @@
+-module(day2@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([game/0]).
+
+-type game() :: {game, integer(), integer(), integer()}.
+
+-spec parse(binary()) -> list(list(game())).
+parse(Input) ->
+ gleam@list:map(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ fun(Line) ->
+ _assert_subject = gleam@string:split(Line, <<": "/utf8>>),
+ [_, Rounds] = case _assert_subject of
+ [_, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day2/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 13})
+ end,
+ gleam@list:map(
+ gleam@string:split(Rounds, <<"; "/utf8>>),
+ fun(Match) ->
+ gleam@list:fold(
+ gleam@string:split(Match, <<", "/utf8>>),
+ {game, 0, 0, 0},
+ fun(Acc, Draw) ->
+ _assert_subject@1 = gleam@string:split_once(
+ Draw,
+ <<" "/utf8>>
+ ),
+ {ok, {N_str, Color}} = case _assert_subject@1 of
+ {ok, {_, _}} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day2/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 19})
+ end,
+ _assert_subject@2 = gleam@int:parse(N_str),
+ {ok, N} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day2/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 20})
+ end,
+ case Color of
+ <<"red"/utf8>> ->
+ erlang:setelement(2, Acc, N);
+
+ <<"blue"/utf8>> ->
+ erlang:setelement(3, Acc, N);
+
+ <<"green"/utf8>> ->
+ erlang:setelement(4, Acc, N);
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"unrecognized color"/utf8>>,
+ module => <<"day2/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 25})
+ end
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec part1(binary()) -> integer().
+part1(Input) ->
+ gleam@list:index_fold(
+ parse(Input),
+ 0,
+ fun(Acc, Game, I) ->
+ case gleam@list:any(
+ Game,
+ fun(M) ->
+ ((erlang:element(2, M) > 12) orelse (erlang:element(4, M) > 13))
+ orelse (erlang:element(3, M) > 14)
+ end
+ ) of
+ false ->
+ (Acc + I) + 1;
+
+ true ->
+ Acc
+ end
+ end
+ ).
+
+-spec part2(binary()) -> integer().
+part2(Input) ->
+ _pipe = (gleam@list:map(
+ parse(Input),
+ fun(Game) ->
+ gleam@list:fold(
+ Game,
+ {game, 0, 0, 0},
+ fun(Acc, Match) ->
+ {game, Red, Blue, Green} = Match,
+ {game,
+ gleam@int:max(Red, erlang:element(2, Acc)),
+ gleam@int:max(Blue, erlang:element(3, Acc)),
+ gleam@int:max(Green, erlang:element(4, Acc))}
+ end
+ )
+ end
+ )),
+ gleam@list:fold(
+ _pipe,
+ 0,
+ fun(Acc@1, G) ->
+ Acc@1 + ((erlang:element(2, G) * erlang:element(3, G)) * erlang:element(
+ 4,
+ G
+ ))
+ end
+ ).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day2/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 55})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"2"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day2/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 56})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache
new file mode 100644
index 0000000..a3b1377
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta
new file mode 100644
index 0000000..f603e6b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl
new file mode 100644
index 0000000..31de387
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@day3_test.erl
@@ -0,0 +1,68 @@
+-module(day3@day3_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"467..114..
+...*......
+..35..633.
+......#...
+617*......
+.....+.58.
+..592.....
+......755.
+...$.*....
+.664.598.."/utf8>>,
+ 4361}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"467..114..
+...*......
+..35..633.
+......#...
+617*......
+.....+.58.
+..592.....
+......755.
+...$.*....
+.664.598.."/utf8>>,
+ 4361}],
+ fun(Example) -> _pipe@1 = day3@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"467..114..
+...*......
+..35..633.
+......#...
+617*......
+.....+.58.
+..592.....
+......755.
+...$.*....
+.664.598.."/utf8>>,
+ 467835}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"467..114..
+...*......
+..35..633.
+......#...
+617*......
+.....+.58.
+..592.....
+......755.
+...$.*....
+.664.598.."/utf8>>,
+ 467835}],
+ fun(Example) -> _pipe@1 = day3@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache
new file mode 100644
index 0000000..13bc7af
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta
new file mode 100644
index 0000000..7961cc1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl
new file mode 100644
index 0000000..d4df3d6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day3@solve.erl
@@ -0,0 +1,254 @@
+-module(day3@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([coord/0, symbol_kind/0, symbol/0, cell/0, part/0]).
+
+-type coord() :: {coord, integer(), integer()}.
+
+-type symbol_kind() :: gear | something_else.
+
+-type symbol() :: {number, integer()} | {symbol, symbol_kind()} | empty.
+
+-type cell() :: {cell, coord(), symbol()}.
+
+-type part() :: {part, list(coord()), integer()}.
+
+-spec to_symbol(binary()) -> symbol().
+to_symbol(C) ->
+ case {gleam@int:parse(C), C} of
+ {{ok, N}, _} ->
+ {number, N};
+
+ {_, <<"."/utf8>>} ->
+ empty;
+
+ {_, <<"*"/utf8>>} ->
+ {symbol, gear};
+
+ {_, _} ->
+ {symbol, something_else}
+ end.
+
+-spec to_board(binary()) -> gleam@dict:dict(coord(), symbol()).
+to_board(Input) ->
+ _pipe = (gleam@list:index_map(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ fun(Y, R) ->
+ gleam@list:index_map(
+ gleam@string:to_graphemes(R),
+ fun(X, C) -> {{coord, X, Y}, to_symbol(C)} end
+ )
+ end
+ )),
+ _pipe@1 = gleam@list:flatten(_pipe),
+ gleam@dict:from_list(_pipe@1).
+
+-spec cell_compare(cell(), cell()) -> gleam@order:order().
+cell_compare(A, B) ->
+ case gleam@int:compare(
+ erlang:element(3, erlang:element(2, A)),
+ erlang:element(3, erlang:element(2, B))
+ ) of
+ eq ->
+ gleam@int:compare(
+ erlang:element(2, erlang:element(2, A)),
+ erlang:element(2, erlang:element(2, B))
+ );
+
+ Other ->
+ Other
+ end.
+
+-spec find_all_part_digits(gleam@dict:dict(coord(), symbol())) -> list(cell()).
+find_all_part_digits(B) ->
+ _pipe = B,
+ _pipe@1 = gleam@dict:filter(_pipe, fun(_, V) -> case V of
+ {number, _} ->
+ true;
+
+ _ ->
+ false
+ end end),
+ _pipe@2 = gleam@dict:to_list(_pipe@1),
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(Tup) -> {cell, erlang:element(1, Tup), erlang:element(2, Tup)} end
+ ),
+ gleam@list:sort(_pipe@3, fun cell_compare/2).
+
+-spec do_parts(list(cell()), list(part())) -> list(part()).
+do_parts(Cells, Parts) ->
+ case Cells of
+ [] ->
+ Parts;
+
+ [{cell, Next, {number, N}} | T] ->
+ case Parts of
+ [] ->
+ do_parts(T, [{part, [Next], N} | Parts]);
+
+ [{part, [Prev | _] = Coords, N0} | Rest_parts] ->
+ case {(erlang:element(2, Next) - erlang:element(2, Prev)),
+ (erlang:element(3, Next) - erlang:element(3, Prev))} of
+ {1, 0} ->
+ do_parts(
+ T,
+ [{part, [Next | Coords], (N0 * 10) + N} |
+ Rest_parts]
+ );
+
+ {_, _} ->
+ do_parts(T, [{part, [Next], N} | Parts])
+ end;
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"day3/solve"/utf8>>,
+ function => <<"do_parts"/utf8>>,
+ line => 90})
+ end;
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"day3/solve"/utf8>>,
+ function => <<"do_parts"/utf8>>,
+ line => 93})
+ end.
+
+-spec to_parts(list(cell())) -> list(part()).
+to_parts(Cells) ->
+ do_parts(Cells, []).
+
+-spec all_neighbors(coord()) -> list(coord()).
+all_neighbors(C) ->
+ gleam@list:flat_map(
+ [-1, 0, 1],
+ fun(Dx) -> gleam@list:filter_map([-1, 0, 1], fun(Dy) -> case {Dx, Dy} of
+ {0, 0} ->
+ {error, nil};
+
+ {_, _} ->
+ {ok,
+ {coord,
+ erlang:element(2, C) + Dx,
+ erlang:element(3, C) + Dy}}
+ end end) end
+ ).
+
+-spec sum_valid_parts(integer(), part(), gleam@dict:dict(coord(), symbol())) -> integer().
+sum_valid_parts(Acc, Part, Board) ->
+ Neighbors = begin
+ _pipe = erlang:element(2, Part),
+ _pipe@1 = gleam@list:flat_map(_pipe, fun all_neighbors/1),
+ gleam@list:unique(_pipe@1)
+ end,
+ Sym = [{ok, {symbol, gear}}, {ok, {symbol, something_else}}],
+ case gleam@list:any(
+ Neighbors,
+ fun(C) -> gleam@list:contains(Sym, gleam@dict:get(Board, C)) end
+ ) of
+ true ->
+ Acc + erlang:element(3, Part);
+
+ false ->
+ Acc
+ end.
+
+-spec part1(binary()) -> integer().
+part1(Input) ->
+ Board = to_board(Input),
+ _pipe = Board,
+ _pipe@1 = find_all_part_digits(_pipe),
+ _pipe@2 = to_parts(_pipe@1),
+ gleam@list:fold(
+ _pipe@2,
+ 0,
+ fun(Acc, P) -> sum_valid_parts(Acc, P, Board) end
+ ).
+
+-spec to_part_with_neighbors(part()) -> part().
+to_part_with_neighbors(Part) ->
+ _pipe = erlang:element(2, Part),
+ _pipe@1 = gleam@list:flat_map(_pipe, fun all_neighbors/1),
+ _pipe@2 = gleam@list:unique(_pipe@1),
+ {part, _pipe@2, erlang:element(3, Part)}.
+
+-spec find_part_numbers_near_gear(coord(), list(part())) -> list(integer()).
+find_part_numbers_near_gear(Gear, Parts) ->
+ gleam@list:filter_map(
+ Parts,
+ fun(Part) -> case gleam@list:contains(erlang:element(2, Part), Gear) of
+ true ->
+ {ok, erlang:element(3, Part)};
+
+ false ->
+ {error, nil}
+ end end
+ ).
+
+-spec to_sum_of_gear_ratios(list(list(integer()))) -> integer().
+to_sum_of_gear_ratios(Adjacent_parts) ->
+ gleam@list:fold(Adjacent_parts, 0, fun(Acc, Ps) -> case Ps of
+ [P1, P2] ->
+ Acc + (P1 * P2);
+
+ _ ->
+ Acc
+ end end).
+
+-spec part2(binary()) -> integer().
+part2(Input) ->
+ Board = to_board(Input),
+ Parts = begin
+ _pipe = Board,
+ _pipe@1 = find_all_part_digits(_pipe),
+ _pipe@2 = to_parts(_pipe@1),
+ gleam@list:map(_pipe@2, fun to_part_with_neighbors/1)
+ end,
+ _pipe@3 = Board,
+ _pipe@4 = gleam@dict:filter(_pipe@3, fun(_, V) -> V =:= {symbol, gear} end),
+ _pipe@5 = gleam@dict:keys(_pipe@4),
+ _pipe@6 = gleam@list:map(
+ _pipe@5,
+ fun(_capture) -> find_part_numbers_near_gear(_capture, Parts) end
+ ),
+ to_sum_of_gear_ratios(_pipe@6).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day3/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 168})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"3"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day3/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 169})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache
new file mode 100644
index 0000000..0e2ffd5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta
new file mode 100644
index 0000000..5874661
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl
new file mode 100644
index 0000000..6044cef
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@day4_test.erl
@@ -0,0 +1,52 @@
+-module(day4@day4_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>,
+ 13}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>,
+ 13}],
+ fun(Example) -> _pipe@1 = day4@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>,
+ 30}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
+Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
+Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
+Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
+Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
+Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11"/utf8>>,
+ 30}],
+ fun(Example) -> _pipe@1 = day4@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache
new file mode 100644
index 0000000..b49cc67
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta
new file mode 100644
index 0000000..e4e4c35
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl
new file mode 100644
index 0000000..8feb45a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day4@solve.erl
@@ -0,0 +1,169 @@
+-module(day4@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([card/0]).
+
+-type card() :: {card, integer(), integer()}.
+
+-spec numbers_to_set(binary()) -> gleam@set:set(integer()).
+numbers_to_set(Str) ->
+ _pipe = Str,
+ _pipe@1 = gleam@string:split(_pipe, <<" "/utf8>>),
+ _pipe@2 = gleam@list:map(_pipe@1, fun gleam@int:parse/1),
+ _pipe@3 = gleam@result:values(_pipe@2),
+ gleam@set:from_list(_pipe@3).
+
+-spec parse_card(binary()) -> card().
+parse_card(Card) ->
+ _assert_subject = gleam@string:split_once(Card, <<": "/utf8>>),
+ {ok, {<<"Card"/utf8, N_str/binary>>, Rest}} = case _assert_subject of
+ {ok, {<<"Card"/utf8, _/binary>>, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"parse_card"/utf8>>,
+ line => 25})
+ end,
+ _assert_subject@1 = gleam@string:split_once(Rest, <<" | "/utf8>>),
+ {ok, {Winning_str, Has_str}} = case _assert_subject@1 of
+ {ok, {_, _}} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"parse_card"/utf8>>,
+ line => 26})
+ end,
+ _assert_subject@2 = gleam@int:parse(gleam@string:trim(N_str)),
+ {ok, N} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"parse_card"/utf8>>,
+ line => 27})
+ end,
+ Winning = numbers_to_set(Winning_str),
+ Has = numbers_to_set(Has_str),
+ Winners = gleam@set:size(gleam@set:intersection(Winning, Has)),
+ {card, N, Winners}.
+
+-spec win_points(integer()) -> integer().
+win_points(N) ->
+ gleam@bool:guard(N < 2, N, fun() -> 2 * win_points(N - 1) end).
+
+-spec part1(binary()) -> integer().
+part1(Input) ->
+ gleam@list:fold(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ 0,
+ fun(Acc, C) -> _pipe = C,
+ _pipe@1 = parse_card(_pipe),
+ _pipe@2 = (fun(C@1) -> win_points(erlang:element(3, C@1)) end)(
+ _pipe@1
+ ),
+ gleam@int:add(_pipe@2, Acc) end
+ ).
+
+-spec update_counts(integer(), card(), gleam@dict:dict(integer(), integer())) -> gleam@dict:dict(integer(), integer()).
+update_counts(N, Card, Count) ->
+ _assert_subject = gleam@dict:get(Count, erlang:element(2, Card)),
+ {ok, Bonus} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"update_counts"/utf8>>,
+ line => 65})
+ end,
+ gleam@list:fold(
+ gleam@list:range(
+ erlang:element(2, Card) + 1,
+ erlang:element(2, Card) + N
+ ),
+ Count,
+ fun(Acc, N@1) -> gleam@dict:update(Acc, N@1, fun(C) -> case C of
+ {some, I} ->
+ I + Bonus;
+
+ none ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"won a card that doesn't exist in the card pile"/utf8>>,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"update_counts"/utf8>>,
+ line => 70})
+ end end) end
+ ).
+
+-spec win_more_cards(list(binary()), gleam@dict:dict(integer(), integer())) -> integer().
+win_more_cards(Cards, Count) ->
+ case Cards of
+ [] ->
+ _pipe = Count,
+ _pipe@1 = gleam@dict:values(_pipe),
+ gleam@int:sum(_pipe@1);
+
+ [Raw_card | Rest] ->
+ Card = parse_card(Raw_card),
+ case erlang:element(3, Card) of
+ 0 ->
+ win_more_cards(Rest, Count);
+
+ N ->
+ win_more_cards(Rest, update_counts(N, Card, Count))
+ end
+ end.
+
+-spec part2(binary()) -> integer().
+part2(Input) ->
+ Cards = gleam@string:split(Input, <<"\n"/utf8>>),
+ Count = begin
+ _pipe = gleam@list:range(1, gleam@list:length(Cards)),
+ _pipe@1 = gleam@list:map(_pipe, fun(N) -> {N, 1} end),
+ gleam@dict:from_list(_pipe@1)
+ end,
+ win_more_cards(Cards, Count).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 86})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"4"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day4/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 87})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache
new file mode 100644
index 0000000..0b18c75
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta
new file mode 100644
index 0000000..4224316
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl
new file mode 100644
index 0000000..c3fe14d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@day5_test.erl
@@ -0,0 +1,160 @@
+-module(day5@day5_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"seeds: 79 14 55 13
+
+seed-to-soil map:
+50 98 2
+52 50 48
+
+soil-to-fertilizer map:
+0 15 37
+37 52 2
+39 0 15
+
+fertilizer-to-water map:
+49 53 8
+0 11 42
+42 0 7
+57 7 4
+
+water-to-light map:
+88 18 7
+18 25 70
+
+light-to-temperature map:
+45 77 23
+81 45 19
+68 64 13
+
+temperature-to-humidity map:
+0 69 1
+1 0 69
+
+humidity-to-location map:
+60 56 37
+56 93 4"/utf8>>,
+ <<"35"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"seeds: 79 14 55 13
+
+seed-to-soil map:
+50 98 2
+52 50 48
+
+soil-to-fertilizer map:
+0 15 37
+37 52 2
+39 0 15
+
+fertilizer-to-water map:
+49 53 8
+0 11 42
+42 0 7
+57 7 4
+
+water-to-light map:
+88 18 7
+18 25 70
+
+light-to-temperature map:
+45 77 23
+81 45 19
+68 64 13
+
+temperature-to-humidity map:
+0 69 1
+1 0 69
+
+humidity-to-location map:
+60 56 37
+56 93 4"/utf8>>,
+ <<"35"/utf8>>}],
+ fun(Example) -> _pipe@1 = day5@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"seeds: 79 14 55 13
+
+seed-to-soil map:
+50 98 2
+52 50 48
+
+soil-to-fertilizer map:
+0 15 37
+37 52 2
+39 0 15
+
+fertilizer-to-water map:
+49 53 8
+0 11 42
+42 0 7
+57 7 4
+
+water-to-light map:
+88 18 7
+18 25 70
+
+light-to-temperature map:
+45 77 23
+81 45 19
+68 64 13
+
+temperature-to-humidity map:
+0 69 1
+1 0 69
+
+humidity-to-location map:
+60 56 37
+56 93 4"/utf8>>,
+ <<"46"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"seeds: 79 14 55 13
+
+seed-to-soil map:
+50 98 2
+52 50 48
+
+soil-to-fertilizer map:
+0 15 37
+37 52 2
+39 0 15
+
+fertilizer-to-water map:
+49 53 8
+0 11 42
+42 0 7
+57 7 4
+
+water-to-light map:
+88 18 7
+18 25 70
+
+light-to-temperature map:
+45 77 23
+81 45 19
+68 64 13
+
+temperature-to-humidity map:
+0 69 1
+1 0 69
+
+humidity-to-location map:
+60 56 37
+56 93 4"/utf8>>,
+ <<"46"/utf8>>}],
+ fun(Example) -> _pipe@1 = day5@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache
new file mode 100644
index 0000000..b5e7372
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta
new file mode 100644
index 0000000..8a8b5b8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl
new file mode 100644
index 0000000..f47ab25
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day5@solve.erl
@@ -0,0 +1,269 @@
+-module(day5@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([almanac/0, mapping_range/0, seed_range/0]).
+
+-type almanac() :: {almanac, list(integer()), list(list(mapping_range()))}.
+
+-type mapping_range() :: {m_range, integer(), integer(), integer()}.
+
+-type seed_range() :: {s_range, integer(), integer()}.
+
+-spec string_to_int_list(binary()) -> list(integer()).
+string_to_int_list(Str) ->
+ _pipe = Str,
+ _pipe@1 = gleam@string:split(_pipe, <<" "/utf8>>),
+ _pipe@2 = gleam@list:map(_pipe@1, fun gleam@int:parse/1),
+ gleam@result:values(_pipe@2).
+
+-spec parse_mrange(binary()) -> mapping_range().
+parse_mrange(Str) ->
+ _assert_subject = string_to_int_list(Str),
+ [Destination, Source, Range_width] = case _assert_subject of
+ [_, _, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"parse_mrange"/utf8>>,
+ line => 55})
+ end,
+ {m_range, Source, (Source + Range_width) - 1, Destination - Source}.
+
+-spec parse_mapper(list(binary())) -> list(mapping_range()).
+parse_mapper(Strs) ->
+ [_ | Raw_ranges] = case Strs of
+ [_ | _] -> Strs;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"parse_mapper"/utf8>>,
+ line => 49})
+ end,
+ _pipe = gleam@list:map(Raw_ranges, fun parse_mrange/1),
+ gleam@list:sort(
+ _pipe,
+ fun(A, B) ->
+ gleam@int:compare(erlang:element(2, A), erlang:element(2, B))
+ end
+ ).
+
+-spec parse_input(binary()) -> almanac().
+parse_input(Input) ->
+ _assert_subject = gleam@string:split(Input, <<"\n\n"/utf8>>),
+ [<<"seeds: "/utf8, Raw_seeds/binary>> | Raw_mappers] = case _assert_subject of
+ [<<"seeds: "/utf8, _/binary>> | _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"parse_input"/utf8>>,
+ line => 29})
+ end,
+ Seeds = string_to_int_list(Raw_seeds),
+ Mappers = gleam@list:map(
+ Raw_mappers,
+ gleam@function:compose(
+ fun(_capture) -> gleam@string:split(_capture, <<"\n"/utf8>>) end,
+ fun parse_mapper/1
+ )
+ ),
+ {almanac, Seeds, Mappers}.
+
+-spec correspond(integer(), list(mapping_range())) -> integer().
+correspond(N, Mapper) ->
+ gleam@list:fold_until(
+ Mapper,
+ N,
+ fun(Acc, Mrange) ->
+ case (erlang:element(2, Mrange) =< Acc) andalso (Acc =< erlang:element(
+ 3,
+ Mrange
+ )) of
+ true ->
+ {stop, Acc + erlang:element(4, Mrange)};
+
+ false ->
+ {continue, Acc}
+ end
+ end
+ ).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ {almanac, Seeds, Mappers} = parse_input(Input),
+ _pipe = gleam@list:map(
+ Seeds,
+ fun(_capture) ->
+ gleam@list:fold(Mappers, _capture, fun correspond/2)
+ end
+ ),
+ _pipe@1 = gleam@list:reduce(_pipe, fun gleam@int:min/2),
+ _pipe@2 = gleam@result:unwrap(_pipe@1, 0),
+ gleam@string:inspect(_pipe@2).
+
+-spec transform_range(seed_range(), mapping_range()) -> seed_range().
+transform_range(R, Mapper) ->
+ {s_range,
+ erlang:element(2, R) + erlang:element(4, Mapper),
+ erlang:element(3, R) + erlang:element(4, Mapper)}.
+
+-spec do_remap_range(seed_range(), list(mapping_range()), list(seed_range())) -> list(seed_range()).
+do_remap_range(R, Mapper, Acc) ->
+ case Mapper of
+ [] ->
+ [R | Acc];
+
+ [M | _] when erlang:element(3, R) < erlang:element(2, M) ->
+ [R | Acc];
+
+ [M@1 | Ms] when erlang:element(2, R) > erlang:element(3, M@1) ->
+ do_remap_range(R, Ms, Acc);
+
+ [M@2 | _] when (erlang:element(2, R) >= erlang:element(2, M@2)) andalso (erlang:element(
+ 3,
+ R
+ ) =< erlang:element(3, M@2)) ->
+ [transform_range(R, M@2) | Acc];
+
+ [M@3 | _] when (erlang:element(2, R) < erlang:element(2, M@3)) andalso (erlang:element(
+ 3,
+ R
+ ) =< erlang:element(3, M@3)) ->
+ [{s_range, erlang:element(2, R), erlang:element(2, M@3) - 1},
+ transform_range(
+ {s_range, erlang:element(2, M@3), erlang:element(3, R)},
+ M@3
+ ) |
+ Acc];
+
+ [M@4 | Ms@1] when (erlang:element(2, R) >= erlang:element(2, M@4)) andalso (erlang:element(
+ 3,
+ R
+ ) > erlang:element(3, M@4)) ->
+ do_remap_range(
+ {s_range, erlang:element(3, M@4) + 1, erlang:element(3, R)},
+ Ms@1,
+ [transform_range(
+ {s_range, erlang:element(2, R), erlang:element(3, M@4)},
+ M@4
+ ) |
+ Acc]
+ );
+
+ [M@5 | Ms@2] ->
+ do_remap_range(
+ {s_range, erlang:element(3, M@5) + 1, erlang:element(3, R)},
+ Ms@2,
+ [{s_range, erlang:element(2, R), erlang:element(2, M@5) - 1},
+ transform_range(
+ {s_range,
+ erlang:element(2, M@5),
+ erlang:element(3, M@5)},
+ M@5
+ ) |
+ Acc]
+ )
+ end.
+
+-spec remap_range(seed_range(), list(mapping_range())) -> list(seed_range()).
+remap_range(R, Mapper) ->
+ do_remap_range(R, Mapper, []).
+
+-spec remap_all_seed_ranges(list(seed_range()), list(list(mapping_range()))) -> list(seed_range()).
+remap_all_seed_ranges(Srs, Mappers) ->
+ case Mappers of
+ [] ->
+ Srs;
+
+ [Mapper | Rest] ->
+ _pipe = gleam@list:flat_map(
+ Srs,
+ fun(_capture) -> remap_range(_capture, Mapper) end
+ ),
+ remap_all_seed_ranges(_pipe, Rest)
+ end.
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ {almanac, Seeds, Mappers} = parse_input(Input),
+ _assert_subject = begin
+ _pipe = Seeds,
+ _pipe@1 = gleam@list:sized_chunk(_pipe, 2),
+ _pipe@3 = gleam@list:map(
+ _pipe@1,
+ fun(Chunk) ->
+ [Start, Length] = case Chunk of
+ [_, _] -> Chunk;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"part2"/utf8>>,
+ line => 87})
+ end,
+ _pipe@2 = [{s_range, Start, (Start + Length) - 1}],
+ remap_all_seed_ranges(_pipe@2, Mappers)
+ end
+ ),
+ _pipe@4 = gleam@list:flatten(_pipe@3),
+ gleam@list:sort(
+ _pipe@4,
+ fun(A, B) ->
+ gleam@int:compare(erlang:element(2, A), erlang:element(2, B))
+ end
+ )
+ end,
+ [{s_range, Answer, _} | _] = case _assert_subject of
+ [{s_range, _, _} | _] -> _assert_subject;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"part2"/utf8>>,
+ line => 83})
+ end,
+ gleam@string:inspect(Answer).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 155})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"5"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day5/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 156})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache
new file mode 100644
index 0000000..ebca7b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta
new file mode 100644
index 0000000..f9fa286
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl
new file mode 100644
index 0000000..a306363
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@day6_test.erl
@@ -0,0 +1,36 @@
+-module(day6@day6_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"Time: 7 15 30
+Distance: 9 40 200"/utf8>>,
+ <<"288"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"Time: 7 15 30
+Distance: 9 40 200"/utf8>>,
+ <<"288"/utf8>>}],
+ fun(Example) -> _pipe@1 = day6@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"Time: 7 15 30
+Distance: 9 40 200"/utf8>>,
+ <<"71503"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"Time: 7 15 30
+Distance: 9 40 200"/utf8>>,
+ <<"71503"/utf8>>}],
+ fun(Example) -> _pipe@1 = day6@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache
new file mode 100644
index 0000000..2fa1771
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta
new file mode 100644
index 0000000..a546033
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl
new file mode 100644
index 0000000..86a8033
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day6@solve.erl
@@ -0,0 +1,131 @@
+-module(day6@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([race/0]).
+
+-type race() :: {race, integer(), integer()}.
+
+-spec parse_with_bad_kerning(binary()) -> list(race()).
+parse_with_bad_kerning(Input) ->
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ _pipe@5 = gleam@list:map(_pipe@1, fun(Str) -> _pipe@2 = Str,
+ _pipe@3 = gleam@string:split(_pipe@2, <<" "/utf8>>),
+ _pipe@4 = gleam@list:map(_pipe@3, fun gleam@int:parse/1),
+ gleam@result:values(_pipe@4) end),
+ _pipe@6 = gleam@list:transpose(_pipe@5),
+ gleam@list:map(
+ _pipe@6,
+ fun(Ns) ->
+ [T, D] = case Ns of
+ [_, _] -> Ns;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day6/solve"/utf8>>,
+ function => <<"parse_with_bad_kerning"/utf8>>,
+ line => 23})
+ end,
+ {race, T, D}
+ end
+ ).
+
+-spec find_bound(race(), integer(), integer()) -> integer().
+find_bound(Race, Button_time, Step) ->
+ Travel_time = erlang:element(2, Race) - Button_time,
+ case (Button_time * Travel_time) > erlang:element(3, Race) of
+ true ->
+ Button_time;
+
+ false ->
+ find_bound(Race, Button_time + Step, Step)
+ end.
+
+-spec lower_bound(race()) -> integer().
+lower_bound(Race) ->
+ find_bound(Race, 1, 1).
+
+-spec upper_bound(race()) -> integer().
+upper_bound(Race) ->
+ find_bound(Race, erlang:element(2, Race), -1).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ _pipe = (gleam@list:fold(
+ parse_with_bad_kerning(Input),
+ 1,
+ fun(Acc, Race) ->
+ Acc * ((upper_bound(Race) - lower_bound(Race)) + 1)
+ end
+ )),
+ gleam@string:inspect(_pipe).
+
+-spec parse_properly(binary()) -> list(integer()).
+parse_properly(Input) ->
+ _pipe = Input,
+ _pipe@1 = gleam@string:replace(_pipe, <<" "/utf8>>, <<""/utf8>>),
+ _pipe@2 = gleam@string:split(_pipe@1, <<"\n"/utf8>>),
+ _pipe@3 = gleam@list:flat_map(
+ _pipe@2,
+ fun(_capture) -> gleam@string:split(_capture, <<":"/utf8>>) end
+ ),
+ _pipe@4 = gleam@list:map(_pipe@3, fun gleam@int:parse/1),
+ gleam@result:values(_pipe@4).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ _assert_subject = begin
+ _pipe = Input,
+ parse_properly(_pipe)
+ end,
+ [Time, Distance] = case _assert_subject of
+ [_, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day6/solve"/utf8>>,
+ function => <<"part2"/utf8>>,
+ line => 62})
+ end,
+ Race = {race, Time, Distance},
+ _pipe@1 = (upper_bound(Race) - lower_bound(Race)) + 1,
+ gleam@string:inspect(_pipe@1).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day6/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 73})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"6"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day6/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 74})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache
new file mode 100644
index 0000000..44b76c4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta
new file mode 100644
index 0000000..416021b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl
new file mode 100644
index 0000000..917a57e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@day7_test.erl
@@ -0,0 +1,48 @@
+-module(day7@day7_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"32T3K 765
+T55J5 684
+KK677 28
+KTJJT 220
+QQQJA 483"/utf8>>,
+ <<"6440"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"32T3K 765
+T55J5 684
+KK677 28
+KTJJT 220
+QQQJA 483"/utf8>>,
+ <<"6440"/utf8>>}],
+ fun(Example) -> _pipe@1 = day7@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"32T3K 765
+T55J5 684
+KK677 28
+KTJJT 220
+QQQJA 483"/utf8>>,
+ <<"5905"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"32T3K 765
+T55J5 684
+KK677 28
+KTJJT 220
+QQQJA 483"/utf8>>,
+ <<"5905"/utf8>>}],
+ fun(Example) -> _pipe@1 = day7@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache
new file mode 100644
index 0000000..5603a95
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta
new file mode 100644
index 0000000..c381778
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl
new file mode 100644
index 0000000..7666e16
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day7@solve.erl
@@ -0,0 +1,242 @@
+-module(day7@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([hand/0]).
+
+-type hand() :: {hand, list(integer()), integer()}.
+
+-spec card_counts(hand()) -> list(integer()).
+card_counts(Hand) ->
+ _pipe = erlang:element(2, Hand),
+ _pipe@1 = gleam@list:sort(_pipe, fun gleam@int:compare/2),
+ _pipe@2 = gleam@list:chunk(_pipe@1, fun gleam@function:identity/1),
+ _pipe@3 = gleam@list:map(_pipe@2, fun gleam@list:length/1),
+ gleam@list:sort(_pipe@3, fun gleam@int:compare/2).
+
+-spec classify_hand(hand()) -> integer().
+classify_hand(Hand) ->
+ case {gleam@list:length(gleam@list:unique(erlang:element(2, Hand))),
+ card_counts(Hand)} of
+ {1, _} ->
+ 8;
+
+ {2, [1, 4]} ->
+ 7;
+
+ {2, [2, 3]} ->
+ 6;
+
+ {3, [1, 1, 3]} ->
+ 5;
+
+ {3, [1, 2, 2]} ->
+ 4;
+
+ {4, _} ->
+ 3;
+
+ {5, _} ->
+ 2;
+
+ {_, _} ->
+ 1
+ end.
+
+-spec card_rank(binary()) -> integer().
+card_rank(Card) ->
+ case {gleam@int:parse(Card), Card} of
+ {{ok, N}, _} ->
+ N;
+
+ {_, <<"A"/utf8>>} ->
+ 14;
+
+ {_, <<"K"/utf8>>} ->
+ 13;
+
+ {_, <<"Q"/utf8>>} ->
+ 12;
+
+ {_, <<"J"/utf8>>} ->
+ 11;
+
+ {_, <<"T"/utf8>>} ->
+ 10;
+
+ {_, _} ->
+ 1
+ end.
+
+-spec parse_hand(binary()) -> hand().
+parse_hand(Str) ->
+ _assert_subject = gleam@string:split(Str, <<" "/utf8>>),
+ [Cards, Wager] = case _assert_subject of
+ [_, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day7/solve"/utf8>>,
+ function => <<"parse_hand"/utf8>>,
+ line => 19})
+ end,
+ Cards@1 = begin
+ _pipe = gleam@string:to_graphemes(Cards),
+ gleam@list:map(_pipe, fun card_rank/1)
+ end,
+ _assert_subject@1 = gleam@int:parse(Wager),
+ {ok, Wager@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day7/solve"/utf8>>,
+ function => <<"parse_hand"/utf8>>,
+ line => 23})
+ end,
+ {hand, Cards@1, Wager@1}.
+
+-spec compare_top_card(list(integer()), list(integer())) -> gleam@order:order().
+compare_top_card(Cards1, Cards2) ->
+ gleam@bool:guard(
+ (Cards1 =:= []) orelse (Cards2 =:= []),
+ eq,
+ fun() ->
+ [C1 | Rest1] = case Cards1 of
+ [_ | _] -> Cards1;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day7/solve"/utf8>>,
+ function => <<"compare_top_card"/utf8>>,
+ line => 70})
+ end,
+ [C2 | Rest2] = case Cards2 of
+ [_ | _] -> Cards2;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day7/solve"/utf8>>,
+ function => <<"compare_top_card"/utf8>>,
+ line => 71})
+ end,
+ case gleam@int:compare(C1, C2) of
+ eq ->
+ compare_top_card(Rest1, Rest2);
+
+ Other ->
+ Other
+ end
+ end
+ ).
+
+-spec compare_hands(hand(), hand(), fun((hand()) -> integer())) -> gleam@order:order().
+compare_hands(Hand1, Hand2, Using) ->
+ case gleam@int:compare(Using(Hand1), Using(Hand2)) of
+ eq ->
+ compare_top_card(erlang:element(2, Hand1), erlang:element(2, Hand2));
+
+ Other ->
+ Other
+ end.
+
+-spec part(binary(), fun((hand(), hand()) -> gleam@order:order())) -> binary().
+part(Input, Comparator) ->
+ _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ _pipe@2 = gleam@list:map(_pipe@1, fun parse_hand/1),
+ _pipe@3 = gleam@list:sort(_pipe@2, Comparator),
+ _pipe@4 = gleam@list:index_map(
+ _pipe@3,
+ fun(I, H) -> (I + 1) * erlang:element(3, H) end
+ ),
+ _pipe@5 = gleam@int:sum(_pipe@4),
+ gleam@string:inspect(_pipe@5).
+
+-spec compare_without_wilds(hand(), hand()) -> gleam@order:order().
+compare_without_wilds(Hand1, Hand2) ->
+ compare_hands(Hand1, Hand2, fun classify_hand/1).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ part(Input, fun compare_without_wilds/2).
+
+-spec find_best_joker_substitution(hand()) -> hand().
+find_best_joker_substitution(Hand) ->
+ gleam@list:fold(
+ gleam@list:range(2, 14),
+ {hand, [], 0},
+ fun(Acc, Card) ->
+ Subbed_cards = (gleam@list:map(
+ erlang:element(2, Hand),
+ fun(C) -> case C of
+ 1 ->
+ Card;
+
+ Other ->
+ Other
+ end end
+ )),
+ Subbed_hand = erlang:setelement(2, Hand, Subbed_cards),
+ case compare_hands(Acc, Subbed_hand, fun classify_hand/1) of
+ lt ->
+ Subbed_hand;
+
+ _ ->
+ Acc
+ end
+ end
+ ).
+
+-spec compare_hands_considering_jokers(hand(), hand()) -> gleam@order:order().
+compare_hands_considering_jokers(Hand1, Hand2) ->
+ compare_hands(Hand1, Hand2, fun(Hand) -> _pipe = Hand,
+ _pipe@1 = find_best_joker_substitution(_pipe),
+ classify_hand(_pipe@1) end).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ part(
+ gleam@string:replace(Input, <<"J"/utf8>>, <<"*"/utf8>>),
+ fun compare_hands_considering_jokers/2
+ ).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day7/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 128})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"7"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day7/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 129})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache
new file mode 100644
index 0000000..9a04fc8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta
new file mode 100644
index 0000000..ec825d2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl
new file mode 100644
index 0000000..2da8521
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@day8_test.erl
@@ -0,0 +1,58 @@
+-module(day8@day8_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"LLR
+
+AAA = (BBB, BBB)
+BBB = (AAA, ZZZ)
+ZZZ = (ZZZ, ZZZ)"/utf8>>,
+ 6}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"LLR
+
+AAA = (BBB, BBB)
+BBB = (AAA, ZZZ)
+ZZZ = (ZZZ, ZZZ)"/utf8>>,
+ 6}],
+ fun(Example) -> _pipe@1 = day8@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"LR
+
+11A = (11B, XXX)
+11B = (XXX, 11Z)
+11Z = (11B, XXX)
+22A = (22B, XXX)
+22B = (22C, 22C)
+22C = (22Z, 22Z)
+22Z = (22B, 22B)
+XXX = (XXX, XXX)"/utf8>>,
+ 6}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"LR
+
+11A = (11B, XXX)
+11B = (XXX, 11Z)
+11Z = (11B, XXX)
+22A = (22B, XXX)
+22B = (22C, 22C)
+22C = (22Z, 22Z)
+22Z = (22B, 22B)
+XXX = (XXX, XXX)"/utf8>>,
+ 6}],
+ fun(Example) -> _pipe@1 = day8@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache
new file mode 100644
index 0000000..34f5889
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta
new file mode 100644
index 0000000..b8df5b2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl
new file mode 100644
index 0000000..6ac3b18
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day8@solve.erl
@@ -0,0 +1,179 @@
+-module(day8@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+-export_type([paths/0]).
+
+-type paths() :: {paths, binary(), binary()}.
+
+-spec parse(binary()) -> {gleam@iterator:iterator(binary()),
+ gleam@dict:dict(binary(), paths())}.
+parse(Input) ->
+ _assert_subject = gleam@string:split(Input, <<"\n\n"/utf8>>),
+ [Directions_str, Maze_str] = case _assert_subject of
+ [_, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 20})
+ end,
+ Directions = begin
+ _pipe = Directions_str,
+ _pipe@1 = gleam@string:to_graphemes(_pipe),
+ _pipe@2 = gleam@iterator:from_list(_pipe@1),
+ gleam@iterator:cycle(_pipe@2)
+ end,
+ _assert_subject@1 = gleam@regex:from_string(
+ <<"(...) = \\((...), (...)\\)"/utf8>>
+ ),
+ {ok, Re} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 28})
+ end,
+ Maze = begin
+ _pipe@3 = Maze_str,
+ _pipe@4 = gleam@string:split(_pipe@3, <<"\n"/utf8>>),
+ _pipe@5 = gleam@list:map(
+ _pipe@4,
+ fun(Str) ->
+ _assert_subject@2 = gleam@regex:scan(Re, Str),
+ [{match, _, [{some, Name}, {some, Left}, {some, Right}]}] = case _assert_subject@2 of
+ [{match, _, [{some, _}, {some, _}, {some, _}]}] -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 33})
+ end,
+ {Name, {paths, Left, Right}}
+ end
+ ),
+ gleam@dict:from_list(_pipe@5)
+ end,
+ {Directions, Maze}.
+
+-spec to_next_step(
+ binary(),
+ binary(),
+ integer(),
+ gleam@iterator:iterator(binary()),
+ gleam@dict:dict(binary(), paths())
+) -> integer().
+to_next_step(Current, Stop_at, Count, Directions, Maze) ->
+ gleam@bool:guard(
+ gleam@string:ends_with(Current, Stop_at),
+ Count,
+ fun() ->
+ _assert_subject = gleam@iterator:step(Directions),
+ {next, Next_direction, Rest_directions} = case _assert_subject of
+ {next, _, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"to_next_step"/utf8>>,
+ line => 50})
+ end,
+ _assert_subject@1 = gleam@dict:get(Maze, Current),
+ {ok, Paths} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"to_next_step"/utf8>>,
+ line => 51})
+ end,
+ _pipe = case Next_direction of
+ <<"L"/utf8>> ->
+ erlang:element(2, Paths);
+
+ <<"R"/utf8>> ->
+ erlang:element(3, Paths);
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"bad direction"/utf8>>,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"to_next_step"/utf8>>,
+ line => 55})
+ end,
+ to_next_step(_pipe, Stop_at, Count + 1, Rest_directions, Maze)
+ end
+ ).
+
+-spec part1(binary()) -> integer().
+part1(Input) ->
+ {Directions, Maze} = parse(Input),
+ to_next_step(<<"AAA"/utf8>>, <<"ZZZ"/utf8>>, 0, Directions, Maze).
+
+-spec part2(binary()) -> integer().
+part2(Input) ->
+ {Directions, Maze} = parse(Input),
+ gleam@list:fold(
+ gleam@dict:keys(Maze),
+ 1,
+ fun(Acc, Name) -> case gleam@string:ends_with(Name, <<"A"/utf8>>) of
+ false ->
+ Acc;
+
+ true ->
+ _pipe = to_next_step(
+ Name,
+ <<"Z"/utf8>>,
+ 0,
+ Directions,
+ Maze
+ ),
+ gleam_community@maths@arithmetics:lcm(_pipe, Acc)
+ end end
+ ).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 79})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"8"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day8/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 80})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache
new file mode 100644
index 0000000..dac9de5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta
new file mode 100644
index 0000000..8e61830
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl
new file mode 100644
index 0000000..da0f25e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@day9_test.erl
@@ -0,0 +1,40 @@
+-module(day9@day9_test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1_test/0, part2_test/0]).
+
+-spec part1_test() -> list(nil).
+part1_test() ->
+ _pipe = [{example,
+ <<"0 3 6 9 12 15
+1 3 6 10 15 21
+10 13 16 21 30 45"/utf8>>,
+ <<"114"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"0 3 6 9 12 15
+1 3 6 10 15 21
+10 13 16 21 30 45"/utf8>>,
+ <<"114"/utf8>>}],
+ fun(Example) -> _pipe@1 = day9@solve:part1(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
+
+-spec part2_test() -> list(nil).
+part2_test() ->
+ _pipe = [{example,
+ <<"0 3 6 9 12 15
+1 3 6 10 15 21
+10 13 16 21 30 45"/utf8>>,
+ <<"2"/utf8>>}],
+ showtime@tests@should:not_equal(_pipe, []),
+ gleam@list:map(
+ [{example,
+ <<"0 3 6 9 12 15
+1 3 6 10 15 21
+10 13 16 21 30 45"/utf8>>,
+ <<"2"/utf8>>}],
+ fun(Example) -> _pipe@1 = day9@solve:part2(erlang:element(2, Example)),
+ showtime@tests@should:equal(_pipe@1, erlang:element(3, Example)) end
+ ).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache
new file mode 100644
index 0000000..d5b2b24
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta
new file mode 100644
index 0000000..7378356
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl
new file mode 100644
index 0000000..8bef41b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/day9@solve.erl
@@ -0,0 +1,133 @@
+-module(day9@solve).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([part1/1, part2/1, main/0]).
+
+-spec maybe_backwards(list(QXJ), boolean()) -> list(QXJ).
+maybe_backwards(Xs, Backwards) ->
+ case Backwards of
+ false ->
+ gleam@list:reverse(Xs);
+
+ true ->
+ Xs
+ end.
+
+-spec parse(binary(), boolean()) -> list(list(integer())).
+parse(Input, Backwards) ->
+ gleam@list:map(
+ gleam@string:split(Input, <<"\n"/utf8>>),
+ fun(Line) ->
+ gleam@list:map(
+ maybe_backwards(
+ gleam@string:split(Line, <<" "/utf8>>),
+ Backwards
+ ),
+ fun(N_str) ->
+ _assert_subject = gleam@int:parse(N_str),
+ {ok, N} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day9/solve"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 10})
+ end,
+ N
+ end
+ )
+ end
+ ).
+
+-spec is_constant(list(integer())) -> boolean().
+is_constant(Ns) ->
+ case gleam@list:unique(Ns) of
+ [_] ->
+ true;
+
+ _ ->
+ false
+ end.
+
+-spec take_derivative(list(integer())) -> list(integer()).
+take_derivative(Ns) ->
+ _pipe = Ns,
+ _pipe@1 = gleam@list:window_by_2(_pipe),
+ gleam@list:map(
+ _pipe@1,
+ fun(Tup) -> erlang:element(1, Tup) - erlang:element(2, Tup) end
+ ).
+
+-spec extrapolate(list(integer())) -> integer().
+extrapolate(Ns) ->
+ case {is_constant(Ns), Ns} of
+ {true, [N | _]} ->
+ N;
+
+ {false, [N@1 | _]} ->
+ N@1 + extrapolate(take_derivative(Ns));
+
+ {_, _} ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"list empty when it shouldn't be"/utf8>>,
+ module => <<"day9/solve"/utf8>>,
+ function => <<"extrapolate"/utf8>>,
+ line => 38})
+ end.
+
+-spec part(binary(), boolean()) -> binary().
+part(Input, Backwards) ->
+ _pipe = Input,
+ _pipe@1 = parse(_pipe, Backwards),
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ 0,
+ fun(Acc, Ns) -> extrapolate(Ns) + Acc end
+ ),
+ gleam@string:inspect(_pipe@2).
+
+-spec part1(binary()) -> binary().
+part1(Input) ->
+ part(Input, false).
+
+-spec part2(binary()) -> binary().
+part2(Input) ->
+ part(Input, true).
+
+-spec main() -> nil.
+main() ->
+ _assert_subject = adglent:get_part(),
+ {ok, Part} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"day9/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 58})
+ end,
+ _assert_subject@1 = adglent:get_input(<<"9"/utf8>>),
+ {ok, Input} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"day9/solve"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 59})
+ end,
+ case Part of
+ first ->
+ _pipe = part1(Input),
+ _pipe@1 = adglent:inspect(_pipe),
+ gleam@io:println(_pipe@1);
+
+ second ->
+ _pipe@2 = part2(Input),
+ _pipe@3 = adglent:inspect(_pipe@2),
+ gleam@io:println(_pipe@3)
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache
new file mode 100644
index 0000000..c060355
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta
new file mode 100644
index 0000000..0e78598
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl
new file mode 100644
index 0000000..8e6753e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@array2d.erl
@@ -0,0 +1,64 @@
+-module(utilities@array2d).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([add_posns/2, to_2d_array/1, to_2d_intarray/1, to_list_of_lists/1, parse_grid/1]).
+-export_type([posn/0]).
+
+-type posn() :: {posn, integer(), integer()}.
+
+-spec add_posns(posn(), posn()) -> posn().
+add_posns(P1, P2) ->
+ case {P1, P2} of
+ {{posn, R1, C1}, {posn, R2, C2}} ->
+ {posn, R1 + R2, C1 + C2}
+ end.
+
+-spec to_2d_array(list(list(BDY))) -> gleam@dict:dict(posn(), BDY).
+to_2d_array(Xss) ->
+ _pipe = (gleam@list:index_map(
+ Xss,
+ fun(R, Row) ->
+ gleam@list:index_map(Row, fun(C, Cell) -> {{posn, R, C}, Cell} end)
+ end
+ )),
+ _pipe@1 = gleam@list:flatten(_pipe),
+ gleam@dict:from_list(_pipe@1).
+
+-spec to_2d_intarray(list(list(binary()))) -> gleam@dict:dict(posn(), integer()).
+to_2d_intarray(Xss) ->
+ _pipe = (gleam@list:index_map(
+ Xss,
+ fun(R, Row) ->
+ gleam@list:index_map(
+ Row,
+ fun(C, Cell) ->
+ _assert_subject = gleam@int:parse(Cell),
+ {ok, N} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"utilities/array2d"/utf8>>,
+ function => <<"to_2d_intarray"/utf8>>,
+ line => 33})
+ end,
+ {{posn, R, C}, N}
+ end
+ )
+ end
+ )),
+ _pipe@1 = gleam@list:flatten(_pipe),
+ gleam@dict:from_list(_pipe@1).
+
+-spec to_list_of_lists(binary()) -> list(list(binary())).
+to_list_of_lists(Str) ->
+ _pipe = Str,
+ _pipe@1 = gleam@string:split(_pipe, <<"\n"/utf8>>),
+ gleam@list:map(_pipe@1, fun gleam@string:to_graphemes/1).
+
+-spec parse_grid(binary()) -> gleam@dict:dict(posn(), binary()).
+parse_grid(Str) ->
+ _pipe = Str,
+ _pipe@1 = to_list_of_lists(_pipe),
+ to_2d_array(_pipe@1).
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache
new file mode 100644
index 0000000..f8e9862
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta
new file mode 100644
index 0000000..9452d09
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl
new file mode 100644
index 0000000..2c7b126
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@memo.erl
@@ -0,0 +1,70 @@
+-module(utilities@memo).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([create/1, set/3, get/2, memoize/3]).
+-export_type([message/2, cache/2]).
+
+-type message(BEO, BEP) :: shutdown |
+ {get, BEO, gleam@erlang@process:subject({ok, BEP} | {error, nil})} |
+ {set, BEO, BEP}.
+
+-opaque cache(BEQ, BER) :: {cache,
+ gleam@erlang@process:subject(message(BEQ, BER))}.
+
+-spec handle_message(message(BEX, BEY), gleam@dict:dict(BEX, BEY)) -> gleam@otp@actor:next(message(BEX, BEY), gleam@dict:dict(BEX, BEY)).
+handle_message(Message, Dict) ->
+ case Message of
+ shutdown ->
+ {stop, normal};
+
+ {get, Key, Client} ->
+ gleam@erlang@process:send(Client, gleam@dict:get(Dict, Key)),
+ {continue, Dict, none};
+
+ {set, Key@1, Value} ->
+ {continue, gleam@dict:insert(Dict, Key@1, Value), none}
+ end.
+
+-spec create(fun((cache(any(), any())) -> BFN)) -> BFN.
+create(Fun) ->
+ _assert_subject = gleam@otp@actor:start(
+ gleam@dict:new(),
+ fun handle_message/2
+ ),
+ {ok, Server} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"utilities/memo"/utf8>>,
+ function => <<"create"/utf8>>,
+ line => 36})
+ end,
+ Result = Fun({cache, Server}),
+ gleam@erlang@process:send(Server, shutdown),
+ Result.
+
+-spec set(cache(BFO, BFP), BFO, BFP) -> nil.
+set(Cache, Key, Value) ->
+ gleam@erlang@process:send(erlang:element(2, Cache), {set, Key, Value}).
+
+-spec get(cache(BFS, BFT), BFS) -> {ok, BFT} | {error, nil}.
+get(Cache, Key) ->
+ gleam@erlang@process:call(
+ erlang:element(2, Cache),
+ fun(C) -> {get, Key, C} end,
+ 1000
+ ).
+
+-spec memoize(cache(BFY, BFZ), BFY, fun(() -> BFZ)) -> BFZ.
+memoize(Cache, Key, Fun) ->
+ Result = case get(Cache, Key) of
+ {ok, Value} ->
+ Value;
+
+ {error, nil} ->
+ Fun()
+ end,
+ set(Cache, Key, Result),
+ Result.
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache
new file mode 100644
index 0000000..c9c4130
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta
new file mode 100644
index 0000000..274b278
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl
new file mode 100644
index 0000000..e97eff6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.erl
@@ -0,0 +1,60 @@
+-module(utilities@prioqueue).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, insert/3, pop/1]).
+-export_type([ref/0, p_queue/1, priority_queue/1, out_result/1]).
+
+-type ref() :: any().
+
+-type p_queue(BBO) :: any() | {gleam_phantom, BBO}.
+
+-opaque priority_queue(BBP) :: {priority_queue,
+ p_queue({BBP, ref()}),
+ gleam@dict:dict(BBP, ref())}.
+
+-type out_result(BBQ) :: empty | {value, BBQ, integer()}.
+
+-spec new() -> priority_queue(any()).
+new() ->
+ {priority_queue, pqueue2:new(), gleam@dict:new()}.
+
+-spec insert(priority_queue(BCC), BCC, integer()) -> priority_queue(BCC).
+insert(Queue, Value, Priority) ->
+ Ref = erlang:make_ref(),
+ Refs = begin
+ _pipe = erlang:element(3, Queue),
+ gleam@dict:insert(_pipe, Value, Ref)
+ end,
+ {priority_queue,
+ pqueue2:in({Value, Ref}, Priority, erlang:element(2, Queue)),
+ Refs}.
+
+-spec pop(priority_queue(BCF)) -> {ok, {BCF, priority_queue(BCF)}} |
+ {error, nil}.
+pop(Queue) ->
+ case pqueue2:pout(erlang:element(2, Queue)) of
+ {{value, {Value, Ref}, _}, Pqueue} ->
+ _assert_subject = gleam@dict:get(erlang:element(3, Queue), Value),
+ {ok, Recently_enqueued_ref} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"utilities/prioqueue"/utf8>>,
+ function => <<"pop"/utf8>>,
+ line => 52})
+ end,
+ case Recently_enqueued_ref =:= Ref of
+ true ->
+ {ok,
+ {Value,
+ {priority_queue, Pqueue, erlang:element(3, Queue)}}};
+
+ false ->
+ pop({priority_queue, Pqueue, erlang:element(3, Queue)})
+ end;
+
+ {empty, _} ->
+ {error, nil}
+ end.
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app
new file mode 100644
index 0000000..1d9ebe0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.app
@@ -0,0 +1,15 @@
+{application, aoc2023, [
+ {vsn, "0.1.0"},
+ {applications, [adglent,
+ gleam_community_maths,
+ gleam_erlang,
+ gleam_otp,
+ gleam_stdlib,
+ gleeunit,
+ pqueue,
+ simplifile]},
+ {description, ""},
+ {modules, [day20@day20_test,
+ day20@solve]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beam
new file mode 100644
index 0000000..5ef8b6b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beam
new file mode 100644
index 0000000..c4d93c5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023@@main.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beam
new file mode 100644
index 0000000..a77846a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/aoc2023_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beam
new file mode 100644
index 0000000..30b4854
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@day10_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beam
new file mode 100644
index 0000000..d9c6ff3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day10@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beam
new file mode 100644
index 0000000..dac7343
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@day11_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beam
new file mode 100644
index 0000000..ed49a37
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day11@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beam
new file mode 100644
index 0000000..513d1a9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@day12_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beam
new file mode 100644
index 0000000..21f1e8b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day12@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beam
new file mode 100644
index 0000000..67e62de
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@day13_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beam
new file mode 100644
index 0000000..a9eb3a5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day13@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beam
new file mode 100644
index 0000000..5a6c67e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@day14_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beam
new file mode 100644
index 0000000..8db7efd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day14@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beam
new file mode 100644
index 0000000..f8e4a5f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@day15_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beam
new file mode 100644
index 0000000..2bf8472
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day15@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beam
new file mode 100644
index 0000000..091829f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@day16_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beam
new file mode 100644
index 0000000..78a3f8c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day16@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beam
new file mode 100644
index 0000000..5624a2f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@day17_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beam
new file mode 100644
index 0000000..ca194b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day17@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beam
new file mode 100644
index 0000000..2f9a32a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@day18_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beam
new file mode 100644
index 0000000..326ca15
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day18@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beam
new file mode 100644
index 0000000..f5cc6c3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@day19_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beam
new file mode 100644
index 0000000..7ea70a3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day19@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beam
new file mode 100644
index 0000000..c01f17e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@day1_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beam
new file mode 100644
index 0000000..d2decc9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day1@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beam
new file mode 100644
index 0000000..5bb689f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@day20_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beam
new file mode 100644
index 0000000..2a7a3b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day20@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beam
new file mode 100644
index 0000000..f10ea16
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@day2_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beam
new file mode 100644
index 0000000..19a27da
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day2@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beam
new file mode 100644
index 0000000..a082170
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@day3_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beam
new file mode 100644
index 0000000..803c647
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day3@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beam
new file mode 100644
index 0000000..35f5046
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@day4_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beam
new file mode 100644
index 0000000..3278158
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day4@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beam
new file mode 100644
index 0000000..b03baf2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@day5_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beam
new file mode 100644
index 0000000..67980d7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day5@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beam
new file mode 100644
index 0000000..5d8c4d4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@day6_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beam
new file mode 100644
index 0000000..8d47586
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day6@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beam
new file mode 100644
index 0000000..ae993b1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@day7_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beam
new file mode 100644
index 0000000..54ef711
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day7@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beam
new file mode 100644
index 0000000..e8adca4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@day8_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beam
new file mode 100644
index 0000000..c208dac
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day8@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beam
new file mode 100644
index 0000000..fac9c16
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@day9_test.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beam
new file mode 100644
index 0000000..0f48b99
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/day9@solve.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beam
new file mode 100644
index 0000000..d30c73d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@array2d.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beam
new file mode 100644
index 0000000..3bba319
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@memo.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beam b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beam
new file mode 100644
index 0000000..8cd709b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/ebin/utilities@prioqueue.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl
new file mode 100644
index 0000000..7babf61
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/day2@solve_Game.hrl
@@ -0,0 +1 @@
+-record(game, {red :: integer(), blue :: integer(), green :: integer()}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl
new file mode 100644
index 0000000..5c3086c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_Almanac.hrl
@@ -0,0 +1,4 @@
+-record(almanac, {
+ seeds :: list(integer()),
+ mappers :: list(list(day5@solve:mapping_range()))
+}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl
new file mode 100644
index 0000000..999313f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_MRange.hrl
@@ -0,0 +1 @@
+-record(m_range, {start :: integer(), 'end' :: integer(), offset :: integer()}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl
new file mode 100644
index 0000000..56c67cd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/day5@solve_SRange.hrl
@@ -0,0 +1 @@
+-record(s_range, {start :: integer(), 'end' :: integer()}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl b/aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl
new file mode 100644
index 0000000..94da3d5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/utilities@array2d_Posn.hrl
@@ -0,0 +1 @@
+-record(posn, {r :: integer(), c :: integer()}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl b/aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl
new file mode 100644
index 0000000..941b746
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/utilities@memo_Cache.hrl
@@ -0,0 +1,3 @@
+-record(cache, {
+ server :: gleam@erlang@process:subject(utilities@memo:message(any(), any()))
+}).
diff --git a/aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl b/aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl
new file mode 100644
index 0000000..0e12dca
--- /dev/null
+++ b/aoc2023/build/dev/erlang/aoc2023/include/utilities@prioqueue_PriorityQueue.hrl
@@ -0,0 +1,4 @@
+-record(priority_queue, {
+ queue :: utilities@prioqueue:p_queue({any(), utilities@prioqueue:ref()}),
+ refs :: gleam@dict:dict(any(), utilities@prioqueue:ref())
+}).
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache
new file mode 100644
index 0000000..5e9f51b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_meta
new file mode 100644
index 0000000..3a247a0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl
new file mode 100644
index 0000000..f28094b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap.erl
@@ -0,0 +1,538 @@
+-module(gap).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_styled/1, compare_strings_with_algorithm/3, compare_lists_with_algorithm/3, myers/2, compare_lists/2, compare_strings/2, lcs/2]).
+-export_type([score/1]).
+
+-type score(GBX) :: {score, integer(), gleam@option:option(GBX)}.
+
+-spec to_styled(gap@comparison:comparison(any())) -> gap@styled_comparison:styled_comparison().
+to_styled(Comparison) ->
+ _pipe = Comparison,
+ _pipe@1 = gap@styling:from_comparison(_pipe),
+ _pipe@2 = gap@styling:highlight(
+ _pipe@1,
+ fun gap@styling:first_highlight_default/1,
+ fun gap@styling:second_highlight_default/1,
+ fun gap@styling:no_highlight/1
+ ),
+ gap@styling:to_styled_comparison(_pipe@2).
+
+-spec compare_strings_with_algorithm(
+ binary(),
+ binary(),
+ fun((list(binary()), list(binary())) -> gap@comparison:comparison(binary()))
+) -> gap@comparison:comparison(binary()).
+compare_strings_with_algorithm(First, Second, Algorithm) ->
+ Comparison = Algorithm(
+ gleam@string:to_graphemes(First),
+ gleam@string:to_graphemes(Second)
+ ),
+ case Comparison of
+ {list_comparison, First@1, Second@1} ->
+ {string_comparison, First@1, Second@1};
+
+ {string_comparison, First@2, Second@2} ->
+ {string_comparison, First@2, Second@2}
+ end.
+
+-spec compare_lists_with_algorithm(
+ list(GCM),
+ list(GCM),
+ fun((list(GCM), list(GCM)) -> gap@comparison:comparison(GCM))
+) -> gap@comparison:comparison(GCM).
+compare_lists_with_algorithm(First_sequence, Second_sequence, Algorithm) ->
+ Algorithm(First_sequence, Second_sequence).
+
+-spec myers(list(GCR), list(GCR)) -> gap@comparison:comparison(GCR).
+myers(First_sequence, Second_sequence) ->
+ Edits = gap@myers:difference(First_sequence, Second_sequence),
+ _pipe = Edits,
+ _pipe@1 = gleam@list:reverse(_pipe),
+ gleam@list:fold(
+ _pipe@1,
+ {list_comparison, [], []},
+ fun(Comparison, Edit) -> case Comparison of
+ {list_comparison, First, Second} ->
+ case Edit of
+ {eq, Segment} ->
+ {list_comparison,
+ [{match, Segment} | First],
+ [{match, Segment} | Second]};
+
+ {ins, Segment@1} ->
+ {list_comparison,
+ First,
+ [{no_match, Segment@1} | Second]};
+
+ {del, Segment@2} ->
+ {list_comparison,
+ [{no_match, Segment@2} | First],
+ Second}
+ end;
+
+ {string_comparison, _, _} ->
+ Comparison
+ end end
+ ).
+
+-spec compare_lists(list(GCI), list(GCI)) -> gap@comparison:comparison(GCI).
+compare_lists(First_sequence, Second_sequence) ->
+ myers(First_sequence, Second_sequence).
+
+-spec compare_strings(binary(), binary()) -> gap@comparison:comparison(binary()).
+compare_strings(First, Second) ->
+ Comparison = compare_lists(
+ gleam@string:to_graphemes(First),
+ gleam@string:to_graphemes(Second)
+ ),
+ case Comparison of
+ {list_comparison, First@1, Second@1} ->
+ {string_comparison, First@1, Second@1};
+
+ {string_comparison, First@2, Second@2} ->
+ {string_comparison, First@2, Second@2}
+ end.
+
+-spec prepend_and_merge(
+ list(gap@comparison:match(list(GCZ))),
+ gap@comparison:match(list(GCZ))
+) -> list(gap@comparison:match(list(GCZ))).
+prepend_and_merge(Matches, Match) ->
+ case {Matches, Match} of
+ {[], _} ->
+ [Match];
+
+ {[{match, First_match} | Rest], {match, _}} ->
+ [{match,
+ begin
+ _pipe = erlang:element(2, Match),
+ gleam@list:append(_pipe, First_match)
+ end} |
+ Rest];
+
+ {[{no_match, First_match@1} | Rest@1], {no_match, _}} ->
+ [{no_match,
+ begin
+ _pipe@1 = erlang:element(2, Match),
+ gleam@list:append(_pipe@1, First_match@1)
+ end} |
+ Rest@1];
+
+ {Matches@1, Match@1} ->
+ [Match@1 | Matches@1]
+ end.
+
+-spec append_and_merge(
+ list(gap@comparison:match(list(GDI))),
+ gap@comparison:match(list(GDI))
+) -> list(gap@comparison:match(list(GDI))).
+append_and_merge(Matches, Match) ->
+ _pipe@3 = case {begin
+ _pipe = Matches,
+ gleam@list:reverse(_pipe)
+ end,
+ Match} of
+ {[], _} ->
+ [Match];
+
+ {[{match, First_match} | Rest], {match, _}} ->
+ [{match,
+ begin
+ _pipe@1 = First_match,
+ gleam@list:append(_pipe@1, erlang:element(2, Match))
+ end} |
+ Rest];
+
+ {[{no_match, First_match@1} | Rest@1], {no_match, _}} ->
+ [{no_match,
+ begin
+ _pipe@2 = First_match@1,
+ gleam@list:append(_pipe@2, erlang:element(2, Match))
+ end} |
+ Rest@1];
+
+ {Matches@1, Match@1} ->
+ [Match@1 | Matches@1]
+ end,
+ gleam@list:reverse(_pipe@3).
+
+-spec collect_matches(
+ gleam@dict:dict(GHJ, any()),
+ list(GDS),
+ fun((GHJ) -> integer())
+) -> list(gap@comparison:match(list(GDS))).
+collect_matches(Tracking, Str, Extract_fun) ->
+ Matching_indexes = begin
+ _pipe = gleam@map:keys(Tracking),
+ _pipe@1 = gleam@list:map(_pipe, Extract_fun),
+ gleam@set:from_list(_pipe@1)
+ end,
+ Matches = begin
+ _pipe@2 = Str,
+ gleam@list:index_map(
+ _pipe@2,
+ fun(Index, Item) ->
+ case gleam@set:contains(Matching_indexes, Index) of
+ true ->
+ {match, Item};
+
+ false ->
+ {no_match, Item}
+ end
+ end
+ )
+ end,
+ _pipe@3 = Matches,
+ _pipe@4 = gleam@list:chunk(_pipe@3, fun(Match) -> case Match of
+ {match, _} ->
+ true;
+
+ {no_match, _} ->
+ false
+ end end),
+ gleam@list:map(_pipe@4, fun(Match_list) -> case Match_list of
+ [{match, _} | _] ->
+ {match,
+ gleam@list:filter_map(
+ Match_list,
+ fun(Match@1) -> case Match@1 of
+ {match, Item@1} ->
+ {ok, Item@1};
+
+ {no_match, _} ->
+ {error, nil}
+ end end
+ )};
+
+ [{no_match, _} | _] ->
+ {no_match,
+ gleam@list:filter_map(
+ Match_list,
+ fun(Match@2) -> case Match@2 of
+ {no_match, Item@2} ->
+ {ok, Item@2};
+
+ {match, _} ->
+ {error, nil}
+ end end
+ )}
+ end end).
+
+-spec back_track(
+ gleam@dict:dict({integer(), integer()}, score(GDW)),
+ integer(),
+ integer(),
+ list({{integer(), integer()}, GDW})
+) -> list({{integer(), integer()}, GDW}).
+back_track(Diff_map, First_index, Second_index, Stack) ->
+ case (First_index =:= 0) orelse (Second_index =:= 0) of
+ true ->
+ This_score = begin
+ _pipe = gleam@map:get(Diff_map, {First_index, Second_index}),
+ gleam@result:unwrap(_pipe, {score, 0, none})
+ end,
+ case This_score of
+ {score, _, {some, Item}} ->
+ [{{First_index, Second_index}, Item} | Stack];
+
+ _ ->
+ case {First_index, Second_index} of
+ {0, A} when A > 0 ->
+ back_track(
+ Diff_map,
+ First_index,
+ Second_index - 1,
+ Stack
+ );
+
+ {A@1, 0} when A@1 > 0 ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ );
+
+ {0, 0} ->
+ Stack;
+
+ {_, _} ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ )
+ end
+ end;
+
+ false ->
+ This_score@1 = begin
+ _pipe@1 = gleam@map:get(Diff_map, {First_index, Second_index}),
+ gleam@result:unwrap(_pipe@1, {score, 0, none})
+ end,
+ case This_score@1 of
+ {score, _, {some, Item@1}} ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index - 1,
+ [{{First_index, Second_index}, Item@1} | Stack]
+ );
+
+ {score, _, none} ->
+ Up = begin
+ _pipe@2 = gleam@map:get(
+ Diff_map,
+ {First_index, Second_index - 1}
+ ),
+ gleam@result:unwrap(_pipe@2, {score, 0, none})
+ end,
+ Back = begin
+ _pipe@3 = gleam@map:get(
+ Diff_map,
+ {First_index - 1, Second_index}
+ ),
+ gleam@result:unwrap(_pipe@3, {score, 0, none})
+ end,
+ case gleam@int:compare(
+ erlang:element(2, Up),
+ erlang:element(2, Back)
+ ) of
+ gt ->
+ back_track(
+ Diff_map,
+ First_index,
+ Second_index - 1,
+ Stack
+ );
+
+ lt ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ );
+
+ eq ->
+ case {First_index, Second_index} of
+ {0, A@2} when A@2 > 0 ->
+ back_track(
+ Diff_map,
+ First_index,
+ Second_index - 1,
+ Stack
+ );
+
+ {A@3, 0} when A@3 > 0 ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ );
+
+ {0, 0} ->
+ Stack;
+
+ {_, _} ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ )
+ end
+ end
+ end
+ end.
+
+-spec build_diff_map(
+ GEC,
+ integer(),
+ GEC,
+ integer(),
+ gleam@dict:dict({integer(), integer()}, score(GEC))
+) -> gleam@dict:dict({integer(), integer()}, score(GEC)).
+build_diff_map(First_item, First_index, Second_item, Second_index, Diff_map) ->
+ Prev_score = begin
+ _pipe = gleam@map:get(Diff_map, {First_index - 1, Second_index - 1}),
+ gleam@result:unwrap(_pipe, {score, 0, none})
+ end,
+ Derived_score_up = begin
+ _pipe@1 = Diff_map,
+ _pipe@2 = gleam@map:get(_pipe@1, {First_index, Second_index - 1}),
+ gleam@result:unwrap(_pipe@2, {score, 0, none})
+ end,
+ Derived_score_back = begin
+ _pipe@3 = Diff_map,
+ _pipe@4 = gleam@map:get(_pipe@3, {First_index - 1, Second_index}),
+ gleam@result:unwrap(_pipe@4, {score, 0, none})
+ end,
+ Derived_score = gleam@int:max(
+ erlang:element(2, Derived_score_up),
+ erlang:element(2, Derived_score_back)
+ ),
+ This_score = case First_item =:= Second_item of
+ true ->
+ {score, erlang:element(2, Prev_score) + 1, {some, First_item}};
+
+ false ->
+ {score, Derived_score, none}
+ end,
+ _pipe@5 = Diff_map,
+ gleam@map:insert(_pipe@5, {First_index, Second_index}, This_score).
+
+-spec lcs(list(GCV), list(GCV)) -> gap@comparison:comparison(GCV).
+lcs(First_sequence, Second_sequence) ->
+ Leading_matches = begin
+ _pipe = gleam@list:zip(First_sequence, Second_sequence),
+ _pipe@1 = gleam@list:take_while(
+ _pipe,
+ fun(Pair) -> erlang:element(1, Pair) =:= erlang:element(2, Pair) end
+ ),
+ gleam@list:map(_pipe@1, fun gleam@pair:first/1)
+ end,
+ Num_leading_matches = gleam@list:length(Leading_matches),
+ Trailing_matches = begin
+ _pipe@2 = gleam@list:zip(
+ gleam@list:reverse(First_sequence),
+ gleam@list:reverse(Second_sequence)
+ ),
+ _pipe@3 = gleam@list:take_while(
+ _pipe@2,
+ fun(Pair@1) ->
+ erlang:element(1, Pair@1) =:= erlang:element(2, Pair@1)
+ end
+ ),
+ _pipe@4 = gleam@list:map(_pipe@3, fun gleam@pair:first/1),
+ gleam@list:reverse(_pipe@4)
+ end,
+ Num_trailing_matches = gleam@list:length(Trailing_matches),
+ First_sequence_to_diff = begin
+ _pipe@5 = First_sequence,
+ _pipe@6 = gleam@list:drop(_pipe@5, Num_leading_matches),
+ gleam@list:take(
+ _pipe@6,
+ (gleam@list:length(First_sequence) - Num_leading_matches) - Num_trailing_matches
+ )
+ end,
+ Second_sequence_to_diff = begin
+ _pipe@7 = Second_sequence,
+ _pipe@8 = gleam@list:drop(_pipe@7, Num_leading_matches),
+ gleam@list:take(
+ _pipe@8,
+ (gleam@list:length(Second_sequence) - Num_leading_matches) - Num_trailing_matches
+ )
+ end,
+ Diff_map@2 = begin
+ _pipe@9 = Second_sequence_to_diff,
+ gleam@list:index_fold(
+ _pipe@9,
+ gleam@map:new(),
+ fun(Diff_map, Item_second, Index_second) ->
+ _pipe@10 = First_sequence_to_diff,
+ gleam@list:index_fold(
+ _pipe@10,
+ Diff_map,
+ fun(Diff_map@1, Item_first, Index_first) ->
+ build_diff_map(
+ Item_first,
+ Index_first,
+ Item_second,
+ Index_second,
+ Diff_map@1
+ )
+ end
+ )
+ end
+ )
+ end,
+ {First_segments@1, Second_segments@1} = case {First_sequence_to_diff,
+ Second_sequence_to_diff} of
+ {[], []} ->
+ {[], []};
+
+ {First_matching, []} ->
+ {[{no_match, First_matching}], []};
+
+ {[], Second_matching} ->
+ {[], [{no_match, Second_matching}]};
+
+ {First_sequence_to_diff@1, Second_sequence_to_diff@1} ->
+ Tracking = begin
+ _pipe@11 = back_track(
+ Diff_map@2,
+ gleam@list:length(First_sequence_to_diff@1) - 1,
+ gleam@list:length(Second_sequence_to_diff@1) - 1,
+ []
+ ),
+ gleam@map:from_list(_pipe@11)
+ end,
+ First_segments = collect_matches(
+ Tracking,
+ First_sequence_to_diff@1,
+ fun(Key) ->
+ {First, _} = Key,
+ First
+ end
+ ),
+ Second_segments = collect_matches(
+ Tracking,
+ Second_sequence_to_diff@1,
+ fun(Key@1) ->
+ {_, Second} = Key@1,
+ Second
+ end
+ ),
+ {First_segments, Second_segments}
+ end,
+ {First_segments_with_leading_trailing,
+ Second_segments_with_leading_trailing} = case {Leading_matches,
+ Trailing_matches} of
+ {[], []} ->
+ {First_segments@1, Second_segments@1};
+
+ {[], Trailing_matches@1} ->
+ {begin
+ _pipe@12 = First_segments@1,
+ append_and_merge(_pipe@12, {match, Trailing_matches@1})
+ end,
+ begin
+ _pipe@13 = Second_segments@1,
+ append_and_merge(_pipe@13, {match, Trailing_matches@1})
+ end};
+
+ {Leading_matches@1, []} ->
+ {begin
+ _pipe@14 = First_segments@1,
+ prepend_and_merge(_pipe@14, {match, Leading_matches@1})
+ end,
+ begin
+ _pipe@15 = Second_segments@1,
+ prepend_and_merge(_pipe@15, {match, Leading_matches@1})
+ end};
+
+ {Leading_matches@2, Trailing_matches@2} ->
+ {begin
+ _pipe@16 = First_segments@1,
+ _pipe@17 = prepend_and_merge(
+ _pipe@16,
+ {match, Leading_matches@2}
+ ),
+ append_and_merge(_pipe@17, {match, Trailing_matches@2})
+ end,
+ begin
+ _pipe@18 = Second_segments@1,
+ _pipe@19 = prepend_and_merge(
+ _pipe@18,
+ {match, Leading_matches@2}
+ ),
+ append_and_merge(_pipe@19, {match, Trailing_matches@2})
+ end}
+ end,
+ {list_comparison,
+ First_segments_with_leading_trailing,
+ Second_segments_with_leading_trailing}.
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache
new file mode 100644
index 0000000..f754345
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta
new file mode 100644
index 0000000..e3f3599
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl
new file mode 100644
index 0000000..76c0ff2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@comparison.erl
@@ -0,0 +1,15 @@
+-module(gap@comparison).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([comparison/1, match/1]).
+
+-type comparison(FSE) :: {list_comparison,
+ list(match(list(FSE))),
+ list(match(list(FSE)))} |
+ {string_comparison,
+ list(match(list(binary()))),
+ list(match(list(binary())))}.
+
+-type match(FSF) :: {match, FSF} | {no_match, FSF}.
+
+
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache
new file mode 100644
index 0000000..8935f36
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_meta
new file mode 100644
index 0000000..6d51dd1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl
new file mode 100644
index 0000000..ea26472
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@myers.erl
@@ -0,0 +1,156 @@
+-module(gap@myers).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([difference/2]).
+-export_type([edit/1, path/1, status/1]).
+
+-type edit(FWG) :: {eq, list(FWG)} | {del, list(FWG)} | {ins, list(FWG)}.
+
+-type path(FWH) :: {path,
+ integer(),
+ integer(),
+ list(FWH),
+ list(FWH),
+ list(edit(FWH))}.
+
+-type status(FWI) :: {done, list(edit(FWI))} |
+ {next, list(path(FWI))} |
+ {cont, path(FWI)}.
+
+-spec compact_reverse(list(edit(FWS)), list(edit(FWS))) -> list(edit(FWS)).
+compact_reverse(Edits, Acc) ->
+ case {Edits, Acc} of
+ {[], Acc@1} ->
+ Acc@1;
+
+ {[{eq, Elem} | Rest], [{eq, Result} | Acc_rest]} ->
+ compact_reverse(
+ Rest,
+ [{eq, gleam@list:flatten([Elem, Result])} | Acc_rest]
+ );
+
+ {[{del, Elem@1} | Rest@1], [{del, Result@1} | Acc_rest@1]} ->
+ compact_reverse(
+ Rest@1,
+ [{del, gleam@list:flatten([Elem@1, Result@1])} | Acc_rest@1]
+ );
+
+ {[{ins, Elem@2} | Rest@2], [{ins, Result@2} | Acc_rest@2]} ->
+ compact_reverse(
+ Rest@2,
+ [{ins, gleam@list:flatten([Elem@2, Result@2])} | Acc_rest@2]
+ );
+
+ {[{eq, Elem@3} | Rest@3], Acc@2} ->
+ compact_reverse(Rest@3, [{eq, Elem@3} | Acc@2]);
+
+ {[{del, Elem@4} | Rest@4], Acc@3} ->
+ compact_reverse(Rest@4, [{del, Elem@4} | Acc@3]);
+
+ {[{ins, Elem@5} | Rest@5], Acc@4} ->
+ compact_reverse(Rest@5, [{ins, Elem@5} | Acc@4])
+ end.
+
+-spec move_right(path(FXL)) -> path(FXL).
+move_right(Path) ->
+ case Path of
+ {path, X, Y, List1, [Elem | Rest], Edits} ->
+ {path, X + 1, Y, List1, Rest, [{ins, [Elem]} | Edits]};
+
+ {path, X@1, Y@1, List1@1, [], Edits@1} ->
+ {path, X@1 + 1, Y@1, List1@1, [], Edits@1}
+ end.
+
+-spec move_down(path(FXO)) -> path(FXO).
+move_down(Path) ->
+ case Path of
+ {path, X, Y, [Elem | Rest], List2, Edits} ->
+ {path, X, Y + 1, Rest, List2, [{del, [Elem]} | Edits]};
+
+ {path, X@1, Y@1, [], List2@1, Edits@1} ->
+ {path, X@1, Y@1 + 1, [], List2@1, Edits@1}
+ end.
+
+-spec proceed_path(integer(), integer(), list(path(FXF))) -> {path(FXF),
+ list(path(FXF))}.
+proceed_path(Diag, Limit, Paths) ->
+ Neg_limit = - Limit,
+ case {Diag, Limit, Paths} of
+ {0, 0, [Path]} ->
+ {Path, []};
+
+ {Diag@1, _, [Path@1 | _] = Paths@1} when Diag@1 =:= Neg_limit ->
+ {move_down(Path@1), Paths@1};
+
+ {Diag@2, Limit@1, [Path@2 | _] = Paths@2} when Diag@2 =:= Limit@1 ->
+ {move_right(Path@2), Paths@2};
+
+ {_, _, [Path1, Path2 | Rest]} ->
+ case erlang:element(3, Path1) > erlang:element(3, Path2) of
+ true ->
+ {move_right(Path1), [Path2 | Rest]};
+
+ false ->
+ {move_down(Path2), [Path2 | Rest]}
+ end
+ end.
+
+-spec follow_snake(path(FXR)) -> status(FXR).
+follow_snake(Path) ->
+ case Path of
+ {path, X, Y, [Elem1 | Rest1], [Elem2 | Rest2], Edits} when Elem1 =:= Elem2 ->
+ follow_snake(
+ {path, X + 1, Y + 1, Rest1, Rest2, [{eq, [Elem1]} | Edits]}
+ );
+
+ {path, _, _, [], [], Edits@1} ->
+ {done, Edits@1};
+
+ _ ->
+ {cont, Path}
+ end.
+
+-spec each_diagonal(integer(), integer(), list(path(FWZ)), list(path(FWZ))) -> status(FWZ).
+each_diagonal(Diag, Limit, Paths, Next_paths) ->
+ case Diag > Limit of
+ true ->
+ {next, gleam@list:reverse(Next_paths)};
+
+ false ->
+ {Path, Rest} = proceed_path(Diag, Limit, Paths),
+ case follow_snake(Path) of
+ {cont, Path@1} ->
+ each_diagonal(Diag + 2, Limit, Rest, [Path@1 | Next_paths]);
+
+ Other ->
+ Other
+ end
+ end.
+
+-spec find_script(integer(), integer(), list(path(FWO))) -> list(edit(FWO)).
+find_script(Envelope, Max, Paths) ->
+ case Envelope > Max of
+ true ->
+ [];
+
+ false ->
+ case each_diagonal(- Envelope, Envelope, Paths, []) of
+ {done, Edits} ->
+ compact_reverse(Edits, []);
+
+ {next, Paths@1} ->
+ find_script(Envelope + 1, Max, Paths@1);
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"Didn't expect a Cont here"/utf8>>,
+ module => <<"gap/myers"/utf8>>,
+ function => <<"find_script"/utf8>>,
+ line => 35})
+ end
+ end.
+
+-spec difference(list(FWJ), list(FWJ)) -> list(edit(FWJ)).
+difference(List1, List2) ->
+ Path = {path, 0, 0, List1, List2, []},
+ find_script(0, gleam@list:length(List1) + gleam@list:length(List2), [Path]).
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache
new file mode 100644
index 0000000..d7dfd29
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta
new file mode 100644
index 0000000..dc9ffd0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl
new file mode 100644
index 0000000..14cc390
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styled_comparison.erl
@@ -0,0 +1,8 @@
+-module(gap@styled_comparison).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([styled_comparison/0]).
+
+-type styled_comparison() :: {styled_comparison, binary(), binary()}.
+
+
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache
new file mode 100644
index 0000000..7ff8b7f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_meta b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_meta
new file mode 100644
index 0000000..f580983
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl
new file mode 100644
index 0000000..4c14974
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap@styling.erl
@@ -0,0 +1,202 @@
+-module(gap@styling).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_comparison/1, highlight/4, serialize/2, first_highlight_default/1, second_highlight_default/1, no_highlight/1, mk_generic_serializer/2, to_styled_comparison/1]).
+-export_type([part/1, highlighters/0, styling/1]).
+
+-type part(FSP) :: {part, binary(), list(FSP), fun((binary()) -> binary())} |
+ {all, binary()}.
+
+-type highlighters() :: {highlighters,
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary())}.
+
+-opaque styling(FSQ) :: {styling,
+ gap@comparison:comparison(FSQ),
+ gleam@option:option(fun((part(FSQ)) -> binary())),
+ gleam@option:option(highlighters())}.
+
+-spec from_comparison(gap@comparison:comparison(FST)) -> styling(FST).
+from_comparison(Comparison) ->
+ {styling, Comparison, none, none}.
+
+-spec highlight(
+ styling(FSW),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary())
+) -> styling(FSW).
+highlight(Styling, First, Second, Matching) ->
+ erlang:setelement(
+ 4,
+ Styling,
+ {some, {highlighters, First, Second, Matching}}
+ ).
+
+-spec serialize(styling(FSZ), fun((part(FSZ)) -> binary())) -> styling(FSZ).
+serialize(Styling, Serializer) ->
+ erlang:setelement(3, Styling, {some, Serializer}).
+
+-spec first_highlight_default(binary()) -> binary().
+first_highlight_default(String) ->
+ case String of
+ <<" "/utf8>> ->
+ _pipe = String,
+ _pipe@1 = gleam_community@ansi:underline(_pipe),
+ _pipe@2 = gleam_community@ansi:bold(_pipe@1),
+ gleam_community@ansi:green(_pipe@2);
+
+ _ ->
+ _pipe@3 = String,
+ _pipe@4 = gleam_community@ansi:green(_pipe@3),
+ gleam_community@ansi:bold(_pipe@4)
+ end.
+
+-spec second_highlight_default(binary()) -> binary().
+second_highlight_default(String) ->
+ case String of
+ <<" "/utf8>> ->
+ _pipe = String,
+ _pipe@1 = gleam_community@ansi:underline(_pipe),
+ _pipe@2 = gleam_community@ansi:bold(_pipe@1),
+ gleam_community@ansi:red(_pipe@2);
+
+ _ ->
+ _pipe@3 = String,
+ _pipe@4 = gleam_community@ansi:red(_pipe@3),
+ gleam_community@ansi:bold(_pipe@4)
+ end.
+
+-spec no_highlight(binary()) -> binary().
+no_highlight(String) ->
+ String.
+
+-spec string_serializer(part(binary())) -> binary().
+string_serializer(Part) ->
+ case Part of
+ {part, Acc, Sequence, Highlight} ->
+ <<Acc/binary,
+ (begin
+ _pipe = Sequence,
+ _pipe@1 = gleam@list:map(_pipe, Highlight),
+ gleam@string:join(_pipe@1, <<""/utf8>>)
+ end)/binary>>;
+
+ {all, String} ->
+ String
+ end.
+
+-spec mk_generic_serializer(binary(), fun((binary()) -> binary())) -> fun((part(any())) -> binary()).
+mk_generic_serializer(Separator, Around) ->
+ fun(Part) -> case Part of
+ {part, Acc, Sequence, Highlight} ->
+ Segment_separator = case Acc of
+ <<""/utf8>> ->
+ <<""/utf8>>;
+
+ _ ->
+ Separator
+ end,
+ <<<<Acc/binary, Segment_separator/binary>>/binary,
+ (begin
+ _pipe = Sequence,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun gleam@string:inspect/1
+ ),
+ _pipe@2 = gleam@list:map(_pipe@1, Highlight),
+ gleam@string:join(_pipe@2, Separator)
+ end)/binary>>;
+
+ {all, String} ->
+ Around(String)
+ end end.
+
+-spec generic_serializer(part(any())) -> binary().
+generic_serializer(Part) ->
+ (mk_generic_serializer(
+ <<", "/utf8>>,
+ fun(All) -> <<<<"["/utf8, All/binary>>/binary, "]"/utf8>> end
+ ))(Part).
+
+-spec to_strings(
+ list(gap@comparison:match(list(FTJ))),
+ list(gap@comparison:match(list(FTJ))),
+ fun((part(FTJ)) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary())
+) -> gap@styled_comparison:styled_comparison().
+to_strings(
+ First,
+ Second,
+ Serializer,
+ First_highlight,
+ Second_highlight,
+ No_highlight
+) ->
+ First_styled = begin
+ _pipe = First,
+ gleam@list:fold(_pipe, <<""/utf8>>, fun(Str, Match) -> case Match of
+ {match, Item} ->
+ Serializer({part, Str, Item, No_highlight});
+
+ {no_match, Item@1} ->
+ Serializer({part, Str, Item@1, First_highlight})
+ end end)
+ end,
+ Second_styled = begin
+ _pipe@1 = Second,
+ gleam@list:fold(
+ _pipe@1,
+ <<""/utf8>>,
+ fun(Str@1, Match@1) -> case Match@1 of
+ {match, Item@2} ->
+ Serializer({part, Str@1, Item@2, No_highlight});
+
+ {no_match, Item@3} ->
+ Serializer({part, Str@1, Item@3, Second_highlight})
+ end end
+ )
+ end,
+ {styled_comparison,
+ Serializer({all, First_styled}),
+ Serializer({all, Second_styled})}.
+
+-spec to_styled_comparison(styling(any())) -> gap@styled_comparison:styled_comparison().
+to_styled_comparison(Styling) ->
+ Highlight = begin
+ _pipe = erlang:element(4, Styling),
+ gleam@option:unwrap(
+ _pipe,
+ {highlighters,
+ fun first_highlight_default/1,
+ fun second_highlight_default/1,
+ fun no_highlight/1}
+ )
+ end,
+ case erlang:element(2, Styling) of
+ {string_comparison, First, Second} ->
+ to_strings(
+ First,
+ Second,
+ fun string_serializer/1,
+ erlang:element(2, Highlight),
+ erlang:element(3, Highlight),
+ erlang:element(4, Highlight)
+ );
+
+ {list_comparison, First@1, Second@1} ->
+ to_strings(
+ First@1,
+ Second@1,
+ gleam@option:unwrap(
+ erlang:element(3, Styling),
+ fun generic_serializer/1
+ ),
+ erlang:element(2, Highlight),
+ erlang:element(3, Highlight),
+ erlang:element(4, Highlight)
+ )
+ end.
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs
new file mode 100644
index 0000000..235c80b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gap_ffi.mjs
@@ -0,0 +1,431 @@
+import {
+ Error,
+ List,
+ Ok,
+ inspect,
+ toList,
+ makeError,
+ isEqual,
+} from "./gleam.mjs";
+import * as $option from "../gleam_stdlib/gleam/option.mjs";
+
+const HASHCODE_CACHE = new WeakMap();
+const Nil = undefined;
+
+class MutableMap {
+ static #hashcode_cache = new WeakMap();
+
+ static hash(value) {
+ let existing = this.#hashcode_cache.get(value);
+ if (existing) {
+ return existing;
+ } else if (value instanceof Object) {
+ let hashcode = inspect(value);
+ HASHCODE_CACHE.set(value, hashcode);
+ return hashcode;
+ } else {
+ return value.toString();
+ }
+ }
+
+ constructor() {
+ this.entries = new globalThis.Map();
+ }
+
+ get size() {
+ return this.entries.size;
+ }
+
+ inspect() {
+ let entries = [...this.entries.values()]
+ .map((pair) => inspect(pair))
+ .join(", ");
+ return `map.from_list([${entries}])`;
+ }
+
+ toList() {
+ return List.fromArray([...this.entries.values()]);
+ }
+
+ insert(k, v) {
+ this.entries.set(MutableMap.hash(k), [k, v]);
+ return this;
+ }
+
+ delete(k) {
+ this.entries.delete(MutableMap.hash(k));
+ return this;
+ }
+
+ get(key) {
+ let code = MutableMap.hash(key);
+ if (this.entries.has(code)) {
+ return new Ok(this.entries.get(code)[1]);
+ } else {
+ return new Error(Nil);
+ }
+ }
+}
+
+export function new_mutable_map() {
+ return new MutableMap();
+}
+
+export function mutable_map_size(map) {
+ return map.size;
+}
+
+export function mutable_map_to_list(map) {
+ return map.toList();
+}
+
+export function mutable_map_remove(k, map) {
+ return map.delete(k);
+}
+
+export function mutable_map_get(map, key) {
+ return map.get(key);
+}
+
+export function mutable_map_insert(key, value, map) {
+ return map.insert(key, value);
+}
+
+// From map.mjs
+
+export function size(map) {
+ return mutable_map_size(map);
+}
+
+export function to_list(map) {
+ return mutable_map_to_list(map);
+}
+
+export function new$() {
+ return new_mutable_map();
+}
+
+export function get(from, get) {
+ return mutable_map_get(from, get);
+}
+
+function do_has_key(key, map) {
+ return !isEqual(get(map, key), new Error(undefined));
+}
+
+export function has_key(map, key) {
+ return do_has_key(key, map);
+}
+
+export function insert(map, key, value) {
+ return mutable_map_insert(key, value, map);
+}
+
+function insert_pair(map, pair) {
+ return insert(map, pair[0], pair[1]);
+}
+
+export function update(map, key, fun) {
+ let _pipe = map;
+ let _pipe$1 = get(_pipe, key);
+ let _pipe$2 = $option.from_result(_pipe$1);
+ let _pipe$3 = fun(_pipe$2);
+ return ((_capture) => {
+ return insert(map, key, _capture);
+ })(_pipe$3);
+}
+
+export function delete$(map, key) {
+ return mutable_map_remove(key, map);
+}
+
+function fold_list_of_pair(loop$list, loop$initial) {
+ while (true) {
+ let list = loop$list;
+ let initial = loop$initial;
+ if (list.hasLength(0)) {
+ return initial;
+ } else if (list.atLeastLength(1)) {
+ let x = list.head;
+ let rest = list.tail;
+ loop$list = rest;
+ loop$initial = insert(initial, x[0], x[1]);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 98,
+ "fold_list_of_pair",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+function do_from_list(list) {
+ return fold_list_of_pair(list, new$());
+}
+
+export function from_list(list) {
+ return do_from_list(list);
+}
+
+function do_fold(loop$list, loop$initial, loop$fun) {
+ while (true) {
+ let list = loop$list;
+ let initial = loop$initial;
+ let fun = loop$fun;
+ if (list.hasLength(0)) {
+ return initial;
+ } else if (list.atLeastLength(1)) {
+ let k = list.head[0];
+ let v = list.head[1];
+ let tail = list.tail;
+ loop$list = tail;
+ loop$initial = fun(initial, k, v);
+ loop$fun = fun;
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 558,
+ "do_fold",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+export function fold(map, initial, fun) {
+ let _pipe = map;
+ let _pipe$1 = to_list(_pipe);
+ return do_fold(_pipe$1, initial, fun);
+}
+
+function do_map_values(f, map) {
+ let f$1 = (map, k, v) => {
+ return insert(map, k, f(k, v));
+ };
+ let _pipe = map;
+ return fold(_pipe, new$(), f$1);
+}
+
+export function map_values(map, fun) {
+ return do_map_values(fun, map);
+}
+
+function do_filter(f, map) {
+ let insert$1 = (map, k, v) => {
+ let $ = f(k, v);
+ if ($) {
+ return insert(map, k, v);
+ } else {
+ return map;
+ }
+ };
+ let _pipe = map;
+ return fold(_pipe, new$(), insert$1);
+}
+
+export function filter(map, property) {
+ return do_filter(property, map);
+}
+
+function do_keys_acc(loop$list, loop$acc) {
+ while (true) {
+ let list = loop$list;
+ let acc = loop$acc;
+ if (list.hasLength(0)) {
+ return reverse_and_concat(acc, toList([]));
+ } else if (list.atLeastLength(1)) {
+ let x = list.head;
+ let xs = list.tail;
+ loop$list = xs;
+ loop$acc = toList([x[0]], acc);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 276,
+ "do_keys_acc",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+function do_keys(map) {
+ let list_of_pairs = (() => {
+ let _pipe = map;
+ return to_list(_pipe);
+ })();
+ return do_keys_acc(list_of_pairs, toList([]));
+}
+
+export function keys(map) {
+ return do_keys(map);
+}
+
+function reverse_and_concat(loop$remaining, loop$accumulator) {
+ while (true) {
+ let remaining = loop$remaining;
+ let accumulator = loop$accumulator;
+ if (remaining.hasLength(0)) {
+ return accumulator;
+ } else if (remaining.atLeastLength(1)) {
+ let item = remaining.head;
+ let rest = remaining.tail;
+ loop$remaining = rest;
+ loop$accumulator = toList([item], accumulator);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 269,
+ "reverse_and_concat",
+ "No case clause matched",
+ { values: [remaining] }
+ );
+ }
+ }
+}
+
+function do_values_acc(loop$list, loop$acc) {
+ while (true) {
+ let list = loop$list;
+ let acc = loop$acc;
+ if (list.hasLength(0)) {
+ return reverse_and_concat(acc, toList([]));
+ } else if (list.atLeastLength(1)) {
+ let x = list.head;
+ let xs = list.tail;
+ loop$list = xs;
+ loop$acc = toList([x[1]], acc);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 314,
+ "do_values_acc",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+function do_values(map) {
+ let list_of_pairs = (() => {
+ let _pipe = map;
+ return to_list(_pipe);
+ })();
+ return do_values_acc(list_of_pairs, toList([]));
+}
+
+export function values(map) {
+ return do_values(map);
+}
+
+function insert_taken(loop$map, loop$desired_keys, loop$acc) {
+ while (true) {
+ let map = loop$map;
+ let desired_keys = loop$desired_keys;
+ let acc = loop$acc;
+ let insert$1 = (taken, key) => {
+ let $ = get(map, key);
+ if ($.isOk()) {
+ let value = $[0];
+ return insert(taken, key, value);
+ } else {
+ return taken;
+ }
+ };
+ if (desired_keys.hasLength(0)) {
+ return acc;
+ } else if (desired_keys.atLeastLength(1)) {
+ let x = desired_keys.head;
+ let xs = desired_keys.tail;
+ loop$map = map;
+ loop$desired_keys = xs;
+ loop$acc = insert$1(acc, x);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 411,
+ "insert_taken",
+ "No case clause matched",
+ { values: [desired_keys] }
+ );
+ }
+ }
+}
+
+function do_take(desired_keys, map) {
+ return insert_taken(map, desired_keys, new$());
+}
+
+export function take(map, desired_keys) {
+ return do_take(desired_keys, map);
+}
+
+function fold_inserts(loop$new_entries, loop$map) {
+ while (true) {
+ let new_entries = loop$new_entries;
+ let map = loop$map;
+ if (new_entries.hasLength(0)) {
+ return map;
+ } else if (new_entries.atLeastLength(1)) {
+ let x = new_entries.head;
+ let xs = new_entries.tail;
+ loop$new_entries = xs;
+ loop$map = insert_pair(map, x);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 451,
+ "fold_inserts",
+ "No case clause matched",
+ { values: [new_entries] }
+ );
+ }
+ }
+}
+
+function do_merge(map, new_entries) {
+ let _pipe = new_entries;
+ let _pipe$1 = to_list(_pipe);
+ return fold_inserts(_pipe$1, map);
+}
+
+export function merge(map, new_entries) {
+ return do_merge(map, new_entries);
+}
+
+export function drop(loop$map, loop$disallowed_keys) {
+ while (true) {
+ let map = loop$map;
+ let disallowed_keys = loop$disallowed_keys;
+ if (disallowed_keys.hasLength(0)) {
+ return map;
+ } else if (disallowed_keys.atLeastLength(1)) {
+ let x = disallowed_keys.head;
+ let xs = disallowed_keys.tail;
+ loop$map = delete$(map, x);
+ loop$disallowed_keys = xs;
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 514,
+ "drop",
+ "No case clause matched",
+ { values: [disallowed_keys] }
+ );
+ }
+ }
+}
diff --git a/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap.app b/aoc2023/build/dev/erlang/gap/ebin/gap.app
new file mode 100644
index 0000000..ae37254
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/ebin/gap.app
@@ -0,0 +1,8 @@
+{application, gap, [
+ {vsn, "1.0.1"},
+ {applications, [gleam_community_ansi,
+ gleam_stdlib]},
+ {description, "A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences."},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap.beam b/aoc2023/build/dev/erlang/gap/ebin/gap.beam
new file mode 100644
index 0000000..e819167
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/ebin/gap.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beam
new file mode 100644
index 0000000..50227cb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/ebin/gap@comparison.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@myers.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@myers.beam
new file mode 100644
index 0000000..248a896
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/ebin/gap@myers.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beam
new file mode 100644
index 0000000..5d56885
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/ebin/gap@styled_comparison.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/ebin/gap@styling.beam b/aoc2023/build/dev/erlang/gap/ebin/gap@styling.beam
new file mode 100644
index 0000000..d2d0cc3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/ebin/gap@styling.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl
new file mode 100644
index 0000000..5e4b20d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_ListComparison.hrl
@@ -0,0 +1,4 @@
+-record(list_comparison, {
+ first :: list(gap@comparison:match(list(any()))),
+ second :: list(gap@comparison:match(list(any())))
+}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl
new file mode 100644
index 0000000..f1225dd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_Match.hrl
@@ -0,0 +1 @@
+-record(match, {item :: any()}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl
new file mode 100644
index 0000000..742783b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_NoMatch.hrl
@@ -0,0 +1 @@
+-record(no_match, {item :: any()}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl b/aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl
new file mode 100644
index 0000000..c0b1a75
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@comparison_StringComparison.hrl
@@ -0,0 +1,4 @@
+-record(string_comparison, {
+ first :: list(gap@comparison:match(list(binary()))),
+ second :: list(gap@comparison:match(list(binary())))
+}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl
new file mode 100644
index 0000000..0e7c64a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@styled_comparison_StyledComparison.hrl
@@ -0,0 +1 @@
+-record(styled_comparison, {first :: binary(), second :: binary()}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl
new file mode 100644
index 0000000..c11a9a6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_All.hrl
@@ -0,0 +1 @@
+-record(all, {all :: binary()}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl
new file mode 100644
index 0000000..6e073b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_Highlighters.hrl
@@ -0,0 +1,5 @@
+-record(highlighters, {
+ first :: fun((binary()) -> binary()),
+ second :: fun((binary()) -> binary()),
+ matching :: fun((binary()) -> binary())
+}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl
new file mode 100644
index 0000000..db45796
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_Part.hrl
@@ -0,0 +1,5 @@
+-record(part, {
+ acc :: binary(),
+ part :: list(any()),
+ highlight :: fun((binary()) -> binary())
+}).
diff --git a/aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl b/aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl
new file mode 100644
index 0000000..a7341c6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gap/include/gap@styling_Styling.hrl
@@ -0,0 +1,5 @@
+-record(styling, {
+ comparison :: gap@comparison:comparison(any()),
+ serializer :: gleam@option:option(fun((gap@styling:part(any())) -> binary())),
+ highlight :: gleam@option:option(gap@styling:highlighters())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam.lock b/aoc2023/build/dev/erlang/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam.lock
diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache
new file mode 100644
index 0000000..d77f2c9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta
new file mode 100644
index 0000000..a01f4e8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl
new file mode 100644
index 0000000..8b7a4c9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.erl
@@ -0,0 +1,263 @@
+-module(gleam_community@ansi).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([reset/1, bold/1, dim/1, italic/1, underline/1, inverse/1, hidden/1, strikethrough/1, black/1, red/1, green/1, yellow/1, blue/1, magenta/1, cyan/1, white/1, bright_black/1, grey/1, gray/1, bright_red/1, bright_green/1, bright_yellow/1, bright_blue/1, bright_magenta/1, bright_cyan/1, bright_white/1, hex/2, pink/1, colour/2, color/2, bg_black/1, bg_red/1, bg_green/1, bg_yellow/1, bg_blue/1, bg_magenta/1, bg_cyan/1, bg_white/1, bg_bright_black/1, bg_bright_red/1, bg_bright_green/1, bg_bright_yellow/1, bg_bright_blue/1, bg_bright_magenta/1, bg_bright_cyan/1, bg_bright_white/1, bg_hex/2, bg_pink/1, bg_colour/2, bg_color/2]).
+-export_type([code/0]).
+
+-type code() :: {code, binary(), binary(), binary()}.
+
+-spec code(list(integer()), integer()) -> code().
+code(Open, Close) ->
+ Close_str = gleam@int:to_string(Close),
+ Open_strs = gleam@list:map(Open, fun gleam@int:to_string/1),
+ {code,
+ <<<<<<""/utf8, "["/utf8>>/binary,
+ (gleam@string:join(Open_strs, <<";"/utf8>>))/binary>>/binary,
+ "m"/utf8>>,
+ <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>,
+ <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>}.
+
+-spec run(binary(), code()) -> binary().
+run(Text, Code) ->
+ <<<<(erlang:element(2, Code))/binary,
+ (gleam@string:replace(
+ Text,
+ erlang:element(4, Code),
+ erlang:element(2, Code)
+ ))/binary>>/binary,
+ (erlang:element(3, Code))/binary>>.
+
+-spec reset(binary()) -> binary().
+reset(Text) ->
+ run(Text, code([0], 0)).
+
+-spec bold(binary()) -> binary().
+bold(Text) ->
+ run(Text, code([1], 22)).
+
+-spec dim(binary()) -> binary().
+dim(Text) ->
+ run(Text, code([2], 22)).
+
+-spec italic(binary()) -> binary().
+italic(Text) ->
+ run(Text, code([3], 23)).
+
+-spec underline(binary()) -> binary().
+underline(Text) ->
+ run(Text, code([4], 24)).
+
+-spec inverse(binary()) -> binary().
+inverse(Text) ->
+ run(Text, code([7], 27)).
+
+-spec hidden(binary()) -> binary().
+hidden(Text) ->
+ run(Text, code([8], 28)).
+
+-spec strikethrough(binary()) -> binary().
+strikethrough(Text) ->
+ run(Text, code([9], 29)).
+
+-spec black(binary()) -> binary().
+black(Text) ->
+ run(Text, code([30], 39)).
+
+-spec red(binary()) -> binary().
+red(Text) ->
+ run(Text, code([31], 39)).
+
+-spec green(binary()) -> binary().
+green(Text) ->
+ run(Text, code([32], 39)).
+
+-spec yellow(binary()) -> binary().
+yellow(Text) ->
+ run(Text, code([33], 39)).
+
+-spec blue(binary()) -> binary().
+blue(Text) ->
+ run(Text, code([34], 39)).
+
+-spec magenta(binary()) -> binary().
+magenta(Text) ->
+ run(Text, code([35], 39)).
+
+-spec cyan(binary()) -> binary().
+cyan(Text) ->
+ run(Text, code([36], 39)).
+
+-spec white(binary()) -> binary().
+white(Text) ->
+ run(Text, code([37], 39)).
+
+-spec bright_black(binary()) -> binary().
+bright_black(Text) ->
+ run(Text, code([90], 39)).
+
+-spec grey(binary()) -> binary().
+grey(Text) ->
+ bright_black(Text).
+
+-spec gray(binary()) -> binary().
+gray(Text) ->
+ bright_black(Text).
+
+-spec bright_red(binary()) -> binary().
+bright_red(Text) ->
+ run(Text, code([91], 39)).
+
+-spec bright_green(binary()) -> binary().
+bright_green(Text) ->
+ run(Text, code([92], 39)).
+
+-spec bright_yellow(binary()) -> binary().
+bright_yellow(Text) ->
+ run(Text, code([93], 39)).
+
+-spec bright_blue(binary()) -> binary().
+bright_blue(Text) ->
+ run(Text, code([94], 39)).
+
+-spec bright_magenta(binary()) -> binary().
+bright_magenta(Text) ->
+ run(Text, code([95], 39)).
+
+-spec bright_cyan(binary()) -> binary().
+bright_cyan(Text) ->
+ run(Text, code([96], 39)).
+
+-spec bright_white(binary()) -> binary().
+bright_white(Text) ->
+ run(Text, code([97], 39)).
+
+-spec hex(binary(), integer()) -> binary().
+hex(Text, Colour) ->
+ Colour@1 = gleam@int:clamp(Colour, 16#0, 16#ffffff),
+ run(
+ Text,
+ code(
+ [38,
+ 2,
+ begin
+ _pipe = erlang:'bsr'(Colour@1, 16),
+ erlang:'band'(_pipe, 16#ff)
+ end,
+ begin
+ _pipe@1 = erlang:'bsr'(Colour@1, 8),
+ erlang:'band'(_pipe@1, 16#ff)
+ end,
+ erlang:'band'(Colour@1, 16#ff)],
+ 39
+ )
+ ).
+
+-spec pink(binary()) -> binary().
+pink(Text) ->
+ hex(Text, 16#ffaff3).
+
+-spec colour(binary(), gleam_community@colour:colour()) -> binary().
+colour(Text, Colour) ->
+ Hex_colour = gleam_community@colour:to_rgb_hex(Colour),
+ hex(Text, Hex_colour).
+
+-spec color(binary(), gleam_community@colour:colour()) -> binary().
+color(Text, Color) ->
+ colour(Text, Color).
+
+-spec bg_black(binary()) -> binary().
+bg_black(Text) ->
+ run(Text, code([40], 49)).
+
+-spec bg_red(binary()) -> binary().
+bg_red(Text) ->
+ run(Text, code([41], 49)).
+
+-spec bg_green(binary()) -> binary().
+bg_green(Text) ->
+ run(Text, code([42], 49)).
+
+-spec bg_yellow(binary()) -> binary().
+bg_yellow(Text) ->
+ run(Text, code([43], 49)).
+
+-spec bg_blue(binary()) -> binary().
+bg_blue(Text) ->
+ run(Text, code([44], 49)).
+
+-spec bg_magenta(binary()) -> binary().
+bg_magenta(Text) ->
+ run(Text, code([45], 49)).
+
+-spec bg_cyan(binary()) -> binary().
+bg_cyan(Text) ->
+ run(Text, code([46], 49)).
+
+-spec bg_white(binary()) -> binary().
+bg_white(Text) ->
+ run(Text, code([47], 49)).
+
+-spec bg_bright_black(binary()) -> binary().
+bg_bright_black(Text) ->
+ run(Text, code([100], 49)).
+
+-spec bg_bright_red(binary()) -> binary().
+bg_bright_red(Text) ->
+ run(Text, code([101], 49)).
+
+-spec bg_bright_green(binary()) -> binary().
+bg_bright_green(Text) ->
+ run(Text, code([102], 49)).
+
+-spec bg_bright_yellow(binary()) -> binary().
+bg_bright_yellow(Text) ->
+ run(Text, code([103], 49)).
+
+-spec bg_bright_blue(binary()) -> binary().
+bg_bright_blue(Text) ->
+ run(Text, code([104], 49)).
+
+-spec bg_bright_magenta(binary()) -> binary().
+bg_bright_magenta(Text) ->
+ run(Text, code([105], 49)).
+
+-spec bg_bright_cyan(binary()) -> binary().
+bg_bright_cyan(Text) ->
+ run(Text, code([106], 49)).
+
+-spec bg_bright_white(binary()) -> binary().
+bg_bright_white(Text) ->
+ run(Text, code([107], 49)).
+
+-spec bg_hex(binary(), integer()) -> binary().
+bg_hex(Text, Colour) ->
+ run(
+ Text,
+ code(
+ [48,
+ 2,
+ begin
+ _pipe = erlang:'bsr'(Colour, 16),
+ erlang:'band'(_pipe, 16#ff)
+ end,
+ begin
+ _pipe@1 = erlang:'bsr'(Colour, 8),
+ erlang:'band'(_pipe@1, 16#ff)
+ end,
+ erlang:'band'(Colour, 16#ff)],
+ 49
+ )
+ ).
+
+-spec bg_pink(binary()) -> binary().
+bg_pink(Text) ->
+ bg_hex(Text, 16#ffaff3).
+
+-spec bg_colour(binary(), gleam_community@colour:colour()) -> binary().
+bg_colour(Text, Colour) ->
+ Hex_colour = gleam_community@colour:to_rgb_hex(Colour),
+ bg_hex(Text, Hex_colour).
+
+-spec bg_color(binary(), gleam_community@colour:colour()) -> binary().
+bg_color(Text, Colour) ->
+ bg_colour(Text, Colour).
diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beam b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beam
new file mode 100644
index 0000000..f59ef96
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community@ansi.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app
new file mode 100644
index 0000000..90e4d4a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_ansi/ebin/gleam_community_ansi.app
@@ -0,0 +1,8 @@
+{application, gleam_community_ansi, [
+ {vsn, "1.2.0"},
+ {applications, [gleam_community_colour,
+ gleam_stdlib]},
+ {description, "ANSI colours, formatting, and control codes"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache
new file mode 100644
index 0000000..7de2dd3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta
new file mode 100644
index 0000000..3584f7e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl
new file mode 100644
index 0000000..ceaaaaa
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.erl
@@ -0,0 +1,513 @@
+-module(gleam_community@colour).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_rgb255/3, from_rgb/3, from_rgba/4, from_hsla/4, from_hsl/3, from_rgb_hex/1, from_rgb_hex_string/1, from_rgba_hex/1, from_rgba_hex_string/1, to_rgba/1, to_hsla/1, to_css_rgba_string/1, to_rgba_hex/1, to_rgba_hex_string/1, to_rgb_hex/1, to_rgb_hex_string/1]).
+-export_type([colour/0]).
+
+-opaque colour() :: {rgba, float(), float(), float(), float()} |
+ {hsla, float(), float(), float(), float()}.
+
+-spec valid_colour_value(float()) -> {ok, float()} | {error, nil}.
+valid_colour_value(C) ->
+ case (C > 1.0) orelse (C < +0.0) of
+ true ->
+ {error, nil};
+
+ false ->
+ {ok, C}
+ end.
+
+-spec hue_to_rgb(float(), float(), float()) -> float().
+hue_to_rgb(Hue, M1, M2) ->
+ H = case Hue of
+ _ when Hue < +0.0 ->
+ Hue + 1.0;
+
+ _ when Hue > 1.0 ->
+ Hue - 1.0;
+
+ _ ->
+ Hue
+ end,
+ H_t_6 = H * 6.0,
+ H_t_2 = H * 2.0,
+ H_t_3 = H * 3.0,
+ case H of
+ _ when H_t_6 < 1.0 ->
+ M1 + (((M2 - M1) * H) * 6.0);
+
+ _ when H_t_2 < 1.0 ->
+ M2;
+
+ _ when H_t_3 < 2.0 ->
+ M1 + (((M2 - M1) * ((2.0 / 3.0) - H)) * 6.0);
+
+ _ ->
+ M1
+ end.
+
+-spec hex_string_to_int(binary()) -> {ok, integer()} | {error, nil}.
+hex_string_to_int(Hex_string) ->
+ Hex = case Hex_string of
+ <<"#"/utf8, Hex_number/binary>> ->
+ Hex_number;
+
+ <<"0x"/utf8, Hex_number@1/binary>> ->
+ Hex_number@1;
+
+ _ ->
+ Hex_string
+ end,
+ _pipe = Hex,
+ _pipe@1 = gleam@string:lowercase(_pipe),
+ _pipe@2 = gleam@string:to_graphemes(_pipe@1),
+ _pipe@3 = gleam@list:reverse(_pipe@2),
+ gleam@list:index_fold(
+ _pipe@3,
+ {ok, 0},
+ fun(Total, Char, Index) -> case Total of
+ {error, nil} ->
+ {error, nil};
+
+ {ok, V} ->
+ gleam@result:then(case Char of
+ <<"a"/utf8>> ->
+ {ok, 10};
+
+ <<"b"/utf8>> ->
+ {ok, 11};
+
+ <<"c"/utf8>> ->
+ {ok, 12};
+
+ <<"d"/utf8>> ->
+ {ok, 13};
+
+ <<"e"/utf8>> ->
+ {ok, 14};
+
+ <<"f"/utf8>> ->
+ {ok, 15};
+
+ _ ->
+ gleam@int:parse(Char)
+ end, fun(Num) ->
+ gleam@result:then(
+ gleam@int:power(16, gleam@int:to_float(Index)),
+ fun(Base) ->
+ {ok,
+ V + gleam@float:round(
+ gleam@int:to_float(Num) * Base
+ )}
+ end
+ )
+ end)
+ end end
+ ).
+
+-spec hsla_to_rgba(float(), float(), float(), float()) -> {float(),
+ float(),
+ float(),
+ float()}.
+hsla_to_rgba(H, S, L, A) ->
+ M2 = case L =< 0.5 of
+ true ->
+ L * (S + 1.0);
+
+ false ->
+ (L + S) - (L * S)
+ end,
+ M1 = (L * 2.0) - M2,
+ R = hue_to_rgb(H + (1.0 / 3.0), M1, M2),
+ G = hue_to_rgb(H, M1, M2),
+ B = hue_to_rgb(H - (1.0 / 3.0), M1, M2),
+ {R, G, B, A}.
+
+-spec rgba_to_hsla(float(), float(), float(), float()) -> {float(),
+ float(),
+ float(),
+ float()}.
+rgba_to_hsla(R, G, B, A) ->
+ Min_colour = gleam@float:min(R, gleam@float:min(G, B)),
+ Max_colour = gleam@float:max(R, gleam@float:max(G, B)),
+ H1 = case true of
+ _ when Max_colour =:= R ->
+ gleam@float:divide(G - B, Max_colour - Min_colour);
+
+ _ when Max_colour =:= G ->
+ _pipe = gleam@float:divide(B - R, Max_colour - Min_colour),
+ gleam@result:then(_pipe, fun(D) -> {ok, 2.0 + D} end);
+
+ _ ->
+ _pipe@1 = gleam@float:divide(R - G, Max_colour - Min_colour),
+ gleam@result:then(_pipe@1, fun(D@1) -> {ok, 4.0 + D@1} end)
+ end,
+ H2 = case H1 of
+ {ok, V} ->
+ {ok, V * (1.0 / 6.0)};
+
+ _ ->
+ H1
+ end,
+ H3 = case H2 of
+ {ok, V@1} when V@1 < +0.0 ->
+ V@1 + 1.0;
+
+ {ok, V@2} ->
+ V@2;
+
+ _ ->
+ +0.0
+ end,
+ L = (Min_colour + Max_colour) / 2.0,
+ S = case true of
+ _ when Min_colour =:= Max_colour ->
+ +0.0;
+
+ _ when L < 0.5 ->
+ case (Max_colour + Min_colour) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> (Max_colour - Min_colour) / Gleam@denominator
+ end;
+
+ _ ->
+ case ((2.0 - Max_colour) - Min_colour) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> (Max_colour - Min_colour) / Gleam@denominator@1
+ end
+ end,
+ {H3, S, L, A}.
+
+-spec from_rgb255(integer(), integer(), integer()) -> {ok, colour()} |
+ {error, nil}.
+from_rgb255(Red, Green, Blue) ->
+ gleam@result:then(
+ begin
+ _pipe = Red,
+ _pipe@1 = gleam@int:to_float(_pipe),
+ _pipe@2 = gleam@float:divide(_pipe@1, 255.0),
+ gleam@result:then(_pipe@2, fun valid_colour_value/1)
+ end,
+ fun(R) ->
+ gleam@result:then(
+ begin
+ _pipe@3 = Green,
+ _pipe@4 = gleam@int:to_float(_pipe@3),
+ _pipe@5 = gleam@float:divide(_pipe@4, 255.0),
+ gleam@result:then(_pipe@5, fun valid_colour_value/1)
+ end,
+ fun(G) ->
+ gleam@result:then(
+ begin
+ _pipe@6 = Blue,
+ _pipe@7 = gleam@int:to_float(_pipe@6),
+ _pipe@8 = gleam@float:divide(_pipe@7, 255.0),
+ gleam@result:then(_pipe@8, fun valid_colour_value/1)
+ end,
+ fun(B) -> {ok, {rgba, R, G, B, 1.0}} end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_rgb(float(), float(), float()) -> {ok, colour()} | {error, nil}.
+from_rgb(Red, Green, Blue) ->
+ gleam@result:then(
+ valid_colour_value(Red),
+ fun(R) ->
+ gleam@result:then(
+ valid_colour_value(Green),
+ fun(G) ->
+ gleam@result:then(
+ valid_colour_value(Blue),
+ fun(B) -> {ok, {rgba, R, G, B, 1.0}} end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_rgba(float(), float(), float(), float()) -> {ok, colour()} |
+ {error, nil}.
+from_rgba(Red, Green, Blue, Alpha) ->
+ gleam@result:then(
+ valid_colour_value(Red),
+ fun(R) ->
+ gleam@result:then(
+ valid_colour_value(Green),
+ fun(G) ->
+ gleam@result:then(
+ valid_colour_value(Blue),
+ fun(B) ->
+ gleam@result:then(
+ valid_colour_value(Alpha),
+ fun(A) -> {ok, {rgba, R, G, B, A}} end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_hsla(float(), float(), float(), float()) -> {ok, colour()} |
+ {error, nil}.
+from_hsla(Hue, Saturation, Lightness, Alpha) ->
+ gleam@result:then(
+ valid_colour_value(Hue),
+ fun(H) ->
+ gleam@result:then(
+ valid_colour_value(Saturation),
+ fun(S) ->
+ gleam@result:then(
+ valid_colour_value(Lightness),
+ fun(L) ->
+ gleam@result:then(
+ valid_colour_value(Alpha),
+ fun(A) -> {ok, {hsla, H, S, L, A}} end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_hsl(float(), float(), float()) -> {ok, colour()} | {error, nil}.
+from_hsl(Hue, Saturation, Lightness) ->
+ from_hsla(Hue, Saturation, Lightness, 1.0).
+
+-spec from_rgb_hex(integer()) -> {ok, colour()} | {error, nil}.
+from_rgb_hex(Hex) ->
+ case (Hex > 16#ffffff) orelse (Hex < 0) of
+ true ->
+ {error, nil};
+
+ false ->
+ R = begin
+ _pipe = erlang:'bsr'(Hex, 16),
+ erlang:'band'(_pipe, 16#ff)
+ end,
+ G = begin
+ _pipe@1 = erlang:'bsr'(Hex, 8),
+ erlang:'band'(_pipe@1, 16#ff)
+ end,
+ B = erlang:'band'(Hex, 16#ff),
+ from_rgb255(R, G, B)
+ end.
+
+-spec from_rgb_hex_string(binary()) -> {ok, colour()} | {error, nil}.
+from_rgb_hex_string(Hex_string) ->
+ gleam@result:then(
+ hex_string_to_int(Hex_string),
+ fun(Hex_int) -> from_rgb_hex(Hex_int) end
+ ).
+
+-spec from_rgba_hex(integer()) -> {ok, colour()} | {error, nil}.
+from_rgba_hex(Hex) ->
+ case (Hex > 16#ffffffff) orelse (Hex < 0) of
+ true ->
+ {error, nil};
+
+ false ->
+ _assert_subject = begin
+ _pipe = erlang:'bsr'(Hex, 24),
+ _pipe@1 = erlang:'band'(_pipe, 16#ff),
+ _pipe@2 = gleam@int:to_float(_pipe@1),
+ gleam@float:divide(_pipe@2, 255.0)
+ end,
+ {ok, R} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 588})
+ end,
+ _assert_subject@1 = begin
+ _pipe@3 = erlang:'bsr'(Hex, 16),
+ _pipe@4 = erlang:'band'(_pipe@3, 16#ff),
+ _pipe@5 = gleam@int:to_float(_pipe@4),
+ gleam@float:divide(_pipe@5, 255.0)
+ end,
+ {ok, G} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 594})
+ end,
+ _assert_subject@2 = begin
+ _pipe@6 = erlang:'bsr'(Hex, 8),
+ _pipe@7 = erlang:'band'(_pipe@6, 16#ff),
+ _pipe@8 = gleam@int:to_float(_pipe@7),
+ gleam@float:divide(_pipe@8, 255.0)
+ end,
+ {ok, B} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 600})
+ end,
+ _assert_subject@3 = begin
+ _pipe@9 = erlang:'band'(Hex, 16#ff),
+ _pipe@10 = gleam@int:to_float(_pipe@9),
+ gleam@float:divide(_pipe@10, 255.0)
+ end,
+ {ok, A} = case _assert_subject@3 of
+ {ok, _} -> _assert_subject@3;
+ _assert_fail@3 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@3,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 606})
+ end,
+ from_rgba(R, G, B, A)
+ end.
+
+-spec from_rgba_hex_string(binary()) -> {ok, colour()} | {error, nil}.
+from_rgba_hex_string(Hex_string) ->
+ gleam@result:then(
+ hex_string_to_int(Hex_string),
+ fun(Hex_int) -> from_rgba_hex(Hex_int) end
+ ).
+
+-spec to_rgba(colour()) -> {float(), float(), float(), float()}.
+to_rgba(Colour) ->
+ case Colour of
+ {rgba, R, G, B, A} ->
+ {R, G, B, A};
+
+ {hsla, H, S, L, A@1} ->
+ hsla_to_rgba(H, S, L, A@1)
+ end.
+
+-spec to_hsla(colour()) -> {float(), float(), float(), float()}.
+to_hsla(Colour) ->
+ case Colour of
+ {hsla, H, S, L, A} ->
+ {H, S, L, A};
+
+ {rgba, R, G, B, A@1} ->
+ rgba_to_hsla(R, G, B, A@1)
+ end.
+
+-spec to_css_rgba_string(colour()) -> binary().
+to_css_rgba_string(Colour) ->
+ {R, G, B, A} = to_rgba(Colour),
+ Percent = fun(X) ->
+ _assert_subject = begin
+ _pipe = X,
+ _pipe@1 = gleam@float:multiply(_pipe, 10000.0),
+ _pipe@2 = gleam@float:round(_pipe@1),
+ _pipe@3 = gleam@int:to_float(_pipe@2),
+ gleam@float:divide(_pipe@3, 100.0)
+ end,
+ {ok, P} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"to_css_rgba_string"/utf8>>,
+ line => 704})
+ end,
+ P
+ end,
+ Round_to = fun(X@1) ->
+ _assert_subject@1 = begin
+ _pipe@4 = X@1,
+ _pipe@5 = gleam@float:multiply(_pipe@4, 1000.0),
+ _pipe@6 = gleam@float:round(_pipe@5),
+ _pipe@7 = gleam@int:to_float(_pipe@6),
+ gleam@float:divide(_pipe@7, 1000.0)
+ end,
+ {ok, R@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"to_css_rgba_string"/utf8>>,
+ line => 716})
+ end,
+ R@1
+ end,
+ gleam@string:join(
+ [<<"rgba("/utf8>>,
+ <<(gleam@float:to_string(Percent(R)))/binary, "%,"/utf8>>,
+ <<(gleam@float:to_string(Percent(G)))/binary, "%,"/utf8>>,
+ <<(gleam@float:to_string(Percent(B)))/binary, "%,"/utf8>>,
+ gleam@float:to_string(Round_to(A)),
+ <<")"/utf8>>],
+ <<""/utf8>>
+ ).
+
+-spec to_rgba_hex(colour()) -> integer().
+to_rgba_hex(Colour) ->
+ {R, G, B, A} = to_rgba(Colour),
+ Red = begin
+ _pipe = R * 255.0,
+ _pipe@1 = gleam@float:round(_pipe),
+ erlang:'bsl'(_pipe@1, 24)
+ end,
+ Green = begin
+ _pipe@2 = G * 255.0,
+ _pipe@3 = gleam@float:round(_pipe@2),
+ erlang:'bsl'(_pipe@3, 16)
+ end,
+ Blue = begin
+ _pipe@4 = B * 255.0,
+ _pipe@5 = gleam@float:round(_pipe@4),
+ erlang:'bsl'(_pipe@5, 8)
+ end,
+ Alpha = begin
+ _pipe@6 = A * 255.0,
+ gleam@float:round(_pipe@6)
+ end,
+ ((Red + Green) + Blue) + Alpha.
+
+-spec to_rgba_hex_string(colour()) -> binary().
+to_rgba_hex_string(Colour) ->
+ _pipe = to_rgba_hex(Colour),
+ gleam@int:to_base16(_pipe).
+
+-spec to_rgb_hex(colour()) -> integer().
+to_rgb_hex(Colour) ->
+ {R, G, B, _} = to_rgba(Colour),
+ Red = begin
+ _pipe = R * 255.0,
+ _pipe@1 = gleam@float:round(_pipe),
+ erlang:'bsl'(_pipe@1, 16)
+ end,
+ Green = begin
+ _pipe@2 = G * 255.0,
+ _pipe@3 = gleam@float:round(_pipe@2),
+ erlang:'bsl'(_pipe@3, 8)
+ end,
+ Blue = begin
+ _pipe@4 = B * 255.0,
+ gleam@float:round(_pipe@4)
+ end,
+ (Red + Green) + Blue.
+
+-spec to_rgb_hex_string(colour()) -> binary().
+to_rgb_hex_string(Colour) ->
+ _pipe = to_rgb_hex(Colour),
+ gleam@int:to_base16(_pipe).
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache
new file mode 100644
index 0000000..0154b0b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta
new file mode 100644
index 0000000..0c78df4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl
new file mode 100644
index 0000000..28ed9fd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.erl
@@ -0,0 +1,75 @@
+-module(gleam_community@colour@accessibility).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([luminance/1, contrast_ratio/2, maximum_contrast/2]).
+
+-spec intensity(float()) -> float().
+intensity(Colour_value) ->
+ case true of
+ _ when Colour_value =< 0.03928 ->
+ Colour_value / 12.92;
+
+ _ ->
+ _assert_subject = gleam@float:power(
+ (Colour_value + 0.055) / 1.055,
+ 2.4
+ ),
+ {ok, I} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/colour/accessibility"/utf8>>,
+ function => <<"intensity"/utf8>>,
+ line => 62})
+ end,
+ I
+ end.
+
+-spec luminance(gleam_community@colour:colour()) -> float().
+luminance(Colour) ->
+ {R, G, B, _} = gleam_community@colour:to_rgba(Colour),
+ R_intensity = intensity(R),
+ G_intensity = intensity(G),
+ B_intensity = intensity(B),
+ ((0.2126 * R_intensity) + (0.7152 * G_intensity)) + (0.0722 * B_intensity).
+
+-spec contrast_ratio(
+ gleam_community@colour:colour(),
+ gleam_community@colour:colour()
+) -> float().
+contrast_ratio(Colour_a, Colour_b) ->
+ Luminance_a = luminance(Colour_a) + 0.05,
+ Luminance_b = luminance(Colour_b) + 0.05,
+ case Luminance_a > Luminance_b of
+ true ->
+ case Luminance_b of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> Luminance_a / Gleam@denominator
+ end;
+
+ false ->
+ case Luminance_a of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> Luminance_b / Gleam@denominator@1
+ end
+ end.
+
+-spec maximum_contrast(
+ gleam_community@colour:colour(),
+ list(gleam_community@colour:colour())
+) -> {ok, gleam_community@colour:colour()} | {error, nil}.
+maximum_contrast(Base, Colours) ->
+ _pipe = Colours,
+ _pipe@1 = gleam@list:sort(
+ _pipe,
+ fun(Colour_a, Colour_b) ->
+ Contrast_a = contrast_ratio(Base, Colour_a),
+ Contrast_b = contrast_ratio(Base, Colour_b),
+ gleam@float:compare(Contrast_b, Contrast_a)
+ end
+ ),
+ gleam@list:first(_pipe@1).
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beam b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beam
new file mode 100644
index 0000000..e25d425
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beam b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beam
new file mode 100644
index 0000000..e599de6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community@colour@accessibility.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app
new file mode 100644
index 0000000..51800d3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/ebin/gleam_community_colour.app
@@ -0,0 +1,7 @@
+{application, gleam_community_colour, [
+ {vsn, "1.2.0"},
+ {applications, [gleam_stdlib]},
+ {description, "Colour types, conversions, and other utilities"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl
new file mode 100644
index 0000000..06116df
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Hsla.hrl
@@ -0,0 +1 @@
+-record(hsla, {h :: float(), s :: float(), l :: float(), a :: float()}).
diff --git a/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl
new file mode 100644
index 0000000..fff139e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_colour/include/gleam_community@colour_Rgba.hrl
@@ -0,0 +1 @@
+-record(rgba, {r :: float(), g :: float(), b :: float(), a :: float()}).
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache
new file mode 100644
index 0000000..c8def84
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta
new file mode 100644
index 0000000..23d4726
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl
new file mode 100644
index 0000000..9cdaccb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.erl
@@ -0,0 +1,172 @@
+-module(gleam_community@maths@arithmetics).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([gcd/2, lcm/2, divisors/1, proper_divisors/1, float_sum/1, int_sum/1, float_product/1, int_product/1, float_cumulative_sum/1, int_cumulative_sum/1, float_cumumlative_product/1, int_cumulative_product/1]).
+
+-spec do_gcd(integer(), integer()) -> integer().
+do_gcd(X, Y) ->
+ case X =:= 0 of
+ true ->
+ Y;
+
+ false ->
+ _assert_subject = gleam@int:modulo(Y, X),
+ {ok, Z} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/arithmetics"/utf8>>,
+ function => <<"do_gcd"/utf8>>,
+ line => 93})
+ end,
+ do_gcd(Z, X)
+ end.
+
+-spec gcd(integer(), integer()) -> integer().
+gcd(X, Y) ->
+ Absx = gleam_community@maths@piecewise:int_absolute_value(X),
+ Absy = gleam_community@maths@piecewise:int_absolute_value(Y),
+ do_gcd(Absx, Absy).
+
+-spec lcm(integer(), integer()) -> integer().
+lcm(X, Y) ->
+ Absx = gleam_community@maths@piecewise:int_absolute_value(X),
+ Absy = gleam_community@maths@piecewise:int_absolute_value(Y),
+ case do_gcd(Absx, Absy) of
+ 0 -> 0;
+ Gleam@denominator -> Absx * Absy div Gleam@denominator
+ end.
+
+-spec find_divisors(integer()) -> list(integer()).
+find_divisors(N) ->
+ Nabs = gleam_community@maths@piecewise:float_absolute_value(
+ gleam_community@maths@conversion:int_to_float(N)
+ ),
+ _assert_subject = gleam_community@maths@elementary:square_root(Nabs),
+ {ok, Sqrt_result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/arithmetics"/utf8>>,
+ function => <<"find_divisors"/utf8>>,
+ line => 176})
+ end,
+ Max = gleam_community@maths@conversion:float_to_int(Sqrt_result) + 1,
+ _pipe = gleam@list:range(2, Max),
+ _pipe@1 = gleam@list:fold(_pipe, [1, N], fun(Acc, I) -> case (case I of
+ 0 -> 0;
+ Gleam@denominator -> N rem Gleam@denominator
+ end) =:= 0 of
+ true ->
+ [I, case I of
+ 0 -> 0;
+ Gleam@denominator@1 -> N div Gleam@denominator@1
+ end | Acc];
+
+ false ->
+ Acc
+ end end),
+ _pipe@2 = gleam@list:unique(_pipe@1),
+ gleam@list:sort(_pipe@2, fun gleam@int:compare/2).
+
+-spec divisors(integer()) -> list(integer()).
+divisors(N) ->
+ find_divisors(N).
+
+-spec proper_divisors(integer()) -> list(integer()).
+proper_divisors(N) ->
+ Divisors = find_divisors(N),
+ _pipe = Divisors,
+ gleam@list:take(_pipe, gleam@list:length(Divisors) - 1).
+
+-spec float_sum(list(float())) -> float().
+float_sum(Arr) ->
+ case Arr of
+ [] ->
+ +0.0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, +0.0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec int_sum(list(integer())) -> integer().
+int_sum(Arr) ->
+ case Arr of
+ [] ->
+ 0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec float_product(list(float())) -> float().
+float_product(Arr) ->
+ case Arr of
+ [] ->
+ 1.0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 1.0, fun(Acc, A) -> A * Acc end)
+ end.
+
+-spec int_product(list(integer())) -> integer().
+int_product(Arr) ->
+ case Arr of
+ [] ->
+ 1;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 1, fun(Acc, A) -> A * Acc end)
+ end.
+
+-spec float_cumulative_sum(list(float())) -> list(float()).
+float_cumulative_sum(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, +0.0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec int_cumulative_sum(list(integer())) -> list(integer()).
+int_cumulative_sum(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, 0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec float_cumumlative_product(list(float())) -> list(float()).
+float_cumumlative_product(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, 1.0, fun(Acc, A) -> A * Acc end)
+ end.
+
+-spec int_cumulative_product(list(integer())) -> list(integer()).
+int_cumulative_product(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, 1, fun(Acc, A) -> A * Acc end)
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache
new file mode 100644
index 0000000..3fffb45
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta
new file mode 100644
index 0000000..f8262ee
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl
new file mode 100644
index 0000000..d600fbe
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.erl
@@ -0,0 +1,218 @@
+-module(gleam_community@maths@combinatorics).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([combination/2, factorial/1, permutation/2, list_combination/2, list_permutation/1, cartesian_product/2]).
+
+-spec combination(integer(), integer()) -> {ok, integer()} | {error, binary()}.
+combination(N, K) ->
+ case N < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case (K < 0) orelse (K > N) of
+ true ->
+ _pipe@1 = 0,
+ {ok, _pipe@1};
+
+ false ->
+ case (K =:= 0) orelse (K =:= N) of
+ true ->
+ _pipe@2 = 1,
+ {ok, _pipe@2};
+
+ false ->
+ Min = case K < (N - K) of
+ true ->
+ K;
+
+ false ->
+ N - K
+ end,
+ _pipe@3 = gleam@list:range(1, Min),
+ _pipe@4 = gleam@list:fold(
+ _pipe@3,
+ 1,
+ fun(Acc, X) -> case X of
+ 0 -> 0;
+ Gleam@denominator -> Acc * ((N + 1) - X)
+ div Gleam@denominator
+ end end
+ ),
+ {ok, _pipe@4}
+ end
+ end
+ end.
+
+-spec factorial(integer()) -> {ok, integer()} | {error, binary()}.
+factorial(N) ->
+ case N < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case N of
+ 0 ->
+ _pipe@1 = 1,
+ {ok, _pipe@1};
+
+ 1 ->
+ _pipe@2 = 1,
+ {ok, _pipe@2};
+
+ _ ->
+ _pipe@3 = gleam@list:range(1, N),
+ _pipe@4 = gleam@list:fold(
+ _pipe@3,
+ 1,
+ fun(Acc, X) -> Acc * X end
+ ),
+ {ok, _pipe@4}
+ end
+ end.
+
+-spec permutation(integer(), integer()) -> {ok, integer()} | {error, binary()}.
+permutation(N, K) ->
+ case N < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case (K < 0) orelse (K > N) of
+ true ->
+ _pipe@1 = 0,
+ {ok, _pipe@1};
+
+ false ->
+ case K =:= N of
+ true ->
+ _pipe@2 = 1,
+ {ok, _pipe@2};
+
+ false ->
+ _assert_subject = factorial(N),
+ {ok, V1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/combinatorics"/utf8>>,
+ function => <<"permutation"/utf8>>,
+ line => 241})
+ end,
+ _assert_subject@1 = factorial(N - K),
+ {ok, V2} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/combinatorics"/utf8>>,
+ function => <<"permutation"/utf8>>,
+ line => 242})
+ end,
+ _pipe@3 = case V2 of
+ 0 -> 0;
+ Gleam@denominator -> V1 div Gleam@denominator
+ end,
+ {ok, _pipe@3}
+ end
+ end
+ end.
+
+-spec do_list_combination(list(ORJ), integer(), list(ORJ)) -> list(list(ORJ)).
+do_list_combination(Arr, K, Prefix) ->
+ case K of
+ 0 ->
+ [gleam@list:reverse(Prefix)];
+
+ _ ->
+ case Arr of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ With_x = do_list_combination(Xs, K - 1, [X | Prefix]),
+ Without_x = do_list_combination(Xs, K, Prefix),
+ gleam@list:append(With_x, Without_x)
+ end
+ end.
+
+-spec list_combination(list(ORD), integer()) -> {ok, list(list(ORD))} |
+ {error, binary()}.
+list_combination(Arr, K) ->
+ case K < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: k < 0. Valid input is k > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case K > gleam@list:length(Arr) of
+ true ->
+ _pipe@1 = <<"Invalid input argument: k > length(arr). Valid input is 0 < k <= length(arr)."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _pipe@2 = do_list_combination(Arr, K, []),
+ {ok, _pipe@2}
+ end
+ end.
+
+-spec list_permutation(list(ORO)) -> list(list(ORO)).
+list_permutation(Arr) ->
+ case Arr of
+ [] ->
+ [[]];
+
+ _ ->
+ gleam@list:flat_map(
+ Arr,
+ fun(X) ->
+ _assert_subject = gleam@list:pop(Arr, fun(Y) -> X =:= Y end),
+ {ok, {_, Remaining}} = case _assert_subject of
+ {ok, {_, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/combinatorics"/utf8>>,
+ function => <<"list_permutation"/utf8>>,
+ line => 373})
+ end,
+ gleam@list:map(
+ list_permutation(Remaining),
+ fun(Perm) -> [X | Perm] end
+ )
+ end
+ )
+ end.
+
+-spec cartesian_product(list(ORS), list(ORS)) -> list({ORS, ORS}).
+cartesian_product(Xarr, Yarr) ->
+ Xset = begin
+ _pipe = Xarr,
+ gleam@set:from_list(_pipe)
+ end,
+ Yset = begin
+ _pipe@1 = Yarr,
+ gleam@set:from_list(_pipe@1)
+ end,
+ _pipe@2 = Xset,
+ _pipe@3 = gleam@set:fold(
+ _pipe@2,
+ gleam@set:new(),
+ fun(Accumulator0, Member0) ->
+ gleam@set:fold(
+ Yset,
+ Accumulator0,
+ fun(Accumulator1, Member1) ->
+ gleam@set:insert(Accumulator1, {Member0, Member1})
+ end
+ )
+ end
+ ),
+ gleam@set:to_list(_pipe@3).
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache
new file mode 100644
index 0000000..a95ea4b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta
new file mode 100644
index 0000000..374a6fb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl
new file mode 100644
index 0000000..4923523
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.erl
@@ -0,0 +1,24 @@
+-module(gleam_community@maths@conversion).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([int_to_float/1, float_to_int/1, degrees_to_radians/1, radians_to_degrees/1]).
+
+-spec int_to_float(integer()) -> float().
+int_to_float(X) ->
+ gleam@int:to_float(X).
+
+-spec float_to_int(float()) -> integer().
+float_to_int(X) ->
+ erlang:trunc(X).
+
+-spec degrees_to_radians(float()) -> float().
+degrees_to_radians(X) ->
+ (X * math:pi()) / 180.0.
+
+-spec radians_to_degrees(float()) -> float().
+radians_to_degrees(X) ->
+ case math:pi() of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> X * 180.0 / Gleam@denominator
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache
new file mode 100644
index 0000000..8b9e7ca
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta
new file mode 100644
index 0000000..8a3590f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl
new file mode 100644
index 0000000..15d6abc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.erl
@@ -0,0 +1,286 @@
+-module(gleam_community@maths@elementary).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([acos/1, acosh/1, asin/1, asinh/1, atan/1, atan2/2, atanh/1, cos/1, cosh/1, sin/1, sinh/1, tan/1, tanh/1, exponential/1, natural_logarithm/1, logarithm_2/1, logarithm_10/1, logarithm/2, power/2, square_root/1, cube_root/1, nth_root/2, pi/0, tau/0, e/0]).
+
+-spec acos(float()) -> {ok, float()} | {error, binary()}.
+acos(X) ->
+ case (X >= -1.0) andalso (X =< 1.0) of
+ true ->
+ _pipe = math:acos(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec acosh(float()) -> {ok, float()} | {error, binary()}.
+acosh(X) ->
+ case X >= 1.0 of
+ true ->
+ _pipe = math:acosh(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x < 1. Valid input is x >= 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec asin(float()) -> {ok, float()} | {error, binary()}.
+asin(X) ->
+ case (X >= -1.0) andalso (X =< 1.0) of
+ true ->
+ _pipe = math:asin(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec asinh(float()) -> float().
+asinh(X) ->
+ math:asinh(X).
+
+-spec atan(float()) -> float().
+atan(X) ->
+ math:atan(X).
+
+-spec atan2(float(), float()) -> float().
+atan2(Y, X) ->
+ math:atan2(Y, X).
+
+-spec atanh(float()) -> {ok, float()} | {error, binary()}.
+atanh(X) ->
+ case (X > -1.0) andalso (X < 1.0) of
+ true ->
+ _pipe = math:atanh(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x > -1 or x < 1. Valid input is -1. < x < 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec cos(float()) -> float().
+cos(X) ->
+ math:cos(X).
+
+-spec cosh(float()) -> float().
+cosh(X) ->
+ math:cosh(X).
+
+-spec sin(float()) -> float().
+sin(X) ->
+ math:sin(X).
+
+-spec sinh(float()) -> float().
+sinh(X) ->
+ math:sinh(X).
+
+-spec tan(float()) -> float().
+tan(X) ->
+ math:tan(X).
+
+-spec tanh(float()) -> float().
+tanh(X) ->
+ math:tanh(X).
+
+-spec exponential(float()) -> float().
+exponential(X) ->
+ math:exp(X).
+
+-spec natural_logarithm(float()) -> {ok, float()} | {error, binary()}.
+natural_logarithm(X) ->
+ case X > +0.0 of
+ true ->
+ _pipe = math:log(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec logarithm_2(float()) -> {ok, float()} | {error, binary()}.
+logarithm_2(X) ->
+ case X > +0.0 of
+ true ->
+ _pipe = math:log2(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec logarithm_10(float()) -> {ok, float()} | {error, binary()}.
+logarithm_10(X) ->
+ case X > +0.0 of
+ true ->
+ _pipe = math:log10(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec logarithm(float(), gleam@option:option(float())) -> {ok, float()} |
+ {error, binary()}.
+logarithm(X, Base) ->
+ case X > +0.0 of
+ true ->
+ case Base of
+ {some, A} ->
+ case (A > +0.0) andalso (A /= 1.0) of
+ true ->
+ _assert_subject = logarithm_10(X),
+ {ok, Numerator} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"logarithm"/utf8>>,
+ line => 820})
+ end,
+ _assert_subject@1 = logarithm_10(A),
+ {ok, Denominator} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"logarithm"/utf8>>,
+ line => 821})
+ end,
+ _pipe = case Denominator of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> Numerator / Gleam@denominator
+ end,
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>,
+ {error, _pipe@1}
+ end;
+
+ _ ->
+ _pipe@2 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>,
+ {error, _pipe@2}
+ end;
+
+ _ ->
+ _pipe@3 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@3}
+ end.
+
+-spec power(float(), float()) -> {ok, float()} | {error, binary()}.
+power(X, Y) ->
+ Fractional = (math:ceil(Y) - Y) > +0.0,
+ case ((X < +0.0) andalso Fractional) orelse ((X =:= +0.0) andalso (Y < +0.0)) of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0 and y is fractional or x = 0 and y < 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ _pipe@1 = math:pow(X, Y),
+ {ok, _pipe@1}
+ end.
+
+-spec square_root(float()) -> {ok, float()} | {error, binary()}.
+square_root(X) ->
+ case X < +0.0 of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ _assert_subject = power(X, 1.0 / 2.0),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"square_root"/utf8>>,
+ line => 1066})
+ end,
+ _pipe@1 = Result,
+ {ok, _pipe@1}
+ end.
+
+-spec cube_root(float()) -> {ok, float()} | {error, binary()}.
+cube_root(X) ->
+ case X < +0.0 of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ _assert_subject = power(X, 1.0 / 3.0),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"cube_root"/utf8>>,
+ line => 1118})
+ end,
+ _pipe@1 = Result,
+ {ok, _pipe@1}
+ end.
+
+-spec nth_root(float(), integer()) -> {ok, float()} | {error, binary()}.
+nth_root(X, N) ->
+ case X < +0.0 of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0. Valid input is x > 0"/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case N >= 1 of
+ true ->
+ _assert_subject = power(X, case gleam@int:to_float(N) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"nth_root"/utf8>>,
+ line => 1175})
+ end,
+ _pipe@1 = Result,
+ {ok, _pipe@1};
+
+ false ->
+ _pipe@2 = <<"Invalid input argument: n < 1. Valid input is n >= 2."/utf8>>,
+ {error, _pipe@2}
+ end
+ end.
+
+-spec pi() -> float().
+pi() ->
+ math:pi().
+
+-spec tau() -> float().
+tau() ->
+ 2.0 * pi().
+
+-spec e() -> float().
+e() ->
+ exponential(1.0).
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache
new file mode 100644
index 0000000..fc137ef
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta
new file mode 100644
index 0000000..ad6a7f1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl
new file mode 100644
index 0000000..9b0c432
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.erl
@@ -0,0 +1,281 @@
+-module(gleam_community@maths@metrics).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([norm/2, minkowski_distance/3, manhatten_distance/2, euclidean_distance/2, mean/1, median/1, variance/2, standard_deviation/2]).
+
+-spec norm(list(float()), float()) -> float().
+norm(Arr, P) ->
+ case Arr of
+ [] ->
+ +0.0;
+
+ _ ->
+ Agg = begin
+ _pipe = Arr,
+ gleam@list:fold(
+ _pipe,
+ +0.0,
+ fun(Acc, A) ->
+ _assert_subject = gleam_community@maths@elementary:power(
+ gleam_community@maths@piecewise:float_absolute_value(
+ A
+ ),
+ P
+ ),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"norm"/utf8>>,
+ line => 101})
+ end,
+ Result + Acc
+ end
+ )
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ Agg,
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end
+ ),
+ {ok, Result@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"norm"/utf8>>,
+ line => 106})
+ end,
+ Result@1
+ end.
+
+-spec minkowski_distance(list(float()), list(float()), float()) -> {ok, float()} |
+ {error, binary()}.
+minkowski_distance(Xarr, Yarr, P) ->
+ Xlen = gleam@list:length(Xarr),
+ Ylen = gleam@list:length(Yarr),
+ case Xlen =:= Ylen of
+ false ->
+ _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>,
+ {error, _pipe};
+
+ true ->
+ case P < 1.0 of
+ true ->
+ _pipe@1 = <<"Invalid input argument: p < 1. Valid input is p >= 1."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _pipe@2 = gleam@list:zip(Xarr, Yarr),
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(Tuple) ->
+ gleam@pair:first(Tuple) - gleam@pair:second(Tuple)
+ end
+ ),
+ _pipe@4 = norm(_pipe@3, P),
+ {ok, _pipe@4}
+ end
+ end.
+
+-spec manhatten_distance(list(float()), list(float())) -> {ok, float()} |
+ {error, binary()}.
+manhatten_distance(Xarr, Yarr) ->
+ minkowski_distance(Xarr, Yarr, 1.0).
+
+-spec euclidean_distance(list(float()), list(float())) -> {ok, float()} |
+ {error, binary()}.
+euclidean_distance(Xarr, Yarr) ->
+ minkowski_distance(Xarr, Yarr, 2.0).
+
+-spec mean(list(float())) -> {ok, float()} | {error, binary()}.
+mean(Arr) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _pipe@1 = Arr,
+ _pipe@2 = gleam_community@maths@arithmetics:float_sum(_pipe@1),
+ _pipe@3 = (fun(A) ->
+ case gleam_community@maths@conversion:int_to_float(
+ gleam@list:length(Arr)
+ ) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> A / Gleam@denominator
+ end
+ end)(_pipe@2),
+ {ok, _pipe@3}
+ end.
+
+-spec median(list(float())) -> {ok, float()} | {error, binary()}.
+median(Arr) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ Count = gleam@list:length(Arr),
+ Mid = gleam@list:length(Arr) div 2,
+ Sorted = gleam@list:sort(Arr, fun gleam@float:compare/2),
+ case gleam_community@maths@predicates:is_odd(Count) of
+ true ->
+ _assert_subject = gleam@list:at(Sorted, Mid),
+ {ok, Val0} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"median"/utf8>>,
+ line => 402})
+ end,
+ _pipe@1 = Val0,
+ {ok, _pipe@1};
+
+ false ->
+ _assert_subject@1 = gleam@list:at(Sorted, Mid - 1),
+ {ok, Val0@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"median"/utf8>>,
+ line => 409})
+ end,
+ _assert_subject@2 = gleam@list:at(Sorted, Mid),
+ {ok, Val1} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"median"/utf8>>,
+ line => 410})
+ end,
+ _pipe@2 = [Val0@1, Val1],
+ mean(_pipe@2)
+ end
+ end.
+
+-spec variance(list(float()), integer()) -> {ok, float()} | {error, binary()}.
+variance(Arr, Ddof) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ case Ddof < 0 of
+ true ->
+ _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _assert_subject = mean(Arr),
+ {ok, Mean} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"variance"/utf8>>,
+ line => 475})
+ end,
+ _pipe@2 = Arr,
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(A) ->
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ A - Mean,
+ 2.0
+ ),
+ {ok, Result} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"variance"/utf8>>,
+ line => 478})
+ end,
+ Result
+ end
+ ),
+ _pipe@4 = gleam_community@maths@arithmetics:float_sum(
+ _pipe@3
+ ),
+ _pipe@5 = (fun(A@1) ->
+ case (gleam_community@maths@conversion:int_to_float(
+ gleam@list:length(Arr)
+ )
+ - gleam_community@maths@conversion:int_to_float(Ddof)) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> A@1 / Gleam@denominator
+ end
+ end)(_pipe@4),
+ {ok, _pipe@5}
+ end
+ end.
+
+-spec standard_deviation(list(float()), integer()) -> {ok, float()} |
+ {error, binary()}.
+standard_deviation(Arr, Ddof) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ case Ddof < 0 of
+ true ->
+ _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _assert_subject = variance(Arr, Ddof),
+ {ok, Variance} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"standard_deviation"/utf8>>,
+ line => 551})
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:square_root(
+ Variance
+ ),
+ {ok, Stdev} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"standard_deviation"/utf8>>,
+ line => 554})
+ end,
+ _pipe@2 = Stdev,
+ {ok, _pipe@2}
+ end
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache
new file mode 100644
index 0000000..e056dbf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta
new file mode 100644
index 0000000..21c97d4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl
new file mode 100644
index 0000000..85fc290
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.erl
@@ -0,0 +1,563 @@
+-module(gleam_community@maths@piecewise).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([float_absolute_value/1, int_absolute_value/1, float_absolute_difference/2, int_absolute_difference/2, float_sign/1, round/3, ceiling/2, floor/2, truncate/2, int_sign/1, float_flip_sign/1, float_copy_sign/2, int_flip_sign/1, int_copy_sign/2, minimum/3, maximum/3, minmax/3, list_minimum/2, list_maximum/2, arg_minimum/2, arg_maximum/2, extrema/2]).
+-export_type([rounding_mode/0]).
+
+-type rounding_mode() :: round_nearest |
+ round_ties_away |
+ round_ties_up |
+ round_to_zero |
+ round_down |
+ round_up.
+
+-spec truncate_float(float()) -> float().
+truncate_float(X) ->
+ erlang:trunc(X).
+
+-spec round_to_zero(float(), float()) -> float().
+round_to_zero(P, X) ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> truncate_float(X * P) / Gleam@denominator
+ end.
+
+-spec round_down(float(), float()) -> float().
+round_down(P, X) ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> math:floor(X * P) / Gleam@denominator
+ end.
+
+-spec round_up(float(), float()) -> float().
+round_up(P, X) ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> math:ceil(X * P) / Gleam@denominator
+ end.
+
+-spec float_absolute_value(float()) -> float().
+float_absolute_value(X) ->
+ case X > +0.0 of
+ true ->
+ X;
+
+ false ->
+ -1.0 * X
+ end.
+
+-spec int_absolute_value(integer()) -> integer().
+int_absolute_value(X) ->
+ case X > 0 of
+ true ->
+ X;
+
+ false ->
+ -1 * X
+ end.
+
+-spec float_absolute_difference(float(), float()) -> float().
+float_absolute_difference(A, B) ->
+ _pipe = A - B,
+ float_absolute_value(_pipe).
+
+-spec int_absolute_difference(integer(), integer()) -> integer().
+int_absolute_difference(A, B) ->
+ _pipe = A - B,
+ int_absolute_value(_pipe).
+
+-spec do_float_sign(float()) -> float().
+do_float_sign(X) ->
+ case X < +0.0 of
+ true ->
+ -1.0;
+
+ false ->
+ case X =:= +0.0 of
+ true ->
+ +0.0;
+
+ false ->
+ 1.0
+ end
+ end.
+
+-spec float_sign(float()) -> float().
+float_sign(X) ->
+ do_float_sign(X).
+
+-spec round_to_nearest(float(), float()) -> float().
+round_to_nearest(P, X) ->
+ Xabs = float_absolute_value(X) * P,
+ Xabs_truncated = truncate_float(Xabs),
+ Remainder = Xabs - Xabs_truncated,
+ case Remainder of
+ _ when Remainder > 0.5 ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> float_sign(X) * truncate_float(Xabs + 1.0)
+ / Gleam@denominator
+ end;
+
+ _ when Remainder =:= 0.5 ->
+ _assert_subject = gleam@int:modulo(
+ gleam_community@maths@conversion:float_to_int(Xabs),
+ 2
+ ),
+ {ok, Is_even} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"round_to_nearest"/utf8>>,
+ line => 423})
+ end,
+ case Is_even =:= 0 of
+ true ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> float_sign(X) * Xabs_truncated / Gleam@denominator@1
+ end;
+
+ false ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@2 -> float_sign(X) * truncate_float(
+ Xabs + 1.0
+ )
+ / Gleam@denominator@2
+ end
+ end;
+
+ _ ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@3 -> float_sign(X) * Xabs_truncated / Gleam@denominator@3
+ end
+ end.
+
+-spec round_ties_away(float(), float()) -> float().
+round_ties_away(P, X) ->
+ Xabs = float_absolute_value(X) * P,
+ Remainder = Xabs - truncate_float(Xabs),
+ case Remainder of
+ _ when Remainder >= 0.5 ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> float_sign(X) * truncate_float(Xabs + 1.0)
+ / Gleam@denominator
+ end;
+
+ _ ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> float_sign(X) * truncate_float(Xabs) / Gleam@denominator@1
+ end
+ end.
+
+-spec round_ties_up(float(), float()) -> float().
+round_ties_up(P, X) ->
+ Xabs = float_absolute_value(X) * P,
+ Xabs_truncated = truncate_float(Xabs),
+ Remainder = Xabs - Xabs_truncated,
+ case Remainder of
+ _ when (Remainder >= 0.5) andalso (X >= +0.0) ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> float_sign(X) * truncate_float(Xabs + 1.0)
+ / Gleam@denominator
+ end;
+
+ _ ->
+ case P of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> float_sign(X) * Xabs_truncated / Gleam@denominator@1
+ end
+ end.
+
+-spec do_round(float(), float(), gleam@option:option(rounding_mode())) -> {ok,
+ float()} |
+ {error, binary()}.
+do_round(P, X, Mode) ->
+ case Mode of
+ {some, round_nearest} ->
+ _pipe = round_to_nearest(P, X),
+ {ok, _pipe};
+
+ {some, round_ties_away} ->
+ _pipe@1 = round_ties_away(P, X),
+ {ok, _pipe@1};
+
+ {some, round_ties_up} ->
+ _pipe@2 = round_ties_up(P, X),
+ {ok, _pipe@2};
+
+ {some, round_to_zero} ->
+ _pipe@3 = round_to_zero(P, X),
+ {ok, _pipe@3};
+
+ {some, round_down} ->
+ _pipe@4 = round_down(P, X),
+ {ok, _pipe@4};
+
+ {some, round_up} ->
+ _pipe@5 = round_up(P, X),
+ {ok, _pipe@5};
+
+ none ->
+ _pipe@6 = round_to_nearest(P, X),
+ {ok, _pipe@6}
+ end.
+
+-spec round(
+ float(),
+ gleam@option:option(integer()),
+ gleam@option:option(rounding_mode())
+) -> {ok, float()} | {error, binary()}.
+round(X, Digits, Mode) ->
+ case Digits of
+ {some, A} ->
+ _assert_subject = gleam_community@maths@elementary:power(
+ 10.0,
+ gleam_community@maths@conversion:int_to_float(A)
+ ),
+ {ok, P} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"round"/utf8>>,
+ line => 366})
+ end,
+ do_round(P, X, Mode);
+
+ none ->
+ do_round(1.0, X, Mode)
+ end.
+
+-spec ceiling(float(), gleam@option:option(integer())) -> {ok, float()} |
+ {error, binary()}.
+ceiling(X, Digits) ->
+ round(X, Digits, {some, round_up}).
+
+-spec floor(float(), gleam@option:option(integer())) -> {ok, float()} |
+ {error, binary()}.
+floor(X, Digits) ->
+ round(X, Digits, {some, round_down}).
+
+-spec truncate(float(), gleam@option:option(integer())) -> {ok, float()} |
+ {error, binary()}.
+truncate(X, Digits) ->
+ round(X, Digits, {some, round_to_zero}).
+
+-spec do_int_sign(integer()) -> integer().
+do_int_sign(X) ->
+ case X < 0 of
+ true ->
+ -1;
+
+ false ->
+ case X =:= 0 of
+ true ->
+ 0;
+
+ false ->
+ 1
+ end
+ end.
+
+-spec int_sign(integer()) -> integer().
+int_sign(X) ->
+ do_int_sign(X).
+
+-spec float_flip_sign(float()) -> float().
+float_flip_sign(X) ->
+ -1.0 * X.
+
+-spec float_copy_sign(float(), float()) -> float().
+float_copy_sign(X, Y) ->
+ case float_sign(X) =:= float_sign(Y) of
+ true ->
+ X;
+
+ false ->
+ float_flip_sign(X)
+ end.
+
+-spec int_flip_sign(integer()) -> integer().
+int_flip_sign(X) ->
+ -1 * X.
+
+-spec int_copy_sign(integer(), integer()) -> integer().
+int_copy_sign(X, Y) ->
+ case int_sign(X) =:= int_sign(Y) of
+ true ->
+ X;
+
+ false ->
+ int_flip_sign(X)
+ end.
+
+-spec minimum(PCO, PCO, fun((PCO, PCO) -> gleam@order:order())) -> PCO.
+minimum(X, Y, Compare) ->
+ case Compare(X, Y) of
+ lt ->
+ X;
+
+ eq ->
+ X;
+
+ gt ->
+ Y
+ end.
+
+-spec maximum(PCP, PCP, fun((PCP, PCP) -> gleam@order:order())) -> PCP.
+maximum(X, Y, Compare) ->
+ case Compare(X, Y) of
+ lt ->
+ Y;
+
+ eq ->
+ Y;
+
+ gt ->
+ X
+ end.
+
+-spec minmax(PCQ, PCQ, fun((PCQ, PCQ) -> gleam@order:order())) -> {PCQ, PCQ}.
+minmax(X, Y, Compare) ->
+ {minimum(X, Y, Compare), maximum(X, Y, Compare)}.
+
+-spec list_minimum(list(PCR), fun((PCR, PCR) -> gleam@order:order())) -> {ok,
+ PCR} |
+ {error, binary()}.
+list_minimum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = gleam@list:at(Arr, 0),
+ {ok, Val0} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"list_minimum"/utf8>>,
+ line => 945})
+ end,
+ _pipe@1 = Arr,
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ Val0,
+ fun(Acc, Element) -> case Compare(Element, Acc) of
+ lt ->
+ Element;
+
+ _ ->
+ Acc
+ end end
+ ),
+ {ok, _pipe@2}
+ end.
+
+-spec list_maximum(list(PCV), fun((PCV, PCV) -> gleam@order:order())) -> {ok,
+ PCV} |
+ {error, binary()}.
+list_maximum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = gleam@list:at(Arr, 0),
+ {ok, Val0} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"list_maximum"/utf8>>,
+ line => 1004})
+ end,
+ _pipe@1 = Arr,
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ Val0,
+ fun(Acc, Element) -> case Compare(Acc, Element) of
+ lt ->
+ Element;
+
+ _ ->
+ Acc
+ end end
+ ),
+ {ok, _pipe@2}
+ end.
+
+-spec arg_minimum(list(PCZ), fun((PCZ, PCZ) -> gleam@order:order())) -> {ok,
+ list(integer())} |
+ {error, binary()}.
+arg_minimum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = begin
+ _pipe@1 = Arr,
+ list_minimum(_pipe@1, Compare)
+ end,
+ {ok, Min} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"arg_minimum"/utf8>>,
+ line => 1069})
+ end,
+ _pipe@2 = Arr,
+ _pipe@3 = gleam@list:index_map(
+ _pipe@2,
+ fun(Index, Element) -> case Compare(Element, Min) of
+ eq ->
+ Index;
+
+ _ ->
+ -1
+ end end
+ ),
+ _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of
+ -1 ->
+ false;
+
+ _ ->
+ true
+ end end),
+ {ok, _pipe@4}
+ end.
+
+-spec arg_maximum(list(PDE), fun((PDE, PDE) -> gleam@order:order())) -> {ok,
+ list(integer())} |
+ {error, binary()}.
+arg_maximum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = begin
+ _pipe@1 = Arr,
+ list_maximum(_pipe@1, Compare)
+ end,
+ {ok, Max} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"arg_maximum"/utf8>>,
+ line => 1139})
+ end,
+ _pipe@2 = Arr,
+ _pipe@3 = gleam@list:index_map(
+ _pipe@2,
+ fun(Index, Element) -> case Compare(Element, Max) of
+ eq ->
+ Index;
+
+ _ ->
+ -1
+ end end
+ ),
+ _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of
+ -1 ->
+ false;
+
+ _ ->
+ true
+ end end),
+ {ok, _pipe@4}
+ end.
+
+-spec extrema(list(PDJ), fun((PDJ, PDJ) -> gleam@order:order())) -> {ok,
+ {PDJ, PDJ}} |
+ {error, binary()}.
+extrema(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = gleam@list:at(Arr, 0),
+ {ok, Val_max} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"extrema"/utf8>>,
+ line => 1209})
+ end,
+ _assert_subject@1 = gleam@list:at(Arr, 0),
+ {ok, Val_min} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"extrema"/utf8>>,
+ line => 1210})
+ end,
+ _pipe@1 = Arr,
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ {Val_min, Val_max},
+ fun(Acc, Element) ->
+ First = gleam@pair:first(Acc),
+ Second = gleam@pair:second(Acc),
+ case {Compare(Element, First), Compare(Second, Element)} of
+ {lt, lt} ->
+ {Element, Element};
+
+ {lt, _} ->
+ {Element, Second};
+
+ {_, lt} ->
+ {First, Element};
+
+ {_, _} ->
+ {First, Second}
+ end
+ end
+ ),
+ {ok, _pipe@2}
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache
new file mode 100644
index 0000000..e9d8d6b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta
new file mode 100644
index 0000000..549041c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl
new file mode 100644
index 0000000..d991d89
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.erl
@@ -0,0 +1,118 @@
+-module(gleam_community@maths@predicates).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([is_close/4, all_close/4, is_fractional/1, is_power/2, is_perfect/1, is_even/1, is_odd/1]).
+
+-spec float_absolute_value(float()) -> float().
+float_absolute_value(X) ->
+ case X > +0.0 of
+ true ->
+ X;
+
+ false ->
+ -1.0 * X
+ end.
+
+-spec float_absolute_difference(float(), float()) -> float().
+float_absolute_difference(A, B) ->
+ _pipe = A - B,
+ float_absolute_value(_pipe).
+
+-spec is_close(float(), float(), float(), float()) -> boolean().
+is_close(A, B, Rtol, Atol) ->
+ X = float_absolute_difference(A, B),
+ Y = Atol + (Rtol * float_absolute_value(B)),
+ case X =< Y of
+ true ->
+ true;
+
+ false ->
+ false
+ end.
+
+-spec all_close(list(float()), list(float()), float(), float()) -> {ok,
+ list(boolean())} |
+ {error, binary()}.
+all_close(Xarr, Yarr, Rtol, Atol) ->
+ Xlen = gleam@list:length(Xarr),
+ Ylen = gleam@list:length(Yarr),
+ case Xlen =:= Ylen of
+ false ->
+ _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>,
+ {error, _pipe};
+
+ true ->
+ _pipe@1 = gleam@list:zip(Xarr, Yarr),
+ _pipe@2 = gleam@list:map(
+ _pipe@1,
+ fun(Z) ->
+ is_close(
+ gleam@pair:first(Z),
+ gleam@pair:second(Z),
+ Rtol,
+ Atol
+ )
+ end
+ ),
+ {ok, _pipe@2}
+ end.
+
+-spec is_fractional(float()) -> boolean().
+is_fractional(X) ->
+ (math:ceil(X) - X) > +0.0.
+
+-spec is_power(integer(), integer()) -> boolean().
+is_power(X, Y) ->
+ _assert_subject = gleam_community@maths@elementary:logarithm(
+ gleam@int:to_float(X),
+ {some, gleam@int:to_float(Y)}
+ ),
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/predicates"/utf8>>,
+ function => <<"is_power"/utf8>>,
+ line => 241})
+ end,
+ _assert_subject@1 = gleam_community@maths@piecewise:truncate(
+ Value,
+ {some, 0}
+ ),
+ {ok, Truncated} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/predicates"/utf8>>,
+ function => <<"is_power"/utf8>>,
+ line => 243})
+ end,
+ Rem = Value - Truncated,
+ Rem =:= +0.0.
+
+-spec do_sum(list(integer())) -> integer().
+do_sum(Arr) ->
+ case Arr of
+ [] ->
+ 0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec is_perfect(integer()) -> boolean().
+is_perfect(N) ->
+ do_sum(gleam_community@maths@arithmetics:proper_divisors(N)) =:= N.
+
+-spec is_even(integer()) -> boolean().
+is_even(X) ->
+ (X rem 2) =:= 0.
+
+-spec is_odd(integer()) -> boolean().
+is_odd(X) ->
+ (X rem 2) /= 0.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache
new file mode 100644
index 0000000..5542bd9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta
new file mode 100644
index 0000000..3a025a2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl
new file mode 100644
index 0000000..a080286
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.erl
@@ -0,0 +1,202 @@
+-module(gleam_community@maths@sequences).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([arange/3, linear_space/4, logarithmic_space/5, geometric_space/4]).
+
+-spec arange(float(), float(), float()) -> list(float()).
+arange(Start, Stop, Step) ->
+ case ((Start >= Stop) andalso (Step > +0.0)) orelse ((Start =< Stop) andalso (Step
+ < +0.0)) of
+ true ->
+ [];
+
+ false ->
+ Direction = case Start =< Stop of
+ true ->
+ 1.0;
+
+ false ->
+ -1.0
+ end,
+ Step_abs = gleam_community@maths@piecewise:float_absolute_value(
+ Step
+ ),
+ Num = case Step_abs of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value(
+ Start - Stop
+ )
+ / Gleam@denominator
+ end,
+ _pipe = gleam@list:range(
+ 0,
+ gleam_community@maths@conversion:float_to_int(Num) - 1
+ ),
+ gleam@list:map(
+ _pipe,
+ fun(I) ->
+ Start + ((gleam_community@maths@conversion:int_to_float(I) * Step_abs)
+ * Direction)
+ end
+ )
+ end.
+
+-spec linear_space(float(), float(), integer(), boolean()) -> {ok,
+ list(float())} |
+ {error, binary()}.
+linear_space(Start, Stop, Num, Endpoint) ->
+ Direction = case Start =< Stop of
+ true ->
+ 1.0;
+
+ false ->
+ -1.0
+ end,
+ case Num > 0 of
+ true ->
+ case Endpoint of
+ true ->
+ Increment = case gleam_community@maths@conversion:int_to_float(
+ Num - 1
+ ) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value(
+ Start - Stop
+ )
+ / Gleam@denominator
+ end,
+ _pipe = gleam@list:range(0, Num - 1),
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(I) ->
+ Start + ((gleam_community@maths@conversion:int_to_float(
+ I
+ )
+ * Increment)
+ * Direction)
+ end
+ ),
+ {ok, _pipe@1};
+
+ false ->
+ Increment@1 = case gleam_community@maths@conversion:int_to_float(
+ Num
+ ) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> gleam_community@maths@piecewise:float_absolute_value(
+ Start - Stop
+ )
+ / Gleam@denominator@1
+ end,
+ _pipe@2 = gleam@list:range(0, Num - 1),
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(I@1) ->
+ Start + ((gleam_community@maths@conversion:int_to_float(
+ I@1
+ )
+ * Increment@1)
+ * Direction)
+ end
+ ),
+ {ok, _pipe@3}
+ end;
+
+ false ->
+ _pipe@4 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>,
+ {error, _pipe@4}
+ end.
+
+-spec logarithmic_space(float(), float(), integer(), boolean(), float()) -> {ok,
+ list(float())} |
+ {error, binary()}.
+logarithmic_space(Start, Stop, Num, Endpoint, Base) ->
+ case Num > 0 of
+ true ->
+ _assert_subject = linear_space(Start, Stop, Num, Endpoint),
+ {ok, Linspace} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"logarithmic_space"/utf8>>,
+ line => 221})
+ end,
+ _pipe = Linspace,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(I) ->
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ Base,
+ I
+ ),
+ {ok, Result} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"logarithmic_space"/utf8>>,
+ line => 224})
+ end,
+ Result
+ end
+ ),
+ {ok, _pipe@1};
+
+ false ->
+ _pipe@2 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>,
+ {error, _pipe@2}
+ end.
+
+-spec geometric_space(float(), float(), integer(), boolean()) -> {ok,
+ list(float())} |
+ {error, binary()}.
+geometric_space(Start, Stop, Num, Endpoint) ->
+ case (Start =:= +0.0) orelse (Stop =:= +0.0) of
+ true ->
+ _pipe = <<""/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case Num > 0 of
+ true ->
+ _assert_subject = gleam_community@maths@elementary:logarithm_10(
+ Start
+ ),
+ {ok, Log_start} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"geometric_space"/utf8>>,
+ line => 293})
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:logarithm_10(
+ Stop
+ ),
+ {ok, Log_stop} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"geometric_space"/utf8>>,
+ line => 294})
+ end,
+ logarithmic_space(Log_start, Log_stop, Num, Endpoint, 10.0);
+
+ false ->
+ _pipe@1 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>,
+ {error, _pipe@1}
+ end
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache
new file mode 100644
index 0000000..7093e86
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta
new file mode 100644
index 0000000..3c21994
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl
new file mode 100644
index 0000000..ff0307f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.erl
@@ -0,0 +1,163 @@
+-module(gleam_community@maths@special).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([erf/1, gamma/1, beta/2, incomplete_gamma/2]).
+
+-spec erf(float()) -> float().
+erf(X) ->
+ _assert_subject = [0.254829592,
+ -0.284496736,
+ 1.421413741,
+ -1.453152027,
+ 1.061405429],
+ [A1, A2, A3, A4, A5] = case _assert_subject of
+ [_, _, _, _, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"erf"/utf8>>,
+ line => 79})
+ end,
+ P = 0.3275911,
+ Sign = gleam_community@maths@piecewise:float_sign(X),
+ X@1 = gleam_community@maths@piecewise:float_absolute_value(X),
+ T = case (1.0 + (P * X@1)) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end,
+ Y = 1.0 - ((((((((((A5 * T) + A4) * T) + A3) * T) + A2) * T) + A1) * T) * gleam_community@maths@elementary:exponential(
+ (-1.0 * X@1) * X@1
+ )),
+ Sign * Y.
+
+-spec gamma_lanczos(float()) -> float().
+gamma_lanczos(X) ->
+ case X < 0.5 of
+ true ->
+ case (gleam_community@maths@elementary:sin(
+ gleam_community@maths@elementary:pi() * X
+ )
+ * gamma_lanczos(1.0 - X)) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> gleam_community@maths@elementary:pi() / Gleam@denominator
+ end;
+
+ false ->
+ Z = X - 1.0,
+ X@1 = gleam@list:index_fold(
+ [0.99999999999980993,
+ 676.5203681218851,
+ -1259.1392167224028,
+ 771.32342877765313,
+ -176.61502916214059,
+ 12.507343278686905,
+ -0.13857109526572012,
+ 0.0000099843695780195716,
+ 0.00000015056327351493116],
+ +0.0,
+ fun(Acc, V, Index) -> case Index > 0 of
+ true ->
+ Acc + (case (Z + gleam_community@maths@conversion:int_to_float(
+ Index
+ )) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator@1 -> V / Gleam@denominator@1
+ end);
+
+ false ->
+ V
+ end end
+ ),
+ T = (Z + 7.0) + 0.5,
+ _assert_subject = gleam_community@maths@elementary:power(
+ 2.0 * gleam_community@maths@elementary:pi(),
+ 0.5
+ ),
+ {ok, V1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"gamma_lanczos"/utf8>>,
+ line => 146})
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ T,
+ Z + 0.5
+ ),
+ {ok, V2} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"gamma_lanczos"/utf8>>,
+ line => 147})
+ end,
+ ((V1 * V2) * gleam_community@maths@elementary:exponential(-1.0 * T))
+ * X@1
+ end.
+
+-spec gamma(float()) -> float().
+gamma(X) ->
+ gamma_lanczos(X).
+
+-spec beta(float(), float()) -> float().
+beta(X, Y) ->
+ case gamma(X + Y) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> gamma(X) * gamma(Y) / Gleam@denominator
+ end.
+
+-spec incomplete_gamma_sum(float(), float(), float(), float(), float()) -> float().
+incomplete_gamma_sum(A, X, T, S, N) ->
+ case T of
+ +0.0 ->
+ S;
+
+ _ ->
+ Ns = S + T,
+ Nt = T * (case (A + N) of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> X / Gleam@denominator
+ end),
+ incomplete_gamma_sum(A, X, Nt, Ns, N + 1.0)
+ end.
+
+-spec incomplete_gamma(float(), float()) -> {ok, float()} | {error, binary()}.
+incomplete_gamma(A, X) ->
+ case (A > +0.0) andalso (X >= +0.0) of
+ true ->
+ _assert_subject = gleam_community@maths@elementary:power(X, A),
+ {ok, V} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"incomplete_gamma"/utf8>>,
+ line => 173})
+ end,
+ _pipe = (V * gleam_community@maths@elementary:exponential(-1.0 * X))
+ * incomplete_gamma_sum(A, X, case A of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end, +0.0, 1.0),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invlaid input argument: a <= 0 or x < 0. Valid input is a > 0 and x >= 0."/utf8>>,
+ {error, _pipe@1}
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs
new file mode 100644
index 0000000..5c5ab31
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/_gleam_artefacts/maths.mjs
@@ -0,0 +1,95 @@
+export function sin(float) {
+ return Math.sin(float)
+}
+
+export function pi() {
+ return Math.PI
+}
+
+export function acos(float) {
+ return Math.acos(float)
+}
+
+export function acosh(float) {
+ return Math.acosh(float)
+}
+
+export function asin(float) {
+ return Math.asin(float)
+}
+
+export function asinh(float) {
+ return Math.asinh(float)
+}
+
+export function atan(float) {
+ return Math.atan(float)
+}
+
+export function tan(float) {
+ return Math.tan(float)
+}
+
+export function atan2(floaty, floatx) {
+ return Math.atan2(floaty, floatx)
+}
+
+export function atanh(float) {
+ return Math.atanh(float)
+}
+
+export function cos(float) {
+ return Math.cos(float)
+}
+
+export function cosh(float) {
+ return Math.cosh(float)
+}
+
+export function exponential(float) {
+ return Math.exp(float)
+}
+
+export function ceiling(float) {
+ return Math.ceil(float)
+}
+
+export function floor(float) {
+ return Math.floor(float)
+}
+
+export function power(base, exponent) {
+ return Math.pow(base, exponent)
+}
+
+export function logarithm(float) {
+ return Math.log(float)
+}
+
+export function logarithm_10(float) {
+ return Math.log10(float)
+}
+
+export function logarithm_2(float) {
+ return Math.log2(float)
+}
+
+export function sinh(float) {
+ return Math.sinh(float)
+}
+
+export function tanh(float) {
+ return Math.tanh(float)
+}
+
+export function sign(float) {
+ return Math.sign(float)
+}
+
+export function truncate(float) {
+ return Math.trunc(float)
+}
+
+export function to_int(float) {
+ return Math.trunc(float)
+}
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beam
new file mode 100644
index 0000000..42d317f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@arithmetics.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beam
new file mode 100644
index 0000000..5b0dcc5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@combinatorics.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beam
new file mode 100644
index 0000000..8e6afb8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@conversion.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beam
new file mode 100644
index 0000000..a54c3a0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@elementary.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beam
new file mode 100644
index 0000000..f55fdc0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@metrics.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beam
new file mode 100644
index 0000000..ca3947b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@piecewise.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beam
new file mode 100644
index 0000000..8a5ecf4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@predicates.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beam
new file mode 100644
index 0000000..d9defae
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@sequences.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beam b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beam
new file mode 100644
index 0000000..edfa64a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community@maths@special.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app
new file mode 100644
index 0000000..b24eaf7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_community_maths/ebin/gleam_community_maths.app
@@ -0,0 +1,7 @@
+{application, gleam_community_maths, [
+ {vsn, "1.0.1"},
+ {applications, [gleam_stdlib]},
+ {description, "A basic maths library"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache
new file mode 100644
index 0000000..d44adcc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta
new file mode 100644
index 0000000..12933b2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl
new file mode 100644
index 0000000..2889892
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.erl
@@ -0,0 +1,90 @@
+-module(gleam@erlang).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([format/1, term_to_binary/1, get_line/1, system_time/1, erlang_timestamp/0, rescue/1, binary_to_term/1, unsafe_binary_to_term/1, start_arguments/0, ensure_all_started/1, make_reference/0, priv_directory/1]).
+-export_type([safe/0, get_line_error/0, time_unit/0, crash/0, ensure_all_started_error/0, reference_/0]).
+
+-type safe() :: safe.
+
+-type get_line_error() :: eof | no_data.
+
+-type time_unit() :: second | millisecond | microsecond | nanosecond.
+
+-type crash() :: {exited, gleam@dynamic:dynamic_()} |
+ {thrown, gleam@dynamic:dynamic_()} |
+ {errored, gleam@dynamic:dynamic_()}.
+
+-type ensure_all_started_error() :: {unknown_application,
+ gleam@erlang@atom:atom_()} |
+ {application_failed_to_start,
+ gleam@erlang@atom:atom_(),
+ gleam@dynamic:dynamic_()}.
+
+-type reference_() :: any().
+
+-spec format(any()) -> binary().
+format(Term) ->
+ unicode:characters_to_binary(io_lib:format(<<"~p"/utf8>>, [Term])).
+
+-spec term_to_binary(any()) -> bitstring().
+term_to_binary(A) ->
+ erlang:term_to_binary(A).
+
+-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}.
+get_line(Prompt) ->
+ gleam_erlang_ffi:get_line(Prompt).
+
+-spec system_time(time_unit()) -> integer().
+system_time(A) ->
+ os:system_time(A).
+
+-spec erlang_timestamp() -> {integer(), integer(), integer()}.
+erlang_timestamp() ->
+ os:timestamp().
+
+-spec rescue(fun(() -> GQE)) -> {ok, GQE} | {error, crash()}.
+rescue(A) ->
+ gleam_erlang_ffi:rescue(A).
+
+-spec binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} |
+ {error, nil}.
+binary_to_term(Binary) ->
+ case gleam_erlang_ffi:rescue(
+ fun() -> erlang:binary_to_term(Binary, [safe]) end
+ ) of
+ {ok, Term} ->
+ {ok, Term};
+
+ {error, _} ->
+ {error, nil}
+ end.
+
+-spec unsafe_binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} |
+ {error, nil}.
+unsafe_binary_to_term(Binary) ->
+ case gleam_erlang_ffi:rescue(fun() -> erlang:binary_to_term(Binary, []) end) of
+ {ok, Term} ->
+ {ok, Term};
+
+ {error, _} ->
+ {error, nil}
+ end.
+
+-spec start_arguments() -> list(binary()).
+start_arguments() ->
+ _pipe = init:get_plain_arguments(),
+ gleam@list:map(_pipe, fun unicode:characters_to_binary/1).
+
+-spec ensure_all_started(gleam@erlang@atom:atom_()) -> {ok,
+ list(gleam@erlang@atom:atom_())} |
+ {error, ensure_all_started_error()}.
+ensure_all_started(Application) ->
+ gleam_erlang_ffi:ensure_all_started(Application).
+
+-spec make_reference() -> reference_().
+make_reference() ->
+ erlang:make_ref().
+
+-spec priv_directory(binary()) -> {ok, binary()} | {error, nil}.
+priv_directory(Name) ->
+ gleam_erlang_ffi:priv_directory(Name).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache
new file mode 100644
index 0000000..858e310
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta
new file mode 100644
index 0000000..be33011
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl
new file mode 100644
index 0000000..e9ad530
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.erl
@@ -0,0 +1,26 @@
+-module(gleam@erlang@atom).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_string/1, create_from_string/1, to_string/1, from_dynamic/1]).
+-export_type([atom_/0, from_string_error/0]).
+
+-type atom_() :: any().
+
+-type from_string_error() :: atom_not_loaded.
+
+-spec from_string(binary()) -> {ok, atom_()} | {error, from_string_error()}.
+from_string(A) ->
+ gleam_erlang_ffi:atom_from_string(A).
+
+-spec create_from_string(binary()) -> atom_().
+create_from_string(A) ->
+ erlang:binary_to_atom(A).
+
+-spec to_string(atom_()) -> binary().
+to_string(A) ->
+ erlang:atom_to_binary(A).
+
+-spec from_dynamic(gleam@dynamic:dynamic_()) -> {ok, atom_()} |
+ {error, list(gleam@dynamic:decode_error())}.
+from_dynamic(From) ->
+ gleam_erlang_ffi:atom_from_dynamic(From).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache
new file mode 100644
index 0000000..707598f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta
new file mode 100644
index 0000000..82cfdb5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl
new file mode 100644
index 0000000..9f9c0fa
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.erl
@@ -0,0 +1,15 @@
+-module(gleam@erlang@charlist).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_string/1, from_string/1]).
+-export_type([charlist/0]).
+
+-type charlist() :: any().
+
+-spec to_string(charlist()) -> binary().
+to_string(A) ->
+ unicode:characters_to_binary(A).
+
+-spec from_string(binary()) -> charlist().
+from_string(A) ->
+ unicode:characters_to_list(A).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache
new file mode 100644
index 0000000..3083885
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta
new file mode 100644
index 0000000..1cb342b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl
new file mode 100644
index 0000000..1fe6628
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.erl
@@ -0,0 +1,190 @@
+-module(gleam@erlang@file).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([file_info/1, link_info/1, is_directory/1, is_regular/1, file_exists/1, link_exists/1, make_directory/1, list_directory/1, delete_directory/1, recursive_delete/1, read/1, read_bits/1, write/2, write_bits/2, append/2, append_bits/2, delete/1]).
+-export_type([reason/0, file_type/0, access/0, file_info/0]).
+
+-type reason() :: eacces |
+ eagain |
+ ebadf |
+ ebadmsg |
+ ebusy |
+ edeadlk |
+ edeadlock |
+ edquot |
+ eexist |
+ efault |
+ efbig |
+ eftype |
+ eintr |
+ einval |
+ eio |
+ eisdir |
+ eloop |
+ emfile |
+ emlink |
+ emultihop |
+ enametoolong |
+ enfile |
+ enobufs |
+ enodev |
+ enolck |
+ enolink |
+ enoent |
+ enomem |
+ enospc |
+ enosr |
+ enostr |
+ enosys |
+ enotblk |
+ enotdir |
+ enotsup |
+ enxio |
+ eopnotsupp |
+ eoverflow |
+ eperm |
+ epipe |
+ erange |
+ erofs |
+ espipe |
+ esrch |
+ estale |
+ etxtbsy |
+ exdev |
+ not_utf8.
+
+-type file_type() :: device | directory | other | regular | symlink.
+
+-type access() :: no_access | read | read_write | write.
+
+-type file_info() :: {file_info,
+ integer(),
+ file_type(),
+ access(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer()}.
+
+-spec file_info(binary()) -> {ok, file_info()} | {error, reason()}.
+file_info(A) ->
+ gleam_erlang_ffi:file_info(A).
+
+-spec link_info(binary()) -> {ok, file_info()} | {error, reason()}.
+link_info(A) ->
+ gleam_erlang_ffi:link_info(A).
+
+-spec is_directory(binary()) -> {ok, boolean()} | {error, reason()}.
+is_directory(Path) ->
+ gleam@result:map(
+ gleam_erlang_ffi:file_info(Path),
+ fun(_use0) ->
+ {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0,
+ File_type =:= directory
+ end
+ ).
+
+-spec is_regular(binary()) -> {ok, boolean()} | {error, reason()}.
+is_regular(Path) ->
+ gleam@result:map(
+ gleam_erlang_ffi:file_info(Path),
+ fun(_use0) ->
+ {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0,
+ File_type =:= regular
+ end
+ ).
+
+-spec file_exists(binary()) -> {ok, boolean()} | {error, reason()}.
+file_exists(Path) ->
+ Result = begin
+ _pipe = Path,
+ _pipe@1 = gleam_erlang_ffi:file_info(_pipe),
+ gleam@result:replace(_pipe@1, true)
+ end,
+ case Result of
+ {error, enoent} ->
+ {ok, false};
+
+ _ ->
+ Result
+ end.
+
+-spec link_exists(binary()) -> {ok, boolean()} | {error, reason()}.
+link_exists(Path) ->
+ Result = begin
+ _pipe = Path,
+ _pipe@1 = gleam_erlang_ffi:link_info(_pipe),
+ gleam@result:replace(_pipe@1, true)
+ end,
+ case Result of
+ {error, enoent} ->
+ {ok, false};
+
+ _ ->
+ Result
+ end.
+
+-spec make_directory(binary()) -> {ok, nil} | {error, reason()}.
+make_directory(A) ->
+ gleam_erlang_ffi:make_directory(A).
+
+-spec list_directory(binary()) -> {ok, list(binary())} | {error, reason()}.
+list_directory(A) ->
+ gleam_erlang_ffi:list_directory(A).
+
+-spec delete_directory(binary()) -> {ok, nil} | {error, reason()}.
+delete_directory(A) ->
+ gleam_erlang_ffi:delete_directory(A).
+
+-spec recursive_delete(binary()) -> {ok, nil} | {error, reason()}.
+recursive_delete(A) ->
+ gleam_erlang_ffi:recursive_delete(A).
+
+-spec read(binary()) -> {ok, binary()} | {error, reason()}.
+read(Path) ->
+ _pipe = Path,
+ _pipe@1 = gleam_erlang_ffi:read_file(_pipe),
+ gleam@result:then(
+ _pipe@1,
+ fun(Content) -> case gleam@bit_array:to_string(Content) of
+ {ok, String} ->
+ {ok, String};
+
+ {error, nil} ->
+ {error, not_utf8}
+ end end
+ ).
+
+-spec read_bits(binary()) -> {ok, bitstring()} | {error, reason()}.
+read_bits(Path) ->
+ gleam_erlang_ffi:read_file(Path).
+
+-spec write(binary(), binary()) -> {ok, nil} | {error, reason()}.
+write(Contents, Path) ->
+ _pipe = Contents,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ gleam_erlang_ffi:write_file(_pipe@1, Path).
+
+-spec write_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}.
+write_bits(Contents, Path) ->
+ gleam_erlang_ffi:write_file(Contents, Path).
+
+-spec append(binary(), binary()) -> {ok, nil} | {error, reason()}.
+append(Contents, Path) ->
+ _pipe = Contents,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ gleam_erlang_ffi:append_file(_pipe@1, Path).
+
+-spec append_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}.
+append_bits(Contents, Path) ->
+ gleam_erlang_ffi:append_file(Contents, Path).
+
+-spec delete(binary()) -> {ok, nil} | {error, reason()}.
+delete(A) ->
+ gleam_erlang_ffi:delete_file(A).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache
new file mode 100644
index 0000000..6c2ad69
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta
new file mode 100644
index 0000000..085886a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl
new file mode 100644
index 0000000..f57d029
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.erl
@@ -0,0 +1,33 @@
+-module(gleam@erlang@node).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([self/0, visible/0, connect/1, send/3, to_atom/1]).
+-export_type([node_/0, do_not_leak/0, connect_error/0]).
+
+-type node_() :: any().
+
+-type do_not_leak() :: any().
+
+-type connect_error() :: failed_to_connect | local_node_is_not_alive.
+
+-spec self() -> node_().
+self() ->
+ erlang:node().
+
+-spec visible() -> list(node_()).
+visible() ->
+ erlang:nodes().
+
+-spec connect(gleam@erlang@atom:atom_()) -> {ok, node_()} |
+ {error, connect_error()}.
+connect(Node) ->
+ gleam_erlang_ffi:connect_node(Node).
+
+-spec send(node_(), gleam@erlang@atom:atom_(), any()) -> nil.
+send(Node, Name, Message) ->
+ erlang:send({Name, Node}, Message),
+ nil.
+
+-spec to_atom(node_()) -> gleam@erlang@atom:atom_().
+to_atom(Node) ->
+ gleam_erlang_ffi:identity(Node).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache
new file mode 100644
index 0000000..38dabf7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta
new file mode 100644
index 0000000..1d5fa83
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl
new file mode 100644
index 0000000..c05e6c3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.erl
@@ -0,0 +1,27 @@
+-module(gleam@erlang@os).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_all_env/0, get_env/1, set_env/2, unset_env/1, family/0]).
+-export_type([os_family/0]).
+
+-type os_family() :: windows_nt | linux | darwin | free_bsd | {other, binary()}.
+
+-spec get_all_env() -> gleam@dict:dict(binary(), binary()).
+get_all_env() ->
+ gleam_erlang_ffi:get_all_env().
+
+-spec get_env(binary()) -> {ok, binary()} | {error, nil}.
+get_env(Name) ->
+ gleam_erlang_ffi:get_env(Name).
+
+-spec set_env(binary(), binary()) -> nil.
+set_env(Name, Value) ->
+ gleam_erlang_ffi:set_env(Name, Value).
+
+-spec unset_env(binary()) -> nil.
+unset_env(Name) ->
+ gleam_erlang_ffi:unset_env(Name).
+
+-spec family() -> os_family().
+family() ->
+ gleam_erlang_ffi:os_family().
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache
new file mode 100644
index 0000000..57cc2e6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta
new file mode 100644
index 0000000..ad9209c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl
new file mode 100644
index 0000000..abb7144
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.erl
@@ -0,0 +1,374 @@
+-module(gleam@erlang@process).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([self/0, start/2, new_subject/0, subject_owner/1, send/2, new_selector/0, select/2, select_forever/1, map_selector/2, merge_selector/2, flush_messages/0, selecting_trapped_exits/2, selecting/3, 'receive'/2, selecting_record2/3, selecting_record3/3, selecting_record4/3, selecting_record5/3, selecting_record6/3, selecting_record7/3, selecting_record8/3, selecting_anything/2, sleep/1, sleep_forever/0, is_alive/1, monitor_process/1, selecting_process_down/3, demonitor_process/1, try_call/3, call/3, link/1, unlink/1, send_after/3, cancel_timer/1, kill/1, send_exit/1, send_abnormal_exit/2, trap_exits/1, register/2, unregister/1, named/1]).
+-export_type([pid_/0, subject/1, do_not_leak/0, selector/1, exit_message/0, exit_reason/0, anything_selector_tag/0, process_monitor_flag/0, process_monitor/0, process_down/0, call_error/1, timer/0, cancelled/0, kill_flag/0]).
+
+-type pid_() :: any().
+
+-opaque subject(GSA) :: {subject, pid_(), gleam@erlang:reference_()} |
+ {gleam_phantom, GSA}.
+
+-type do_not_leak() :: any().
+
+-type selector(GSB) :: any() | {gleam_phantom, GSB}.
+
+-type exit_message() :: {exit_message, pid_(), exit_reason()}.
+
+-type exit_reason() :: normal | killed | {abnormal, binary()}.
+
+-type anything_selector_tag() :: anything.
+
+-type process_monitor_flag() :: process.
+
+-opaque process_monitor() :: {process_monitor, gleam@erlang:reference_()}.
+
+-type process_down() :: {process_down, pid_(), gleam@dynamic:dynamic_()}.
+
+-type call_error(GSC) :: {callee_down, gleam@dynamic:dynamic_()} |
+ call_timeout |
+ {gleam_phantom, GSC}.
+
+-type timer() :: any().
+
+-type cancelled() :: timer_not_found | {cancelled, integer()}.
+
+-type kill_flag() :: kill.
+
+-spec self() -> pid_().
+self() ->
+ erlang:self().
+
+-spec start(fun(() -> any()), boolean()) -> pid_().
+start(Implementation, Link) ->
+ case Link of
+ true ->
+ erlang:spawn_link(Implementation);
+
+ false ->
+ erlang:spawn(Implementation)
+ end.
+
+-spec new_subject() -> subject(any()).
+new_subject() ->
+ {subject, erlang:self(), erlang:make_ref()}.
+
+-spec subject_owner(subject(any())) -> pid_().
+subject_owner(Subject) ->
+ erlang:element(2, Subject).
+
+-spec send(subject(GSL), GSL) -> nil.
+send(Subject, Message) ->
+ erlang:send(
+ erlang:element(2, Subject),
+ {erlang:element(3, Subject), Message}
+ ),
+ nil.
+
+-spec new_selector() -> selector(any()).
+new_selector() ->
+ gleam_erlang_ffi:new_selector().
+
+-spec select(selector(GST), integer()) -> {ok, GST} | {error, nil}.
+select(From, Within) ->
+ gleam_erlang_ffi:select(From, Within).
+
+-spec select_forever(selector(GSX)) -> GSX.
+select_forever(From) ->
+ gleam_erlang_ffi:select(From).
+
+-spec map_selector(selector(GSZ), fun((GSZ) -> GTB)) -> selector(GTB).
+map_selector(A, B) ->
+ gleam_erlang_ffi:map_selector(A, B).
+
+-spec merge_selector(selector(GTD), selector(GTD)) -> selector(GTD).
+merge_selector(A, B) ->
+ gleam_erlang_ffi:merge_selector(A, B).
+
+-spec flush_messages() -> nil.
+flush_messages() ->
+ gleam_erlang_ffi:flush_messages().
+
+-spec selecting_trapped_exits(selector(GTH), fun((exit_message()) -> GTH)) -> selector(GTH).
+selecting_trapped_exits(Selector, Handler) ->
+ Tag = erlang:binary_to_atom(<<"EXIT"/utf8>>),
+ Handler@1 = fun(Message) ->
+ Reason = erlang:element(3, Message),
+ Normal = gleam@dynamic:from(normal),
+ Killed = gleam@dynamic:from(killed),
+ Reason@2 = case gleam@dynamic:string(Reason) of
+ _ when Reason =:= Normal ->
+ normal;
+
+ _ when Reason =:= Killed ->
+ killed;
+
+ {ok, Reason@1} ->
+ {abnormal, Reason@1};
+
+ {error, _} ->
+ {abnormal, gleam@string:inspect(Reason)}
+ end,
+ Handler({exit_message, erlang:element(2, Message), Reason@2})
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler@1).
+
+-spec selecting(selector(GTK), subject(GTM), fun((GTM) -> GTK)) -> selector(GTK).
+selecting(Selector, Subject, Transform) ->
+ Handler = fun(Message) -> Transform(erlang:element(2, Message)) end,
+ gleam_erlang_ffi:insert_selector_handler(
+ Selector,
+ {erlang:element(3, Subject), 2},
+ Handler
+ ).
+
+-spec 'receive'(subject(GSN), integer()) -> {ok, GSN} | {error, nil}.
+'receive'(Subject, Milliseconds) ->
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = selecting(_pipe, Subject, fun(X) -> X end),
+ gleam_erlang_ffi:select(_pipe@1, Milliseconds).
+
+-spec selecting_record2(
+ selector(GTP),
+ any(),
+ fun((gleam@dynamic:dynamic_()) -> GTP)
+) -> selector(GTP).
+selecting_record2(Selector, Tag, Transform) ->
+ Handler = fun(Message) -> Transform(erlang:element(2, Message)) end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 2}, Handler).
+
+-spec selecting_record3(
+ selector(GTT),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GTT)
+) -> selector(GTT).
+selecting_record3(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(erlang:element(2, Message), erlang:element(3, Message))
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler).
+
+-spec selecting_record4(
+ selector(GTX),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GTX)
+) -> selector(GTX).
+selecting_record4(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 4}, Handler).
+
+-spec selecting_record5(
+ selector(GUB),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUB)
+) -> selector(GUB).
+selecting_record5(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 5}, Handler).
+
+-spec selecting_record6(
+ selector(GUF),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUF)
+) -> selector(GUF).
+selecting_record6(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message),
+ erlang:element(6, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 6}, Handler).
+
+-spec selecting_record7(
+ selector(GUJ),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUJ)
+) -> selector(GUJ).
+selecting_record7(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message),
+ erlang:element(6, Message),
+ erlang:element(7, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 7}, Handler).
+
+-spec selecting_record8(
+ selector(GUN),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> GUN)
+) -> selector(GUN).
+selecting_record8(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message),
+ erlang:element(6, Message),
+ erlang:element(7, Message),
+ erlang:element(8, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 8}, Handler).
+
+-spec selecting_anything(selector(GUR), fun((gleam@dynamic:dynamic_()) -> GUR)) -> selector(GUR).
+selecting_anything(Selector, Handler) ->
+ gleam_erlang_ffi:insert_selector_handler(Selector, anything, Handler).
+
+-spec sleep(integer()) -> nil.
+sleep(A) ->
+ gleam_erlang_ffi:sleep(A).
+
+-spec sleep_forever() -> nil.
+sleep_forever() ->
+ gleam_erlang_ffi:sleep_forever().
+
+-spec is_alive(pid_()) -> boolean().
+is_alive(A) ->
+ erlang:is_process_alive(A).
+
+-spec monitor_process(pid_()) -> process_monitor().
+monitor_process(Pid) ->
+ _pipe = process,
+ _pipe@1 = erlang:monitor(_pipe, Pid),
+ {process_monitor, _pipe@1}.
+
+-spec selecting_process_down(
+ selector(GUZ),
+ process_monitor(),
+ fun((process_down()) -> GUZ)
+) -> selector(GUZ).
+selecting_process_down(Selector, Monitor, Mapping) ->
+ gleam_erlang_ffi:insert_selector_handler(
+ Selector,
+ erlang:element(2, Monitor),
+ Mapping
+ ).
+
+-spec demonitor_process(process_monitor()) -> nil.
+demonitor_process(Monitor) ->
+ gleam_erlang_ffi:demonitor(Monitor).
+
+-spec try_call(subject(GVC), fun((subject(GVE)) -> GVC), integer()) -> {ok, GVE} |
+ {error, call_error(GVE)}.
+try_call(Subject, Make_request, Timeout) ->
+ Reply_subject = new_subject(),
+ Monitor = monitor_process(subject_owner(Subject)),
+ send(Subject, Make_request(Reply_subject)),
+ Result = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = selecting(
+ _pipe,
+ Reply_subject,
+ fun(Field@0) -> {ok, Field@0} end
+ ),
+ _pipe@2 = selecting_process_down(
+ _pipe@1,
+ Monitor,
+ fun(Down) -> {error, {callee_down, erlang:element(3, Down)}} end
+ ),
+ gleam_erlang_ffi:select(_pipe@2, Timeout)
+ end,
+ gleam_erlang_ffi:demonitor(Monitor),
+ case Result of
+ {error, nil} ->
+ {error, call_timeout};
+
+ {ok, Res} ->
+ Res
+ end.
+
+-spec call(subject(GVJ), fun((subject(GVL)) -> GVJ), integer()) -> GVL.
+call(Subject, Make_request, Timeout) ->
+ _assert_subject = try_call(Subject, Make_request, Timeout),
+ {ok, Resp} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/erlang/process"/utf8>>,
+ function => <<"call"/utf8>>,
+ line => 593})
+ end,
+ Resp.
+
+-spec link(pid_()) -> boolean().
+link(Pid) ->
+ gleam_erlang_ffi:link(Pid).
+
+-spec unlink(pid_()) -> nil.
+unlink(Pid) ->
+ erlang:unlink(Pid),
+ nil.
+
+-spec send_after(subject(GVO), integer(), GVO) -> timer().
+send_after(Subject, Delay, Message) ->
+ erlang:send_after(
+ Delay,
+ erlang:element(2, Subject),
+ {erlang:element(3, Subject), Message}
+ ).
+
+-spec cancel_timer(timer()) -> cancelled().
+cancel_timer(Timer) ->
+ case gleam@dynamic:int(erlang:cancel_timer(Timer)) of
+ {ok, I} ->
+ {cancelled, I};
+
+ {error, _} ->
+ timer_not_found
+ end.
+
+-spec kill(pid_()) -> nil.
+kill(Pid) ->
+ erlang:exit(Pid, kill),
+ nil.
+
+-spec send_exit(pid_()) -> nil.
+send_exit(Pid) ->
+ erlang:exit(Pid, normal),
+ nil.
+
+-spec send_abnormal_exit(pid_(), binary()) -> nil.
+send_abnormal_exit(Pid, Reason) ->
+ erlang:exit(Pid, {abnormal, Reason}),
+ nil.
+
+-spec trap_exits(boolean()) -> nil.
+trap_exits(A) ->
+ gleam_erlang_ffi:trap_exits(A).
+
+-spec register(pid_(), gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}.
+register(Pid, Name) ->
+ gleam_erlang_ffi:register_process(Pid, Name).
+
+-spec unregister(gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}.
+unregister(Name) ->
+ gleam_erlang_ffi:unregister_process(Name).
+
+-spec named(gleam@erlang@atom:atom_()) -> {ok, pid_()} | {error, nil}.
+named(Name) ->
+ gleam_erlang_ffi:process_named(Name).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl
new file mode 100644
index 0000000..872126f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/_gleam_artefacts/gleam_erlang_ffi.erl
@@ -0,0 +1,263 @@
+-module(gleam_erlang_ffi).
+-export([
+ atom_from_dynamic/1, rescue/1, atom_from_string/1, get_line/1,
+ ensure_all_started/1, sleep/1, os_family/0, sleep_forever/0, read_file/1,
+ append_file/2, write_file/2, delete_file/1, get_all_env/0, get_env/1,
+ set_env/2, unset_env/1, delete_directory/1, recursive_delete/1,
+ list_directory/1, demonitor/1, make_directory/1, new_selector/0, link/1,
+ insert_selector_handler/3, select/1, select/2, trap_exits/1, map_selector/2,
+ merge_selector/2, flush_messages/0, file_info/1, link_info/1,
+ priv_directory/1, connect_node/1, register_process/2, unregister_process/1,
+ process_named/1, identity/1
+]).
+
+-define(is_posix_error(Error),
+ Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse
+ Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse
+ Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse
+ Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse
+ Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse
+ Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse
+ Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse
+ Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse
+ Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse
+ Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse
+ Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse
+ Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse
+ Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse
+ Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse
+ Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse
+ Error =:= etxtbsy orelse Error =:= exdev
+).
+
+-spec atom_from_string(binary()) -> {ok, atom()} | {error, atom_not_loaded}.
+atom_from_string(S) ->
+ try {ok, binary_to_existing_atom(S)}
+ catch error:badarg -> {error, atom_not_loaded}
+ end.
+
+atom_from_dynamic(Data) when is_atom(Data) ->
+ {ok, Data};
+atom_from_dynamic(Data) ->
+ {error, [{decode_error, <<"Atom">>, gleam@dynamic:classify(Data), []}]}.
+
+-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}.
+get_line(Prompt) ->
+ case io:get_line(Prompt) of
+ eof -> {error, eof};
+ {error, _} -> {error, no_data};
+ Data when is_binary(Data) -> {ok, Data};
+ Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)}
+ end.
+
+rescue(F) ->
+ try {ok, F()}
+ catch
+ throw:X -> {error, {thrown, X}};
+ error:X -> {error, {errored, X}};
+ exit:X -> {error, {exited, X}}
+ end.
+
+ensure_all_started(Application) ->
+ case application:ensure_all_started(Application) of
+ {ok, _} = Ok -> Ok;
+
+ {error, {ProblemApp, {"no such file or directory", _}}} ->
+ {error, {unknown_application, ProblemApp}}
+ end.
+
+sleep(Microseconds) ->
+ timer:sleep(Microseconds),
+ nil.
+
+sleep_forever() ->
+ timer:sleep(infinity),
+ nil.
+
+file_info_result(Result) ->
+ case Result of
+ {ok, {file_info, Size, Type, Access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}} when Access =:= none ->
+ {ok, {file_info, Size, Type, no_access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}};
+ {ok, _} ->
+ Result;
+ {error, Reason} when ?is_posix_error(Reason) ->
+ Result
+ end.
+
+file_info(Filename) ->
+ file_info_result(file:read_file_info(Filename, [{time, posix}])).
+
+link_info(Filename) ->
+ file_info_result(file:read_link_info(Filename, [{time, posix}])).
+
+posix_result(Result) ->
+ case Result of
+ ok -> {ok, nil};
+ {ok, Value} -> {ok, Value};
+ {error, Reason} when ?is_posix_error(Reason) -> {error, Reason}
+ end.
+
+read_file(Filename) ->
+ posix_result(file:read_file(Filename)).
+
+write_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents)).
+
+append_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents, [append])).
+
+delete_file(Filename) ->
+ posix_result(file:delete(Filename)).
+
+make_directory(Dir) ->
+ posix_result(file:make_dir(Dir)).
+
+list_directory(Dir) ->
+ case file:list_dir(Dir) of
+ {ok, Filenames} ->
+ {ok, [list_to_binary(Filename) || Filename <- Filenames]};
+ {error, Reason} when ?is_posix_error(Reason) ->
+ {error, Reason}
+ end.
+
+delete_directory(Dir) ->
+ posix_result(file:del_dir(Dir)).
+
+recursive_delete(Dir) ->
+ posix_result(file:del_dir_r(Dir)).
+
+get_all_env() ->
+ BinVars = lists:map(fun(VarString) ->
+ [VarName, VarVal] = string:split(VarString, "="),
+ {list_to_binary(VarName), list_to_binary(VarVal)}
+ end, os:getenv()),
+ maps:from_list(BinVars).
+
+get_env(Name) ->
+ case os:getenv(binary_to_list(Name)) of
+ false -> {error, nil};
+ Value -> {ok, list_to_binary(Value)}
+ end.
+
+set_env(Name, Value) ->
+ os:putenv(binary_to_list(Name), binary_to_list(Value)),
+ nil.
+
+unset_env(Name) ->
+ os:unsetenv(binary_to_list(Name)),
+ nil.
+
+os_family() ->
+ case os:type() of
+ {win32, nt} ->
+ windows_nt;
+ {unix, linux} ->
+ linux;
+ {unix, darwin} ->
+ darwin;
+ {unix, freebsd} ->
+ free_bsd;
+ {_, Other} ->
+ {other, atom_to_binary(Other, utf8)}
+ end.
+
+new_selector() ->
+ {selector, #{}}.
+
+map_selector({selector, Handlers}, Fn) ->
+ MappedHandlers = maps:map(fun(_Tag, Handler) ->
+ fun(Message) -> Fn(Handler(Message)) end
+ end, Handlers),
+ {selector, MappedHandlers}.
+
+merge_selector({selector, HandlersA}, {selector, HandlersB}) ->
+ {selector, maps:merge(HandlersA, HandlersB)}.
+
+insert_selector_handler({selector, Handlers}, Tag, Fn) ->
+ {selector, Handlers#{Tag => Fn}}.
+
+select(Selector) ->
+ {ok, Message} = select(Selector, infinity),
+ Message.
+
+select({selector, Handlers}, Timeout) ->
+ AnythingHandler = maps:get(anything, Handlers, undefined),
+ receive
+ % Monitored process down messages.
+ % This is special cased so we can selectively receive based on the
+ % reference as well as the record tag.
+ {'DOWN', Ref, process, Pid, Reason} when is_map_key(Ref, Handlers) ->
+ Fn = maps:get(Ref, Handlers),
+ {ok, Fn({process_down, Pid, Reason})};
+
+ Msg when is_map_key({element(1, Msg), tuple_size(Msg)}, Handlers) ->
+ Fn = maps:get({element(1, Msg), tuple_size(Msg)}, Handlers),
+ {ok, Fn(Msg)};
+
+ Msg when AnythingHandler =/= undefined ->
+ {ok, AnythingHandler(Msg)}
+ after Timeout ->
+ {error, nil}
+ end.
+
+demonitor({_, Reference}) ->
+ erlang:demonitor(Reference, [flush]).
+
+link(Pid) ->
+ try
+ erlang:link(Pid)
+ catch
+ error:_ -> false
+ end.
+
+trap_exits(ShouldTrap) ->
+ erlang:process_flag(trap_exit, ShouldTrap),
+ nil.
+
+flush_messages() ->
+ receive _Message -> flush_messages()
+ after 0 -> nil
+ end.
+
+priv_directory(Name) ->
+ try erlang:binary_to_existing_atom(Name) of
+ Atom ->
+ case code:priv_dir(Atom) of
+ {error, _} -> {error, nil};
+ Path -> {ok, unicode:characters_to_binary(Path)}
+ end
+ catch
+ error:badarg -> {error, nil}
+ end.
+
+connect_node(Node) ->
+ case net_kernel:connect_node(Node) of
+ true -> {ok, Node};
+ false -> {error, failed_to_connect};
+ ignored -> {error, local_node_is_not_alive}
+ end.
+
+register_process(Pid, Name) ->
+ try
+ true = erlang:register(Name, Pid),
+ {ok, nil}
+ catch
+ error:badarg -> {error, nil}
+ end.
+
+unregister_process(Name) ->
+ try
+ true = erlang:unregister(Name),
+ {ok, nil}
+ catch
+ error:badarg -> {error, nil}
+ end.
+
+process_named(Name) ->
+ case erlang:whereis(Name) of
+ Pid when is_pid(Pid) -> {ok, Pid};
+ _ -> {error, nil}
+ end.
+
+identity(X) ->
+ X.
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beam
new file mode 100644
index 0000000..d54ec07
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beam
new file mode 100644
index 0000000..78d457d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@atom.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beam
new file mode 100644
index 0000000..7624e6e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@charlist.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beam
new file mode 100644
index 0000000..972a12b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@file.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beam
new file mode 100644
index 0000000..4b2f578
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@node.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beam
new file mode 100644
index 0000000..c6b8f5e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@os.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beam
new file mode 100644
index 0000000..35e940f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam@erlang@process.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app
new file mode 100644
index 0000000..79950ab
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang.app
@@ -0,0 +1,7 @@
+{application, gleam_erlang, [
+ {vsn, "0.23.1"},
+ {applications, [gleam_stdlib]},
+ {description, "A Gleam library for working with Erlang"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beam b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beam
new file mode 100644
index 0000000..c659a9c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/ebin/gleam_erlang_ffi.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl
new file mode 100644
index 0000000..b38d11e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl
@@ -0,0 +1,15 @@
+-record(file_info, {
+ size :: integer(),
+ file_type :: gleam@erlang@file:file_type(),
+ access :: gleam@erlang@file:access(),
+ atime :: integer(),
+ mtime :: integer(),
+ ctime :: integer(),
+ mode :: integer(),
+ links :: integer(),
+ major_device :: integer(),
+ minor_device :: integer(),
+ inode :: integer(),
+ user_id :: integer(),
+ group_id :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl
new file mode 100644
index 0000000..4cd0452
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl
@@ -0,0 +1 @@
+-record(abnormal, {reason :: binary()}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl
new file mode 100644
index 0000000..5dd5047
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl
@@ -0,0 +1 @@
+-record(callee_down, {reason :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl
new file mode 100644
index 0000000..b82b49f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl
@@ -0,0 +1 @@
+-record(cancelled, {time_remaining :: integer()}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl
new file mode 100644
index 0000000..c476308
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl
@@ -0,0 +1,4 @@
+-record(exit_message, {
+ pid :: gleam@erlang@process:pid_(),
+ reason :: gleam@erlang@process:exit_reason()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl
new file mode 100644
index 0000000..df0b6b7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl
@@ -0,0 +1,4 @@
+-record(process_down, {
+ pid :: gleam@erlang@process:pid_(),
+ reason :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl
new file mode 100644
index 0000000..ce552e2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl
@@ -0,0 +1 @@
+-record(process_monitor, {tag :: gleam@erlang:reference_()}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl
new file mode 100644
index 0000000..abc46b2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang@process_Subject.hrl
@@ -0,0 +1,4 @@
+-record(subject, {
+ owner :: gleam@erlang@process:pid_(),
+ tag :: gleam@erlang:reference_()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl
new file mode 100644
index 0000000..52c9896
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl
@@ -0,0 +1,4 @@
+-record(application_failed_to_start, {
+ name :: gleam@erlang@atom:atom_(),
+ reason :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl
new file mode 100644
index 0000000..fde3c61
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl
@@ -0,0 +1 @@
+-record(unknown_application, {name :: gleam@erlang@atom:atom_()}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache
new file mode 100644
index 0000000..0b8931e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta
new file mode 100644
index 0000000..dc85da7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl
new file mode 100644
index 0000000..91ee6e8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http.erl
@@ -0,0 +1,626 @@
+-module(gleam@http).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([parse_method/1, method_to_string/1, scheme_to_string/1, scheme_from_string/1, parse_content_disposition/1, parse_multipart_body/2, method_from_dynamic/1, parse_multipart_headers/2]).
+-export_type([method/0, scheme/0, multipart_headers/0, multipart_body/0, content_disposition/0]).
+
+-type method() :: get |
+ post |
+ head |
+ put |
+ delete |
+ trace |
+ connect |
+ options |
+ patch |
+ {other, binary()}.
+
+-type scheme() :: http | https.
+
+-type multipart_headers() :: {multipart_headers,
+ list({binary(), binary()}),
+ bitstring()} |
+ {more_required_for_headers,
+ fun((bitstring()) -> {ok, multipart_headers()} | {error, nil})}.
+
+-type multipart_body() :: {multipart_body, bitstring(), boolean(), bitstring()} |
+ {more_required_for_body,
+ bitstring(),
+ fun((bitstring()) -> {ok, multipart_body()} | {error, nil})}.
+
+-type content_disposition() :: {content_disposition,
+ binary(),
+ list({binary(), binary()})}.
+
+-spec parse_method(binary()) -> {ok, method()} | {error, nil}.
+parse_method(S) ->
+ case gleam@string:lowercase(S) of
+ <<"connect"/utf8>> ->
+ {ok, connect};
+
+ <<"delete"/utf8>> ->
+ {ok, delete};
+
+ <<"get"/utf8>> ->
+ {ok, get};
+
+ <<"head"/utf8>> ->
+ {ok, head};
+
+ <<"options"/utf8>> ->
+ {ok, options};
+
+ <<"patch"/utf8>> ->
+ {ok, patch};
+
+ <<"post"/utf8>> ->
+ {ok, post};
+
+ <<"put"/utf8>> ->
+ {ok, put};
+
+ <<"trace"/utf8>> ->
+ {ok, trace};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec method_to_string(method()) -> binary().
+method_to_string(Method) ->
+ case Method of
+ connect ->
+ <<"connect"/utf8>>;
+
+ delete ->
+ <<"delete"/utf8>>;
+
+ get ->
+ <<"get"/utf8>>;
+
+ head ->
+ <<"head"/utf8>>;
+
+ options ->
+ <<"options"/utf8>>;
+
+ patch ->
+ <<"patch"/utf8>>;
+
+ post ->
+ <<"post"/utf8>>;
+
+ put ->
+ <<"put"/utf8>>;
+
+ trace ->
+ <<"trace"/utf8>>;
+
+ {other, S} ->
+ S
+ end.
+
+-spec scheme_to_string(scheme()) -> binary().
+scheme_to_string(Scheme) ->
+ case Scheme of
+ http ->
+ <<"http"/utf8>>;
+
+ https ->
+ <<"https"/utf8>>
+ end.
+
+-spec scheme_from_string(binary()) -> {ok, scheme()} | {error, nil}.
+scheme_from_string(Scheme) ->
+ case gleam@string:lowercase(Scheme) of
+ <<"http"/utf8>> ->
+ {ok, http};
+
+ <<"https"/utf8>> ->
+ {ok, https};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec skip_whitespace(bitstring()) -> bitstring().
+skip_whitespace(Data) ->
+ case Data of
+ <<32, Data@1/binary>> ->
+ skip_whitespace(Data@1);
+
+ <<9, Data@1/binary>> ->
+ skip_whitespace(Data@1);
+
+ _ ->
+ Data
+ end.
+
+-spec more_please_headers(
+ fun((bitstring()) -> {ok, multipart_headers()} | {error, nil}),
+ bitstring()
+) -> {ok, multipart_headers()} | {error, nil}.
+more_please_headers(Continuation, Existing) ->
+ {ok,
+ {more_required_for_headers,
+ fun(More) ->
+ gleam@bool:guard(
+ More =:= <<>>,
+ {error, nil},
+ fun() ->
+ Continuation(<<Existing/bitstring, More/bitstring>>)
+ end
+ )
+ end}}.
+
+-spec parse_rfc_2045_parameter_quoted_value(binary(), binary(), binary()) -> {ok,
+ {{binary(), binary()}, binary()}} |
+ {error, nil}.
+parse_rfc_2045_parameter_quoted_value(Header, Name, Value) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {error, nil};
+
+ {ok, {<<"\""/utf8>>, Rest}} ->
+ {ok, {{Name, Value}, Rest}};
+
+ {ok, {<<"\\"/utf8>>, Rest@1}} ->
+ gleam@result:'try'(
+ gleam@string:pop_grapheme(Rest@1),
+ fun(_use0) ->
+ {Grapheme, Rest@2} = _use0,
+ parse_rfc_2045_parameter_quoted_value(
+ Rest@2,
+ Name,
+ <<Value/binary, Grapheme/binary>>
+ )
+ end
+ );
+
+ {ok, {Grapheme@1, Rest@3}} ->
+ parse_rfc_2045_parameter_quoted_value(
+ Rest@3,
+ Name,
+ <<Value/binary, Grapheme@1/binary>>
+ )
+ end.
+
+-spec parse_rfc_2045_parameter_unquoted_value(binary(), binary(), binary()) -> {{binary(),
+ binary()},
+ binary()}.
+parse_rfc_2045_parameter_unquoted_value(Header, Name, Value) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {{Name, Value}, Header};
+
+ {ok, {<<";"/utf8>>, Rest}} ->
+ {{Name, Value}, Rest};
+
+ {ok, {<<" "/utf8>>, Rest}} ->
+ {{Name, Value}, Rest};
+
+ {ok, {<<"\t"/utf8>>, Rest}} ->
+ {{Name, Value}, Rest};
+
+ {ok, {Grapheme, Rest@1}} ->
+ parse_rfc_2045_parameter_unquoted_value(
+ Rest@1,
+ Name,
+ <<Value/binary, Grapheme/binary>>
+ )
+ end.
+
+-spec parse_rfc_2045_parameter_value(binary(), binary()) -> {ok,
+ {{binary(), binary()}, binary()}} |
+ {error, nil}.
+parse_rfc_2045_parameter_value(Header, Name) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {error, nil};
+
+ {ok, {<<"\""/utf8>>, Rest}} ->
+ parse_rfc_2045_parameter_quoted_value(Rest, Name, <<""/utf8>>);
+
+ {ok, {Grapheme, Rest@1}} ->
+ {ok,
+ parse_rfc_2045_parameter_unquoted_value(Rest@1, Name, Grapheme)}
+ end.
+
+-spec parse_rfc_2045_parameter(binary(), binary()) -> {ok,
+ {{binary(), binary()}, binary()}} |
+ {error, nil}.
+parse_rfc_2045_parameter(Header, Name) ->
+ gleam@result:'try'(
+ gleam@string:pop_grapheme(Header),
+ fun(_use0) ->
+ {Grapheme, Rest} = _use0,
+ case Grapheme of
+ <<"="/utf8>> ->
+ parse_rfc_2045_parameter_value(Rest, Name);
+
+ _ ->
+ parse_rfc_2045_parameter(
+ Rest,
+ <<Name/binary,
+ (gleam@string:lowercase(Grapheme))/binary>>
+ )
+ end
+ end
+ ).
+
+-spec parse_rfc_2045_parameters(binary(), list({binary(), binary()})) -> {ok,
+ list({binary(), binary()})} |
+ {error, nil}.
+parse_rfc_2045_parameters(Header, Parameters) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {ok, gleam@list:reverse(Parameters)};
+
+ {ok, {<<";"/utf8>>, Rest}} ->
+ parse_rfc_2045_parameters(Rest, Parameters);
+
+ {ok, {<<" "/utf8>>, Rest}} ->
+ parse_rfc_2045_parameters(Rest, Parameters);
+
+ {ok, {<<"\t"/utf8>>, Rest}} ->
+ parse_rfc_2045_parameters(Rest, Parameters);
+
+ {ok, {Grapheme, Rest@1}} ->
+ Acc = gleam@string:lowercase(Grapheme),
+ gleam@result:'try'(
+ parse_rfc_2045_parameter(Rest@1, Acc),
+ fun(_use0) ->
+ {Parameter, Rest@2} = _use0,
+ parse_rfc_2045_parameters(Rest@2, [Parameter | Parameters])
+ end
+ )
+ end.
+
+-spec parse_content_disposition_type(binary(), binary()) -> {ok,
+ content_disposition()} |
+ {error, nil}.
+parse_content_disposition_type(Header, Name) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {ok, {content_disposition, Name, []}};
+
+ {ok, {<<" "/utf8>>, Rest}} ->
+ Result = parse_rfc_2045_parameters(Rest, []),
+ gleam@result:map(
+ Result,
+ fun(Parameters) -> {content_disposition, Name, Parameters} end
+ );
+
+ {ok, {<<"\t"/utf8>>, Rest}} ->
+ Result = parse_rfc_2045_parameters(Rest, []),
+ gleam@result:map(
+ Result,
+ fun(Parameters) -> {content_disposition, Name, Parameters} end
+ );
+
+ {ok, {<<";"/utf8>>, Rest}} ->
+ Result = parse_rfc_2045_parameters(Rest, []),
+ gleam@result:map(
+ Result,
+ fun(Parameters) -> {content_disposition, Name, Parameters} end
+ );
+
+ {ok, {Grapheme, Rest@1}} ->
+ parse_content_disposition_type(
+ Rest@1,
+ <<Name/binary, (gleam@string:lowercase(Grapheme))/binary>>
+ )
+ end.
+
+-spec parse_content_disposition(binary()) -> {ok, content_disposition()} |
+ {error, nil}.
+parse_content_disposition(Header) ->
+ parse_content_disposition_type(Header, <<""/utf8>>).
+
+-spec more_please_body(
+ fun((bitstring()) -> {ok, multipart_body()} | {error, nil}),
+ bitstring(),
+ bitstring()
+) -> {ok, multipart_body()} | {error, nil}.
+more_please_body(Continuation, Chunk, Existing) ->
+ _pipe = fun(More) ->
+ gleam@bool:guard(
+ More =:= <<>>,
+ {error, nil},
+ fun() -> Continuation(<<Existing/bitstring, More/bitstring>>) end
+ )
+ end,
+ _pipe@1 = {more_required_for_body, Chunk, _pipe},
+ {ok, _pipe@1}.
+
+-spec parse_body_loop(bitstring(), bitstring(), bitstring()) -> {ok,
+ multipart_body()} |
+ {error, nil}.
+parse_body_loop(Data, Boundary, Body) ->
+ Dsize = erlang:byte_size(Data),
+ Bsize = erlang:byte_size(Boundary),
+ Required = 6 + Bsize,
+ case Data of
+ _ when Dsize < Required ->
+ more_please_body(
+ fun(_capture) -> parse_body_loop(_capture, Boundary, <<>>) end,
+ Body,
+ Data
+ );
+
+ <<13, 10, Data@1/binary>> ->
+ Desired = <<45, 45, Boundary/bitstring>>,
+ Size = erlang:byte_size(Desired),
+ Dsize@1 = erlang:byte_size(Data@1),
+ Prefix = gleam_stdlib:bit_array_slice(Data@1, 0, Size),
+ Rest = gleam_stdlib:bit_array_slice(Data@1, Size, Dsize@1 - Size),
+ case {Prefix =:= {ok, Desired}, Rest} of
+ {true, {ok, <<13, 10, _/binary>>}} ->
+ {ok, {multipart_body, Body, false, Data@1}};
+
+ {true, {ok, <<45, 45, Data@2/binary>>}} ->
+ {ok, {multipart_body, Body, true, Data@2}};
+
+ {false, _} ->
+ parse_body_loop(
+ Data@1,
+ Boundary,
+ <<Body/bitstring, 13, 10>>
+ );
+
+ {_, _} ->
+ {error, nil}
+ end;
+
+ <<Char, Data@3/binary>> ->
+ parse_body_loop(Data@3, Boundary, <<Body/bitstring, Char>>)
+ end.
+
+-spec parse_body_with_bit_array(bitstring(), bitstring()) -> {ok,
+ multipart_body()} |
+ {error, nil}.
+parse_body_with_bit_array(Data, Boundary) ->
+ Bsize = erlang:byte_size(Boundary),
+ Prefix = gleam_stdlib:bit_array_slice(Data, 0, 2 + Bsize),
+ case Prefix =:= {ok, <<45, 45, Boundary/bitstring>>} of
+ true ->
+ {ok, {multipart_body, <<>>, false, Data}};
+
+ false ->
+ parse_body_loop(Data, Boundary, <<>>)
+ end.
+
+-spec parse_multipart_body(bitstring(), binary()) -> {ok, multipart_body()} |
+ {error, nil}.
+parse_multipart_body(Data, Boundary) ->
+ _pipe = Boundary,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ parse_body_with_bit_array(Data, _pipe@1).
+
+-spec method_from_dynamic(gleam@dynamic:dynamic_()) -> {ok, method()} |
+ {error, list(gleam@dynamic:decode_error())}.
+method_from_dynamic(Value) ->
+ case gleam_http_native:decode_method(Value) of
+ {ok, Method} ->
+ {ok, Method};
+
+ {error, _} ->
+ {error,
+ [{decode_error,
+ <<"HTTP method"/utf8>>,
+ gleam@dynamic:classify(Value),
+ []}]}
+ end.
+
+-spec parse_header_value(
+ bitstring(),
+ list({binary(), binary()}),
+ bitstring(),
+ bitstring()
+) -> {ok, multipart_headers()} | {error, nil}.
+parse_header_value(Data, Headers, Name, Value) ->
+ Size = erlang:byte_size(Data),
+ case Data of
+ _ when Size < 4 ->
+ _pipe@2 = fun(Data@1) -> _pipe = Data@1,
+ _pipe@1 = skip_whitespace(_pipe),
+ parse_header_value(_pipe@1, Headers, Name, Value) end,
+ more_please_headers(_pipe@2, Data);
+
+ <<13, 10, 13, 10, Data@2/binary>> ->
+ gleam@result:'try'(
+ gleam@bit_array:to_string(Name),
+ fun(Name@1) ->
+ gleam@result:map(
+ gleam@bit_array:to_string(Value),
+ fun(Value@1) ->
+ Headers@1 = gleam@list:reverse(
+ [{gleam@string:lowercase(Name@1), Value@1} |
+ Headers]
+ ),
+ {multipart_headers, Headers@1, Data@2}
+ end
+ )
+ end
+ );
+
+ <<13, 10, 32, Data@3/binary>> ->
+ parse_header_value(Data@3, Headers, Name, Value);
+
+ <<13, 10, 9, Data@3/binary>> ->
+ parse_header_value(Data@3, Headers, Name, Value);
+
+ <<13, 10, Data@4/binary>> ->
+ gleam@result:'try'(
+ gleam@bit_array:to_string(Name),
+ fun(Name@2) ->
+ gleam@result:'try'(
+ gleam@bit_array:to_string(Value),
+ fun(Value@2) ->
+ Headers@2 = [{gleam@string:lowercase(Name@2),
+ Value@2} |
+ Headers],
+ parse_header_name(Data@4, Headers@2, <<>>)
+ end
+ )
+ end
+ );
+
+ <<Char, Rest/binary>> ->
+ Value@3 = <<Value/bitstring, Char>>,
+ parse_header_value(Rest, Headers, Name, Value@3);
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec parse_header_name(bitstring(), list({binary(), binary()}), bitstring()) -> {ok,
+ multipart_headers()} |
+ {error, nil}.
+parse_header_name(Data, Headers, Name) ->
+ case skip_whitespace(Data) of
+ <<58, Data@1/binary>> ->
+ _pipe = Data@1,
+ _pipe@1 = skip_whitespace(_pipe),
+ parse_header_value(_pipe@1, Headers, Name, <<>>);
+
+ <<Char, Data@2/binary>> ->
+ parse_header_name(Data@2, Headers, <<Name/bitstring, Char>>);
+
+ <<>> ->
+ more_please_headers(
+ fun(_capture) -> parse_header_name(_capture, Headers, Name) end,
+ Data
+ )
+ end.
+
+-spec do_parse_headers(bitstring()) -> {ok, multipart_headers()} | {error, nil}.
+do_parse_headers(Data) ->
+ case Data of
+ <<13, 10, 13, 10, Data@1/binary>> ->
+ {ok, {multipart_headers, [], Data@1}};
+
+ <<13, 10, Data@2/binary>> ->
+ parse_header_name(Data@2, [], <<>>);
+
+ <<13>> ->
+ more_please_headers(fun do_parse_headers/1, Data);
+
+ <<>> ->
+ more_please_headers(fun do_parse_headers/1, Data);
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec parse_headers_after_prelude(bitstring(), bitstring()) -> {ok,
+ multipart_headers()} |
+ {error, nil}.
+parse_headers_after_prelude(Data, Boundary) ->
+ Dsize = erlang:byte_size(Data),
+ Bsize = erlang:byte_size(Boundary),
+ Required_size = Bsize + 4,
+ gleam@bool:guard(
+ Dsize < Required_size,
+ more_please_headers(
+ fun(_capture) -> parse_headers_after_prelude(_capture, Boundary) end,
+ Data
+ ),
+ fun() ->
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(Data, 0, Required_size - 2),
+ fun(Prefix) ->
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(Data, 2 + Bsize, 2),
+ fun(Second) ->
+ Desired = <<45, 45, Boundary/bitstring>>,
+ gleam@bool:guard(
+ Prefix /= Desired,
+ {error, nil},
+ fun() -> case Second =:= <<45, 45>> of
+ true ->
+ Rest_size = Dsize - Required_size,
+ gleam@result:map(
+ gleam_stdlib:bit_array_slice(
+ Data,
+ Required_size,
+ Rest_size
+ ),
+ fun(Data@1) ->
+ {multipart_headers,
+ [],
+ Data@1}
+ end
+ );
+
+ false ->
+ Start = Required_size - 2,
+ Rest_size@1 = (Dsize - Required_size)
+ + 2,
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(
+ Data,
+ Start,
+ Rest_size@1
+ ),
+ fun(Data@2) ->
+ do_parse_headers(Data@2)
+ end
+ )
+ end end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec skip_preamble(bitstring(), bitstring()) -> {ok, multipart_headers()} |
+ {error, nil}.
+skip_preamble(Data, Boundary) ->
+ Data_size = erlang:byte_size(Data),
+ Boundary_size = erlang:byte_size(Boundary),
+ Required = Boundary_size + 4,
+ case Data of
+ _ when Data_size < Required ->
+ more_please_headers(
+ fun(_capture) -> skip_preamble(_capture, Boundary) end,
+ Data
+ );
+
+ <<13, 10, 45, 45, Data@1/binary>> ->
+ case gleam_stdlib:bit_array_slice(Data@1, 0, Boundary_size) of
+ {ok, Prefix} when Prefix =:= Boundary ->
+ Start = Boundary_size,
+ Length = erlang:byte_size(Data@1) - Boundary_size,
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(Data@1, Start, Length),
+ fun(Rest) -> do_parse_headers(Rest) end
+ );
+
+ {ok, _} ->
+ skip_preamble(Data@1, Boundary);
+
+ {error, _} ->
+ {error, nil}
+ end;
+
+ <<_, Data@2/binary>> ->
+ skip_preamble(Data@2, Boundary)
+ end.
+
+-spec parse_multipart_headers(bitstring(), binary()) -> {ok,
+ multipart_headers()} |
+ {error, nil}.
+parse_multipart_headers(Data, Boundary) ->
+ Boundary@1 = gleam_stdlib:identity(Boundary),
+ Prefix = <<45, 45, Boundary@1/bitstring>>,
+ case gleam_stdlib:bit_array_slice(Data, 0, erlang:byte_size(Prefix)) =:= {ok,
+ Prefix} of
+ true ->
+ parse_headers_after_prelude(Data, Boundary@1);
+
+ false ->
+ skip_preamble(Data, Boundary@1)
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache
new file mode 100644
index 0000000..173ac86
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta
new file mode 100644
index 0000000..1f65dce
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl
new file mode 100644
index 0000000..9d6d13e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.erl
@@ -0,0 +1,153 @@
+-module(gleam@http@cookie).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([defaults/1, set_header/3, parse/1]).
+-export_type([same_site_policy/0, attributes/0]).
+
+-type same_site_policy() :: lax | strict | none.
+
+-type attributes() :: {attributes,
+ gleam@option:option(integer()),
+ gleam@option:option(binary()),
+ gleam@option:option(binary()),
+ boolean(),
+ boolean(),
+ gleam@option:option(same_site_policy())}.
+
+-spec same_site_to_string(same_site_policy()) -> binary().
+same_site_to_string(Policy) ->
+ case Policy of
+ lax ->
+ <<"Lax"/utf8>>;
+
+ strict ->
+ <<"Strict"/utf8>>;
+
+ none ->
+ <<"None"/utf8>>
+ end.
+
+-spec defaults(gleam@http:scheme()) -> attributes().
+defaults(Scheme) ->
+ {attributes,
+ none,
+ none,
+ {some, <<"/"/utf8>>},
+ Scheme =:= https,
+ true,
+ {some, lax}}.
+
+-spec cookie_attributes_to_list(attributes()) -> list(list(binary())).
+cookie_attributes_to_list(Attributes) ->
+ {attributes, Max_age, Domain, Path, Secure, Http_only, Same_site} = Attributes,
+ _pipe = [case Max_age of
+ {some, 0} ->
+ {some, [<<"Expires=Thu, 01 Jan 1970 00:00:00 GMT"/utf8>>]};
+
+ _ ->
+ none
+ end, gleam@option:map(
+ Max_age,
+ fun(Max_age@1) ->
+ [<<"Max-Age="/utf8>>, gleam@int:to_string(Max_age@1)]
+ end
+ ), gleam@option:map(
+ Domain,
+ fun(Domain@1) -> [<<"Domain="/utf8>>, Domain@1] end
+ ), gleam@option:map(Path, fun(Path@1) -> [<<"Path="/utf8>>, Path@1] end), case Secure of
+ true ->
+ {some, [<<"Secure"/utf8>>]};
+
+ false ->
+ none
+ end, case Http_only of
+ true ->
+ {some, [<<"HttpOnly"/utf8>>]};
+
+ false ->
+ none
+ end, gleam@option:map(
+ Same_site,
+ fun(Same_site@1) ->
+ [<<"SameSite="/utf8>>, same_site_to_string(Same_site@1)]
+ end
+ )],
+ gleam@list:filter_map(
+ _pipe,
+ fun(_capture) -> gleam@option:to_result(_capture, nil) end
+ ).
+
+-spec set_header(binary(), binary(), attributes()) -> binary().
+set_header(Name, Value, Attributes) ->
+ _pipe = [[Name, <<"="/utf8>>, Value] |
+ cookie_attributes_to_list(Attributes)],
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(_capture) -> gleam@string:join(_capture, <<""/utf8>>) end
+ ),
+ gleam@string:join(_pipe@1, <<"; "/utf8>>).
+
+-spec check_token(binary()) -> {ok, nil} | {error, nil}.
+check_token(Token) ->
+ case gleam@string:pop_grapheme(Token) of
+ {error, nil} ->
+ {ok, nil};
+
+ {ok, {<<" "/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\t"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\r"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\n"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\f"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {_, Rest}} ->
+ check_token(Rest)
+ end.
+
+-spec parse(binary()) -> list({binary(), binary()}).
+parse(Cookie_string) ->
+ _assert_subject = gleam@regex:from_string(<<"[,;]"/utf8>>),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/http/cookie"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 101})
+ end,
+ _pipe = gleam@regex:split(Re, Cookie_string),
+ gleam@list:filter_map(
+ _pipe,
+ fun(Pair) ->
+ case gleam@string:split_once(gleam@string:trim(Pair), <<"="/utf8>>) of
+ {ok, {<<""/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {Key, Value}} ->
+ Key@1 = gleam@string:trim(Key),
+ Value@1 = gleam@string:trim(Value),
+ gleam@result:then(
+ check_token(Key@1),
+ fun(_) ->
+ gleam@result:then(
+ check_token(Value@1),
+ fun(_) -> {ok, {Key@1, Value@1}} end
+ )
+ end
+ );
+
+ {error, nil} ->
+ {error, nil}
+ end
+ end
+ ).
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache
new file mode 100644
index 0000000..cf9bcd7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta
new file mode 100644
index 0000000..2108b82
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl
new file mode 100644
index 0000000..e41d548
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@request.erl
@@ -0,0 +1,202 @@
+-module(gleam@http@request).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_uri/1, from_uri/1, get_header/2, set_header/3, prepend_header/3, set_body/2, map/2, path_segments/1, get_query/1, set_query/2, set_method/2, new/0, to/1, set_scheme/2, set_host/2, set_port/2, set_path/2, set_cookie/3, get_cookies/1]).
+-export_type([request/1]).
+
+-type request(IAV) :: {request,
+ gleam@http:method(),
+ list({binary(), binary()}),
+ IAV,
+ gleam@http:scheme(),
+ binary(),
+ gleam@option:option(integer()),
+ binary(),
+ gleam@option:option(binary())}.
+
+-spec to_uri(request(any())) -> gleam@uri:uri().
+to_uri(Request) ->
+ {uri,
+ {some, gleam@http:scheme_to_string(erlang:element(5, Request))},
+ none,
+ {some, erlang:element(6, Request)},
+ erlang:element(7, Request),
+ erlang:element(8, Request),
+ erlang:element(9, Request),
+ none}.
+
+-spec from_uri(gleam@uri:uri()) -> {ok, request(binary())} | {error, nil}.
+from_uri(Uri) ->
+ gleam@result:then(
+ begin
+ _pipe = erlang:element(2, Uri),
+ _pipe@1 = gleam@option:unwrap(_pipe, <<""/utf8>>),
+ gleam@http:scheme_from_string(_pipe@1)
+ end,
+ fun(Scheme) ->
+ gleam@result:then(
+ begin
+ _pipe@2 = erlang:element(4, Uri),
+ gleam@option:to_result(_pipe@2, nil)
+ end,
+ fun(Host) ->
+ Req = {request,
+ get,
+ [],
+ <<""/utf8>>,
+ Scheme,
+ Host,
+ erlang:element(5, Uri),
+ erlang:element(6, Uri),
+ erlang:element(7, Uri)},
+ {ok, Req}
+ end
+ )
+ end
+ ).
+
+-spec get_header(request(any()), binary()) -> {ok, binary()} | {error, nil}.
+get_header(Request, Key) ->
+ gleam@list:key_find(erlang:element(3, Request), gleam@string:lowercase(Key)).
+
+-spec set_header(request(IBF), binary(), binary()) -> request(IBF).
+set_header(Request, Key, Value) ->
+ Headers = gleam@list:key_set(
+ erlang:element(3, Request),
+ gleam@string:lowercase(Key),
+ Value
+ ),
+ erlang:setelement(3, Request, Headers).
+
+-spec prepend_header(request(IBI), binary(), binary()) -> request(IBI).
+prepend_header(Request, Key, Value) ->
+ Headers = [{gleam@string:lowercase(Key), Value} |
+ erlang:element(3, Request)],
+ erlang:setelement(3, Request, Headers).
+
+-spec set_body(request(any()), IBN) -> request(IBN).
+set_body(Req, Body) ->
+ {request, Method, Headers, _, Scheme, Host, Port, Path, Query} = Req,
+ {request, Method, Headers, Body, Scheme, Host, Port, Path, Query}.
+
+-spec map(request(IBP), fun((IBP) -> IBR)) -> request(IBR).
+map(Request, Transform) ->
+ _pipe = erlang:element(4, Request),
+ _pipe@1 = Transform(_pipe),
+ set_body(Request, _pipe@1).
+
+-spec path_segments(request(any())) -> list(binary()).
+path_segments(Request) ->
+ _pipe = erlang:element(8, Request),
+ gleam@uri:path_segments(_pipe).
+
+-spec get_query(request(any())) -> {ok, list({binary(), binary()})} |
+ {error, nil}.
+get_query(Request) ->
+ case erlang:element(9, Request) of
+ {some, Query_string} ->
+ gleam@uri:parse_query(Query_string);
+
+ none ->
+ {ok, []}
+ end.
+
+-spec set_query(request(ICB), list({binary(), binary()})) -> request(ICB).
+set_query(Req, Query) ->
+ Pair = fun(T) ->
+ gleam@string_builder:from_strings(
+ [erlang:element(1, T), <<"="/utf8>>, erlang:element(2, T)]
+ )
+ end,
+ Query@1 = begin
+ _pipe = Query,
+ _pipe@1 = gleam@list:map(_pipe, Pair),
+ _pipe@2 = gleam@list:intersperse(
+ _pipe@1,
+ gleam@string_builder:from_string(<<"&"/utf8>>)
+ ),
+ _pipe@3 = gleam@string_builder:concat(_pipe@2),
+ _pipe@4 = gleam@string_builder:to_string(_pipe@3),
+ {some, _pipe@4}
+ end,
+ erlang:setelement(9, Req, Query@1).
+
+-spec set_method(request(ICF), gleam@http:method()) -> request(ICF).
+set_method(Req, Method) ->
+ erlang:setelement(2, Req, Method).
+
+-spec new() -> request(binary()).
+new() ->
+ {request,
+ get,
+ [],
+ <<""/utf8>>,
+ https,
+ <<"localhost"/utf8>>,
+ none,
+ <<""/utf8>>,
+ none}.
+
+-spec to(binary()) -> {ok, request(binary())} | {error, nil}.
+to(Url) ->
+ _pipe = Url,
+ _pipe@1 = gleam@uri:parse(_pipe),
+ gleam@result:then(_pipe@1, fun from_uri/1).
+
+-spec set_scheme(request(ICM), gleam@http:scheme()) -> request(ICM).
+set_scheme(Req, Scheme) ->
+ erlang:setelement(5, Req, Scheme).
+
+-spec set_host(request(ICP), binary()) -> request(ICP).
+set_host(Req, Host) ->
+ erlang:setelement(6, Req, Host).
+
+-spec set_port(request(ICS), integer()) -> request(ICS).
+set_port(Req, Port) ->
+ erlang:setelement(7, Req, {some, Port}).
+
+-spec set_path(request(ICV), binary()) -> request(ICV).
+set_path(Req, Path) ->
+ erlang:setelement(8, Req, Path).
+
+-spec set_cookie(request(ICY), binary(), binary()) -> request(ICY).
+set_cookie(Req, Name, Value) ->
+ New_cookie_string = gleam@string:join([Name, Value], <<"="/utf8>>),
+ {Cookies_string@2, Headers@1} = case gleam@list:key_pop(
+ erlang:element(3, Req),
+ <<"cookie"/utf8>>
+ ) of
+ {ok, {Cookies_string, Headers}} ->
+ Cookies_string@1 = gleam@string:join(
+ [Cookies_string, New_cookie_string],
+ <<"; "/utf8>>
+ ),
+ {Cookies_string@1, Headers};
+
+ {error, nil} ->
+ {New_cookie_string, erlang:element(3, Req)}
+ end,
+ erlang:setelement(
+ 3,
+ Req,
+ [{<<"cookie"/utf8>>, Cookies_string@2} | Headers@1]
+ ).
+
+-spec get_cookies(request(any())) -> list({binary(), binary()}).
+get_cookies(Req) ->
+ {request, _, Headers, _, _, _, _, _, _} = Req,
+ _pipe = Headers,
+ _pipe@1 = gleam@list:filter_map(
+ _pipe,
+ fun(Header) ->
+ {Name, Value} = Header,
+ case Name of
+ <<"cookie"/utf8>> ->
+ {ok, gleam@http@cookie:parse(Value)};
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ),
+ gleam@list:flatten(_pipe@1).
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache
new file mode 100644
index 0000000..5656963
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta
new file mode 100644
index 0000000..1f05041
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl
new file mode 100644
index 0000000..300726a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@response.erl
@@ -0,0 +1,97 @@
+-module(gleam@http@response).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/1, get_header/2, set_header/3, prepend_header/3, set_body/2, try_map/2, map/2, redirect/1, get_cookies/1, set_cookie/4, expire_cookie/3]).
+-export_type([response/1]).
+
+-type response(HXJ) :: {response, integer(), list({binary(), binary()}), HXJ}.
+
+-spec new(integer()) -> response(binary()).
+new(Status) ->
+ {response, Status, [], <<""/utf8>>}.
+
+-spec get_header(response(any()), binary()) -> {ok, binary()} | {error, nil}.
+get_header(Response, Key) ->
+ gleam@list:key_find(
+ erlang:element(3, Response),
+ gleam@string:lowercase(Key)
+ ).
+
+-spec set_header(response(HXY), binary(), binary()) -> response(HXY).
+set_header(Response, Key, Value) ->
+ Headers = gleam@list:key_set(
+ erlang:element(3, Response),
+ gleam@string:lowercase(Key),
+ Value
+ ),
+ erlang:setelement(3, Response, Headers).
+
+-spec prepend_header(response(HYB), binary(), binary()) -> response(HYB).
+prepend_header(Response, Key, Value) ->
+ Headers = [{gleam@string:lowercase(Key), Value} |
+ erlang:element(3, Response)],
+ erlang:setelement(3, Response, Headers).
+
+-spec set_body(response(any()), HYG) -> response(HYG).
+set_body(Response, Body) ->
+ {response, Status, Headers, _} = Response,
+ {response, Status, Headers, Body}.
+
+-spec try_map(response(HXK), fun((HXK) -> {ok, HXM} | {error, HXN})) -> {ok,
+ response(HXM)} |
+ {error, HXN}.
+try_map(Response, Transform) ->
+ gleam@result:then(
+ Transform(erlang:element(4, Response)),
+ fun(Body) -> {ok, set_body(Response, Body)} end
+ ).
+
+-spec map(response(HYI), fun((HYI) -> HYK)) -> response(HYK).
+map(Response, Transform) ->
+ _pipe = erlang:element(4, Response),
+ _pipe@1 = Transform(_pipe),
+ set_body(Response, _pipe@1).
+
+-spec redirect(binary()) -> response(binary()).
+redirect(Uri) ->
+ {response,
+ 303,
+ [{<<"location"/utf8>>, Uri}],
+ gleam@string:append(<<"You are being redirected to "/utf8>>, Uri)}.
+
+-spec get_cookies(response(any())) -> list({binary(), binary()}).
+get_cookies(Resp) ->
+ {response, _, Headers, _} = Resp,
+ _pipe = Headers,
+ _pipe@1 = gleam@list:filter_map(
+ _pipe,
+ fun(Header) ->
+ {Name, Value} = Header,
+ case Name of
+ <<"set-cookie"/utf8>> ->
+ {ok, gleam@http@cookie:parse(Value)};
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ),
+ gleam@list:flatten(_pipe@1).
+
+-spec set_cookie(
+ response(HYP),
+ binary(),
+ binary(),
+ gleam@http@cookie:attributes()
+) -> response(HYP).
+set_cookie(Response, Name, Value, Attributes) ->
+ prepend_header(
+ Response,
+ <<"set-cookie"/utf8>>,
+ gleam@http@cookie:set_header(Name, Value, Attributes)
+ ).
+
+-spec expire_cookie(response(HYS), binary(), gleam@http@cookie:attributes()) -> response(HYS).
+expire_cookie(Response, Name, Attributes) ->
+ Attrs = erlang:setelement(2, Attributes, {some, 0}),
+ set_cookie(Response, Name, <<""/utf8>>, Attrs).
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache
new file mode 100644
index 0000000..2bdc561
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta
new file mode 100644
index 0000000..c0222d6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl
new file mode 100644
index 0000000..7aa0ed5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam@http@service.erl
@@ -0,0 +1,82 @@
+-module(gleam@http@service).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([map_response_body/2, prepend_response_header/3, method_override/1]).
+
+-spec map_response_body(
+ fun((gleam@http@request:request(IIL)) -> gleam@http@response:response(IIM)),
+ fun((IIM) -> IIP)
+) -> fun((gleam@http@request:request(IIL)) -> gleam@http@response:response(IIP)).
+map_response_body(Service, Mapper) ->
+ fun(Req) -> _pipe = Req,
+ _pipe@1 = Service(_pipe),
+ gleam@http@response:map(_pipe@1, Mapper) end.
+
+-spec prepend_response_header(
+ fun((gleam@http@request:request(IIS)) -> gleam@http@response:response(IIT)),
+ binary(),
+ binary()
+) -> fun((gleam@http@request:request(IIS)) -> gleam@http@response:response(IIT)).
+prepend_response_header(Service, Key, Value) ->
+ fun(Req) -> _pipe = Req,
+ _pipe@1 = Service(_pipe),
+ gleam@http@response:prepend_header(_pipe@1, Key, Value) end.
+
+-spec ensure_post(gleam@http@request:request(IIY)) -> {ok,
+ gleam@http@request:request(IIY)} |
+ {error, nil}.
+ensure_post(Req) ->
+ case erlang:element(2, Req) of
+ post ->
+ {ok, Req};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec get_override_method(gleam@http@request:request(any())) -> {ok,
+ gleam@http:method()} |
+ {error, nil}.
+get_override_method(Request) ->
+ gleam@result:then(
+ gleam@http@request:get_query(Request),
+ fun(Query_params) ->
+ gleam@result:then(
+ gleam@list:key_find(Query_params, <<"_method"/utf8>>),
+ fun(Method) ->
+ gleam@result:then(
+ gleam@http:parse_method(Method),
+ fun(Method@1) -> case Method@1 of
+ put ->
+ {ok, Method@1};
+
+ patch ->
+ {ok, Method@1};
+
+ delete ->
+ {ok, Method@1};
+
+ _ ->
+ {error, nil}
+ end end
+ )
+ end
+ )
+ end
+ ).
+
+-spec method_override(
+ fun((gleam@http@request:request(IJF)) -> gleam@http@response:response(IJG))
+) -> fun((gleam@http@request:request(IJF)) -> gleam@http@response:response(IJG)).
+method_override(Service) ->
+ fun(Request) -> _pipe = Request,
+ _pipe@1 = ensure_post(_pipe),
+ _pipe@2 = gleam@result:then(_pipe@1, fun get_override_method/1),
+ _pipe@3 = gleam@result:map(
+ _pipe@2,
+ fun(_capture) ->
+ gleam@http@request:set_method(Request, _capture)
+ end
+ ),
+ _pipe@4 = gleam@result:unwrap(_pipe@3, Request),
+ Service(_pipe@4) end.
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl
new file mode 100644
index 0000000..bb499bb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.erl
@@ -0,0 +1,88 @@
+-module(gleam_http_native).
+-export([decode_method/1]).
+
+decode_method(Term) ->
+ case Term of
+ "connect" -> {ok, connect};
+ "delete" -> {ok, delete};
+ "get" -> {ok, get};
+ "head" -> {ok, head};
+ "options" -> {ok, options};
+ "patch" -> {ok, patch};
+ "post" -> {ok, post};
+ "put" -> {ok, put};
+ "trace" -> {ok, trace};
+ "CONNECT" -> {ok, connect};
+ "DELETE" -> {ok, delete};
+ "GET" -> {ok, get};
+ "HEAD" -> {ok, head};
+ "OPTIONS" -> {ok, options};
+ "PATCH" -> {ok, patch};
+ "POST" -> {ok, post};
+ "PUT" -> {ok, put};
+ "TRACE" -> {ok, trace};
+ "Connect" -> {ok, connect};
+ "Delete" -> {ok, delete};
+ "Get" -> {ok, get};
+ "Head" -> {ok, head};
+ "Options" -> {ok, options};
+ "Patch" -> {ok, patch};
+ "Post" -> {ok, post};
+ "Put" -> {ok, put};
+ "Trace" -> {ok, trace};
+ 'connect' -> {ok, connect};
+ 'delete' -> {ok, delete};
+ 'get' -> {ok, get};
+ 'head' -> {ok, head};
+ 'options' -> {ok, options};
+ 'patch' -> {ok, patch};
+ 'post' -> {ok, post};
+ 'put' -> {ok, put};
+ 'trace' -> {ok, trace};
+ 'CONNECT' -> {ok, connect};
+ 'DELETE' -> {ok, delete};
+ 'GET' -> {ok, get};
+ 'HEAD' -> {ok, head};
+ 'OPTIONS' -> {ok, options};
+ 'PATCH' -> {ok, patch};
+ 'POST' -> {ok, post};
+ 'PUT' -> {ok, put};
+ 'TRACE' -> {ok, trace};
+ 'Connect' -> {ok, connect};
+ 'Delete' -> {ok, delete};
+ 'Get' -> {ok, get};
+ 'Head' -> {ok, head};
+ 'Options' -> {ok, options};
+ 'Patch' -> {ok, patch};
+ 'Post' -> {ok, post};
+ 'Put' -> {ok, put};
+ 'Trace' -> {ok, trace};
+ <<"connect">> -> {ok, connect};
+ <<"delete">> -> {ok, delete};
+ <<"get">> -> {ok, get};
+ <<"head">> -> {ok, head};
+ <<"options">> -> {ok, options};
+ <<"patch">> -> {ok, patch};
+ <<"post">> -> {ok, post};
+ <<"put">> -> {ok, put};
+ <<"trace">> -> {ok, trace};
+ <<"CONNECT">> -> {ok, connect};
+ <<"DELETE">> -> {ok, delete};
+ <<"GET">> -> {ok, get};
+ <<"HEAD">> -> {ok, head};
+ <<"OPTIONS">> -> {ok, options};
+ <<"PATCH">> -> {ok, patch};
+ <<"POST">> -> {ok, post};
+ <<"PUT">> -> {ok, put};
+ <<"TRACE">> -> {ok, trace};
+ <<"Connect">> -> {ok, connect};
+ <<"Delete">> -> {ok, delete};
+ <<"Get">> -> {ok, get};
+ <<"Head">> -> {ok, head};
+ <<"Options">> -> {ok, options};
+ <<"Patch">> -> {ok, patch};
+ <<"Post">> -> {ok, post};
+ <<"Put">> -> {ok, put};
+ <<"Trace">> -> {ok, trace};
+ _ -> {error, nil}
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs
new file mode 100644
index 0000000..c871a8b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/_gleam_artefacts/gleam_http_native.mjs
@@ -0,0 +1,38 @@
+import { Ok, Error } from "./gleam.mjs";
+import {
+ Get,
+ Post,
+ Head,
+ Put,
+ Delete,
+ Trace,
+ Connect,
+ Options,
+ Patch,
+} from "./gleam/http.mjs";
+
+export function decode_method(value) {
+ try {
+ switch (value.toLowerCase()) {
+ case "get":
+ return new Ok(new Get());
+ case "post":
+ return new Ok(new Post());
+ case "head":
+ return new Ok(new Head());
+ case "put":
+ return new Ok(new Put());
+ case "delete":
+ return new Ok(new Delete());
+ case "trace":
+ return new Ok(new Trace());
+ case "connect":
+ return new Ok(new Connect());
+ case "options":
+ return new Ok(new Options());
+ case "patch":
+ return new Ok(new Patch());
+ }
+ } catch {}
+ return new Error(undefined);
+}
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beam
new file mode 100644
index 0000000..39142e6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beam
new file mode 100644
index 0000000..905fe68
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@cookie.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beam
new file mode 100644
index 0000000..f499969
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@request.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beam
new file mode 100644
index 0000000..1554f40
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@response.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beam
new file mode 100644
index 0000000..aa271f1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam@http@service.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app
new file mode 100644
index 0000000..5f55c6f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http.app
@@ -0,0 +1,7 @@
+{application, gleam_http, [
+ {vsn, "3.5.2"},
+ {applications, [gleam_stdlib]},
+ {description, "Types and functions for Gleam HTTP clients and servers"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beam b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beam
new file mode 100644
index 0000000..0b5e282
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/ebin/gleam_http_native.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl
new file mode 100644
index 0000000..78a7d02
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@cookie_Attributes.hrl
@@ -0,0 +1,8 @@
+-record(attributes, {
+ max_age :: gleam@option:option(integer()),
+ domain :: gleam@option:option(binary()),
+ path :: gleam@option:option(binary()),
+ secure :: boolean(),
+ http_only :: boolean(),
+ same_site :: gleam@option:option(gleam@http@cookie:same_site_policy())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl
new file mode 100644
index 0000000..c8bbae6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@request_Request.hrl
@@ -0,0 +1,10 @@
+-record(request, {
+ method :: gleam@http:method(),
+ headers :: list({binary(), binary()}),
+ body :: any(),
+ scheme :: gleam@http:scheme(),
+ host :: binary(),
+ port :: gleam@option:option(integer()),
+ path :: binary(),
+ 'query' :: gleam@option:option(binary())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl
new file mode 100644
index 0000000..ba6f077
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http@response_Response.hrl
@@ -0,0 +1,5 @@
+-record(response, {
+ status :: integer(),
+ headers :: list({binary(), binary()}),
+ body :: any()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl
new file mode 100644
index 0000000..abd56dd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForBody.hrl
@@ -0,0 +1,5 @@
+-record(more_required_for_body, {
+ chunk :: bitstring(),
+ continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_body()} |
+ {error, nil})
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl
new file mode 100644
index 0000000..43729c1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl
@@ -0,0 +1,4 @@
+-record(more_required_for_headers, {
+ continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_headers()} |
+ {error, nil})
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl
new file mode 100644
index 0000000..4521591
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartBody.hrl
@@ -0,0 +1,5 @@
+-record(multipart_body, {
+ chunk :: bitstring(),
+ done :: boolean(),
+ remaining :: bitstring()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl
new file mode 100644
index 0000000..d9fca5c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_http/include/gleam@http_MultipartHeaders.hrl
@@ -0,0 +1,4 @@
+-record(multipart_headers, {
+ headers :: list({binary(), binary()}),
+ remaining :: bitstring()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache
new file mode 100644
index 0000000..59082af
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta
new file mode 100644
index 0000000..a340156
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl
new file mode 100644
index 0000000..1d634df
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.erl
@@ -0,0 +1,118 @@
+-module(gleam@httpc).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([send_bits/1, send/1]).
+-export_type([charlist/0, erl_http_option/0, body_format/0, erl_option/0]).
+
+-type charlist() :: any().
+
+-type erl_http_option() :: any().
+
+-type body_format() :: binary.
+
+-type erl_option() :: {body_format, body_format()}.
+
+-spec charlist_header({binary(), binary()}) -> {charlist(), charlist()}.
+charlist_header(Header) ->
+ {K, V} = Header,
+ {erlang:binary_to_list(K), erlang:binary_to_list(V)}.
+
+-spec string_header({charlist(), charlist()}) -> {binary(), binary()}.
+string_header(Header) ->
+ {K, V} = Header,
+ {erlang:list_to_binary(K), erlang:list_to_binary(V)}.
+
+-spec send_bits(gleam@http@request:request(bitstring())) -> {ok,
+ gleam@http@response:response(bitstring())} |
+ {error, gleam@dynamic:dynamic_()}.
+send_bits(Req) ->
+ Erl_url = begin
+ _pipe = Req,
+ _pipe@1 = gleam@http@request:to_uri(_pipe),
+ _pipe@2 = gleam@uri:to_string(_pipe@1),
+ erlang:binary_to_list(_pipe@2)
+ end,
+ Erl_headers = gleam@list:map(erlang:element(3, Req), fun charlist_header/1),
+ Erl_http_options = [],
+ Erl_options = [{body_format, binary}],
+ gleam@result:then(case erlang:element(2, Req) of
+ options ->
+ Erl_req = {Erl_url, Erl_headers},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req,
+ Erl_http_options,
+ Erl_options
+ );
+
+ head ->
+ Erl_req = {Erl_url, Erl_headers},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req,
+ Erl_http_options,
+ Erl_options
+ );
+
+ get ->
+ Erl_req = {Erl_url, Erl_headers},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req,
+ Erl_http_options,
+ Erl_options
+ );
+
+ _ ->
+ Erl_content_type = begin
+ _pipe@3 = Req,
+ _pipe@4 = gleam@http@request:get_header(
+ _pipe@3,
+ <<"content-type"/utf8>>
+ ),
+ _pipe@5 = gleam@result:unwrap(
+ _pipe@4,
+ <<"application/octet-stream"/utf8>>
+ ),
+ erlang:binary_to_list(_pipe@5)
+ end,
+ Erl_req@1 = {Erl_url,
+ Erl_headers,
+ Erl_content_type,
+ erlang:element(4, Req)},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req@1,
+ Erl_http_options,
+ Erl_options
+ )
+ end, fun(Response) ->
+ {{_, Status, _}, Headers, Resp_body} = Response,
+ {ok,
+ {response,
+ Status,
+ gleam@list:map(Headers, fun string_header/1),
+ Resp_body}}
+ end).
+
+-spec send(gleam@http@request:request(binary())) -> {ok,
+ gleam@http@response:response(binary())} |
+ {error, gleam@dynamic:dynamic_()}.
+send(Req) ->
+ gleam@result:then(
+ begin
+ _pipe = Req,
+ _pipe@1 = gleam@http@request:map(_pipe, fun gleam_stdlib:identity/1),
+ send_bits(_pipe@1)
+ end,
+ fun(Resp) -> case gleam@bit_array:to_string(erlang:element(4, Resp)) of
+ {ok, Body} ->
+ {ok, gleam@http@response:set_body(Resp, Body)};
+
+ {error, _} ->
+ {error,
+ gleam@dynamic:from(
+ <<"Response body was not valid UTF-8"/utf8>>
+ )}
+ end end
+ ).
diff --git a/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beam b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beam
new file mode 100644
index 0000000..1edf411
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam@httpc.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app
new file mode 100644
index 0000000..c99b5ea
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_httpc/ebin/gleam_httpc.app
@@ -0,0 +1,10 @@
+{application, gleam_httpc, [
+ {vsn, "2.1.1"},
+ {applications, [gleam_http,
+ gleam_stdlib,
+ inets,
+ ssl]},
+ {description, "Gleam bindings to Erlang's built in HTTP client, httpc"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache
new file mode 100644
index 0000000..5aa9880
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta
new file mode 100644
index 0000000..d5f2a3e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl
new file mode 100644
index 0000000..9b215cb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.erl
@@ -0,0 +1,273 @@
+-module(gleam@otp@actor).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([continue/1, with_selector/2, to_erlang_start_result/1, start_spec/1, start/2, send/2, call/3]).
+-export_type([message/1, next/2, init_result/2, self/2, spec/2, start_error/0, start_init_message/1]).
+
+-type message(LTB) :: {message, LTB} |
+ {system, gleam@otp@system:system_message()} |
+ {unexpected, gleam@dynamic:dynamic_()}.
+
+-type next(LTC, LTD) :: {continue,
+ LTD,
+ gleam@option:option(gleam@erlang@process:selector(LTC))} |
+ {stop, gleam@erlang@process:exit_reason()}.
+
+-type init_result(LTE, LTF) :: {ready, LTE, gleam@erlang@process:selector(LTF)} |
+ {failed, binary()}.
+
+-type self(LTG, LTH) :: {self,
+ gleam@otp@system:mode(),
+ gleam@erlang@process:pid_(),
+ LTG,
+ gleam@erlang@process:subject(LTH),
+ gleam@erlang@process:selector(message(LTH)),
+ gleam@otp@system:debug_state(),
+ fun((LTH, LTG) -> next(LTH, LTG))}.
+
+-type spec(LTI, LTJ) :: {spec,
+ fun(() -> init_result(LTI, LTJ)),
+ integer(),
+ fun((LTJ, LTI) -> next(LTJ, LTI))}.
+
+-type start_error() :: init_timeout |
+ {init_failed, gleam@erlang@process:exit_reason()} |
+ {init_crashed, gleam@dynamic:dynamic_()}.
+
+-type start_init_message(LTK) :: {ack,
+ {ok, gleam@erlang@process:subject(LTK)} |
+ {error, gleam@erlang@process:exit_reason()}} |
+ {mon, gleam@erlang@process:process_down()}.
+
+-spec continue(LTR) -> next(any(), LTR).
+continue(State) ->
+ {continue, State, none}.
+
+-spec with_selector(next(LTV, LTW), gleam@erlang@process:selector(LTV)) -> next(LTV, LTW).
+with_selector(Value, Selector) ->
+ case Value of
+ {continue, State, _} ->
+ {continue, State, {some, Selector}};
+
+ _ ->
+ Value
+ end.
+
+-spec exit_process(gleam@erlang@process:exit_reason()) -> gleam@erlang@process:exit_reason().
+exit_process(Reason) ->
+ Reason.
+
+-spec selecting_system_messages(gleam@erlang@process:selector(message(LUH))) -> gleam@erlang@process:selector(message(LUH)).
+selecting_system_messages(Selector) ->
+ _pipe = Selector,
+ gleam@erlang@process:selecting_record3(
+ _pipe,
+ erlang:binary_to_atom(<<"system"/utf8>>),
+ fun gleam_otp_external:convert_system_message/2
+ ).
+
+-spec receive_message(self(any(), LUD)) -> message(LUD).
+receive_message(Self) ->
+ Selector = case erlang:element(2, Self) of
+ suspended ->
+ _pipe = gleam_erlang_ffi:new_selector(),
+ selecting_system_messages(_pipe);
+
+ running ->
+ _pipe@1 = gleam_erlang_ffi:new_selector(),
+ _pipe@2 = gleam@erlang@process:selecting_anything(
+ _pipe@1,
+ fun(Field@0) -> {unexpected, Field@0} end
+ ),
+ _pipe@3 = gleam_erlang_ffi:merge_selector(
+ _pipe@2,
+ erlang:element(6, Self)
+ ),
+ selecting_system_messages(_pipe@3)
+ end,
+ gleam_erlang_ffi:select(Selector).
+
+-spec process_status_info(self(any(), any())) -> gleam@otp@system:status_info().
+process_status_info(Self) ->
+ {status_info,
+ erlang:binary_to_atom(<<"gleam@otp@actor"/utf8>>),
+ erlang:element(3, Self),
+ erlang:element(2, Self),
+ erlang:element(7, Self),
+ gleam@dynamic:from(erlang:element(4, Self))}.
+
+-spec init_selector(
+ gleam@erlang@process:subject(LYW),
+ gleam@erlang@process:selector(LYW)
+) -> gleam@erlang@process:selector(message(LYW)).
+init_selector(Subject, Selector) ->
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting(
+ _pipe,
+ Subject,
+ fun(Field@0) -> {message, Field@0} end
+ ),
+ gleam_erlang_ffi:merge_selector(
+ _pipe@1,
+ gleam_erlang_ffi:map_selector(
+ Selector,
+ fun(Field@0) -> {message, Field@0} end
+ )
+ ).
+
+-spec loop(self(any(), any())) -> gleam@erlang@process:exit_reason().
+loop(Self) ->
+ case receive_message(Self) of
+ {system, System} ->
+ case System of
+ {get_state, Callback} ->
+ Callback(gleam@dynamic:from(erlang:element(4, Self))),
+ loop(Self);
+
+ {resume, Callback@1} ->
+ Callback@1(),
+ loop(erlang:setelement(2, Self, running));
+
+ {suspend, Callback@2} ->
+ Callback@2(),
+ loop(erlang:setelement(2, Self, suspended));
+
+ {get_status, Callback@3} ->
+ Callback@3(process_status_info(Self)),
+ loop(Self)
+ end;
+
+ {unexpected, Message} ->
+ logger:warning(
+ unicode:characters_to_list(
+ <<"Actor discarding unexpected message: ~s"/utf8>>
+ ),
+ [unicode:characters_to_list(gleam@string:inspect(Message))]
+ ),
+ loop(Self);
+
+ {message, Msg} ->
+ case (erlang:element(8, Self))(Msg, erlang:element(4, Self)) of
+ {stop, Reason} ->
+ exit_process(Reason);
+
+ {continue, State, New_selector} ->
+ Selector = begin
+ _pipe = New_selector,
+ _pipe@1 = gleam@option:map(
+ _pipe,
+ fun(_capture) ->
+ init_selector(erlang:element(5, Self), _capture)
+ end
+ ),
+ gleam@option:unwrap(_pipe@1, erlang:element(6, Self))
+ end,
+ loop(
+ erlang:setelement(
+ 6,
+ erlang:setelement(4, Self, State),
+ Selector
+ )
+ )
+ end
+ end.
+
+-spec initialise_actor(
+ spec(any(), LUY),
+ gleam@erlang@process:subject({ok, gleam@erlang@process:subject(LUY)} |
+ {error, gleam@erlang@process:exit_reason()})
+) -> gleam@erlang@process:exit_reason().
+initialise_actor(Spec, Ack) ->
+ Subject = gleam@erlang@process:new_subject(),
+ case (erlang:element(2, Spec))() of
+ {ready, State, Selector} ->
+ Selector@1 = init_selector(Subject, Selector),
+ gleam@erlang@process:send(Ack, {ok, Subject}),
+ Self = {self,
+ running,
+ gleam@erlang@process:subject_owner(Ack),
+ State,
+ Subject,
+ Selector@1,
+ sys:debug_options([]),
+ erlang:element(4, Spec)},
+ loop(Self);
+
+ {failed, Reason} ->
+ gleam@erlang@process:send(Ack, {error, {abnormal, Reason}}),
+ exit_process({abnormal, Reason})
+ end.
+
+-spec to_erlang_start_result(
+ {ok, gleam@erlang@process:subject(any())} | {error, start_error()}
+) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}.
+to_erlang_start_result(Res) ->
+ case Res of
+ {ok, X} ->
+ {ok, gleam@erlang@process:subject_owner(X)};
+
+ {error, X@1} ->
+ {error, gleam@dynamic:from(X@1)}
+ end.
+
+-spec start_spec(spec(any(), LVM)) -> {ok, gleam@erlang@process:subject(LVM)} |
+ {error, start_error()}.
+start_spec(Spec) ->
+ Ack_subject = gleam@erlang@process:new_subject(),
+ Child = gleam@erlang@process:start(
+ fun() -> initialise_actor(Spec, Ack_subject) end,
+ true
+ ),
+ Monitor = gleam@erlang@process:monitor_process(Child),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting(
+ _pipe,
+ Ack_subject,
+ fun(Field@0) -> {ack, Field@0} end
+ ),
+ gleam@erlang@process:selecting_process_down(
+ _pipe@1,
+ Monitor,
+ fun(Field@0) -> {mon, Field@0} end
+ )
+ end,
+ Result = case gleam_erlang_ffi:select(Selector, erlang:element(3, Spec)) of
+ {ok, {ack, {ok, Channel}}} ->
+ {ok, Channel};
+
+ {ok, {ack, {error, Reason}}} ->
+ {error, {init_failed, Reason}};
+
+ {ok, {mon, Down}} ->
+ {error, {init_crashed, erlang:element(3, Down)}};
+
+ {error, nil} ->
+ gleam@erlang@process:kill(Child),
+ {error, init_timeout}
+ end,
+ gleam_erlang_ffi:demonitor(Monitor),
+ Result.
+
+-spec start(LVS, fun((LVT, LVS) -> next(LVT, LVS))) -> {ok,
+ gleam@erlang@process:subject(LVT)} |
+ {error, start_error()}.
+start(State, Loop) ->
+ start_spec(
+ {spec,
+ fun() -> {ready, State, gleam_erlang_ffi:new_selector()} end,
+ 5000,
+ Loop}
+ ).
+
+-spec send(gleam@erlang@process:subject(LVZ), LVZ) -> nil.
+send(Subject, Msg) ->
+ gleam@erlang@process:send(Subject, Msg).
+
+-spec call(
+ gleam@erlang@process:subject(LWB),
+ fun((gleam@erlang@process:subject(LWD)) -> LWB),
+ integer()
+) -> LWD.
+call(Selector, Make_message, Timeout) ->
+ gleam@erlang@process:call(Selector, Make_message, Timeout).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache
new file mode 100644
index 0000000..2970843
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta
new file mode 100644
index 0000000..1997b5a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl
new file mode 100644
index 0000000..8792f14
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.erl
@@ -0,0 +1,53 @@
+-module(gleam@otp@intensity_tracker).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/2, trim_window/3, add_event/1]).
+-export_type([intensity_tracker/0, too_intense/0]).
+
+-opaque intensity_tracker() :: {intensity_tracker,
+ integer(),
+ integer(),
+ list(integer())}.
+
+-type too_intense() :: too_intense.
+
+-spec new(integer(), integer()) -> intensity_tracker().
+new(Limit, Period) ->
+ {intensity_tracker, Limit, Period, []}.
+
+-spec now_seconds() -> integer().
+now_seconds() ->
+ erlang:monotonic_time(1).
+
+-spec trim_window(list(integer()), integer(), integer()) -> list(integer()).
+trim_window(Events, Now, Period) ->
+ case Events of
+ [] ->
+ [];
+
+ [Event | Events@1] ->
+ case Now >= (Event + Period) of
+ true ->
+ [Event | trim_window(Events@1, Now, Period)];
+
+ false ->
+ []
+ end
+ end.
+
+-spec add_event(intensity_tracker()) -> {ok, intensity_tracker()} |
+ {error, too_intense()}.
+add_event(Tracker) ->
+ Now = now_seconds(),
+ Events = trim_window(
+ [Now | erlang:element(4, Tracker)],
+ Now,
+ erlang:element(3, Tracker)
+ ),
+ case gleam@list:length(Events) >= erlang:element(2, Tracker) of
+ true ->
+ {error, too_intense};
+
+ false ->
+ {ok, erlang:setelement(4, Tracker, Events)}
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache
new file mode 100644
index 0000000..e911262
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta
new file mode 100644
index 0000000..5f1cb59
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl
new file mode 100644
index 0000000..b205739
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.erl
@@ -0,0 +1,8 @@
+-module(gleam@otp@port).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([port_/0]).
+
+-type port_() :: any().
+
+
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache
new file mode 100644
index 0000000..e3cbbc7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta
new file mode 100644
index 0000000..f6f257e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl
new file mode 100644
index 0000000..75e6c9f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.erl
@@ -0,0 +1,322 @@
+-module(gleam@otp@supervisor).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([add/2, supervisor/1, worker/1, returning/2, start_spec/1, start/1, application_stopped/0, to_erlang_start_result/1]).
+-export_type([spec/2, children/1, child_spec/3, child_start_error/0, message/0, instruction/0, state/1, starter/1, child/1, handle_exit_error/0, application_start_mode/0, application_stop/0]).
+
+-type spec(MID, MIE) :: {spec,
+ MID,
+ integer(),
+ integer(),
+ fun((children(MID)) -> children(MIE))}.
+
+-opaque children(MIF) :: {ready, starter(MIF)} | {failed, child_start_error()}.
+
+-opaque child_spec(MIG, MIH, MII) :: {child_spec,
+ fun((MIH) -> {ok, gleam@erlang@process:subject(MIG)} |
+ {error, gleam@otp@actor:start_error()}),
+ fun((MIH, gleam@erlang@process:subject(MIG)) -> MII)}.
+
+-type child_start_error() :: {child_start_error,
+ gleam@option:option(gleam@erlang@process:pid_()),
+ gleam@otp@actor:start_error()}.
+
+-opaque message() :: {exit, gleam@erlang@process:exit_message()} |
+ {retry_restart, gleam@erlang@process:pid_()}.
+
+-type instruction() :: start_all | {start_from, gleam@erlang@process:pid_()}.
+
+-type state(MIJ) :: {state,
+ gleam@otp@intensity_tracker:intensity_tracker(),
+ starter(MIJ),
+ gleam@erlang@process:subject(gleam@erlang@process:pid_())}.
+
+-type starter(MIK) :: {starter,
+ MIK,
+ gleam@option:option(fun((instruction()) -> {ok,
+ {starter(MIK), instruction()}} |
+ {error, child_start_error()}))}.
+
+-type child(MIL) :: {child, gleam@erlang@process:pid_(), MIL}.
+
+-type handle_exit_error() :: {restart_failed,
+ gleam@erlang@process:pid_(),
+ gleam@otp@intensity_tracker:intensity_tracker()} |
+ too_many_restarts.
+
+-type application_start_mode() :: normal |
+ {takeover, gleam@erlang@node:node_()} |
+ {failover, gleam@erlang@node:node_()}.
+
+-type application_stop() :: any().
+
+-spec start_child(child_spec(any(), MIP, MIQ), MIP) -> {ok, child(MIQ)} |
+ {error, child_start_error()}.
+start_child(Child_spec, Argument) ->
+ gleam@result:then(
+ begin
+ _pipe = (erlang:element(2, Child_spec))(Argument),
+ gleam@result:map_error(
+ _pipe,
+ fun(_capture) -> {child_start_error, none, _capture} end
+ )
+ end,
+ fun(Subject) ->
+ {ok,
+ {child,
+ gleam@erlang@process:subject_owner(Subject),
+ (erlang:element(3, Child_spec))(Argument, Subject)}}
+ end
+ ).
+
+-spec shutdown_child(
+ gleam@erlang@process:pid_(),
+ child_spec(any(), any(), any())
+) -> nil.
+shutdown_child(Pid, _) ->
+ gleam@erlang@process:send_exit(Pid).
+
+-spec perform_instruction_for_child(
+ MJD,
+ instruction(),
+ child_spec(any(), MJD, MJF),
+ child(MJF)
+) -> {ok, {child(MJF), instruction()}} | {error, child_start_error()}.
+perform_instruction_for_child(Argument, Instruction, Child_spec, Child) ->
+ Current = erlang:element(2, Child),
+ case Instruction of
+ {start_from, Target} when Target =/= Current ->
+ {ok, {Child, Instruction}};
+
+ _ ->
+ shutdown_child(Current, Child_spec),
+ gleam@result:then(
+ start_child(Child_spec, Argument),
+ fun(Child@1) -> {ok, {Child@1, start_all}} end
+ )
+ end.
+
+-spec add_child_to_starter(
+ starter(MJN),
+ child_spec(any(), MJN, MJQ),
+ child(MJQ)
+) -> starter(MJQ).
+add_child_to_starter(Starter, Child_spec, Child) ->
+ Starter@3 = fun(Instruction) ->
+ gleam@result:then(case erlang:element(3, Starter) of
+ {some, Start} ->
+ Start(Instruction);
+
+ none ->
+ {ok, {Starter, Instruction}}
+ end, fun(_use0) ->
+ {Starter@1, Instruction@1} = _use0,
+ gleam@result:then(
+ perform_instruction_for_child(
+ erlang:element(2, Starter@1),
+ Instruction@1,
+ Child_spec,
+ Child
+ ),
+ fun(_use0@1) ->
+ {Child@1, Instruction@2} = _use0@1,
+ Starter@2 = add_child_to_starter(
+ Starter@1,
+ Child_spec,
+ Child@1
+ ),
+ {ok, {Starter@2, Instruction@2}}
+ end
+ )
+ end)
+ end,
+ {starter, erlang:element(3, Child), {some, Starter@3}}.
+
+-spec start_and_add_child(starter(MJW), child_spec(any(), MJW, MJZ)) -> children(MJZ).
+start_and_add_child(State, Child_spec) ->
+ case start_child(Child_spec, erlang:element(2, State)) of
+ {ok, Child} ->
+ {ready, add_child_to_starter(State, Child_spec, Child)};
+
+ {error, Reason} ->
+ {failed, Reason}
+ end.
+
+-spec add(children(MKE), child_spec(any(), MKE, MKH)) -> children(MKH).
+add(Children, Child_spec) ->
+ case Children of
+ {failed, Fail} ->
+ {failed, Fail};
+
+ {ready, State} ->
+ start_and_add_child(State, Child_spec)
+ end.
+
+-spec supervisor(
+ fun((MKM) -> {ok, gleam@erlang@process:subject(MKN)} |
+ {error, gleam@otp@actor:start_error()})
+) -> child_spec(MKN, MKM, MKM).
+supervisor(Start) ->
+ {child_spec, Start, fun(Argument, _) -> Argument end}.
+
+-spec worker(
+ fun((MKU) -> {ok, gleam@erlang@process:subject(MKV)} |
+ {error, gleam@otp@actor:start_error()})
+) -> child_spec(MKV, MKU, MKU).
+worker(Start) ->
+ {child_spec, Start, fun(Argument, _) -> Argument end}.
+
+-spec returning(
+ child_spec(MLC, MLD, any()),
+ fun((MLD, gleam@erlang@process:subject(MLC)) -> MLJ)
+) -> child_spec(MLC, MLD, MLJ).
+returning(Child, Updater) ->
+ {child_spec, erlang:element(2, Child), Updater}.
+
+-spec init(spec(any(), MLO)) -> gleam@otp@actor:init_result(state(MLO), message()).
+init(Spec) ->
+ Retry = gleam@erlang@process:new_subject(),
+ gleam_erlang_ffi:trap_exits(true),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting(
+ _pipe,
+ Retry,
+ fun(Field@0) -> {retry_restart, Field@0} end
+ ),
+ gleam@erlang@process:selecting_trapped_exits(
+ _pipe@1,
+ fun(Field@0) -> {exit, Field@0} end
+ )
+ end,
+ Result = begin
+ _pipe@2 = {starter, erlang:element(2, Spec), none},
+ _pipe@3 = {ready, _pipe@2},
+ (erlang:element(5, Spec))(_pipe@3)
+ end,
+ case Result of
+ {ready, Starter} ->
+ Restarts = gleam@otp@intensity_tracker:new(
+ erlang:element(3, Spec),
+ erlang:element(4, Spec)
+ ),
+ State = {state, Restarts, Starter, Retry},
+ {ready, State, Selector};
+
+ {failed, Error} ->
+ {failed, case erlang:element(3, Error) of
+ init_timeout ->
+ <<"Child initialisation timed out"/utf8>>;
+
+ {init_crashed, Reason} ->
+ gleam@string:append(
+ <<"Child crashed during initialisation: "/utf8>>,
+ gleam@string:inspect(Reason)
+ );
+
+ {init_failed, Reason@1} ->
+ gleam@string:append(
+ <<"Child failed to start during initialisation: "/utf8>>,
+ gleam@string:inspect(Reason@1)
+ )
+ end}
+ end.
+
+-spec handle_exit(gleam@erlang@process:pid_(), state(MLU)) -> gleam@otp@actor:next(message(), state(MLU)).
+handle_exit(Pid, State) ->
+ Outcome = begin
+ _assert_subject = erlang:element(3, erlang:element(3, State)),
+ {some, Start} = case _assert_subject of
+ {some, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/otp/supervisor"/utf8>>,
+ function => <<"handle_exit"/utf8>>,
+ line => 293})
+ end,
+ gleam@result:then(
+ begin
+ _pipe = erlang:element(2, State),
+ _pipe@1 = gleam@otp@intensity_tracker:add_event(_pipe),
+ gleam@result:map_error(_pipe@1, fun(_) -> too_many_restarts end)
+ end,
+ fun(Restarts) ->
+ gleam@result:then(
+ begin
+ _pipe@2 = Start({start_from, Pid}),
+ gleam@result:map_error(
+ _pipe@2,
+ fun(E) ->
+ {restart_failed,
+ gleam@option:unwrap(
+ erlang:element(2, E),
+ Pid
+ ),
+ Restarts}
+ end
+ )
+ end,
+ fun(_use0) ->
+ {Starter, _} = _use0,
+ {ok,
+ erlang:setelement(
+ 2,
+ erlang:setelement(3, State, Starter),
+ Restarts
+ )}
+ end
+ )
+ end
+ )
+ end,
+ case Outcome of
+ {ok, State@1} ->
+ gleam@otp@actor:continue(State@1);
+
+ {error, {restart_failed, Failed_child, Restarts@1}} ->
+ gleam@erlang@process:send(erlang:element(4, State), Failed_child),
+ State@2 = erlang:setelement(2, State, Restarts@1),
+ gleam@otp@actor:continue(State@2);
+
+ {error, too_many_restarts} ->
+ {stop,
+ {abnormal,
+ <<"Child processes restarted too many times within allowed period"/utf8>>}}
+ end.
+
+-spec loop(message(), state(MLZ)) -> gleam@otp@actor:next(message(), state(MLZ)).
+loop(Message, State) ->
+ case Message of
+ {exit, Exit_message} ->
+ handle_exit(erlang:element(2, Exit_message), State);
+
+ {retry_restart, Pid} ->
+ handle_exit(Pid, State)
+ end.
+
+-spec start_spec(spec(any(), any())) -> {ok,
+ gleam@erlang@process:subject(message())} |
+ {error, gleam@otp@actor:start_error()}.
+start_spec(Spec) ->
+ gleam@otp@actor:start_spec(
+ {spec, fun() -> init(Spec) end, 60000, fun loop/2}
+ ).
+
+-spec start(fun((children(nil)) -> children(any()))) -> {ok,
+ gleam@erlang@process:subject(message())} |
+ {error, gleam@otp@actor:start_error()}.
+start(Init) ->
+ start_spec({spec, nil, 1, 5, Init}).
+
+-spec application_stopped() -> application_stop().
+application_stopped() ->
+ gleam_otp_external:application_stopped().
+
+-spec to_erlang_start_result(
+ {ok, gleam@erlang@process:subject(any())} |
+ {error, gleam@otp@actor:start_error()}
+) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}.
+to_erlang_start_result(Res) ->
+ gleam@otp@actor:to_erlang_start_result(Res).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache
new file mode 100644
index 0000000..1ecd94e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta
new file mode 100644
index 0000000..9f64041
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl
new file mode 100644
index 0000000..622e5ea
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.erl
@@ -0,0 +1,43 @@
+-module(gleam@otp@system).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([debug_state/1, get_state/1, suspend/1, resume/1]).
+-export_type([mode/0, debug_option/0, debug_state/0, status_info/0, system_message/0, do_not_leak/0]).
+
+-type mode() :: running | suspended.
+
+-type debug_option() :: no_debug.
+
+-type debug_state() :: any().
+
+-type status_info() :: {status_info,
+ gleam@erlang@atom:atom_(),
+ gleam@erlang@process:pid_(),
+ mode(),
+ debug_state(),
+ gleam@dynamic:dynamic_()}.
+
+-type system_message() :: {resume, fun(() -> nil)} |
+ {suspend, fun(() -> nil)} |
+ {get_state, fun((gleam@dynamic:dynamic_()) -> nil)} |
+ {get_status, fun((status_info()) -> nil)}.
+
+-type do_not_leak() :: any().
+
+-spec debug_state(list(debug_option())) -> debug_state().
+debug_state(A) ->
+ sys:debug_options(A).
+
+-spec get_state(gleam@erlang@process:pid_()) -> gleam@dynamic:dynamic_().
+get_state(From) ->
+ sys:get_state(From).
+
+-spec suspend(gleam@erlang@process:pid_()) -> nil.
+suspend(Pid) ->
+ sys:suspend(Pid),
+ nil.
+
+-spec resume(gleam@erlang@process:pid_()) -> nil.
+resume(Pid) ->
+ sys:resume(Pid),
+ nil.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache
new file mode 100644
index 0000000..3360869
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta
new file mode 100644
index 0000000..e4f89cf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl
new file mode 100644
index 0000000..ae4037d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.erl
@@ -0,0 +1,111 @@
+-module(gleam@otp@task).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([async/1, try_await/2, await/2, try_await_forever/1, await_forever/1]).
+-export_type([task/1, await_error/0, message/1]).
+
+-opaque task(MEB) :: {task,
+ gleam@erlang@process:pid_(),
+ gleam@erlang@process:pid_(),
+ gleam@erlang@process:process_monitor(),
+ gleam@erlang@process:selector(message(MEB))}.
+
+-type await_error() :: timeout | {exit, gleam@dynamic:dynamic_()}.
+
+-type message(MEC) :: {from_monitor, gleam@erlang@process:process_down()} |
+ {from_subject, MEC}.
+
+-spec async(fun(() -> MED)) -> task(MED).
+async(Work) ->
+ Owner = erlang:self(),
+ Subject = gleam@erlang@process:new_subject(),
+ Pid = gleam@erlang@process:start(
+ fun() -> gleam@erlang@process:send(Subject, Work()) end,
+ true
+ ),
+ Monitor = gleam@erlang@process:monitor_process(Pid),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting_process_down(
+ _pipe,
+ Monitor,
+ fun(Field@0) -> {from_monitor, Field@0} end
+ ),
+ gleam@erlang@process:selecting(
+ _pipe@1,
+ Subject,
+ fun(Field@0) -> {from_subject, Field@0} end
+ )
+ end,
+ {task, Owner, Pid, Monitor, Selector}.
+
+-spec assert_owner(task(any())) -> nil.
+assert_owner(Task) ->
+ Self = erlang:self(),
+ case erlang:element(2, Task) =:= Self of
+ true ->
+ nil;
+
+ false ->
+ gleam@erlang@process:send_abnormal_exit(
+ Self,
+ <<"awaited on a task that does not belong to this process"/utf8>>
+ )
+ end.
+
+-spec try_await(task(MEH), integer()) -> {ok, MEH} | {error, await_error()}.
+try_await(Task, Timeout) ->
+ assert_owner(Task),
+ case gleam_erlang_ffi:select(erlang:element(5, Task), Timeout) of
+ {ok, {from_subject, X}} ->
+ gleam_erlang_ffi:demonitor(erlang:element(4, Task)),
+ {ok, X};
+
+ {ok, {from_monitor, {process_down, _, Reason}}} ->
+ {error, {exit, Reason}};
+
+ {error, nil} ->
+ {error, timeout}
+ end.
+
+-spec await(task(MEL), integer()) -> MEL.
+await(Task, Timeout) ->
+ _assert_subject = try_await(Task, Timeout),
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/otp/task"/utf8>>,
+ function => <<"await"/utf8>>,
+ line => 117})
+ end,
+ Value.
+
+-spec try_await_forever(task(MEN)) -> {ok, MEN} | {error, await_error()}.
+try_await_forever(Task) ->
+ assert_owner(Task),
+ case gleam_erlang_ffi:select(erlang:element(5, Task)) of
+ {from_subject, X} ->
+ gleam_erlang_ffi:demonitor(erlang:element(4, Task)),
+ {ok, X};
+
+ {from_monitor, {process_down, _, Reason}} ->
+ {error, {exit, Reason}}
+ end.
+
+-spec await_forever(task(MER)) -> MER.
+await_forever(Task) ->
+ _assert_subject = try_await_forever(Task),
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/otp/task"/utf8>>,
+ function => <<"await_forever"/utf8>>,
+ line => 149})
+ end,
+ Value.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache
new file mode 100644
index 0000000..601b922
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta
new file mode 100644
index 0000000..6b7a3a8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl
new file mode 100644
index 0000000..9381ad2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp.erl
@@ -0,0 +1,28 @@
+-module(gleam_otp).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec spawn_task(integer()) -> gleam@otp@task:task(nil).
+spawn_task(I) ->
+ gleam@otp@task:async(fun() -> case (I rem 500) =:= 0 of
+ true ->
+ gleam@io:println(
+ <<"Hello from "/utf8, (gleam@int:to_string(I))/binary>>
+ );
+
+ false ->
+ nil
+ end end).
+
+-spec main() -> integer().
+main() ->
+ gleam@io:debug(
+ gleam_otp_test_external:get_message_queue_length(erlang:self())
+ ),
+ _pipe = gleam@list:range(0, 1000000),
+ _pipe@1 = gleam@list:map(_pipe, fun spawn_task/1),
+ gleam@list:each(_pipe@1, fun gleam@otp@task:await_forever/1),
+ gleam@io:debug(
+ gleam_otp_test_external:get_message_queue_length(erlang:self())
+ ).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl
new file mode 100644
index 0000000..8910a67
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/_gleam_artefacts/gleam_otp_external.erl
@@ -0,0 +1,43 @@
+-module(gleam_otp_external).
+
+-export([application_stopped/0, convert_system_message/2]).
+
+% TODO: support other system messages
+% {replace_state, StateFn}
+% {change_code, Mod, Vsn, Extra}
+% {terminate, Reason}
+% {debug, {log, Flag}}
+% {debug, {trace, Flag}}
+% {debug, {log_to_file, FileName}}
+% {debug, {statistics, Flag}}
+% {debug, no_debug}
+% {debug, {install, {Func, FuncState}}}
+% {debug, {install, {FuncId, Func, FuncState}}}
+% {debug, {remove, FuncOrId}}
+% GetStatus(Subject(StatusInfo))
+convert_system_message({From, Ref}, Request) when is_pid(From) ->
+ Reply = fun(Msg) ->
+ erlang:send(From, {Ref, Msg}),
+ nil
+ end,
+ System = fun(Callback) ->
+ {system, {Request, Callback}}
+ end,
+ case Request of
+ get_status -> System(fun(Status) -> Reply(process_status(Status)) end);
+ get_state -> System(Reply);
+ suspend -> System(fun() -> Reply(ok) end);
+ resume -> System(fun() -> Reply(ok) end);
+ Other -> {unexpeceted, Other}
+ end.
+
+process_status({status_info, Module, Parent, Mode, DebugState, State}) ->
+ Data = [
+ get(), Mode, Parent, DebugState,
+ [{header, "Status for Gleam process " ++ pid_to_list(self())},
+ {data, [{'Status', Mode}, {'Parent', Parent}, {'State', State}]}]
+ ],
+ {status, self(), {module, Module}, Data}.
+
+application_stopped() ->
+ ok.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beam
new file mode 100644
index 0000000..1a777b4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@actor.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beam
new file mode 100644
index 0000000..5a126b5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@intensity_tracker.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beam
new file mode 100644
index 0000000..8b72b7d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@port.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beam
new file mode 100644
index 0000000..72f4b32
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@supervisor.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beam
new file mode 100644
index 0000000..3aefd21
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@system.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beam
new file mode 100644
index 0000000..c21bc3b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam@otp@task.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app
new file mode 100644
index 0000000..21dd444
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.app
@@ -0,0 +1,8 @@
+{application, gleam_otp, [
+ {vsn, "0.8.0"},
+ {applications, [gleam_erlang,
+ gleam_stdlib]},
+ {description, "Fault tolerant multicore Gleam programs with OTP"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beam
new file mode 100644
index 0000000..0a25445
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beam b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beam
new file mode 100644
index 0000000..f77f93b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/ebin/gleam_otp_external.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl
new file mode 100644
index 0000000..85677d1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Continue.hrl
@@ -0,0 +1,4 @@
+-record(continue, {
+ state :: any(),
+ selector :: gleam@option:option(gleam@erlang@process:selector(any()))
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl
new file mode 100644
index 0000000..75faa95
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Ready.hrl
@@ -0,0 +1 @@
+-record(ready, {state :: any(), selector :: gleam@erlang@process:selector(any())}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl
new file mode 100644
index 0000000..5287439
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@actor_Spec.hrl
@@ -0,0 +1,5 @@
+-record(spec, {
+ init :: fun(() -> gleam@otp@actor:init_result(any(), any())),
+ init_timeout :: integer(),
+ loop :: fun((any(), any()) -> gleam@otp@actor:next(any(), any()))
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl
new file mode 100644
index 0000000..3ed0b01
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl
@@ -0,0 +1,5 @@
+-record(intensity_tracker, {
+ limit :: integer(),
+ period :: integer(),
+ events :: list(integer())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl
new file mode 100644
index 0000000..7afd07f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl
@@ -0,0 +1,5 @@
+-record(child_spec, {
+ start :: fun((any()) -> {ok, gleam@erlang@process:subject(any())} |
+ {error, gleam@otp@actor:start_error()}),
+ returning :: fun((any(), gleam@erlang@process:subject(any())) -> any())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl
new file mode 100644
index 0000000..b10bd9f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@supervisor_Spec.hrl
@@ -0,0 +1,6 @@
+-record(spec, {
+ argument :: any(),
+ max_frequency :: integer(),
+ frequency_period :: integer(),
+ init :: fun((gleam@otp@supervisor:children(any())) -> gleam@otp@supervisor:children(any()))
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl
new file mode 100644
index 0000000..99ab4cb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@system_StatusInfo.hrl
@@ -0,0 +1,7 @@
+-record(status_info, {
+ module :: gleam@erlang@atom:atom_(),
+ parent :: gleam@erlang@process:pid_(),
+ mode :: gleam@otp@system:mode(),
+ debug_state :: gleam@otp@system:debug_state(),
+ state :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl
new file mode 100644
index 0000000..7c83874
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Exit.hrl
@@ -0,0 +1 @@
+-record(exit, {reason :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl
new file mode 100644
index 0000000..959bea8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_otp/include/gleam@otp@task_Task.hrl
@@ -0,0 +1,6 @@
+-record(task, {
+ owner :: gleam@erlang@process:pid_(),
+ pid :: gleam@erlang@process:pid_(),
+ monitor :: gleam@erlang@process:process_monitor(),
+ selector :: gleam@erlang@process:selector(gleam@otp@task:message(any()))
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs
new file mode 100644
index 0000000..a8309e0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/dict.mjs
@@ -0,0 +1,957 @@
+/**
+ * This file uses jsdoc to annotate types.
+ * These types can be checked using the typescript compiler with "checkjs" option.
+ */
+
+import { isEqual } from "./gleam.mjs";
+
+const referenceMap = new WeakMap();
+const tempDataView = new DataView(new ArrayBuffer(8));
+let referenceUID = 0;
+/**
+ * hash the object by reference using a weak map and incrementing uid
+ * @param {any} o
+ * @returns {number}
+ */
+function hashByReference(o) {
+ const known = referenceMap.get(o);
+ if (known !== undefined) {
+ return known;
+ }
+ const hash = referenceUID++;
+ if (referenceUID === 0x7fffffff) {
+ referenceUID = 0;
+ }
+ referenceMap.set(o, hash);
+ return hash;
+}
+/**
+ * merge two hashes in an order sensitive way
+ * @param {number} a
+ * @param {number} b
+ * @returns {number}
+ */
+function hashMerge(a, b) {
+ return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0;
+}
+/**
+ * standard string hash popularised by java
+ * @param {string} s
+ * @returns {number}
+ */
+function hashString(s) {
+ let hash = 0;
+ const len = s.length;
+ for (let i = 0; i < len; i++) {
+ hash = (Math.imul(31, hash) + s.charCodeAt(i)) | 0;
+ }
+ return hash;
+}
+/**
+ * hash a number by converting to two integers and do some jumbling
+ * @param {number} n
+ * @returns {number}
+ */
+function hashNumber(n) {
+ tempDataView.setFloat64(0, n);
+ const i = tempDataView.getInt32(0);
+ const j = tempDataView.getInt32(4);
+ return Math.imul(0x45d9f3b, (i >> 16) ^ i) ^ j;
+}
+/**
+ * hash a BigInt by converting it to a string and hashing that
+ * @param {BigInt} n
+ * @returns {number}
+ */
+function hashBigInt(n) {
+ return hashString(n.toString());
+}
+/**
+ * hash any js object
+ * @param {any} o
+ * @returns {number}
+ */
+function hashObject(o) {
+ const proto = Object.getPrototypeOf(o);
+ if (proto !== null && typeof proto.hashCode === "function") {
+ try {
+ const code = o.hashCode(o);
+ if (typeof code === "number") {
+ return code;
+ }
+ } catch {}
+ }
+ if (o instanceof Promise || o instanceof WeakSet || o instanceof WeakMap) {
+ return hashByReference(o);
+ }
+ if (o instanceof Date) {
+ return hashNumber(o.getTime());
+ }
+ let h = 0;
+ if (o instanceof ArrayBuffer) {
+ o = new Uint8Array(o);
+ }
+ if (Array.isArray(o) || o instanceof Uint8Array) {
+ for (let i = 0; i < o.length; i++) {
+ h = (Math.imul(31, h) + getHash(o[i])) | 0;
+ }
+ } else if (o instanceof Set) {
+ o.forEach((v) => {
+ h = (h + getHash(v)) | 0;
+ });
+ } else if (o instanceof Map) {
+ o.forEach((v, k) => {
+ h = (h + hashMerge(getHash(v), getHash(k))) | 0;
+ });
+ } else {
+ const keys = Object.keys(o);
+ for (let i = 0; i < keys.length; i++) {
+ const k = keys[i];
+ const v = o[k];
+ h = (h + hashMerge(getHash(v), hashString(k))) | 0;
+ }
+ }
+ return h;
+}
+/**
+ * hash any js value
+ * @param {any} u
+ * @returns {number}
+ */
+export function getHash(u) {
+ if (u === null) return 0x42108422;
+ if (u === undefined) return 0x42108423;
+ if (u === true) return 0x42108421;
+ if (u === false) return 0x42108420;
+ switch (typeof u) {
+ case "number":
+ return hashNumber(u);
+ case "string":
+ return hashString(u);
+ case "bigint":
+ return hashBigInt(u);
+ case "object":
+ return hashObject(u);
+ case "symbol":
+ return hashByReference(u);
+ case "function":
+ return hashByReference(u);
+ default:
+ return 0; // should be unreachable
+ }
+}
+/**
+ * @template K,V
+ * @typedef {ArrayNode<K,V> | IndexNode<K,V> | CollisionNode<K,V>} Node
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof ENTRY, k: K, v: V }} Entry
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof ARRAY_NODE, size: number, array: (undefined | Entry<K,V> | Node<K,V>)[] }} ArrayNode
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof INDEX_NODE, bitmap: number, array: (Entry<K,V> | Node<K,V>)[] }} IndexNode
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof COLLISION_NODE, hash: number, array: Entry<K, V>[] }} CollisionNode
+ */
+/**
+ * @typedef {{ val: boolean }} Flag
+ */
+const SHIFT = 5; // number of bits you need to shift by to get the next bucket
+const BUCKET_SIZE = Math.pow(2, SHIFT);
+const MASK = BUCKET_SIZE - 1; // used to zero out all bits not in the bucket
+const MAX_INDEX_NODE = BUCKET_SIZE / 2; // when does index node grow into array node
+const MIN_ARRAY_NODE = BUCKET_SIZE / 4; // when does array node shrink to index node
+const ENTRY = 0;
+const ARRAY_NODE = 1;
+const INDEX_NODE = 2;
+const COLLISION_NODE = 3;
+/** @type {IndexNode<any,any>} */
+const EMPTY = {
+ type: INDEX_NODE,
+ bitmap: 0,
+ array: [],
+};
+/**
+ * Mask the hash to get only the bucket corresponding to shift
+ * @param {number} hash
+ * @param {number} shift
+ * @returns {number}
+ */
+function mask(hash, shift) {
+ return (hash >>> shift) & MASK;
+}
+/**
+ * Set only the Nth bit where N is the masked hash
+ * @param {number} hash
+ * @param {number} shift
+ * @returns {number}
+ */
+function bitpos(hash, shift) {
+ return 1 << mask(hash, shift);
+}
+/**
+ * Count the number of 1 bits in a number
+ * @param {number} x
+ * @returns {number}
+ */
+function bitcount(x) {
+ x -= (x >> 1) & 0x55555555;
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x + (x >> 4)) & 0x0f0f0f0f;
+ x += x >> 8;
+ x += x >> 16;
+ return x & 0x7f;
+}
+/**
+ * Calculate the array index of an item in a bitmap index node
+ * @param {number} bitmap
+ * @param {number} bit
+ * @returns {number}
+ */
+function index(bitmap, bit) {
+ return bitcount(bitmap & (bit - 1));
+}
+/**
+ * Efficiently copy an array and set one value at an index
+ * @template T
+ * @param {T[]} arr
+ * @param {number} at
+ * @param {T} val
+ * @returns {T[]}
+ */
+function cloneAndSet(arr, at, val) {
+ const len = arr.length;
+ const out = new Array(len);
+ for (let i = 0; i < len; ++i) {
+ out[i] = arr[i];
+ }
+ out[at] = val;
+ return out;
+}
+/**
+ * Efficiently copy an array and insert one value at an index
+ * @template T
+ * @param {T[]} arr
+ * @param {number} at
+ * @param {T} val
+ * @returns {T[]}
+ */
+function spliceIn(arr, at, val) {
+ const len = arr.length;
+ const out = new Array(len + 1);
+ let i = 0;
+ let g = 0;
+ while (i < at) {
+ out[g++] = arr[i++];
+ }
+ out[g++] = val;
+ while (i < len) {
+ out[g++] = arr[i++];
+ }
+ return out;
+}
+/**
+ * Efficiently copy an array and remove one value at an index
+ * @template T
+ * @param {T[]} arr
+ * @param {number} at
+ * @returns {T[]}
+ */
+function spliceOut(arr, at) {
+ const len = arr.length;
+ const out = new Array(len - 1);
+ let i = 0;
+ let g = 0;
+ while (i < at) {
+ out[g++] = arr[i++];
+ }
+ ++i;
+ while (i < len) {
+ out[g++] = arr[i++];
+ }
+ return out;
+}
+/**
+ * Create a new node containing two entries
+ * @template K,V
+ * @param {number} shift
+ * @param {K} key1
+ * @param {V} val1
+ * @param {number} key2hash
+ * @param {K} key2
+ * @param {V} val2
+ * @returns {Node<K,V>}
+ */
+function createNode(shift, key1, val1, key2hash, key2, val2) {
+ const key1hash = getHash(key1);
+ if (key1hash === key2hash) {
+ return {
+ type: COLLISION_NODE,
+ hash: key1hash,
+ array: [
+ { type: ENTRY, k: key1, v: val1 },
+ { type: ENTRY, k: key2, v: val2 },
+ ],
+ };
+ }
+ const addedLeaf = { val: false };
+ return assoc(
+ assocIndex(EMPTY, shift, key1hash, key1, val1, addedLeaf),
+ shift,
+ key2hash,
+ key2,
+ val2,
+ addedLeaf
+ );
+}
+/**
+ * @template T,K,V
+ * @callback AssocFunction
+ * @param {T} root
+ * @param {number} shift
+ * @param {number} hash
+ * @param {K} key
+ * @param {V} val
+ * @param {Flag} addedLeaf
+ * @returns {Node<K,V>}
+ */
+/**
+ * Associate a node with a new entry, creating a new node
+ * @template T,K,V
+ * @type {AssocFunction<Node<K,V>,K,V>}
+ */
+function assoc(root, shift, hash, key, val, addedLeaf) {
+ switch (root.type) {
+ case ARRAY_NODE:
+ return assocArray(root, shift, hash, key, val, addedLeaf);
+ case INDEX_NODE:
+ return assocIndex(root, shift, hash, key, val, addedLeaf);
+ case COLLISION_NODE:
+ return assocCollision(root, shift, hash, key, val, addedLeaf);
+ }
+}
+/**
+ * @template T,K,V
+ * @type {AssocFunction<ArrayNode<K,V>,K,V>}
+ */
+function assocArray(root, shift, hash, key, val, addedLeaf) {
+ const idx = mask(hash, shift);
+ const node = root.array[idx];
+ // if the corresponding index is empty set the index to a newly created node
+ if (node === undefined) {
+ addedLeaf.val = true;
+ return {
+ type: ARRAY_NODE,
+ size: root.size + 1,
+ array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }),
+ };
+ }
+ if (node.type === ENTRY) {
+ // if keys are equal replace the entry
+ if (isEqual(key, node.k)) {
+ if (val === node.v) {
+ return root;
+ }
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(root.array, idx, {
+ type: ENTRY,
+ k: key,
+ v: val,
+ }),
+ };
+ }
+ // otherwise upgrade the entry to a node and insert
+ addedLeaf.val = true;
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(
+ root.array,
+ idx,
+ createNode(shift + SHIFT, node.k, node.v, hash, key, val)
+ ),
+ };
+ }
+ // otherwise call assoc on the child node
+ const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf);
+ // if the child node hasn't changed just return the old root
+ if (n === node) {
+ return root;
+ }
+ // otherwise set the index to the new node
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(root.array, idx, n),
+ };
+}
+/**
+ * @template T,K,V
+ * @type {AssocFunction<IndexNode<K,V>,K,V>}
+ */
+function assocIndex(root, shift, hash, key, val, addedLeaf) {
+ const bit = bitpos(hash, shift);
+ const idx = index(root.bitmap, bit);
+ // if there is already a item at this hash index..
+ if ((root.bitmap & bit) !== 0) {
+ // if there is a node at the index (not an entry), call assoc on the child node
+ const node = root.array[idx];
+ if (node.type !== ENTRY) {
+ const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf);
+ if (n === node) {
+ return root;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(root.array, idx, n),
+ };
+ }
+ // otherwise there is an entry at the index
+ // if the keys are equal replace the entry with the updated value
+ const nodeKey = node.k;
+ if (isEqual(key, nodeKey)) {
+ if (val === node.v) {
+ return root;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(root.array, idx, {
+ type: ENTRY,
+ k: key,
+ v: val,
+ }),
+ };
+ }
+ // if the keys are not equal, replace the entry with a new child node
+ addedLeaf.val = true;
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(
+ root.array,
+ idx,
+ createNode(shift + SHIFT, nodeKey, node.v, hash, key, val)
+ ),
+ };
+ } else {
+ // else there is currently no item at the hash index
+ const n = root.array.length;
+ // if the number of nodes is at the maximum, expand this node into an array node
+ if (n >= MAX_INDEX_NODE) {
+ // create a 32 length array for the new array node (one for each bit in the hash)
+ const nodes = new Array(32);
+ // create and insert a node for the new entry
+ const jdx = mask(hash, shift);
+ nodes[jdx] = assocIndex(EMPTY, shift + SHIFT, hash, key, val, addedLeaf);
+ let j = 0;
+ let bitmap = root.bitmap;
+ // place each item in the index node into the correct spot in the array node
+ // loop through all 32 bits / array positions
+ for (let i = 0; i < 32; i++) {
+ if ((bitmap & 1) !== 0) {
+ const node = root.array[j++];
+ nodes[i] = node;
+ }
+ // shift the bitmap to process the next bit
+ bitmap = bitmap >>> 1;
+ }
+ return {
+ type: ARRAY_NODE,
+ size: n + 1,
+ array: nodes,
+ };
+ } else {
+ // else there is still space in this index node
+ // simply insert a new entry at the hash index
+ const newArray = spliceIn(root.array, idx, {
+ type: ENTRY,
+ k: key,
+ v: val,
+ });
+ addedLeaf.val = true;
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap | bit,
+ array: newArray,
+ };
+ }
+ }
+}
+/**
+ * @template T,K,V
+ * @type {AssocFunction<CollisionNode<K,V>,K,V>}
+ */
+function assocCollision(root, shift, hash, key, val, addedLeaf) {
+ // if there is a hash collision
+ if (hash === root.hash) {
+ const idx = collisionIndexOf(root, key);
+ // if this key already exists replace the entry with the new value
+ if (idx !== -1) {
+ const entry = root.array[idx];
+ if (entry.v === val) {
+ return root;
+ }
+ return {
+ type: COLLISION_NODE,
+ hash: hash,
+ array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }),
+ };
+ }
+ // otherwise insert the entry at the end of the array
+ const size = root.array.length;
+ addedLeaf.val = true;
+ return {
+ type: COLLISION_NODE,
+ hash: hash,
+ array: cloneAndSet(root.array, size, { type: ENTRY, k: key, v: val }),
+ };
+ }
+ // if there is no hash collision, upgrade to an index node
+ return assoc(
+ {
+ type: INDEX_NODE,
+ bitmap: bitpos(root.hash, shift),
+ array: [root],
+ },
+ shift,
+ hash,
+ key,
+ val,
+ addedLeaf
+ );
+}
+/**
+ * Find the index of a key in the collision node's array
+ * @template K,V
+ * @param {CollisionNode<K,V>} root
+ * @param {K} key
+ * @returns {number}
+ */
+function collisionIndexOf(root, key) {
+ const size = root.array.length;
+ for (let i = 0; i < size; i++) {
+ if (isEqual(key, root.array[i].k)) {
+ return i;
+ }
+ }
+ return -1;
+}
+/**
+ * @template T,K,V
+ * @callback FindFunction
+ * @param {T} root
+ * @param {number} shift
+ * @param {number} hash
+ * @param {K} key
+ * @returns {undefined | Entry<K,V>}
+ */
+/**
+ * Return the found entry or undefined if not present in the root
+ * @template K,V
+ * @type {FindFunction<Node<K,V>,K,V>}
+ */
+function find(root, shift, hash, key) {
+ switch (root.type) {
+ case ARRAY_NODE:
+ return findArray(root, shift, hash, key);
+ case INDEX_NODE:
+ return findIndex(root, shift, hash, key);
+ case COLLISION_NODE:
+ return findCollision(root, key);
+ }
+}
+/**
+ * @template K,V
+ * @type {FindFunction<ArrayNode<K,V>,K,V>}
+ */
+function findArray(root, shift, hash, key) {
+ const idx = mask(hash, shift);
+ const node = root.array[idx];
+ if (node === undefined) {
+ return undefined;
+ }
+ if (node.type !== ENTRY) {
+ return find(node, shift + SHIFT, hash, key);
+ }
+ if (isEqual(key, node.k)) {
+ return node;
+ }
+ return undefined;
+}
+/**
+ * @template K,V
+ * @type {FindFunction<IndexNode<K,V>,K,V>}
+ */
+function findIndex(root, shift, hash, key) {
+ const bit = bitpos(hash, shift);
+ if ((root.bitmap & bit) === 0) {
+ return undefined;
+ }
+ const idx = index(root.bitmap, bit);
+ const node = root.array[idx];
+ if (node.type !== ENTRY) {
+ return find(node, shift + SHIFT, hash, key);
+ }
+ if (isEqual(key, node.k)) {
+ return node;
+ }
+ return undefined;
+}
+/**
+ * @template K,V
+ * @param {CollisionNode<K,V>} root
+ * @param {K} key
+ * @returns {undefined | Entry<K,V>}
+ */
+function findCollision(root, key) {
+ const idx = collisionIndexOf(root, key);
+ if (idx < 0) {
+ return undefined;
+ }
+ return root.array[idx];
+}
+/**
+ * @template T,K,V
+ * @callback WithoutFunction
+ * @param {T} root
+ * @param {number} shift
+ * @param {number} hash
+ * @param {K} key
+ * @returns {undefined | Node<K,V>}
+ */
+/**
+ * Remove an entry from the root, returning the updated root.
+ * Returns undefined if the node should be removed from the parent.
+ * @template K,V
+ * @type {WithoutFunction<Node<K,V>,K,V>}
+ * */
+function without(root, shift, hash, key) {
+ switch (root.type) {
+ case ARRAY_NODE:
+ return withoutArray(root, shift, hash, key);
+ case INDEX_NODE:
+ return withoutIndex(root, shift, hash, key);
+ case COLLISION_NODE:
+ return withoutCollision(root, key);
+ }
+}
+/**
+ * @template K,V
+ * @type {WithoutFunction<ArrayNode<K,V>,K,V>}
+ */
+function withoutArray(root, shift, hash, key) {
+ const idx = mask(hash, shift);
+ const node = root.array[idx];
+ if (node === undefined) {
+ return root; // already empty
+ }
+ let n = undefined;
+ // if node is an entry and the keys are not equal there is nothing to remove
+ // if node is not an entry do a recursive call
+ if (node.type === ENTRY) {
+ if (!isEqual(node.k, key)) {
+ return root; // no changes
+ }
+ } else {
+ n = without(node, shift + SHIFT, hash, key);
+ if (n === node) {
+ return root; // no changes
+ }
+ }
+ // if the recursive call returned undefined the node should be removed
+ if (n === undefined) {
+ // if the number of child nodes is at the minimum, pack into an index node
+ if (root.size <= MIN_ARRAY_NODE) {
+ const arr = root.array;
+ const out = new Array(root.size - 1);
+ let i = 0;
+ let j = 0;
+ let bitmap = 0;
+ while (i < idx) {
+ const nv = arr[i];
+ if (nv !== undefined) {
+ out[j] = nv;
+ bitmap |= 1 << i;
+ ++j;
+ }
+ ++i;
+ }
+ ++i; // skip copying the removed node
+ while (i < arr.length) {
+ const nv = arr[i];
+ if (nv !== undefined) {
+ out[j] = nv;
+ bitmap |= 1 << i;
+ ++j;
+ }
+ ++i;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: bitmap,
+ array: out,
+ };
+ }
+ return {
+ type: ARRAY_NODE,
+ size: root.size - 1,
+ array: cloneAndSet(root.array, idx, n),
+ };
+ }
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(root.array, idx, n),
+ };
+}
+/**
+ * @template K,V
+ * @type {WithoutFunction<IndexNode<K,V>,K,V>}
+ */
+function withoutIndex(root, shift, hash, key) {
+ const bit = bitpos(hash, shift);
+ if ((root.bitmap & bit) === 0) {
+ return root; // already empty
+ }
+ const idx = index(root.bitmap, bit);
+ const node = root.array[idx];
+ // if the item is not an entry
+ if (node.type !== ENTRY) {
+ const n = without(node, shift + SHIFT, hash, key);
+ if (n === node) {
+ return root; // no changes
+ }
+ // if not undefined, the child node still has items, so update it
+ if (n !== undefined) {
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(root.array, idx, n),
+ };
+ }
+ // otherwise the child node should be removed
+ // if it was the only child node, remove this node from the parent
+ if (root.bitmap === bit) {
+ return undefined;
+ }
+ // otherwise just remove the child node
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap ^ bit,
+ array: spliceOut(root.array, idx),
+ };
+ }
+ // otherwise the item is an entry, remove it if the key matches
+ if (isEqual(key, node.k)) {
+ if (root.bitmap === bit) {
+ return undefined;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap ^ bit,
+ array: spliceOut(root.array, idx),
+ };
+ }
+ return root;
+}
+/**
+ * @template K,V
+ * @param {CollisionNode<K,V>} root
+ * @param {K} key
+ * @returns {undefined | Node<K,V>}
+ */
+function withoutCollision(root, key) {
+ const idx = collisionIndexOf(root, key);
+ // if the key not found, no changes
+ if (idx < 0) {
+ return root;
+ }
+ // otherwise the entry was found, remove it
+ // if it was the only entry in this node, remove the whole node
+ if (root.array.length === 1) {
+ return undefined;
+ }
+ // otherwise just remove the entry
+ return {
+ type: COLLISION_NODE,
+ hash: root.hash,
+ array: spliceOut(root.array, idx),
+ };
+}
+/**
+ * @template K,V
+ * @param {undefined | Node<K,V>} root
+ * @param {(value:V,key:K)=>void} fn
+ * @returns {void}
+ */
+function forEach(root, fn) {
+ if (root === undefined) {
+ return;
+ }
+ const items = root.array;
+ const size = items.length;
+ for (let i = 0; i < size; i++) {
+ const item = items[i];
+ if (item === undefined) {
+ continue;
+ }
+ if (item.type === ENTRY) {
+ fn(item.v, item.k);
+ continue;
+ }
+ forEach(item, fn);
+ }
+}
+/**
+ * Extra wrapper to keep track of Dict size and clean up the API
+ * @template K,V
+ */
+export default class Dict {
+ /**
+ * @template V
+ * @param {Record<string,V>} o
+ * @returns {Dict<string,V>}
+ */
+ static fromObject(o) {
+ const keys = Object.keys(o);
+ /** @type Dict<string,V> */
+ let m = Dict.new();
+ for (let i = 0; i < keys.length; i++) {
+ const k = keys[i];
+ m = m.set(k, o[k]);
+ }
+ return m;
+ }
+ /**
+ * @template K,V
+ * @param {Map<K,V>} o
+ * @returns {Dict<K,V>}
+ */
+ static fromMap(o) {
+ /** @type Dict<K,V> */
+ let m = Dict.new();
+ o.forEach((v, k) => {
+ m = m.set(k, v);
+ });
+ return m;
+ }
+ static new() {
+ return new Dict(undefined, 0);
+ }
+ /**
+ * @param {undefined | Node<K,V>} root
+ * @param {number} size
+ */
+ constructor(root, size) {
+ this.root = root;
+ this.size = size;
+ }
+ /**
+ * @template NotFound
+ * @param {K} key
+ * @param {NotFound} notFound
+ * @returns {NotFound | V}
+ */
+ get(key, notFound) {
+ if (this.root === undefined) {
+ return notFound;
+ }
+ const found = find(this.root, 0, getHash(key), key);
+ if (found === undefined) {
+ return notFound;
+ }
+ return found.v;
+ }
+ /**
+ * @param {K} key
+ * @param {V} val
+ * @returns {Dict<K,V>}
+ */
+ set(key, val) {
+ const addedLeaf = { val: false };
+ const root = this.root === undefined ? EMPTY : this.root;
+ const newRoot = assoc(root, 0, getHash(key), key, val, addedLeaf);
+ if (newRoot === this.root) {
+ return this;
+ }
+ return new Dict(newRoot, addedLeaf.val ? this.size + 1 : this.size);
+ }
+ /**
+ * @param {K} key
+ * @returns {Dict<K,V>}
+ */
+ delete(key) {
+ if (this.root === undefined) {
+ return this;
+ }
+ const newRoot = without(this.root, 0, getHash(key), key);
+ if (newRoot === this.root) {
+ return this;
+ }
+ if (newRoot === undefined) {
+ return Dict.new();
+ }
+ return new Dict(newRoot, this.size - 1);
+ }
+ /**
+ * @param {K} key
+ * @returns {boolean}
+ */
+ has(key) {
+ if (this.root === undefined) {
+ return false;
+ }
+ return find(this.root, 0, getHash(key), key) !== undefined;
+ }
+ /**
+ * @returns {[K,V][]}
+ */
+ entries() {
+ if (this.root === undefined) {
+ return [];
+ }
+ /** @type [K,V][] */
+ const result = [];
+ this.forEach((v, k) => result.push([k, v]));
+ return result;
+ }
+ /**
+ *
+ * @param {(val:V,key:K)=>void} fn
+ */
+ forEach(fn) {
+ forEach(this.root, fn);
+ }
+ hashCode() {
+ let h = 0;
+ this.forEach((v, k) => {
+ h = (h + hashMerge(getHash(v), getHash(k))) | 0;
+ });
+ return h;
+ }
+ /**
+ * @param {unknown} o
+ * @returns {boolean}
+ */
+ equals(o) {
+ if (!(o instanceof Dict) || this.size !== o.size) {
+ return false;
+ }
+ let equal = true;
+ this.forEach((v, k) => {
+ equal = equal && isEqual(o.get(k, !v), v);
+ });
+ return equal;
+ }
+}
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache
new file mode 100644
index 0000000..1a9b6c1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta
new file mode 100644
index 0000000..a935fcc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl
new file mode 100644
index 0000000..65bc3f6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.erl
@@ -0,0 +1,20 @@
+-module(gleam@base).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([encode64/2, decode64/1, url_encode64/2, url_decode64/1]).
+
+-spec encode64(bitstring(), boolean()) -> binary().
+encode64(Input, Padding) ->
+ gleam@bit_array:base64_encode(Input, Padding).
+
+-spec decode64(binary()) -> {ok, bitstring()} | {error, nil}.
+decode64(Encoded) ->
+ gleam@bit_array:base64_decode(Encoded).
+
+-spec url_encode64(bitstring(), boolean()) -> binary().
+url_encode64(Input, Padding) ->
+ gleam@bit_array:base64_url_encode(Input, Padding).
+
+-spec url_decode64(binary()) -> {ok, bitstring()} | {error, nil}.
+url_decode64(Encoded) ->
+ gleam@bit_array:base64_url_decode(Encoded).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache
new file mode 100644
index 0000000..3b197e5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta
new file mode 100644
index 0000000..bfd3dd8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl
new file mode 100644
index 0000000..ba18dfa
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.erl
@@ -0,0 +1,102 @@
+-module(gleam@bit_array).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_string/1, byte_size/1, slice/3, is_utf8/1, to_string/1, concat/1, append/2, base64_encode/2, base64_decode/1, base64_url_encode/2, base64_url_decode/1, base16_encode/1, base16_decode/1]).
+
+-spec from_string(binary()) -> bitstring().
+from_string(X) ->
+ gleam_stdlib:identity(X).
+
+-spec byte_size(bitstring()) -> integer().
+byte_size(X) ->
+ erlang:byte_size(X).
+
+-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} |
+ {error, nil}.
+slice(String, Position, Length) ->
+ gleam_stdlib:bit_array_slice(String, Position, Length).
+
+-spec do_is_utf8(bitstring()) -> boolean().
+do_is_utf8(Bits) ->
+ case Bits of
+ <<>> ->
+ true;
+
+ <<_/utf8, Rest/binary>> ->
+ do_is_utf8(Rest);
+
+ _ ->
+ false
+ end.
+
+-spec is_utf8(bitstring()) -> boolean().
+is_utf8(Bits) ->
+ do_is_utf8(Bits).
+
+-spec do_to_string(bitstring()) -> {ok, binary()} | {error, nil}.
+do_to_string(Bits) ->
+ case is_utf8(Bits) of
+ true ->
+ {ok, gleam_stdlib:identity(Bits)};
+
+ false ->
+ {error, nil}
+ end.
+
+-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}.
+to_string(Bits) ->
+ do_to_string(Bits).
+
+-spec concat(list(bitstring())) -> bitstring().
+concat(Bit_arrays) ->
+ gleam_stdlib:bit_array_concat(Bit_arrays).
+
+-spec append(bitstring(), bitstring()) -> bitstring().
+append(First, Second) ->
+ gleam_stdlib:bit_array_concat([First, Second]).
+
+-spec base64_encode(bitstring(), boolean()) -> binary().
+base64_encode(Input, Padding) ->
+ Encoded = base64:encode(Input),
+ case Padding of
+ true ->
+ Encoded;
+
+ false ->
+ gleam@string:replace(Encoded, <<"="/utf8>>, <<""/utf8>>)
+ end.
+
+-spec base64_decode(binary()) -> {ok, bitstring()} | {error, nil}.
+base64_decode(Encoded) ->
+ Padded = case erlang:byte_size(gleam_stdlib:identity(Encoded)) rem 4 of
+ 0 ->
+ Encoded;
+
+ N ->
+ gleam@string:append(
+ Encoded,
+ gleam@string:repeat(<<"="/utf8>>, 4 - N)
+ )
+ end,
+ gleam_stdlib:base_decode64(Padded).
+
+-spec base64_url_encode(bitstring(), boolean()) -> binary().
+base64_url_encode(Input, Padding) ->
+ _pipe = base64_encode(Input, Padding),
+ _pipe@1 = gleam@string:replace(_pipe, <<"+"/utf8>>, <<"-"/utf8>>),
+ gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"_"/utf8>>).
+
+-spec base64_url_decode(binary()) -> {ok, bitstring()} | {error, nil}.
+base64_url_decode(Encoded) ->
+ _pipe = Encoded,
+ _pipe@1 = gleam@string:replace(_pipe, <<"-"/utf8>>, <<"+"/utf8>>),
+ _pipe@2 = gleam@string:replace(_pipe@1, <<"_"/utf8>>, <<"/"/utf8>>),
+ base64_decode(_pipe@2).
+
+-spec base16_encode(bitstring()) -> binary().
+base16_encode(Input) ->
+ binary:encode_hex(Input).
+
+-spec base16_decode(binary()) -> {ok, bitstring()} | {error, nil}.
+base16_decode(Input) ->
+ gleam_stdlib:base16_decode(Input).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache
new file mode 100644
index 0000000..d992172
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta
new file mode 100644
index 0000000..bc4a1a5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl
new file mode 100644
index 0000000..284c6d4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.erl
@@ -0,0 +1,66 @@
+-module(gleam@bit_builder).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, prepend/2, append/2, prepend_builder/2, append_builder/2, prepend_string/2, append_string/2, concat/1, concat_bit_strings/1, from_string/1, from_string_builder/1, from_bit_string/1, to_bit_string/1, byte_size/1]).
+
+-spec new() -> gleam@bytes_builder:bytes_builder().
+new() ->
+ gleam@bytes_builder:new().
+
+-spec prepend(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder().
+prepend(To, Prefix) ->
+ gleam@bytes_builder:prepend(To, Prefix).
+
+-spec append(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder().
+append(To, Suffix) ->
+ gleam@bytes_builder:append(To, Suffix).
+
+-spec prepend_builder(
+ gleam@bytes_builder:bytes_builder(),
+ gleam@bytes_builder:bytes_builder()
+) -> gleam@bytes_builder:bytes_builder().
+prepend_builder(To, Prefix) ->
+ gleam@bytes_builder:prepend_builder(To, Prefix).
+
+-spec append_builder(
+ gleam@bytes_builder:bytes_builder(),
+ gleam@bytes_builder:bytes_builder()
+) -> gleam@bytes_builder:bytes_builder().
+append_builder(First, Second) ->
+ gleam_stdlib:iodata_append(First, Second).
+
+-spec prepend_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder().
+prepend_string(To, Prefix) ->
+ gleam@bytes_builder:prepend_string(To, Prefix).
+
+-spec append_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder().
+append_string(To, Suffix) ->
+ gleam@bytes_builder:append_string(To, Suffix).
+
+-spec concat(list(gleam@bytes_builder:bytes_builder())) -> gleam@bytes_builder:bytes_builder().
+concat(Builders) ->
+ gleam_stdlib:identity(Builders).
+
+-spec concat_bit_strings(list(bitstring())) -> gleam@bytes_builder:bytes_builder().
+concat_bit_strings(Bits) ->
+ gleam_stdlib:identity(Bits).
+
+-spec from_string(binary()) -> gleam@bytes_builder:bytes_builder().
+from_string(String) ->
+ gleam_stdlib:wrap_list(String).
+
+-spec from_string_builder(gleam@string_builder:string_builder()) -> gleam@bytes_builder:bytes_builder().
+from_string_builder(Builder) ->
+ gleam_stdlib:wrap_list(Builder).
+
+-spec from_bit_string(bitstring()) -> gleam@bytes_builder:bytes_builder().
+from_bit_string(Bits) ->
+ gleam_stdlib:wrap_list(Bits).
+
+-spec to_bit_string(gleam@bytes_builder:bytes_builder()) -> bitstring().
+to_bit_string(Builder) ->
+ erlang:list_to_bitstring(Builder).
+
+-spec byte_size(gleam@bytes_builder:bytes_builder()) -> integer().
+byte_size(Builder) ->
+ erlang:iolist_size(Builder).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache
new file mode 100644
index 0000000..60cf27e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta
new file mode 100644
index 0000000..f9f229f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl
new file mode 100644
index 0000000..7dabaa3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.erl
@@ -0,0 +1,33 @@
+-module(gleam@bit_string).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_string/1, byte_size/1, append/2, slice/3, is_utf8/1, to_string/1, concat/1]).
+
+-spec from_string(binary()) -> bitstring().
+from_string(X) ->
+ gleam_stdlib:identity(X).
+
+-spec byte_size(bitstring()) -> integer().
+byte_size(X) ->
+ erlang:byte_size(X).
+
+-spec append(bitstring(), bitstring()) -> bitstring().
+append(First, Second) ->
+ gleam@bit_array:append(First, Second).
+
+-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} |
+ {error, nil}.
+slice(String, Position, Length) ->
+ gleam_stdlib:bit_array_slice(String, Position, Length).
+
+-spec is_utf8(bitstring()) -> boolean().
+is_utf8(Bits) ->
+ gleam@bit_array:is_utf8(Bits).
+
+-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}.
+to_string(Bits) ->
+ gleam@bit_array:to_string(Bits).
+
+-spec concat(list(bitstring())) -> bitstring().
+concat(Bit_strings) ->
+ gleam_stdlib:bit_array_concat(Bit_strings).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache
new file mode 100644
index 0000000..10a98f8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta
new file mode 100644
index 0000000..33ef24c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl
new file mode 100644
index 0000000..57078cb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.erl
@@ -0,0 +1,162 @@
+-module(gleam@bool).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export(['and'/2, 'or'/2, negate/1, nor/2, nand/2, exclusive_or/2, exclusive_nor/2, compare/2, max/2, min/2, to_int/1, to_string/1, guard/3, lazy_guard/3]).
+
+-spec 'and'(boolean(), boolean()) -> boolean().
+'and'(A, B) ->
+ A andalso B.
+
+-spec 'or'(boolean(), boolean()) -> boolean().
+'or'(A, B) ->
+ A orelse B.
+
+-spec negate(boolean()) -> boolean().
+negate(Bool) ->
+ case Bool of
+ true ->
+ false;
+
+ false ->
+ true
+ end.
+
+-spec nor(boolean(), boolean()) -> boolean().
+nor(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ true;
+
+ {false, true} ->
+ false;
+
+ {true, false} ->
+ false;
+
+ {true, true} ->
+ false
+ end.
+
+-spec nand(boolean(), boolean()) -> boolean().
+nand(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ true;
+
+ {false, true} ->
+ true;
+
+ {true, false} ->
+ true;
+
+ {true, true} ->
+ false
+ end.
+
+-spec exclusive_or(boolean(), boolean()) -> boolean().
+exclusive_or(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ false;
+
+ {false, true} ->
+ true;
+
+ {true, false} ->
+ true;
+
+ {true, true} ->
+ false
+ end.
+
+-spec exclusive_nor(boolean(), boolean()) -> boolean().
+exclusive_nor(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ true;
+
+ {false, true} ->
+ false;
+
+ {true, false} ->
+ false;
+
+ {true, true} ->
+ true
+ end.
+
+-spec compare(boolean(), boolean()) -> gleam@order:order().
+compare(A, B) ->
+ case {A, B} of
+ {true, true} ->
+ eq;
+
+ {true, false} ->
+ gt;
+
+ {false, false} ->
+ eq;
+
+ {false, true} ->
+ lt
+ end.
+
+-spec max(boolean(), boolean()) -> boolean().
+max(A, B) ->
+ case A of
+ true ->
+ true;
+
+ false ->
+ B
+ end.
+
+-spec min(boolean(), boolean()) -> boolean().
+min(A, B) ->
+ case A of
+ false ->
+ false;
+
+ true ->
+ B
+ end.
+
+-spec to_int(boolean()) -> integer().
+to_int(Bool) ->
+ case Bool of
+ false ->
+ 0;
+
+ true ->
+ 1
+ end.
+
+-spec to_string(boolean()) -> binary().
+to_string(Bool) ->
+ case Bool of
+ false ->
+ <<"False"/utf8>>;
+
+ true ->
+ <<"True"/utf8>>
+ end.
+
+-spec guard(boolean(), EVP, fun(() -> EVP)) -> EVP.
+guard(Requirement, Consequence, Alternative) ->
+ case Requirement of
+ true ->
+ Consequence;
+
+ false ->
+ Alternative()
+ end.
+
+-spec lazy_guard(boolean(), fun(() -> EVQ), fun(() -> EVQ)) -> EVQ.
+lazy_guard(Requirement, Consequence, Alternative) ->
+ case Requirement of
+ true ->
+ Consequence();
+
+ false ->
+ Alternative()
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache
new file mode 100644
index 0000000..8962cfc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta
new file mode 100644
index 0000000..7b614aa
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl
new file mode 100644
index 0000000..2f6dd93
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.erl
@@ -0,0 +1,87 @@
+-module(gleam@bytes_builder).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([append_builder/2, prepend_builder/2, concat/1, new/0, from_string/1, prepend_string/2, append_string/2, from_string_builder/1, from_bit_array/1, prepend/2, append/2, concat_bit_arrays/1, to_bit_array/1, byte_size/1]).
+-export_type([bytes_builder/0]).
+
+-opaque bytes_builder() :: {bytes, bitstring()} |
+ {text, gleam@string_builder:string_builder()} |
+ {many, list(bytes_builder())}.
+
+-spec append_builder(bytes_builder(), bytes_builder()) -> bytes_builder().
+append_builder(First, Second) ->
+ gleam_stdlib:iodata_append(First, Second).
+
+-spec prepend_builder(bytes_builder(), bytes_builder()) -> bytes_builder().
+prepend_builder(Second, First) ->
+ gleam_stdlib:iodata_append(First, Second).
+
+-spec concat(list(bytes_builder())) -> bytes_builder().
+concat(Builders) ->
+ gleam_stdlib:identity(Builders).
+
+-spec new() -> bytes_builder().
+new() ->
+ gleam_stdlib:identity([]).
+
+-spec from_string(binary()) -> bytes_builder().
+from_string(String) ->
+ gleam_stdlib:wrap_list(String).
+
+-spec prepend_string(bytes_builder(), binary()) -> bytes_builder().
+prepend_string(Second, First) ->
+ gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second).
+
+-spec append_string(bytes_builder(), binary()) -> bytes_builder().
+append_string(First, Second) ->
+ gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)).
+
+-spec from_string_builder(gleam@string_builder:string_builder()) -> bytes_builder().
+from_string_builder(Builder) ->
+ gleam_stdlib:wrap_list(Builder).
+
+-spec from_bit_array(bitstring()) -> bytes_builder().
+from_bit_array(Bits) ->
+ gleam_stdlib:wrap_list(Bits).
+
+-spec prepend(bytes_builder(), bitstring()) -> bytes_builder().
+prepend(Second, First) ->
+ gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second).
+
+-spec append(bytes_builder(), bitstring()) -> bytes_builder().
+append(First, Second) ->
+ gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)).
+
+-spec concat_bit_arrays(list(bitstring())) -> bytes_builder().
+concat_bit_arrays(Bits) ->
+ gleam_stdlib:identity(Bits).
+
+-spec to_list(list(list(bytes_builder())), list(bitstring())) -> list(bitstring()).
+to_list(Stack, Acc) ->
+ case Stack of
+ [] ->
+ Acc;
+
+ [[] | Remaining_stack] ->
+ to_list(Remaining_stack, Acc);
+
+ [[{bytes, Bits} | Rest] | Remaining_stack@1] ->
+ to_list([Rest | Remaining_stack@1], [Bits | Acc]);
+
+ [[{text, Builder} | Rest@1] | Remaining_stack@2] ->
+ Bits@1 = gleam_stdlib:identity(
+ gleam@string_builder:to_string(Builder)
+ ),
+ to_list([Rest@1 | Remaining_stack@2], [Bits@1 | Acc]);
+
+ [[{many, Builders} | Rest@2] | Remaining_stack@3] ->
+ to_list([Builders, Rest@2 | Remaining_stack@3], Acc)
+ end.
+
+-spec to_bit_array(bytes_builder()) -> bitstring().
+to_bit_array(Builder) ->
+ erlang:list_to_bitstring(Builder).
+
+-spec byte_size(bytes_builder()) -> integer().
+byte_size(Builder) ->
+ erlang:iolist_size(Builder).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache
new file mode 100644
index 0000000..acf4017
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta
new file mode 100644
index 0000000..4410520
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl
new file mode 100644
index 0000000..44b89ea
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.erl
@@ -0,0 +1,97 @@
+-module(gleam@dict).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
+-export_type([dict/2]).
+
+-type dict(KS, KT) :: any() | {gleam_phantom, KS, KT}.
+
+-spec size(dict(any(), any())) -> integer().
+size(Dict) ->
+ maps:size(Dict).
+
+-spec to_list(dict(LC, LD)) -> list({LC, LD}).
+to_list(Dict) ->
+ maps:to_list(Dict).
+
+-spec from_list(list({LM, LN})) -> dict(LM, LN).
+from_list(List) ->
+ maps:from_list(List).
+
+-spec has_key(dict(LW, any()), LW) -> boolean().
+has_key(Dict, Key) ->
+ maps:is_key(Key, Dict).
+
+-spec new() -> dict(any(), any()).
+new() ->
+ maps:new().
+
+-spec get(dict(MM, MN), MM) -> {ok, MN} | {error, nil}.
+get(From, Get) ->
+ gleam_stdlib:map_get(From, Get).
+
+-spec insert(dict(MY, MZ), MY, MZ) -> dict(MY, MZ).
+insert(Dict, Key, Value) ->
+ maps:put(Key, Value, Dict).
+
+-spec map_values(dict(NK, NL), fun((NK, NL) -> NO)) -> dict(NK, NO).
+map_values(Dict, Fun) ->
+ maps:map(Fun, Dict).
+
+-spec keys(dict(NY, any())) -> list(NY).
+keys(Dict) ->
+ maps:keys(Dict).
+
+-spec values(dict(any(), OJ)) -> list(OJ).
+values(Dict) ->
+ maps:values(Dict).
+
+-spec filter(dict(OS, OT), fun((OS, OT) -> boolean())) -> dict(OS, OT).
+filter(Dict, Predicate) ->
+ maps:filter(Predicate, Dict).
+
+-spec take(dict(PE, PF), list(PE)) -> dict(PE, PF).
+take(Dict, Desired_keys) ->
+ maps:with(Desired_keys, Dict).
+
+-spec merge(dict(PS, PT), dict(PS, PT)) -> dict(PS, PT).
+merge(Dict, New_entries) ->
+ maps:merge(Dict, New_entries).
+
+-spec delete(dict(QI, QJ), QI) -> dict(QI, QJ).
+delete(Dict, Key) ->
+ maps:remove(Key, Dict).
+
+-spec drop(dict(QU, QV), list(QU)) -> dict(QU, QV).
+drop(Dict, Disallowed_keys) ->
+ case Disallowed_keys of
+ [] ->
+ Dict;
+
+ [X | Xs] ->
+ drop(delete(Dict, X), Xs)
+ end.
+
+-spec update(dict(RB, RC), RB, fun((gleam@option:option(RC)) -> RC)) -> dict(RB, RC).
+update(Dict, Key, Fun) ->
+ _pipe = Dict,
+ _pipe@1 = get(_pipe, Key),
+ _pipe@2 = gleam@option:from_result(_pipe@1),
+ _pipe@3 = Fun(_pipe@2),
+ insert(Dict, Key, _pipe@3).
+
+-spec do_fold(list({RI, RJ}), RL, fun((RL, RI, RJ) -> RL)) -> RL.
+do_fold(List, Initial, Fun) ->
+ case List of
+ [] ->
+ Initial;
+
+ [{K, V} | Rest] ->
+ do_fold(Rest, Fun(Initial, K, V), Fun)
+ end.
+
+-spec fold(dict(RM, RN), RQ, fun((RQ, RM, RN) -> RQ)) -> RQ.
+fold(Dict, Initial, Fun) ->
+ _pipe = Dict,
+ _pipe@1 = to_list(_pipe),
+ do_fold(_pipe@1, Initial, Fun).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache
new file mode 100644
index 0000000..f10ed2a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta
new file mode 100644
index 0000000..9ae5074
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl
new file mode 100644
index 0000000..2c6016f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.erl
@@ -0,0 +1,808 @@
+-module(gleam@dynamic).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from/1, unsafe_coerce/1, dynamic/1, bit_array/1, bit_string/1, classify/1, int/1, float/1, bool/1, shallow_list/1, optional/1, any/1, decode1/2, result/2, list/1, string/1, field/2, optional_field/2, element/2, tuple2/2, tuple3/3, tuple4/4, tuple5/5, tuple6/6, dict/2, map/2, decode2/3, decode3/4, decode4/5, decode5/6, decode6/7, decode7/8, decode8/9, decode9/10]).
+-export_type([dynamic_/0, decode_error/0, unknown_tuple/0]).
+
+-type dynamic_() :: any().
+
+-type decode_error() :: {decode_error, binary(), binary(), list(binary())}.
+
+-type unknown_tuple() :: any().
+
+-spec from(any()) -> dynamic_().
+from(A) ->
+ gleam_stdlib:identity(A).
+
+-spec unsafe_coerce(dynamic_()) -> any().
+unsafe_coerce(A) ->
+ gleam_stdlib:identity(A).
+
+-spec dynamic(dynamic_()) -> {ok, dynamic_()} | {error, list(decode_error())}.
+dynamic(Value) ->
+ {ok, Value}.
+
+-spec bit_array(dynamic_()) -> {ok, bitstring()} | {error, list(decode_error())}.
+bit_array(Data) ->
+ gleam_stdlib:decode_bit_array(Data).
+
+-spec bit_string(dynamic_()) -> {ok, bitstring()} |
+ {error, list(decode_error())}.
+bit_string(Data) ->
+ bit_array(Data).
+
+-spec put_expected(decode_error(), binary()) -> decode_error().
+put_expected(Error, Expected) ->
+ erlang:setelement(2, Error, Expected).
+
+-spec classify(dynamic_()) -> binary().
+classify(Data) ->
+ gleam_stdlib:classify_dynamic(Data).
+
+-spec int(dynamic_()) -> {ok, integer()} | {error, list(decode_error())}.
+int(Data) ->
+ gleam_stdlib:decode_int(Data).
+
+-spec float(dynamic_()) -> {ok, float()} | {error, list(decode_error())}.
+float(Data) ->
+ gleam_stdlib:decode_float(Data).
+
+-spec bool(dynamic_()) -> {ok, boolean()} | {error, list(decode_error())}.
+bool(Data) ->
+ gleam_stdlib:decode_bool(Data).
+
+-spec shallow_list(dynamic_()) -> {ok, list(dynamic_())} |
+ {error, list(decode_error())}.
+shallow_list(Value) ->
+ gleam_stdlib:decode_list(Value).
+
+-spec optional(fun((dynamic_()) -> {ok, DGM} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok,
+ gleam@option:option(DGM)} |
+ {error, list(decode_error())}).
+optional(Decode) ->
+ fun(Value) -> gleam_stdlib:decode_option(Value, Decode) end.
+
+-spec at_least_decode_tuple_error(integer(), dynamic_()) -> {ok, any()} |
+ {error, list(decode_error())}.
+at_least_decode_tuple_error(Size, Data) ->
+ S = case Size of
+ 1 ->
+ <<""/utf8>>;
+
+ _ ->
+ <<"s"/utf8>>
+ end,
+ Error = begin
+ _pipe = [<<"Tuple of at least "/utf8>>,
+ gleam@int:to_string(Size),
+ <<" element"/utf8>>,
+ S],
+ _pipe@1 = gleam@string_builder:from_strings(_pipe),
+ _pipe@2 = gleam@string_builder:to_string(_pipe@1),
+ {decode_error, _pipe@2, classify(Data), []}
+ end,
+ {error, [Error]}.
+
+-spec any(list(fun((dynamic_()) -> {ok, DKT} | {error, list(decode_error())}))) -> fun((dynamic_()) -> {ok,
+ DKT} |
+ {error, list(decode_error())}).
+any(Decoders) ->
+ fun(Data) -> case Decoders of
+ [] ->
+ {error,
+ [{decode_error, <<"another type"/utf8>>, classify(Data), []}]};
+
+ [Decoder | Decoders@1] ->
+ case Decoder(Data) of
+ {ok, Decoded} ->
+ {ok, Decoded};
+
+ {error, _} ->
+ (any(Decoders@1))(Data)
+ end
+ end end.
+
+-spec all_errors({ok, any()} | {error, list(decode_error())}) -> list(decode_error()).
+all_errors(Result) ->
+ case Result of
+ {ok, _} ->
+ [];
+
+ {error, Errors} ->
+ Errors
+ end.
+
+-spec decode1(
+ fun((DKX) -> DKY),
+ fun((dynamic_()) -> {ok, DKX} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DKY} | {error, list(decode_error())}).
+decode1(Constructor, T1) ->
+ fun(Value) -> case T1(Value) of
+ {ok, A} ->
+ {ok, Constructor(A)};
+
+ A@1 ->
+ {error, all_errors(A@1)}
+ end end.
+
+-spec push_path(decode_error(), any()) -> decode_error().
+push_path(Error, Name) ->
+ Name@1 = from(Name),
+ Decoder = any(
+ [fun string/1,
+ fun(X) -> gleam@result:map(int(X), fun gleam@int:to_string/1) end]
+ ),
+ Name@3 = case Decoder(Name@1) of
+ {ok, Name@2} ->
+ Name@2;
+
+ {error, _} ->
+ _pipe = [<<"<"/utf8>>, classify(Name@1), <<">"/utf8>>],
+ _pipe@1 = gleam@string_builder:from_strings(_pipe),
+ gleam@string_builder:to_string(_pipe@1)
+ end,
+ erlang:setelement(4, Error, [Name@3 | erlang:element(4, Error)]).
+
+-spec result(
+ fun((dynamic_()) -> {ok, DGA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DGC} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {ok, DGA} | {error, DGC}} |
+ {error, list(decode_error())}).
+result(Decode_ok, Decode_error) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_result(Value),
+ fun(Inner_result) -> case Inner_result of
+ {ok, Raw} ->
+ gleam@result:'try'(
+ begin
+ _pipe = Decode_ok(Raw),
+ map_errors(
+ _pipe,
+ fun(_capture) ->
+ push_path(_capture, <<"ok"/utf8>>)
+ end
+ )
+ end,
+ fun(Value@1) -> {ok, {ok, Value@1}} end
+ );
+
+ {error, Raw@1} ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = Decode_error(Raw@1),
+ map_errors(
+ _pipe@1,
+ fun(_capture@1) ->
+ push_path(_capture@1, <<"error"/utf8>>)
+ end
+ )
+ end,
+ fun(Value@2) -> {ok, {error, Value@2}} end
+ )
+ end end
+ )
+ end.
+
+-spec list(fun((dynamic_()) -> {ok, DGH} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok,
+ list(DGH)} |
+ {error, list(decode_error())}).
+list(Decoder_type) ->
+ fun(Dynamic) ->
+ gleam@result:'try'(shallow_list(Dynamic), fun(List) -> _pipe = List,
+ _pipe@1 = gleam@list:try_map(_pipe, Decoder_type),
+ map_errors(
+ _pipe@1,
+ fun(_capture) -> push_path(_capture, <<"*"/utf8>>) end
+ ) end)
+ end.
+
+-spec map_errors(
+ {ok, DEV} | {error, list(decode_error())},
+ fun((decode_error()) -> decode_error())
+) -> {ok, DEV} | {error, list(decode_error())}.
+map_errors(Result, F) ->
+ gleam@result:map_error(
+ Result,
+ fun(_capture) -> gleam@list:map(_capture, F) end
+ ).
+
+-spec decode_string(dynamic_()) -> {ok, binary()} |
+ {error, list(decode_error())}.
+decode_string(Data) ->
+ _pipe = bit_array(Data),
+ _pipe@1 = map_errors(
+ _pipe,
+ fun(_capture) -> put_expected(_capture, <<"String"/utf8>>) end
+ ),
+ gleam@result:'try'(
+ _pipe@1,
+ fun(Raw) -> case gleam@bit_array:to_string(Raw) of
+ {ok, String} ->
+ {ok, String};
+
+ {error, nil} ->
+ {error,
+ [{decode_error,
+ <<"String"/utf8>>,
+ <<"BitArray"/utf8>>,
+ []}]}
+ end end
+ ).
+
+-spec string(dynamic_()) -> {ok, binary()} | {error, list(decode_error())}.
+string(Data) ->
+ decode_string(Data).
+
+-spec field(
+ any(),
+ fun((dynamic_()) -> {ok, DGW} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DGW} | {error, list(decode_error())}).
+field(Name, Inner_type) ->
+ fun(Value) ->
+ Missing_field_error = {decode_error,
+ <<"field"/utf8>>,
+ <<"nothing"/utf8>>,
+ []},
+ gleam@result:'try'(
+ gleam_stdlib:decode_field(Value, Name),
+ fun(Maybe_inner) -> _pipe = Maybe_inner,
+ _pipe@1 = gleam@option:to_result(_pipe, [Missing_field_error]),
+ _pipe@2 = gleam@result:'try'(_pipe@1, Inner_type),
+ map_errors(
+ _pipe@2,
+ fun(_capture) -> push_path(_capture, Name) end
+ ) end
+ )
+ end.
+
+-spec optional_field(
+ any(),
+ fun((dynamic_()) -> {ok, DHA} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, gleam@option:option(DHA)} |
+ {error, list(decode_error())}).
+optional_field(Name, Inner_type) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_field(Value, Name),
+ fun(Maybe_inner) -> case Maybe_inner of
+ none ->
+ {ok, none};
+
+ {some, Dynamic_inner} ->
+ _pipe = Dynamic_inner,
+ _pipe@1 = gleam_stdlib:decode_option(_pipe, Inner_type),
+ map_errors(
+ _pipe@1,
+ fun(_capture) -> push_path(_capture, Name) end
+ )
+ end end
+ )
+ end.
+
+-spec element(
+ integer(),
+ fun((dynamic_()) -> {ok, DHI} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DHI} | {error, list(decode_error())}).
+element(Index, Inner_type) ->
+ fun(Data) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple(Data),
+ fun(Tuple) ->
+ Size = gleam_stdlib:size_of_tuple(Tuple),
+ gleam@result:'try'(case Index >= 0 of
+ true ->
+ case Index < Size of
+ true ->
+ gleam_stdlib:tuple_get(Tuple, Index);
+
+ false ->
+ at_least_decode_tuple_error(Index + 1, Data)
+ end;
+
+ false ->
+ case gleam@int:absolute_value(Index) =< Size of
+ true ->
+ gleam_stdlib:tuple_get(Tuple, Size + Index);
+
+ false ->
+ at_least_decode_tuple_error(
+ gleam@int:absolute_value(Index),
+ Data
+ )
+ end
+ end, fun(Data@1) -> _pipe = Inner_type(Data@1),
+ map_errors(
+ _pipe,
+ fun(_capture) -> push_path(_capture, Index) end
+ ) end)
+ end
+ )
+ end.
+
+-spec tuple_errors({ok, any()} | {error, list(decode_error())}, binary()) -> list(decode_error()).
+tuple_errors(Result, Name) ->
+ case Result of
+ {ok, _} ->
+ [];
+
+ {error, Errors} ->
+ gleam@list:map(
+ Errors,
+ fun(_capture) -> push_path(_capture, Name) end
+ )
+ end.
+
+-spec tuple2(
+ fun((dynamic_()) -> {ok, DII} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DIK} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {DII, DIK}} | {error, list(decode_error())}).
+tuple2(Decode1, Decode2) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple2(Value),
+ fun(_use0) ->
+ {A, B} = _use0,
+ case {Decode1(A), Decode2(B)} of
+ {{ok, A@1}, {ok, B@1}} ->
+ {ok, {A@1, B@1}};
+
+ {A@2, B@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ {error, _pipe@1}
+ end
+ end
+ )
+ end.
+
+-spec tuple3(
+ fun((dynamic_()) -> {ok, DIN} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DIP} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DIR} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {DIN, DIP, DIR}} | {error, list(decode_error())}).
+tuple3(Decode1, Decode2, Decode3) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple3(Value),
+ fun(_use0) ->
+ {A, B, C} = _use0,
+ case {Decode1(A), Decode2(B), Decode3(C)} of
+ {{ok, A@1}, {ok, B@1}, {ok, C@1}} ->
+ {ok, {A@1, B@1, C@1}};
+
+ {A@2, B@2, C@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ {error, _pipe@2}
+ end
+ end
+ )
+ end.
+
+-spec tuple4(
+ fun((dynamic_()) -> {ok, DIU} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DIW} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DIY} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJA} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {DIU, DIW, DIY, DJA}} |
+ {error, list(decode_error())}).
+tuple4(Decode1, Decode2, Decode3, Decode4) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple4(Value),
+ fun(_use0) ->
+ {A, B, C, D} = _use0,
+ case {Decode1(A), Decode2(B), Decode3(C), Decode4(D)} of
+ {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}} ->
+ {ok, {A@1, B@1, C@1, D@1}};
+
+ {A@2, B@2, C@2, D@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ _pipe@3 = gleam@list:append(
+ _pipe@2,
+ tuple_errors(D@2, <<"3"/utf8>>)
+ ),
+ {error, _pipe@3}
+ end
+ end
+ )
+ end.
+
+-spec tuple5(
+ fun((dynamic_()) -> {ok, DJD} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJF} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJH} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJJ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJL} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {DJD, DJF, DJH, DJJ, DJL}} |
+ {error, list(decode_error())}).
+tuple5(Decode1, Decode2, Decode3, Decode4, Decode5) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple5(Value),
+ fun(_use0) ->
+ {A, B, C, D, E} = _use0,
+ case {Decode1(A),
+ Decode2(B),
+ Decode3(C),
+ Decode4(D),
+ Decode5(E)} of
+ {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}, {ok, E@1}} ->
+ {ok, {A@1, B@1, C@1, D@1, E@1}};
+
+ {A@2, B@2, C@2, D@2, E@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ _pipe@3 = gleam@list:append(
+ _pipe@2,
+ tuple_errors(D@2, <<"3"/utf8>>)
+ ),
+ _pipe@4 = gleam@list:append(
+ _pipe@3,
+ tuple_errors(E@2, <<"4"/utf8>>)
+ ),
+ {error, _pipe@4}
+ end
+ end
+ )
+ end.
+
+-spec tuple6(
+ fun((dynamic_()) -> {ok, DJO} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJQ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJS} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJU} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJW} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DJY} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {DJO, DJQ, DJS, DJU, DJW, DJY}} |
+ {error, list(decode_error())}).
+tuple6(Decode1, Decode2, Decode3, Decode4, Decode5, Decode6) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple6(Value),
+ fun(_use0) ->
+ {A, B, C, D, E, F} = _use0,
+ case {Decode1(A),
+ Decode2(B),
+ Decode3(C),
+ Decode4(D),
+ Decode5(E),
+ Decode6(F)} of
+ {{ok, A@1},
+ {ok, B@1},
+ {ok, C@1},
+ {ok, D@1},
+ {ok, E@1},
+ {ok, F@1}} ->
+ {ok, {A@1, B@1, C@1, D@1, E@1, F@1}};
+
+ {A@2, B@2, C@2, D@2, E@2, F@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ _pipe@3 = gleam@list:append(
+ _pipe@2,
+ tuple_errors(D@2, <<"3"/utf8>>)
+ ),
+ _pipe@4 = gleam@list:append(
+ _pipe@3,
+ tuple_errors(E@2, <<"4"/utf8>>)
+ ),
+ _pipe@5 = gleam@list:append(
+ _pipe@4,
+ tuple_errors(F@2, <<"5"/utf8>>)
+ ),
+ {error, _pipe@5}
+ end
+ end
+ )
+ end.
+
+-spec dict(
+ fun((dynamic_()) -> {ok, DKB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DKD} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, gleam@dict:dict(DKB, DKD)} |
+ {error, list(decode_error())}).
+dict(Key_type, Value_type) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_map(Value),
+ fun(Map) ->
+ gleam@result:'try'(
+ begin
+ _pipe = Map,
+ _pipe@1 = gleam@dict:to_list(_pipe),
+ gleam@list:try_map(
+ _pipe@1,
+ fun(Pair) ->
+ {K, V} = Pair,
+ gleam@result:'try'(
+ begin
+ _pipe@2 = Key_type(K),
+ map_errors(
+ _pipe@2,
+ fun(_capture) ->
+ push_path(
+ _capture,
+ <<"keys"/utf8>>
+ )
+ end
+ )
+ end,
+ fun(K@1) ->
+ gleam@result:'try'(
+ begin
+ _pipe@3 = Value_type(V),
+ map_errors(
+ _pipe@3,
+ fun(_capture@1) ->
+ push_path(
+ _capture@1,
+ <<"values"/utf8>>
+ )
+ end
+ )
+ end,
+ fun(V@1) -> {ok, {K@1, V@1}} end
+ )
+ end
+ )
+ end
+ )
+ end,
+ fun(Pairs) -> {ok, gleam@dict:from_list(Pairs)} end
+ )
+ end
+ )
+ end.
+
+-spec map(
+ fun((dynamic_()) -> {ok, DKI} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DKK} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, gleam@dict:dict(DKI, DKK)} |
+ {error, list(decode_error())}).
+map(Key_type, Value_type) ->
+ dict(Key_type, Value_type).
+
+-spec decode2(
+ fun((DLB, DLC) -> DLD),
+ fun((dynamic_()) -> {ok, DLB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DLC} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DLD} | {error, list(decode_error())}).
+decode2(Constructor, T1, T2) ->
+ fun(Value) -> case {T1(Value), T2(Value)} of
+ {{ok, A}, {ok, B}} ->
+ {ok, Constructor(A, B)};
+
+ {A@1, B@1} ->
+ {error, gleam@list:concat([all_errors(A@1), all_errors(B@1)])}
+ end end.
+
+-spec decode3(
+ fun((DLH, DLI, DLJ) -> DLK),
+ fun((dynamic_()) -> {ok, DLH} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DLI} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DLJ} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DLK} | {error, list(decode_error())}).
+decode3(Constructor, T1, T2, T3) ->
+ fun(Value) -> case {T1(Value), T2(Value), T3(Value)} of
+ {{ok, A}, {ok, B}, {ok, C}} ->
+ {ok, Constructor(A, B, C)};
+
+ {A@1, B@1, C@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1), all_errors(B@1), all_errors(C@1)]
+ )}
+ end end.
+
+-spec decode4(
+ fun((DLP, DLQ, DLR, DLS) -> DLT),
+ fun((dynamic_()) -> {ok, DLP} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DLQ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DLR} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DLS} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DLT} | {error, list(decode_error())}).
+decode4(Constructor, T1, T2, T3, T4) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}} ->
+ {ok, Constructor(A, B, C, D)};
+
+ {A@1, B@1, C@1, D@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1)]
+ )}
+ end end.
+
+-spec decode5(
+ fun((DLZ, DMA, DMB, DMC, DMD) -> DME),
+ fun((dynamic_()) -> {ok, DLZ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMC} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMD} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DME} | {error, list(decode_error())}).
+decode5(Constructor, T1, T2, T3, T4, T5) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}} ->
+ {ok, Constructor(A, B, C, D, E)};
+
+ {A@1, B@1, C@1, D@1, E@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1)]
+ )}
+ end end.
+
+-spec decode6(
+ fun((DML, DMM, DMN, DMO, DMP, DMQ) -> DMR),
+ fun((dynamic_()) -> {ok, DML} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMM} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMN} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMO} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMP} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DMQ} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DMR} | {error, list(decode_error())}).
+decode6(Constructor, T1, T2, T3, T4, T5, T6) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}} ->
+ {ok, Constructor(A, B, C, D, E, F)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1)]
+ )}
+ end end.
+
+-spec decode7(
+ fun((DMZ, DNA, DNB, DNC, DND, DNE, DNF) -> DNG),
+ fun((dynamic_()) -> {ok, DMZ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNC} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DND} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNE} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNF} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DNG} | {error, list(decode_error())}).
+decode7(Constructor, T1, T2, T3, T4, T5, T6, T7) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}, {ok, G}} ->
+ {ok, Constructor(A, B, C, D, E, F, G)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1, G@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1),
+ all_errors(G@1)]
+ )}
+ end end.
+
+-spec decode8(
+ fun((DNP, DNQ, DNR, DNS, DNT, DNU, DNV, DNW) -> DNX),
+ fun((dynamic_()) -> {ok, DNP} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNQ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNR} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNS} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNT} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNU} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNV} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DNW} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DNX} | {error, list(decode_error())}).
+decode8(Constructor, T1, T2, T3, T4, T5, T6, T7, T8) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X)} of
+ {{ok, A},
+ {ok, B},
+ {ok, C},
+ {ok, D},
+ {ok, E},
+ {ok, F},
+ {ok, G},
+ {ok, H}} ->
+ {ok, Constructor(A, B, C, D, E, F, G, H)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1),
+ all_errors(G@1),
+ all_errors(H@1)]
+ )}
+ end end.
+
+-spec decode9(
+ fun((DOH, DOI, DOJ, DOK, DOL, DOM, DON, DOO, DOP) -> DOQ),
+ fun((dynamic_()) -> {ok, DOH} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOI} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOJ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOK} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOL} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOM} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DON} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOO} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DOP} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, DOQ} | {error, list(decode_error())}).
+decode9(Constructor, T1, T2, T3, T4, T5, T6, T7, T8, T9) ->
+ fun(X) ->
+ case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X), T9(X)} of
+ {{ok, A},
+ {ok, B},
+ {ok, C},
+ {ok, D},
+ {ok, E},
+ {ok, F},
+ {ok, G},
+ {ok, H},
+ {ok, I}} ->
+ {ok, Constructor(A, B, C, D, E, F, G, H, I)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1, I@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1),
+ all_errors(G@1),
+ all_errors(H@1),
+ all_errors(I@1)]
+ )}
+ end
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache
new file mode 100644
index 0000000..677362b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta
new file mode 100644
index 0000000..f10b39f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl
new file mode 100644
index 0000000..33b3d4a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.erl
@@ -0,0 +1,181 @@
+-module(gleam@float).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([parse/1, to_string/1, compare/2, min/2, max/2, clamp/3, ceiling/1, floor/1, round/1, truncate/1, absolute_value/1, loosely_compare/3, loosely_equals/3, power/2, square_root/1, negate/1, sum/1, product/1, random/2, divide/2, add/2, multiply/2, subtract/2]).
+
+-spec parse(binary()) -> {ok, float()} | {error, nil}.
+parse(String) ->
+ gleam_stdlib:parse_float(String).
+
+-spec to_string(float()) -> binary().
+to_string(X) ->
+ gleam_stdlib:float_to_string(X).
+
+-spec compare(float(), float()) -> gleam@order:order().
+compare(A, B) ->
+ case A =:= B of
+ true ->
+ eq;
+
+ false ->
+ case A < B of
+ true ->
+ lt;
+
+ false ->
+ gt
+ end
+ end.
+
+-spec min(float(), float()) -> float().
+min(A, B) ->
+ case A < B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec max(float(), float()) -> float().
+max(A, B) ->
+ case A > B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec clamp(float(), float(), float()) -> float().
+clamp(X, Min_bound, Max_bound) ->
+ _pipe = X,
+ _pipe@1 = min(_pipe, Max_bound),
+ max(_pipe@1, Min_bound).
+
+-spec ceiling(float()) -> float().
+ceiling(X) ->
+ math:ceil(X).
+
+-spec floor(float()) -> float().
+floor(X) ->
+ math:floor(X).
+
+-spec round(float()) -> integer().
+round(X) ->
+ erlang:round(X).
+
+-spec truncate(float()) -> integer().
+truncate(X) ->
+ erlang:trunc(X).
+
+-spec absolute_value(float()) -> float().
+absolute_value(X) ->
+ case X >= +0.0 of
+ true ->
+ X;
+
+ _ ->
+ +0.0 - X
+ end.
+
+-spec loosely_compare(float(), float(), float()) -> gleam@order:order().
+loosely_compare(A, B, Tolerance) ->
+ Difference = absolute_value(A - B),
+ case Difference =< Tolerance of
+ true ->
+ eq;
+
+ false ->
+ compare(A, B)
+ end.
+
+-spec loosely_equals(float(), float(), float()) -> boolean().
+loosely_equals(A, B, Tolerance) ->
+ Difference = absolute_value(A - B),
+ Difference =< Tolerance.
+
+-spec power(float(), float()) -> {ok, float()} | {error, nil}.
+power(Base, Exponent) ->
+ Fractional = (ceiling(Exponent) - Exponent) > +0.0,
+ case ((Base < +0.0) andalso Fractional) orelse ((Base =:= +0.0) andalso (Exponent
+ < +0.0)) of
+ true ->
+ {error, nil};
+
+ false ->
+ {ok, math:pow(Base, Exponent)}
+ end.
+
+-spec square_root(float()) -> {ok, float()} | {error, nil}.
+square_root(X) ->
+ power(X, 0.5).
+
+-spec negate(float()) -> float().
+negate(X) ->
+ -1.0 * X.
+
+-spec do_sum(list(float()), float()) -> float().
+do_sum(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_sum(Rest, X + Initial)
+ end.
+
+-spec sum(list(float())) -> float().
+sum(Numbers) ->
+ _pipe = Numbers,
+ do_sum(_pipe, +0.0).
+
+-spec do_product(list(float()), float()) -> float().
+do_product(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_product(Rest, X * Initial)
+ end.
+
+-spec product(list(float())) -> float().
+product(Numbers) ->
+ case Numbers of
+ [] ->
+ 1.0;
+
+ _ ->
+ do_product(Numbers, 1.0)
+ end.
+
+-spec random(float(), float()) -> float().
+random(Min, Max) ->
+ (rand:uniform() * (Max - Min)) + Min.
+
+-spec divide(float(), float()) -> {ok, float()} | {error, nil}.
+divide(A, B) ->
+ case B of
+ +0.0 ->
+ {error, nil};
+
+ B@1 ->
+ {ok, case B@1 of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> A / Gleam@denominator
+ end}
+ end.
+
+-spec add(float(), float()) -> float().
+add(A, B) ->
+ A + B.
+
+-spec multiply(float(), float()) -> float().
+multiply(A, B) ->
+ A * B.
+
+-spec subtract(float(), float()) -> float().
+subtract(A, B) ->
+ A - B.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache
new file mode 100644
index 0000000..2f3e554
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta
new file mode 100644
index 0000000..ffb4624
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl
new file mode 100644
index 0000000..75f142f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.erl
@@ -0,0 +1,67 @@
+-module(gleam@function).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([compose/2, curry2/1, curry3/1, curry4/1, curry5/1, curry6/1, flip/1, identity/1, constant/1, tap/2, apply1/2, apply2/3, apply3/4]).
+
+-spec compose(fun((ENH) -> ENI), fun((ENI) -> ENJ)) -> fun((ENH) -> ENJ).
+compose(Fun1, Fun2) ->
+ fun(A) -> Fun2(Fun1(A)) end.
+
+-spec curry2(fun((ENK, ENL) -> ENM)) -> fun((ENK) -> fun((ENL) -> ENM)).
+curry2(Fun) ->
+ fun(A) -> fun(B) -> Fun(A, B) end end.
+
+-spec curry3(fun((ENO, ENP, ENQ) -> ENR)) -> fun((ENO) -> fun((ENP) -> fun((ENQ) -> ENR))).
+curry3(Fun) ->
+ fun(A) -> fun(B) -> fun(C) -> Fun(A, B, C) end end end.
+
+-spec curry4(fun((ENT, ENU, ENV, ENW) -> ENX)) -> fun((ENT) -> fun((ENU) -> fun((ENV) -> fun((ENW) -> ENX)))).
+curry4(Fun) ->
+ fun(A) -> fun(B) -> fun(C) -> fun(D) -> Fun(A, B, C, D) end end end end.
+
+-spec curry5(fun((ENZ, EOA, EOB, EOC, EOD) -> EOE)) -> fun((ENZ) -> fun((EOA) -> fun((EOB) -> fun((EOC) -> fun((EOD) -> EOE))))).
+curry5(Fun) ->
+ fun(A) ->
+ fun(B) ->
+ fun(C) -> fun(D) -> fun(E) -> Fun(A, B, C, D, E) end end end
+ end
+ end.
+
+-spec curry6(fun((EOG, EOH, EOI, EOJ, EOK, EOL) -> EOM)) -> fun((EOG) -> fun((EOH) -> fun((EOI) -> fun((EOJ) -> fun((EOK) -> fun((EOL) -> EOM)))))).
+curry6(Fun) ->
+ fun(A) ->
+ fun(B) ->
+ fun(C) ->
+ fun(D) -> fun(E) -> fun(F) -> Fun(A, B, C, D, E, F) end end end
+ end
+ end
+ end.
+
+-spec flip(fun((EOO, EOP) -> EOQ)) -> fun((EOP, EOO) -> EOQ).
+flip(Fun) ->
+ fun(B, A) -> Fun(A, B) end.
+
+-spec identity(EOR) -> EOR.
+identity(X) ->
+ X.
+
+-spec constant(EOS) -> fun((any()) -> EOS).
+constant(Value) ->
+ fun(_) -> Value end.
+
+-spec tap(EOU, fun((EOU) -> any())) -> EOU.
+tap(Arg, Effect) ->
+ Effect(Arg),
+ Arg.
+
+-spec apply1(fun((EOW) -> EOX), EOW) -> EOX.
+apply1(Fun, Arg1) ->
+ Fun(Arg1).
+
+-spec apply2(fun((EOY, EOZ) -> EPA), EOY, EOZ) -> EPA.
+apply2(Fun, Arg1, Arg2) ->
+ Fun(Arg1, Arg2).
+
+-spec apply3(fun((EPB, EPC, EPD) -> EPE), EPB, EPC, EPD) -> EPE.
+apply3(Fun, Arg1, Arg2, Arg3) ->
+ Fun(Arg1, Arg2, Arg3).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache
new file mode 100644
index 0000000..62076d5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta
new file mode 100644
index 0000000..2d987e1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl
new file mode 100644
index 0000000..2a5dd2c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.erl
@@ -0,0 +1,332 @@
+-module(gleam@int).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([absolute_value/1, parse/1, base_parse/2, to_string/1, to_base_string/2, to_base2/1, to_base8/1, to_base16/1, to_base36/1, to_float/1, power/2, square_root/1, compare/2, min/2, max/2, clamp/3, is_even/1, is_odd/1, negate/1, sum/1, product/1, digits/2, undigits/2, random/2, divide/2, remainder/2, modulo/2, floor_divide/2, add/2, multiply/2, subtract/2, bitwise_and/2, bitwise_not/1, bitwise_or/2, bitwise_exclusive_or/2, bitwise_shift_left/2, bitwise_shift_right/2]).
+-export_type([invalid_base/0]).
+
+-type invalid_base() :: invalid_base.
+
+-spec absolute_value(integer()) -> integer().
+absolute_value(X) ->
+ case X >= 0 of
+ true ->
+ X;
+
+ false ->
+ X * -1
+ end.
+
+-spec parse(binary()) -> {ok, integer()} | {error, nil}.
+parse(String) ->
+ gleam_stdlib:parse_int(String).
+
+-spec base_parse(binary(), integer()) -> {ok, integer()} | {error, nil}.
+base_parse(String, Base) ->
+ case (Base >= 2) andalso (Base =< 36) of
+ true ->
+ gleam_stdlib:int_from_base_string(String, Base);
+
+ false ->
+ {error, nil}
+ end.
+
+-spec to_string(integer()) -> binary().
+to_string(X) ->
+ erlang:integer_to_binary(X).
+
+-spec to_base_string(integer(), integer()) -> {ok, binary()} |
+ {error, invalid_base()}.
+to_base_string(X, Base) ->
+ case (Base >= 2) andalso (Base =< 36) of
+ true ->
+ {ok, erlang:integer_to_binary(X, Base)};
+
+ false ->
+ {error, invalid_base}
+ end.
+
+-spec to_base2(integer()) -> binary().
+to_base2(X) ->
+ erlang:integer_to_binary(X, 2).
+
+-spec to_base8(integer()) -> binary().
+to_base8(X) ->
+ erlang:integer_to_binary(X, 8).
+
+-spec to_base16(integer()) -> binary().
+to_base16(X) ->
+ erlang:integer_to_binary(X, 16).
+
+-spec to_base36(integer()) -> binary().
+to_base36(X) ->
+ erlang:integer_to_binary(X, 36).
+
+-spec to_float(integer()) -> float().
+to_float(X) ->
+ erlang:float(X).
+
+-spec power(integer(), float()) -> {ok, float()} | {error, nil}.
+power(Base, Exponent) ->
+ _pipe = Base,
+ _pipe@1 = to_float(_pipe),
+ gleam@float:power(_pipe@1, Exponent).
+
+-spec square_root(integer()) -> {ok, float()} | {error, nil}.
+square_root(X) ->
+ _pipe = X,
+ _pipe@1 = to_float(_pipe),
+ gleam@float:square_root(_pipe@1).
+
+-spec compare(integer(), integer()) -> gleam@order:order().
+compare(A, B) ->
+ case A =:= B of
+ true ->
+ eq;
+
+ false ->
+ case A < B of
+ true ->
+ lt;
+
+ false ->
+ gt
+ end
+ end.
+
+-spec min(integer(), integer()) -> integer().
+min(A, B) ->
+ case A < B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec max(integer(), integer()) -> integer().
+max(A, B) ->
+ case A > B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec clamp(integer(), integer(), integer()) -> integer().
+clamp(X, Min_bound, Max_bound) ->
+ _pipe = X,
+ _pipe@1 = min(_pipe, Max_bound),
+ max(_pipe@1, Min_bound).
+
+-spec is_even(integer()) -> boolean().
+is_even(X) ->
+ (X rem 2) =:= 0.
+
+-spec is_odd(integer()) -> boolean().
+is_odd(X) ->
+ (X rem 2) /= 0.
+
+-spec negate(integer()) -> integer().
+negate(X) ->
+ -1 * X.
+
+-spec do_sum(list(integer()), integer()) -> integer().
+do_sum(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_sum(Rest, X + Initial)
+ end.
+
+-spec sum(list(integer())) -> integer().
+sum(Numbers) ->
+ _pipe = Numbers,
+ do_sum(_pipe, 0).
+
+-spec do_product(list(integer()), integer()) -> integer().
+do_product(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_product(Rest, X * Initial)
+ end.
+
+-spec product(list(integer())) -> integer().
+product(Numbers) ->
+ case Numbers of
+ [] ->
+ 1;
+
+ _ ->
+ do_product(Numbers, 1)
+ end.
+
+-spec do_digits(integer(), integer(), list(integer())) -> list(integer()).
+do_digits(X, Base, Acc) ->
+ case absolute_value(X) < Base of
+ true ->
+ [X | Acc];
+
+ false ->
+ do_digits(case Base of
+ 0 -> 0;
+ Gleam@denominator -> X div Gleam@denominator
+ end, Base, [case Base of
+ 0 -> 0;
+ Gleam@denominator@1 -> X rem Gleam@denominator@1
+ end | Acc])
+ end.
+
+-spec digits(integer(), integer()) -> {ok, list(integer())} |
+ {error, invalid_base()}.
+digits(X, Base) ->
+ case Base < 2 of
+ true ->
+ {error, invalid_base};
+
+ false ->
+ {ok, do_digits(X, Base, [])}
+ end.
+
+-spec do_undigits(list(integer()), integer(), integer()) -> {ok, integer()} |
+ {error, invalid_base()}.
+do_undigits(Numbers, Base, Acc) ->
+ case Numbers of
+ [] ->
+ {ok, Acc};
+
+ [Digit | _] when Digit >= Base ->
+ {error, invalid_base};
+
+ [Digit@1 | Rest] ->
+ do_undigits(Rest, Base, (Acc * Base) + Digit@1)
+ end.
+
+-spec undigits(list(integer()), integer()) -> {ok, integer()} |
+ {error, invalid_base()}.
+undigits(Numbers, Base) ->
+ case Base < 2 of
+ true ->
+ {error, invalid_base};
+
+ false ->
+ do_undigits(Numbers, Base, 0)
+ end.
+
+-spec random(integer(), integer()) -> integer().
+random(Min, Max) ->
+ _pipe = gleam@float:random(to_float(Min), to_float(Max)),
+ _pipe@1 = gleam@float:floor(_pipe),
+ gleam@float:round(_pipe@1).
+
+-spec divide(integer(), integer()) -> {ok, integer()} | {error, nil}.
+divide(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ Divisor@1 ->
+ {ok, case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator -> Dividend div Gleam@denominator
+ end}
+ end.
+
+-spec remainder(integer(), integer()) -> {ok, integer()} | {error, nil}.
+remainder(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ Divisor@1 ->
+ {ok, case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator -> Dividend rem Gleam@denominator
+ end}
+ end.
+
+-spec modulo(integer(), integer()) -> {ok, integer()} | {error, nil}.
+modulo(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ _ ->
+ Remainder = case Divisor of
+ 0 -> 0;
+ Gleam@denominator -> Dividend rem Gleam@denominator
+ end,
+ case (Remainder * Divisor) < 0 of
+ true ->
+ {ok, Remainder + Divisor};
+
+ false ->
+ {ok, Remainder}
+ end
+ end.
+
+-spec floor_divide(integer(), integer()) -> {ok, integer()} | {error, nil}.
+floor_divide(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ Divisor@1 ->
+ case ((Dividend * Divisor@1) < 0) andalso ((case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator -> Dividend rem Gleam@denominator
+ end) /= 0) of
+ true ->
+ {ok, (case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator@1 -> Dividend div Gleam@denominator@1
+ end) - 1};
+
+ false ->
+ {ok, case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator@2 -> Dividend div Gleam@denominator@2
+ end}
+ end
+ end.
+
+-spec add(integer(), integer()) -> integer().
+add(A, B) ->
+ A + B.
+
+-spec multiply(integer(), integer()) -> integer().
+multiply(A, B) ->
+ A * B.
+
+-spec subtract(integer(), integer()) -> integer().
+subtract(A, B) ->
+ A - B.
+
+-spec bitwise_and(integer(), integer()) -> integer().
+bitwise_and(X, Y) ->
+ erlang:'band'(X, Y).
+
+-spec bitwise_not(integer()) -> integer().
+bitwise_not(X) ->
+ erlang:'bnot'(X).
+
+-spec bitwise_or(integer(), integer()) -> integer().
+bitwise_or(X, Y) ->
+ erlang:'bor'(X, Y).
+
+-spec bitwise_exclusive_or(integer(), integer()) -> integer().
+bitwise_exclusive_or(X, Y) ->
+ erlang:'bxor'(X, Y).
+
+-spec bitwise_shift_left(integer(), integer()) -> integer().
+bitwise_shift_left(X, Y) ->
+ erlang:'bsl'(X, Y).
+
+-spec bitwise_shift_right(integer(), integer()) -> integer().
+bitwise_shift_right(X, Y) ->
+ erlang:'bsr'(X, Y).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache
new file mode 100644
index 0000000..ddf78ca
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta
new file mode 100644
index 0000000..06ce652
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl
new file mode 100644
index 0000000..3ab9c35
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.erl
@@ -0,0 +1,27 @@
+-module(gleam@io).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([print/1, print_error/1, println/1, println_error/1, debug/1]).
+
+-spec print(binary()) -> nil.
+print(String) ->
+ gleam_stdlib:print(String).
+
+-spec print_error(binary()) -> nil.
+print_error(String) ->
+ gleam_stdlib:print_error(String).
+
+-spec println(binary()) -> nil.
+println(String) ->
+ gleam_stdlib:println(String).
+
+-spec println_error(binary()) -> nil.
+println_error(String) ->
+ gleam_stdlib:println_error(String).
+
+-spec debug(FHE) -> FHE.
+debug(Term) ->
+ _pipe = Term,
+ _pipe@1 = gleam@string:inspect(_pipe),
+ gleam_stdlib:println_error(_pipe@1),
+ Term.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache
new file mode 100644
index 0000000..2582f43
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta
new file mode 100644
index 0000000..2dcb80d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl
new file mode 100644
index 0000000..c7a4b31
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.erl
@@ -0,0 +1,744 @@
+-module(gleam@iterator).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([unfold/2, repeatedly/1, repeat/1, from_list/1, transform/3, fold/3, run/1, to_list/1, step/1, take/2, drop/2, map/2, map2/3, append/2, flatten/1, concat/1, flat_map/2, filter/2, cycle/1, find/2, index/1, iterate/2, take_while/2, drop_while/2, scan/3, zip/2, chunk/2, sized_chunk/2, intersperse/2, any/2, all/2, group/2, reduce/2, last/1, empty/0, once/1, range/2, single/1, interleave/2, fold_until/3, try_fold/3, first/1, at/2, length/1, each/2, yield/2]).
+-export_type([action/1, iterator/1, step/2, chunk/2, sized_chunk/1]).
+
+-type action(BUS) :: stop | {continue, BUS, fun(() -> action(BUS))}.
+
+-opaque iterator(BUT) :: {iterator, fun(() -> action(BUT))}.
+
+-type step(BUU, BUV) :: {next, BUU, BUV} | done.
+
+-type chunk(BUW, BUX) :: {another_by,
+ list(BUW),
+ BUX,
+ BUW,
+ fun(() -> action(BUW))} |
+ {last_by, list(BUW)}.
+
+-type sized_chunk(BUY) :: {another, list(BUY), fun(() -> action(BUY))} |
+ {last, list(BUY)} |
+ no_more.
+
+-spec stop() -> action(any()).
+stop() ->
+ stop.
+
+-spec do_unfold(BVB, fun((BVB) -> step(BVC, BVB))) -> fun(() -> action(BVC)).
+do_unfold(Initial, F) ->
+ fun() -> case F(Initial) of
+ {next, X, Acc} ->
+ {continue, X, do_unfold(Acc, F)};
+
+ done ->
+ stop
+ end end.
+
+-spec unfold(BVG, fun((BVG) -> step(BVH, BVG))) -> iterator(BVH).
+unfold(Initial, F) ->
+ _pipe = Initial,
+ _pipe@1 = do_unfold(_pipe, F),
+ {iterator, _pipe@1}.
+
+-spec repeatedly(fun(() -> BVL)) -> iterator(BVL).
+repeatedly(F) ->
+ unfold(nil, fun(_) -> {next, F(), nil} end).
+
+-spec repeat(BVN) -> iterator(BVN).
+repeat(X) ->
+ repeatedly(fun() -> X end).
+
+-spec from_list(list(BVP)) -> iterator(BVP).
+from_list(List) ->
+ Yield = fun(Acc) -> case Acc of
+ [] ->
+ done;
+
+ [Head | Tail] ->
+ {next, Head, Tail}
+ end end,
+ unfold(List, Yield).
+
+-spec do_transform(
+ fun(() -> action(BVS)),
+ BVU,
+ fun((BVU, BVS) -> step(BVV, BVU))
+) -> fun(() -> action(BVV)).
+do_transform(Continuation, State, F) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, El, Next} ->
+ case F(State, El) of
+ done ->
+ stop;
+
+ {next, Yield, Next_state} ->
+ {continue, Yield, do_transform(Next, Next_state, F)}
+ end
+ end end.
+
+-spec transform(iterator(BVZ), BWB, fun((BWB, BVZ) -> step(BWC, BWB))) -> iterator(BWC).
+transform(Iterator, Initial, F) ->
+ _pipe = do_transform(erlang:element(2, Iterator), Initial, F),
+ {iterator, _pipe}.
+
+-spec do_fold(fun(() -> action(BWG)), fun((BWI, BWG) -> BWI), BWI) -> BWI.
+do_fold(Continuation, F, Accumulator) ->
+ case Continuation() of
+ {continue, Elem, Next} ->
+ do_fold(Next, F, F(Accumulator, Elem));
+
+ stop ->
+ Accumulator
+ end.
+
+-spec fold(iterator(BWJ), BWL, fun((BWL, BWJ) -> BWL)) -> BWL.
+fold(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ do_fold(_pipe, F, Initial).
+
+-spec run(iterator(any())) -> nil.
+run(Iterator) ->
+ fold(Iterator, nil, fun(_, _) -> nil end).
+
+-spec to_list(iterator(BWO)) -> list(BWO).
+to_list(Iterator) ->
+ _pipe = Iterator,
+ _pipe@1 = fold(_pipe, [], fun(Acc, E) -> [E | Acc] end),
+ gleam@list:reverse(_pipe@1).
+
+-spec step(iterator(BWR)) -> step(BWR, iterator(BWR)).
+step(Iterator) ->
+ case (erlang:element(2, Iterator))() of
+ stop ->
+ done;
+
+ {continue, E, A} ->
+ {next, E, {iterator, A}}
+ end.
+
+-spec do_take(fun(() -> action(BWW)), integer()) -> fun(() -> action(BWW)).
+do_take(Continuation, Desired) ->
+ fun() -> case Desired > 0 of
+ false ->
+ stop;
+
+ true ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ {continue, E, do_take(Next, Desired - 1)}
+ end
+ end end.
+
+-spec take(iterator(BWZ), integer()) -> iterator(BWZ).
+take(Iterator, Desired) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_take(_pipe, Desired),
+ {iterator, _pipe@1}.
+
+-spec do_drop(fun(() -> action(BXC)), integer()) -> action(BXC).
+do_drop(Continuation, Desired) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ case Desired > 0 of
+ true ->
+ do_drop(Next, Desired - 1);
+
+ false ->
+ {continue, E, Next}
+ end
+ end.
+
+-spec drop(iterator(BXF), integer()) -> iterator(BXF).
+drop(Iterator, Desired) ->
+ _pipe = fun() -> do_drop(erlang:element(2, Iterator), Desired) end,
+ {iterator, _pipe}.
+
+-spec do_map(fun(() -> action(BXI)), fun((BXI) -> BXK)) -> fun(() -> action(BXK)).
+do_map(Continuation, F) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Continuation@1} ->
+ {continue, F(E), do_map(Continuation@1, F)}
+ end end.
+
+-spec map(iterator(BXM), fun((BXM) -> BXO)) -> iterator(BXO).
+map(Iterator, F) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_map(_pipe, F),
+ {iterator, _pipe@1}.
+
+-spec do_map2(
+ fun(() -> action(BXQ)),
+ fun(() -> action(BXS)),
+ fun((BXQ, BXS) -> BXU)
+) -> fun(() -> action(BXU)).
+do_map2(Continuation1, Continuation2, Fun) ->
+ fun() -> case Continuation1() of
+ stop ->
+ stop;
+
+ {continue, A, Next_a} ->
+ case Continuation2() of
+ stop ->
+ stop;
+
+ {continue, B, Next_b} ->
+ {continue, Fun(A, B), do_map2(Next_a, Next_b, Fun)}
+ end
+ end end.
+
+-spec map2(iterator(BXW), iterator(BXY), fun((BXW, BXY) -> BYA)) -> iterator(BYA).
+map2(Iterator1, Iterator2, Fun) ->
+ _pipe = do_map2(
+ erlang:element(2, Iterator1),
+ erlang:element(2, Iterator2),
+ Fun
+ ),
+ {iterator, _pipe}.
+
+-spec do_append(fun(() -> action(BYC)), fun(() -> action(BYC))) -> action(BYC).
+do_append(First, Second) ->
+ case First() of
+ {continue, E, First@1} ->
+ {continue, E, fun() -> do_append(First@1, Second) end};
+
+ stop ->
+ Second()
+ end.
+
+-spec append(iterator(BYG), iterator(BYG)) -> iterator(BYG).
+append(First, Second) ->
+ _pipe = fun() ->
+ do_append(erlang:element(2, First), erlang:element(2, Second))
+ end,
+ {iterator, _pipe}.
+
+-spec do_flatten(fun(() -> action(iterator(BYK)))) -> action(BYK).
+do_flatten(Flattened) ->
+ case Flattened() of
+ stop ->
+ stop;
+
+ {continue, It, Next_iterator} ->
+ do_append(
+ erlang:element(2, It),
+ fun() -> do_flatten(Next_iterator) end
+ )
+ end.
+
+-spec flatten(iterator(iterator(BYO))) -> iterator(BYO).
+flatten(Iterator) ->
+ _pipe = fun() -> do_flatten(erlang:element(2, Iterator)) end,
+ {iterator, _pipe}.
+
+-spec concat(list(iterator(BYS))) -> iterator(BYS).
+concat(Iterators) ->
+ flatten(from_list(Iterators)).
+
+-spec flat_map(iterator(BYW), fun((BYW) -> iterator(BYY))) -> iterator(BYY).
+flat_map(Iterator, F) ->
+ _pipe = Iterator,
+ _pipe@1 = map(_pipe, F),
+ flatten(_pipe@1).
+
+-spec do_filter(fun(() -> action(BZB)), fun((BZB) -> boolean())) -> action(BZB).
+do_filter(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Iterator} ->
+ case Predicate(E) of
+ true ->
+ {continue, E, fun() -> do_filter(Iterator, Predicate) end};
+
+ false ->
+ do_filter(Iterator, Predicate)
+ end
+ end.
+
+-spec filter(iterator(BZE), fun((BZE) -> boolean())) -> iterator(BZE).
+filter(Iterator, Predicate) ->
+ _pipe = fun() -> do_filter(erlang:element(2, Iterator), Predicate) end,
+ {iterator, _pipe}.
+
+-spec cycle(iterator(BZH)) -> iterator(BZH).
+cycle(Iterator) ->
+ _pipe = repeat(Iterator),
+ flatten(_pipe).
+
+-spec do_find(fun(() -> action(BZL)), fun((BZL) -> boolean())) -> {ok, BZL} |
+ {error, nil}.
+do_find(Continuation, F) ->
+ case Continuation() of
+ stop ->
+ {error, nil};
+
+ {continue, E, Next} ->
+ case F(E) of
+ true ->
+ {ok, E};
+
+ false ->
+ do_find(Next, F)
+ end
+ end.
+
+-spec find(iterator(BZP), fun((BZP) -> boolean())) -> {ok, BZP} | {error, nil}.
+find(Haystack, Is_desired) ->
+ _pipe = erlang:element(2, Haystack),
+ do_find(_pipe, Is_desired).
+
+-spec do_index(fun(() -> action(BZT)), integer()) -> fun(() -> action({integer(),
+ BZT})).
+do_index(Continuation, Next) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Continuation@1} ->
+ {continue, {Next, E}, do_index(Continuation@1, Next + 1)}
+ end end.
+
+-spec index(iterator(BZW)) -> iterator({integer(), BZW}).
+index(Iterator) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_index(_pipe, 0),
+ {iterator, _pipe@1}.
+
+-spec iterate(BZZ, fun((BZZ) -> BZZ)) -> iterator(BZZ).
+iterate(Initial, F) ->
+ unfold(Initial, fun(Element) -> {next, Element, F(Element)} end).
+
+-spec do_take_while(fun(() -> action(CAB)), fun((CAB) -> boolean())) -> fun(() -> action(CAB)).
+do_take_while(Continuation, Predicate) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ false ->
+ stop;
+
+ true ->
+ {continue, E, do_take_while(Next, Predicate)}
+ end
+ end end.
+
+-spec take_while(iterator(CAE), fun((CAE) -> boolean())) -> iterator(CAE).
+take_while(Iterator, Predicate) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_take_while(_pipe, Predicate),
+ {iterator, _pipe@1}.
+
+-spec do_drop_while(fun(() -> action(CAH)), fun((CAH) -> boolean())) -> action(CAH).
+do_drop_while(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ false ->
+ {continue, E, Next};
+
+ true ->
+ do_drop_while(Next, Predicate)
+ end
+ end.
+
+-spec drop_while(iterator(CAK), fun((CAK) -> boolean())) -> iterator(CAK).
+drop_while(Iterator, Predicate) ->
+ _pipe = fun() -> do_drop_while(erlang:element(2, Iterator), Predicate) end,
+ {iterator, _pipe}.
+
+-spec do_scan(fun(() -> action(CAN)), fun((CAP, CAN) -> CAP), CAP) -> fun(() -> action(CAP)).
+do_scan(Continuation, F, Accumulator) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, El, Next} ->
+ Accumulated = F(Accumulator, El),
+ {continue, Accumulated, do_scan(Next, F, Accumulated)}
+ end end.
+
+-spec scan(iterator(CAR), CAT, fun((CAT, CAR) -> CAT)) -> iterator(CAT).
+scan(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_scan(_pipe, F, Initial),
+ {iterator, _pipe@1}.
+
+-spec do_zip(fun(() -> action(CAV)), fun(() -> action(CAX))) -> fun(() -> action({CAV,
+ CAX})).
+do_zip(Left, Right) ->
+ fun() -> case Left() of
+ stop ->
+ stop;
+
+ {continue, El_left, Next_left} ->
+ case Right() of
+ stop ->
+ stop;
+
+ {continue, El_right, Next_right} ->
+ {continue,
+ {El_left, El_right},
+ do_zip(Next_left, Next_right)}
+ end
+ end end.
+
+-spec zip(iterator(CBA), iterator(CBC)) -> iterator({CBA, CBC}).
+zip(Left, Right) ->
+ _pipe = do_zip(erlang:element(2, Left), erlang:element(2, Right)),
+ {iterator, _pipe}.
+
+-spec next_chunk(fun(() -> action(CBF)), fun((CBF) -> CBH), CBH, list(CBF)) -> chunk(CBF, CBH).
+next_chunk(Continuation, F, Previous_key, Current_chunk) ->
+ case Continuation() of
+ stop ->
+ {last_by, gleam@list:reverse(Current_chunk)};
+
+ {continue, E, Next} ->
+ Key = F(E),
+ case Key =:= Previous_key of
+ true ->
+ next_chunk(Next, F, Key, [E | Current_chunk]);
+
+ false ->
+ {another_by,
+ gleam@list:reverse(Current_chunk),
+ Key,
+ E,
+ Next}
+ end
+ end.
+
+-spec do_chunk(fun(() -> action(CBL)), fun((CBL) -> CBN), CBN, CBL) -> action(list(CBL)).
+do_chunk(Continuation, F, Previous_key, Previous_element) ->
+ case next_chunk(Continuation, F, Previous_key, [Previous_element]) of
+ {last_by, Chunk} ->
+ {continue, Chunk, fun stop/0};
+
+ {another_by, Chunk@1, Key, El, Next} ->
+ {continue, Chunk@1, fun() -> do_chunk(Next, F, Key, El) end}
+ end.
+
+-spec chunk(iterator(CBQ), fun((CBQ) -> any())) -> iterator(list(CBQ)).
+chunk(Iterator, F) ->
+ _pipe = fun() -> case (erlang:element(2, Iterator))() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ do_chunk(Next, F, F(E), E)
+ end end,
+ {iterator, _pipe}.
+
+-spec next_sized_chunk(fun(() -> action(CBV)), integer(), list(CBV)) -> sized_chunk(CBV).
+next_sized_chunk(Continuation, Left, Current_chunk) ->
+ case Continuation() of
+ stop ->
+ case Current_chunk of
+ [] ->
+ no_more;
+
+ Remaining ->
+ {last, gleam@list:reverse(Remaining)}
+ end;
+
+ {continue, E, Next} ->
+ Chunk = [E | Current_chunk],
+ case Left > 1 of
+ false ->
+ {another, gleam@list:reverse(Chunk), Next};
+
+ true ->
+ next_sized_chunk(Next, Left - 1, Chunk)
+ end
+ end.
+
+-spec do_sized_chunk(fun(() -> action(CBZ)), integer()) -> fun(() -> action(list(CBZ))).
+do_sized_chunk(Continuation, Count) ->
+ fun() -> case next_sized_chunk(Continuation, Count, []) of
+ no_more ->
+ stop;
+
+ {last, Chunk} ->
+ {continue, Chunk, fun stop/0};
+
+ {another, Chunk@1, Next_element} ->
+ {continue, Chunk@1, do_sized_chunk(Next_element, Count)}
+ end end.
+
+-spec sized_chunk(iterator(CCD), integer()) -> iterator(list(CCD)).
+sized_chunk(Iterator, Count) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_sized_chunk(_pipe, Count),
+ {iterator, _pipe@1}.
+
+-spec do_intersperse(fun(() -> action(CCH)), CCH) -> action(CCH).
+do_intersperse(Continuation, Separator) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ Next_interspersed = fun() -> do_intersperse(Next, Separator) end,
+ {continue, Separator, fun() -> {continue, E, Next_interspersed} end}
+ end.
+
+-spec intersperse(iterator(CCK), CCK) -> iterator(CCK).
+intersperse(Iterator, Elem) ->
+ _pipe = fun() -> case (erlang:element(2, Iterator))() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ {continue, E, fun() -> do_intersperse(Next, Elem) end}
+ end end,
+ {iterator, _pipe}.
+
+-spec do_any(fun(() -> action(CCN)), fun((CCN) -> boolean())) -> boolean().
+do_any(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ false;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ true ->
+ true;
+
+ false ->
+ do_any(Next, Predicate)
+ end
+ end.
+
+-spec any(iterator(CCP), fun((CCP) -> boolean())) -> boolean().
+any(Iterator, Predicate) ->
+ _pipe = erlang:element(2, Iterator),
+ do_any(_pipe, Predicate).
+
+-spec do_all(fun(() -> action(CCR)), fun((CCR) -> boolean())) -> boolean().
+do_all(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ true;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ true ->
+ do_all(Next, Predicate);
+
+ false ->
+ false
+ end
+ end.
+
+-spec all(iterator(CCT), fun((CCT) -> boolean())) -> boolean().
+all(Iterator, Predicate) ->
+ _pipe = erlang:element(2, Iterator),
+ do_all(_pipe, Predicate).
+
+-spec update_group_with(CCV) -> fun((gleam@option:option(list(CCV))) -> list(CCV)).
+update_group_with(El) ->
+ fun(Maybe_group) -> case Maybe_group of
+ {some, Group} ->
+ [El | Group];
+
+ none ->
+ [El]
+ end end.
+
+-spec group_updater(fun((CCZ) -> CDA)) -> fun((gleam@dict:dict(CDA, list(CCZ)), CCZ) -> gleam@dict:dict(CDA, list(CCZ))).
+group_updater(F) ->
+ fun(Groups, Elem) -> _pipe = Groups,
+ gleam@dict:update(_pipe, F(Elem), update_group_with(Elem)) end.
+
+-spec group(iterator(CDH), fun((CDH) -> CDJ)) -> gleam@dict:dict(CDJ, list(CDH)).
+group(Iterator, Key) ->
+ _pipe = Iterator,
+ _pipe@1 = fold(_pipe, gleam@dict:new(), group_updater(Key)),
+ gleam@dict:map_values(
+ _pipe@1,
+ fun(_, Group) -> gleam@list:reverse(Group) end
+ ).
+
+-spec reduce(iterator(CDN), fun((CDN, CDN) -> CDN)) -> {ok, CDN} | {error, nil}.
+reduce(Iterator, F) ->
+ case (erlang:element(2, Iterator))() of
+ stop ->
+ {error, nil};
+
+ {continue, E, Next} ->
+ _pipe = do_fold(Next, F, E),
+ {ok, _pipe}
+ end.
+
+-spec last(iterator(CDR)) -> {ok, CDR} | {error, nil}.
+last(Iterator) ->
+ _pipe = Iterator,
+ reduce(_pipe, fun(_, Elem) -> Elem end).
+
+-spec empty() -> iterator(any()).
+empty() ->
+ {iterator, fun stop/0}.
+
+-spec once(fun(() -> CDX)) -> iterator(CDX).
+once(F) ->
+ _pipe = fun() -> {continue, F(), fun stop/0} end,
+ {iterator, _pipe}.
+
+-spec range(integer(), integer()) -> iterator(integer()).
+range(Start, Stop) ->
+ case gleam@int:compare(Start, Stop) of
+ eq ->
+ once(fun() -> Start end);
+
+ gt ->
+ unfold(Start, fun(Current) -> case Current < Stop of
+ false ->
+ {next, Current, Current - 1};
+
+ true ->
+ done
+ end end);
+
+ lt ->
+ unfold(Start, fun(Current@1) -> case Current@1 > Stop of
+ false ->
+ {next, Current@1, Current@1 + 1};
+
+ true ->
+ done
+ end end)
+ end.
+
+-spec single(CDZ) -> iterator(CDZ).
+single(Elem) ->
+ once(fun() -> Elem end).
+
+-spec do_interleave(fun(() -> action(CEB)), fun(() -> action(CEB))) -> action(CEB).
+do_interleave(Current, Next) ->
+ case Current() of
+ stop ->
+ Next();
+
+ {continue, E, Next_other} ->
+ {continue, E, fun() -> do_interleave(Next, Next_other) end}
+ end.
+
+-spec interleave(iterator(CEF), iterator(CEF)) -> iterator(CEF).
+interleave(Left, Right) ->
+ _pipe = fun() ->
+ do_interleave(erlang:element(2, Left), erlang:element(2, Right))
+ end,
+ {iterator, _pipe}.
+
+-spec do_fold_until(
+ fun(() -> action(CEJ)),
+ fun((CEL, CEJ) -> gleam@list:continue_or_stop(CEL)),
+ CEL
+) -> CEL.
+do_fold_until(Continuation, F, Accumulator) ->
+ case Continuation() of
+ stop ->
+ Accumulator;
+
+ {continue, Elem, Next} ->
+ case F(Accumulator, Elem) of
+ {continue, Accumulator@1} ->
+ do_fold_until(Next, F, Accumulator@1);
+
+ {stop, Accumulator@2} ->
+ Accumulator@2
+ end
+ end.
+
+-spec fold_until(
+ iterator(CEN),
+ CEP,
+ fun((CEP, CEN) -> gleam@list:continue_or_stop(CEP))
+) -> CEP.
+fold_until(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ do_fold_until(_pipe, F, Initial).
+
+-spec do_try_fold(
+ fun(() -> action(CER)),
+ fun((CET, CER) -> {ok, CET} | {error, CEU}),
+ CET
+) -> {ok, CET} | {error, CEU}.
+do_try_fold(Continuation, F, Accumulator) ->
+ case Continuation() of
+ stop ->
+ {ok, Accumulator};
+
+ {continue, Elem, Next} ->
+ gleam@result:'try'(
+ F(Accumulator, Elem),
+ fun(Accumulator@1) -> do_try_fold(Next, F, Accumulator@1) end
+ )
+ end.
+
+-spec try_fold(iterator(CEZ), CFB, fun((CFB, CEZ) -> {ok, CFB} | {error, CFC})) -> {ok,
+ CFB} |
+ {error, CFC}.
+try_fold(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ do_try_fold(_pipe, F, Initial).
+
+-spec first(iterator(CFH)) -> {ok, CFH} | {error, nil}.
+first(Iterator) ->
+ case (erlang:element(2, Iterator))() of
+ stop ->
+ {error, nil};
+
+ {continue, E, _} ->
+ {ok, E}
+ end.
+
+-spec at(iterator(CFL), integer()) -> {ok, CFL} | {error, nil}.
+at(Iterator, Index) ->
+ _pipe = Iterator,
+ _pipe@1 = drop(_pipe, Index),
+ first(_pipe@1).
+
+-spec do_length(fun(() -> action(any())), integer()) -> integer().
+do_length(Continuation, Length) ->
+ case Continuation() of
+ stop ->
+ Length;
+
+ {continue, _, Next} ->
+ do_length(Next, Length + 1)
+ end.
+
+-spec length(iterator(any())) -> integer().
+length(Iterator) ->
+ _pipe = erlang:element(2, Iterator),
+ do_length(_pipe, 0).
+
+-spec each(iterator(CFT), fun((CFT) -> any())) -> nil.
+each(Iterator, F) ->
+ _pipe = Iterator,
+ _pipe@1 = map(_pipe, F),
+ run(_pipe@1).
+
+-spec yield(CFW, fun(() -> iterator(CFW))) -> iterator(CFW).
+yield(Element, Next) ->
+ {iterator, fun() -> {continue, Element, erlang:element(2, Next())} end}.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache
new file mode 100644
index 0000000..394792a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta
new file mode 100644
index 0000000..56b294f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl
new file mode 100644
index 0000000..6c2e684
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.erl
@@ -0,0 +1,1129 @@
+-module(gleam@list).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([length/1, reverse/1, is_empty/1, contains/2, first/1, rest/1, filter/2, filter_map/2, map/2, map2/3, index_map/2, try_map/2, drop/2, take/2, new/0, append/2, prepend/2, concat/1, flatten/1, flat_map/2, fold/3, group/2, map_fold/3, fold_right/3, index_fold/3, try_fold/3, fold_until/3, find/2, find_map/2, all/2, any/2, zip/2, strict_zip/2, unzip/1, intersperse/2, at/2, unique/1, sort/2, range/2, repeat/2, split/2, split_while/2, key_find/2, key_filter/2, pop/2, pop_map/2, key_pop/2, key_set/3, each/2, try_each/2, partition/2, permutations/1, window/2, window_by_2/1, drop_while/2, take_while/2, chunk/2, sized_chunk/2, reduce/2, scan/3, last/1, combinations/2, combination_pairs/1, transpose/1, interleave/1, shuffle/1]).
+-export_type([length_mismatch/0, continue_or_stop/1]).
+
+-type length_mismatch() :: length_mismatch.
+
+-type continue_or_stop(UD) :: {continue, UD} | {stop, UD}.
+
+-spec length(list(any())) -> integer().
+length(List) ->
+ erlang:length(List).
+
+-spec reverse(list(UI)) -> list(UI).
+reverse(Xs) ->
+ lists:reverse(Xs).
+
+-spec is_empty(list(any())) -> boolean().
+is_empty(List) ->
+ List =:= [].
+
+-spec contains(list(UQ), UQ) -> boolean().
+contains(List, Elem) ->
+ case List of
+ [] ->
+ false;
+
+ [First | _] when First =:= Elem ->
+ true;
+
+ [_ | Rest] ->
+ contains(Rest, Elem)
+ end.
+
+-spec first(list(US)) -> {ok, US} | {error, nil}.
+first(List) ->
+ case List of
+ [] ->
+ {error, nil};
+
+ [X | _] ->
+ {ok, X}
+ end.
+
+-spec rest(list(UW)) -> {ok, list(UW)} | {error, nil}.
+rest(List) ->
+ case List of
+ [] ->
+ {error, nil};
+
+ [_ | Xs] ->
+ {ok, Xs}
+ end.
+
+-spec update_group(fun((VB) -> VC)) -> fun((gleam@dict:dict(VC, list(VB)), VB) -> gleam@dict:dict(VC, list(VB))).
+update_group(F) ->
+ fun(Groups, Elem) -> case gleam@dict:get(Groups, F(Elem)) of
+ {ok, Existing} ->
+ gleam@dict:insert(Groups, F(Elem), [Elem | Existing]);
+
+ {error, _} ->
+ gleam@dict:insert(Groups, F(Elem), [Elem])
+ end end.
+
+-spec do_filter(list(VP), fun((VP) -> boolean()), list(VP)) -> list(VP).
+do_filter(List, Fun, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ New_acc = case Fun(X) of
+ true ->
+ [X | Acc];
+
+ false ->
+ Acc
+ end,
+ do_filter(Xs, Fun, New_acc)
+ end.
+
+-spec filter(list(VT), fun((VT) -> boolean())) -> list(VT).
+filter(List, Predicate) ->
+ do_filter(List, Predicate, []).
+
+-spec do_filter_map(list(VW), fun((VW) -> {ok, VY} | {error, any()}), list(VY)) -> list(VY).
+do_filter_map(List, Fun, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ New_acc = case Fun(X) of
+ {ok, X@1} ->
+ [X@1 | Acc];
+
+ {error, _} ->
+ Acc
+ end,
+ do_filter_map(Xs, Fun, New_acc)
+ end.
+
+-spec filter_map(list(WE), fun((WE) -> {ok, WG} | {error, any()})) -> list(WG).
+filter_map(List, Fun) ->
+ do_filter_map(List, Fun, []).
+
+-spec do_map(list(WL), fun((WL) -> WN), list(WN)) -> list(WN).
+do_map(List, Fun, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ do_map(Xs, Fun, [Fun(X) | Acc])
+ end.
+
+-spec map(list(WQ), fun((WQ) -> WS)) -> list(WS).
+map(List, Fun) ->
+ do_map(List, Fun, []).
+
+-spec do_map2(list(XA), list(XC), fun((XA, XC) -> XE), list(XE)) -> list(XE).
+do_map2(List1, List2, Fun, Acc) ->
+ case {List1, List2} of
+ {[], _} ->
+ reverse(Acc);
+
+ {_, []} ->
+ reverse(Acc);
+
+ {[A | As_], [B | Bs]} ->
+ do_map2(As_, Bs, Fun, [Fun(A, B) | Acc])
+ end.
+
+-spec map2(list(WU), list(WW), fun((WU, WW) -> WY)) -> list(WY).
+map2(List1, List2, Fun) ->
+ do_map2(List1, List2, Fun, []).
+
+-spec do_index_map(list(XM), fun((integer(), XM) -> XO), integer(), list(XO)) -> list(XO).
+do_index_map(List, Fun, Index, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ Acc@1 = [Fun(Index, X) | Acc],
+ do_index_map(Xs, Fun, Index + 1, Acc@1)
+ end.
+
+-spec index_map(list(XR), fun((integer(), XR) -> XT)) -> list(XT).
+index_map(List, Fun) ->
+ do_index_map(List, Fun, 0, []).
+
+-spec do_try_map(list(XV), fun((XV) -> {ok, XX} | {error, XY}), list(XX)) -> {ok,
+ list(XX)} |
+ {error, XY}.
+do_try_map(List, Fun, Acc) ->
+ case List of
+ [] ->
+ {ok, reverse(Acc)};
+
+ [X | Xs] ->
+ case Fun(X) of
+ {ok, Y} ->
+ do_try_map(Xs, Fun, [Y | Acc]);
+
+ {error, Error} ->
+ {error, Error}
+ end
+ end.
+
+-spec try_map(list(YF), fun((YF) -> {ok, YH} | {error, YI})) -> {ok, list(YH)} |
+ {error, YI}.
+try_map(List, Fun) ->
+ do_try_map(List, Fun, []).
+
+-spec drop(list(YO), integer()) -> list(YO).
+drop(List, N) ->
+ case N =< 0 of
+ true ->
+ List;
+
+ false ->
+ case List of
+ [] ->
+ [];
+
+ [_ | Xs] ->
+ drop(Xs, N - 1)
+ end
+ end.
+
+-spec do_take(list(YR), integer(), list(YR)) -> list(YR).
+do_take(List, N, Acc) ->
+ case N =< 0 of
+ true ->
+ reverse(Acc);
+
+ false ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ do_take(Xs, N - 1, [X | Acc])
+ end
+ end.
+
+-spec take(list(YV), integer()) -> list(YV).
+take(List, N) ->
+ do_take(List, N, []).
+
+-spec new() -> list(any()).
+new() ->
+ [].
+
+-spec append(list(AAA), list(AAA)) -> list(AAA).
+append(First, Second) ->
+ lists:append(First, Second).
+
+-spec prepend(list(AAI), AAI) -> list(AAI).
+prepend(List, Item) ->
+ [Item | List].
+
+-spec reverse_and_prepend(list(AAL), list(AAL)) -> list(AAL).
+reverse_and_prepend(Prefix, Suffix) ->
+ case Prefix of
+ [] ->
+ Suffix;
+
+ [First | Rest] ->
+ reverse_and_prepend(Rest, [First | Suffix])
+ end.
+
+-spec do_concat(list(list(AAP)), list(AAP)) -> list(AAP).
+do_concat(Lists, Acc) ->
+ case Lists of
+ [] ->
+ reverse(Acc);
+
+ [List | Further_lists] ->
+ do_concat(Further_lists, reverse_and_prepend(List, Acc))
+ end.
+
+-spec concat(list(list(AAU))) -> list(AAU).
+concat(Lists) ->
+ do_concat(Lists, []).
+
+-spec flatten(list(list(AAY))) -> list(AAY).
+flatten(Lists) ->
+ do_concat(Lists, []).
+
+-spec flat_map(list(ABC), fun((ABC) -> list(ABE))) -> list(ABE).
+flat_map(List, Fun) ->
+ _pipe = map(List, Fun),
+ concat(_pipe).
+
+-spec fold(list(ABH), ABJ, fun((ABJ, ABH) -> ABJ)) -> ABJ.
+fold(List, Initial, Fun) ->
+ case List of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ fold(Rest, Fun(Initial, X), Fun)
+ end.
+
+-spec group(list(VJ), fun((VJ) -> VL)) -> gleam@dict:dict(VL, list(VJ)).
+group(List, Key) ->
+ fold(List, gleam@dict:new(), update_group(Key)).
+
+-spec map_fold(list(XH), XJ, fun((XJ, XH) -> {XJ, XK})) -> {XJ, list(XK)}.
+map_fold(List, Acc, Fun) ->
+ _pipe = fold(
+ List,
+ {Acc, []},
+ fun(Acc@1, Item) ->
+ {Current_acc, Items} = Acc@1,
+ {Next_acc, Next_item} = Fun(Current_acc, Item),
+ {Next_acc, [Next_item | Items]}
+ end
+ ),
+ gleam@pair:map_second(_pipe, fun reverse/1).
+
+-spec fold_right(list(ABK), ABM, fun((ABM, ABK) -> ABM)) -> ABM.
+fold_right(List, Initial, Fun) ->
+ case List of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ Fun(fold_right(Rest, Initial, Fun), X)
+ end.
+
+-spec do_index_fold(
+ list(ABN),
+ ABP,
+ fun((ABP, ABN, integer()) -> ABP),
+ integer()
+) -> ABP.
+do_index_fold(Over, Acc, With, Index) ->
+ case Over of
+ [] ->
+ Acc;
+
+ [First | Rest] ->
+ do_index_fold(Rest, With(Acc, First, Index), With, Index + 1)
+ end.
+
+-spec index_fold(list(ABQ), ABS, fun((ABS, ABQ, integer()) -> ABS)) -> ABS.
+index_fold(Over, Initial, Fun) ->
+ do_index_fold(Over, Initial, Fun, 0).
+
+-spec try_fold(list(ABT), ABV, fun((ABV, ABT) -> {ok, ABV} | {error, ABW})) -> {ok,
+ ABV} |
+ {error, ABW}.
+try_fold(Collection, Accumulator, Fun) ->
+ case Collection of
+ [] ->
+ {ok, Accumulator};
+
+ [First | Rest] ->
+ case Fun(Accumulator, First) of
+ {ok, Result} ->
+ try_fold(Rest, Result, Fun);
+
+ {error, _} = Error ->
+ Error
+ end
+ end.
+
+-spec fold_until(list(ACB), ACD, fun((ACD, ACB) -> continue_or_stop(ACD))) -> ACD.
+fold_until(Collection, Accumulator, Fun) ->
+ case Collection of
+ [] ->
+ Accumulator;
+
+ [First | Rest] ->
+ case Fun(Accumulator, First) of
+ {continue, Next_accumulator} ->
+ fold_until(Rest, Next_accumulator, Fun);
+
+ {stop, B} ->
+ B
+ end
+ end.
+
+-spec find(list(ACF), fun((ACF) -> boolean())) -> {ok, ACF} | {error, nil}.
+find(Haystack, Is_desired) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Is_desired(X) of
+ true ->
+ {ok, X};
+
+ _ ->
+ find(Rest, Is_desired)
+ end
+ end.
+
+-spec find_map(list(ACJ), fun((ACJ) -> {ok, ACL} | {error, any()})) -> {ok, ACL} |
+ {error, nil}.
+find_map(Haystack, Fun) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Fun(X) of
+ {ok, X@1} ->
+ {ok, X@1};
+
+ _ ->
+ find_map(Rest, Fun)
+ end
+ end.
+
+-spec all(list(ACR), fun((ACR) -> boolean())) -> boolean().
+all(List, Predicate) ->
+ case List of
+ [] ->
+ true;
+
+ [First | Rest] ->
+ case Predicate(First) of
+ true ->
+ all(Rest, Predicate);
+
+ false ->
+ false
+ end
+ end.
+
+-spec any(list(ACT), fun((ACT) -> boolean())) -> boolean().
+any(List, Predicate) ->
+ case List of
+ [] ->
+ false;
+
+ [First | Rest] ->
+ case Predicate(First) of
+ true ->
+ true;
+
+ false ->
+ any(Rest, Predicate)
+ end
+ end.
+
+-spec do_zip(list(ACV), list(ACX), list({ACV, ACX})) -> list({ACV, ACX}).
+do_zip(Xs, Ys, Acc) ->
+ case {Xs, Ys} of
+ {[X | Xs@1], [Y | Ys@1]} ->
+ do_zip(Xs@1, Ys@1, [{X, Y} | Acc]);
+
+ {_, _} ->
+ reverse(Acc)
+ end.
+
+-spec zip(list(ADB), list(ADD)) -> list({ADB, ADD}).
+zip(List, Other) ->
+ do_zip(List, Other, []).
+
+-spec strict_zip(list(ADG), list(ADI)) -> {ok, list({ADG, ADI})} |
+ {error, length_mismatch()}.
+strict_zip(List, Other) ->
+ case length(List) =:= length(Other) of
+ true ->
+ {ok, zip(List, Other)};
+
+ false ->
+ {error, length_mismatch}
+ end.
+
+-spec do_unzip(list({ATA, ATB}), list(ATA), list(ATB)) -> {list(ATA), list(ATB)}.
+do_unzip(Input, Xs, Ys) ->
+ case Input of
+ [] ->
+ {reverse(Xs), reverse(Ys)};
+
+ [{X, Y} | Rest] ->
+ do_unzip(Rest, [X | Xs], [Y | Ys])
+ end.
+
+-spec unzip(list({ADR, ADS})) -> {list(ADR), list(ADS)}.
+unzip(Input) ->
+ do_unzip(Input, [], []).
+
+-spec do_intersperse(list(ADW), ADW, list(ADW)) -> list(ADW).
+do_intersperse(List, Separator, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Rest] ->
+ do_intersperse(Rest, Separator, [X, Separator | Acc])
+ end.
+
+-spec intersperse(list(AEA), AEA) -> list(AEA).
+intersperse(List, Elem) ->
+ case List of
+ [] ->
+ List;
+
+ [_] ->
+ List;
+
+ [X | Rest] ->
+ do_intersperse(Rest, Elem, [X])
+ end.
+
+-spec at(list(AED), integer()) -> {ok, AED} | {error, nil}.
+at(List, Index) ->
+ case Index >= 0 of
+ true ->
+ _pipe = List,
+ _pipe@1 = drop(_pipe, Index),
+ first(_pipe@1);
+
+ false ->
+ {error, nil}
+ end.
+
+-spec unique(list(AEH)) -> list(AEH).
+unique(List) ->
+ case List of
+ [] ->
+ [];
+
+ [X | Rest] ->
+ [X | unique(filter(Rest, fun(Y) -> Y /= X end))]
+ end.
+
+-spec merge_up(
+ integer(),
+ integer(),
+ list(AEK),
+ list(AEK),
+ list(AEK),
+ fun((AEK, AEK) -> gleam@order:order())
+) -> list(AEK).
+merge_up(Na, Nb, A, B, Acc, Compare) ->
+ case {Na, Nb, A, B} of
+ {0, 0, _, _} ->
+ Acc;
+
+ {_, 0, [Ax | Ar], _} ->
+ merge_up(Na - 1, Nb, Ar, B, [Ax | Acc], Compare);
+
+ {0, _, _, [Bx | Br]} ->
+ merge_up(Na, Nb - 1, A, Br, [Bx | Acc], Compare);
+
+ {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} ->
+ case Compare(Ax@1, Bx@1) of
+ gt ->
+ merge_up(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare);
+
+ _ ->
+ merge_up(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare)
+ end;
+
+ {_, _, _, _} ->
+ Acc
+ end.
+
+-spec merge_down(
+ integer(),
+ integer(),
+ list(AEP),
+ list(AEP),
+ list(AEP),
+ fun((AEP, AEP) -> gleam@order:order())
+) -> list(AEP).
+merge_down(Na, Nb, A, B, Acc, Compare) ->
+ case {Na, Nb, A, B} of
+ {0, 0, _, _} ->
+ Acc;
+
+ {_, 0, [Ax | Ar], _} ->
+ merge_down(Na - 1, Nb, Ar, B, [Ax | Acc], Compare);
+
+ {0, _, _, [Bx | Br]} ->
+ merge_down(Na, Nb - 1, A, Br, [Bx | Acc], Compare);
+
+ {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} ->
+ case Compare(Bx@1, Ax@1) of
+ lt ->
+ merge_down(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare);
+
+ _ ->
+ merge_down(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare)
+ end;
+
+ {_, _, _, _} ->
+ Acc
+ end.
+
+-spec merge_sort(
+ list(AEU),
+ integer(),
+ fun((AEU, AEU) -> gleam@order:order()),
+ boolean()
+) -> list(AEU).
+merge_sort(L, Ln, Compare, Down) ->
+ N = Ln div 2,
+ A = L,
+ B = drop(L, N),
+ case Ln < 3 of
+ true ->
+ case Down of
+ true ->
+ merge_down(N, Ln - N, A, B, [], Compare);
+
+ false ->
+ merge_up(N, Ln - N, A, B, [], Compare)
+ end;
+
+ false ->
+ case Down of
+ true ->
+ merge_down(
+ N,
+ Ln - N,
+ merge_sort(A, N, Compare, false),
+ merge_sort(B, Ln - N, Compare, false),
+ [],
+ Compare
+ );
+
+ false ->
+ merge_up(
+ N,
+ Ln - N,
+ merge_sort(A, N, Compare, true),
+ merge_sort(B, Ln - N, Compare, true),
+ [],
+ Compare
+ )
+ end
+ end.
+
+-spec sort(list(AEX), fun((AEX, AEX) -> gleam@order:order())) -> list(AEX).
+sort(List, Compare) ->
+ merge_sort(List, length(List), Compare, true).
+
+-spec tail_recursive_range(integer(), integer(), list(integer())) -> list(integer()).
+tail_recursive_range(Start, Stop, Acc) ->
+ case gleam@int:compare(Start, Stop) of
+ eq ->
+ [Stop | Acc];
+
+ gt ->
+ tail_recursive_range(Start, Stop + 1, [Stop | Acc]);
+
+ lt ->
+ tail_recursive_range(Start, Stop - 1, [Stop | Acc])
+ end.
+
+-spec range(integer(), integer()) -> list(integer()).
+range(Start, Stop) ->
+ tail_recursive_range(Start, Stop, []).
+
+-spec do_repeat(AFD, integer(), list(AFD)) -> list(AFD).
+do_repeat(A, Times, Acc) ->
+ case Times =< 0 of
+ true ->
+ Acc;
+
+ false ->
+ do_repeat(A, Times - 1, [A | Acc])
+ end.
+
+-spec repeat(AFG, integer()) -> list(AFG).
+repeat(A, Times) ->
+ do_repeat(A, Times, []).
+
+-spec do_split(list(AFI), integer(), list(AFI)) -> {list(AFI), list(AFI)}.
+do_split(List, N, Taken) ->
+ case N =< 0 of
+ true ->
+ {reverse(Taken), List};
+
+ false ->
+ case List of
+ [] ->
+ {reverse(Taken), []};
+
+ [X | Xs] ->
+ do_split(Xs, N - 1, [X | Taken])
+ end
+ end.
+
+-spec split(list(AFN), integer()) -> {list(AFN), list(AFN)}.
+split(List, Index) ->
+ do_split(List, Index, []).
+
+-spec do_split_while(list(AFR), fun((AFR) -> boolean()), list(AFR)) -> {list(AFR),
+ list(AFR)}.
+do_split_while(List, F, Acc) ->
+ case List of
+ [] ->
+ {reverse(Acc), []};
+
+ [X | Xs] ->
+ case F(X) of
+ false ->
+ {reverse(Acc), List};
+
+ _ ->
+ do_split_while(Xs, F, [X | Acc])
+ end
+ end.
+
+-spec split_while(list(AFW), fun((AFW) -> boolean())) -> {list(AFW), list(AFW)}.
+split_while(List, Predicate) ->
+ do_split_while(List, Predicate, []).
+
+-spec key_find(list({AGA, AGB}), AGA) -> {ok, AGB} | {error, nil}.
+key_find(Keyword_list, Desired_key) ->
+ find_map(
+ Keyword_list,
+ fun(Keyword) ->
+ {Key, Value} = Keyword,
+ case Key =:= Desired_key of
+ true ->
+ {ok, Value};
+
+ false ->
+ {error, nil}
+ end
+ end
+ ).
+
+-spec key_filter(list({AGF, AGG}), AGF) -> list(AGG).
+key_filter(Keyword_list, Desired_key) ->
+ filter_map(
+ Keyword_list,
+ fun(Keyword) ->
+ {Key, Value} = Keyword,
+ case Key =:= Desired_key of
+ true ->
+ {ok, Value};
+
+ false ->
+ {error, nil}
+ end
+ end
+ ).
+
+-spec do_pop(list(AWT), fun((AWT) -> boolean()), list(AWT)) -> {ok,
+ {AWT, list(AWT)}} |
+ {error, nil}.
+do_pop(Haystack, Predicate, Checked) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Predicate(X) of
+ true ->
+ {ok, {X, append(reverse(Checked), Rest)}};
+
+ false ->
+ do_pop(Rest, Predicate, [X | Checked])
+ end
+ end.
+
+-spec pop(list(AGN), fun((AGN) -> boolean())) -> {ok, {AGN, list(AGN)}} |
+ {error, nil}.
+pop(Haystack, Is_desired) ->
+ do_pop(Haystack, Is_desired, []).
+
+-spec do_pop_map(list(AXH), fun((AXH) -> {ok, AXU} | {error, any()}), list(AXH)) -> {ok,
+ {AXU, list(AXH)}} |
+ {error, nil}.
+do_pop_map(Haystack, Mapper, Checked) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Mapper(X) of
+ {ok, Y} ->
+ {ok, {Y, append(reverse(Checked), Rest)}};
+
+ {error, _} ->
+ do_pop_map(Rest, Mapper, [X | Checked])
+ end
+ end.
+
+-spec pop_map(list(AGW), fun((AGW) -> {ok, AGY} | {error, any()})) -> {ok,
+ {AGY, list(AGW)}} |
+ {error, nil}.
+pop_map(Haystack, Is_desired) ->
+ do_pop_map(Haystack, Is_desired, []).
+
+-spec key_pop(list({AHF, AHG}), AHF) -> {ok, {AHG, list({AHF, AHG})}} |
+ {error, nil}.
+key_pop(Haystack, Key) ->
+ pop_map(
+ Haystack,
+ fun(Entry) ->
+ {K, V} = Entry,
+ case K of
+ K@1 when K@1 =:= Key ->
+ {ok, V};
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ).
+
+-spec key_set(list({AHL, AHM}), AHL, AHM) -> list({AHL, AHM}).
+key_set(List, Key, Value) ->
+ case List of
+ [] ->
+ [{Key, Value}];
+
+ [{K, _} | Rest] when K =:= Key ->
+ [{Key, Value} | Rest];
+
+ [First | Rest@1] ->
+ [First | key_set(Rest@1, Key, Value)]
+ end.
+
+-spec each(list(AHP), fun((AHP) -> any())) -> nil.
+each(List, F) ->
+ case List of
+ [] ->
+ nil;
+
+ [X | Xs] ->
+ F(X),
+ each(Xs, F)
+ end.
+
+-spec try_each(list(AHS), fun((AHS) -> {ok, any()} | {error, AHV})) -> {ok, nil} |
+ {error, AHV}.
+try_each(List, Fun) ->
+ case List of
+ [] ->
+ {ok, nil};
+
+ [X | Xs] ->
+ case Fun(X) of
+ {ok, _} ->
+ try_each(Xs, Fun);
+
+ {error, E} ->
+ {error, E}
+ end
+ end.
+
+-spec do_partition(list(AZB), fun((AZB) -> boolean()), list(AZB), list(AZB)) -> {list(AZB),
+ list(AZB)}.
+do_partition(List, Categorise, Trues, Falses) ->
+ case List of
+ [] ->
+ {reverse(Trues), reverse(Falses)};
+
+ [X | Xs] ->
+ case Categorise(X) of
+ true ->
+ do_partition(Xs, Categorise, [X | Trues], Falses);
+
+ false ->
+ do_partition(Xs, Categorise, Trues, [X | Falses])
+ end
+ end.
+
+-spec partition(list(AIF), fun((AIF) -> boolean())) -> {list(AIF), list(AIF)}.
+partition(List, Categorise) ->
+ do_partition(List, Categorise, [], []).
+
+-spec permutations(list(AIJ)) -> list(list(AIJ)).
+permutations(L) ->
+ case L of
+ [] ->
+ [[]];
+
+ _ ->
+ _pipe = L,
+ _pipe@5 = index_map(_pipe, fun(I_idx, I) -> _pipe@1 = L,
+ _pipe@2 = index_fold(
+ _pipe@1,
+ [],
+ fun(Acc, J, J_idx) -> case I_idx =:= J_idx of
+ true ->
+ Acc;
+
+ false ->
+ [J | Acc]
+ end end
+ ),
+ _pipe@3 = reverse(_pipe@2),
+ _pipe@4 = permutations(_pipe@3),
+ map(_pipe@4, fun(Permutation) -> [I | Permutation] end) end),
+ concat(_pipe@5)
+ end.
+
+-spec do_window(list(list(AIN)), list(AIN), integer()) -> list(list(AIN)).
+do_window(Acc, L, N) ->
+ Window = take(L, N),
+ case length(Window) =:= N of
+ true ->
+ do_window([Window | Acc], drop(L, 1), N);
+
+ false ->
+ Acc
+ end.
+
+-spec window(list(AIT), integer()) -> list(list(AIT)).
+window(L, N) ->
+ _pipe = do_window([], L, N),
+ reverse(_pipe).
+
+-spec window_by_2(list(AIX)) -> list({AIX, AIX}).
+window_by_2(L) ->
+ zip(L, drop(L, 1)).
+
+-spec drop_while(list(AJA), fun((AJA) -> boolean())) -> list(AJA).
+drop_while(List, Predicate) ->
+ case List of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ case Predicate(X) of
+ true ->
+ drop_while(Xs, Predicate);
+
+ false ->
+ [X | Xs]
+ end
+ end.
+
+-spec do_take_while(list(AJD), fun((AJD) -> boolean()), list(AJD)) -> list(AJD).
+do_take_while(List, Predicate, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [First | Rest] ->
+ case Predicate(First) of
+ true ->
+ do_take_while(Rest, Predicate, [First | Acc]);
+
+ false ->
+ reverse(Acc)
+ end
+ end.
+
+-spec take_while(list(AJH), fun((AJH) -> boolean())) -> list(AJH).
+take_while(List, Predicate) ->
+ do_take_while(List, Predicate, []).
+
+-spec do_chunk(list(AJK), fun((AJK) -> AJM), AJM, list(AJK), list(list(AJK))) -> list(list(AJK)).
+do_chunk(List, F, Previous_key, Current_chunk, Acc) ->
+ case List of
+ [First | Rest] ->
+ Key = F(First),
+ case Key =:= Previous_key of
+ false ->
+ New_acc = [reverse(Current_chunk) | Acc],
+ do_chunk(Rest, F, Key, [First], New_acc);
+
+ _ ->
+ do_chunk(Rest, F, Key, [First | Current_chunk], Acc)
+ end;
+
+ _ ->
+ reverse([reverse(Current_chunk) | Acc])
+ end.
+
+-spec chunk(list(AJS), fun((AJS) -> any())) -> list(list(AJS)).
+chunk(List, F) ->
+ case List of
+ [] ->
+ [];
+
+ [First | Rest] ->
+ do_chunk(Rest, F, F(First), [First], [])
+ end.
+
+-spec do_sized_chunk(
+ list(AJX),
+ integer(),
+ integer(),
+ list(AJX),
+ list(list(AJX))
+) -> list(list(AJX)).
+do_sized_chunk(List, Count, Left, Current_chunk, Acc) ->
+ case List of
+ [] ->
+ case Current_chunk of
+ [] ->
+ reverse(Acc);
+
+ Remaining ->
+ reverse([reverse(Remaining) | Acc])
+ end;
+
+ [First | Rest] ->
+ Chunk = [First | Current_chunk],
+ case Left > 1 of
+ false ->
+ do_sized_chunk(
+ Rest,
+ Count,
+ Count,
+ [],
+ [reverse(Chunk) | Acc]
+ );
+
+ true ->
+ do_sized_chunk(Rest, Count, Left - 1, Chunk, Acc)
+ end
+ end.
+
+-spec sized_chunk(list(AKE), integer()) -> list(list(AKE)).
+sized_chunk(List, Count) ->
+ do_sized_chunk(List, Count, Count, [], []).
+
+-spec reduce(list(AKI), fun((AKI, AKI) -> AKI)) -> {ok, AKI} | {error, nil}.
+reduce(List, Fun) ->
+ case List of
+ [] ->
+ {error, nil};
+
+ [First | Rest] ->
+ {ok, fold(Rest, First, Fun)}
+ end.
+
+-spec do_scan(list(AKM), AKO, list(AKO), fun((AKO, AKM) -> AKO)) -> list(AKO).
+do_scan(List, Accumulator, Accumulated, Fun) ->
+ case List of
+ [] ->
+ reverse(Accumulated);
+
+ [X | Xs] ->
+ Next = Fun(Accumulator, X),
+ do_scan(Xs, Next, [Next | Accumulated], Fun)
+ end.
+
+-spec scan(list(AKR), AKT, fun((AKT, AKR) -> AKT)) -> list(AKT).
+scan(List, Initial, Fun) ->
+ do_scan(List, Initial, [], Fun).
+
+-spec last(list(AKV)) -> {ok, AKV} | {error, nil}.
+last(List) ->
+ _pipe = List,
+ reduce(_pipe, fun(_, Elem) -> Elem end).
+
+-spec combinations(list(AKZ), integer()) -> list(list(AKZ)).
+combinations(Items, N) ->
+ case N of
+ 0 ->
+ [[]];
+
+ _ ->
+ case Items of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ First_combinations = begin
+ _pipe = map(
+ combinations(Xs, N - 1),
+ fun(Com) -> [X | Com] end
+ ),
+ reverse(_pipe)
+ end,
+ fold(
+ First_combinations,
+ combinations(Xs, N),
+ fun(Acc, C) -> [C | Acc] end
+ )
+ end
+ end.
+
+-spec do_combination_pairs(list(ALD)) -> list(list({ALD, ALD})).
+do_combination_pairs(Items) ->
+ case Items of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ First_combinations = map(Xs, fun(Other) -> {X, Other} end),
+ [First_combinations | do_combination_pairs(Xs)]
+ end.
+
+-spec combination_pairs(list(ALH)) -> list({ALH, ALH}).
+combination_pairs(Items) ->
+ _pipe = do_combination_pairs(Items),
+ concat(_pipe).
+
+-spec transpose(list(list(ALO))) -> list(list(ALO)).
+transpose(List_of_list) ->
+ Take_first = fun(List) -> case List of
+ [] ->
+ [];
+
+ [F] ->
+ [F];
+
+ [F@1 | _] ->
+ [F@1]
+ end end,
+ case List_of_list of
+ [] ->
+ [];
+
+ [[] | Xss] ->
+ transpose(Xss);
+
+ Rows ->
+ Firsts = begin
+ _pipe = Rows,
+ _pipe@1 = map(_pipe, Take_first),
+ concat(_pipe@1)
+ end,
+ Rest = transpose(map(Rows, fun(_capture) -> drop(_capture, 1) end)),
+ [Firsts | Rest]
+ end.
+
+-spec interleave(list(list(ALK))) -> list(ALK).
+interleave(List) ->
+ _pipe = transpose(List),
+ concat(_pipe).
+
+-spec do_shuffle_pair_unwrap(list({float(), ALT}), list(ALT)) -> list(ALT).
+do_shuffle_pair_unwrap(List, Acc) ->
+ case List of
+ [] ->
+ Acc;
+
+ [Elem_pair | Enumerable] ->
+ do_shuffle_pair_unwrap(
+ Enumerable,
+ [erlang:element(2, Elem_pair) | Acc]
+ )
+ end.
+
+-spec do_shuffle_by_pair_indexes(list({float(), ALX})) -> list({float(), ALX}).
+do_shuffle_by_pair_indexes(List_of_pairs) ->
+ sort(
+ List_of_pairs,
+ fun(A_pair, B_pair) ->
+ gleam@float:compare(
+ erlang:element(1, A_pair),
+ erlang:element(1, B_pair)
+ )
+ end
+ ).
+
+-spec shuffle(list(AMA)) -> list(AMA).
+shuffle(List) ->
+ _pipe = List,
+ _pipe@1 = fold(
+ _pipe,
+ [],
+ fun(Acc, A) -> [{gleam@float:random(+0.0, 1.0), A} | Acc] end
+ ),
+ _pipe@2 = do_shuffle_by_pair_indexes(_pipe@1),
+ do_shuffle_pair_unwrap(_pipe@2, []).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache
new file mode 100644
index 0000000..d0685b3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta
new file mode 100644
index 0000000..03b0ec9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl
new file mode 100644
index 0000000..4f90bbd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.erl
@@ -0,0 +1,76 @@
+-module(gleam@map).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
+
+-spec size(gleam@dict:dict(any(), any())) -> integer().
+size(Map) ->
+ gleam@dict:size(Map).
+
+-spec to_list(gleam@dict:dict(FDO, FDP)) -> list({FDO, FDP}).
+to_list(Map) ->
+ gleam@dict:to_list(Map).
+
+-spec from_list(list({FDR, FDS})) -> gleam@dict:dict(FDR, FDS).
+from_list(List) ->
+ gleam@dict:from_list(List).
+
+-spec has_key(gleam@dict:dict(FDW, any()), FDW) -> boolean().
+has_key(Map, Key) ->
+ gleam@dict:has_key(Map, Key).
+
+-spec new() -> gleam@dict:dict(any(), any()).
+new() ->
+ gleam@dict:new().
+
+-spec get(gleam@dict:dict(FDZ, FEA), FDZ) -> {ok, FEA} | {error, nil}.
+get(From, Get) ->
+ gleam@dict:get(From, Get).
+
+-spec insert(gleam@dict:dict(FEE, FEF), FEE, FEF) -> gleam@dict:dict(FEE, FEF).
+insert(Map, Key, Value) ->
+ gleam@dict:insert(Map, Key, Value).
+
+-spec map_values(gleam@dict:dict(FEI, FEJ), fun((FEI, FEJ) -> FEK)) -> gleam@dict:dict(FEI, FEK).
+map_values(Map, Fun) ->
+ gleam@dict:map_values(Map, Fun).
+
+-spec keys(gleam@dict:dict(FEN, any())) -> list(FEN).
+keys(Map) ->
+ gleam@dict:keys(Map).
+
+-spec values(gleam@dict:dict(any(), FEQ)) -> list(FEQ).
+values(Map) ->
+ gleam@dict:values(Map).
+
+-spec filter(gleam@dict:dict(FET, FEU), fun((FET, FEU) -> boolean())) -> gleam@dict:dict(FET, FEU).
+filter(Map, Predicate) ->
+ gleam@dict:filter(Map, Predicate).
+
+-spec take(gleam@dict:dict(FEX, FGR), list(FEX)) -> gleam@dict:dict(FEX, FGR).
+take(Map, Desired_keys) ->
+ gleam@dict:take(Map, Desired_keys).
+
+-spec merge(gleam@dict:dict(FGS, FGT), gleam@dict:dict(FGS, FGT)) -> gleam@dict:dict(FGS, FGT).
+merge(Map, New_entries) ->
+ gleam@dict:merge(Map, New_entries).
+
+-spec delete(gleam@dict:dict(FFE, FGV), FFE) -> gleam@dict:dict(FFE, FGV).
+delete(Map, Key) ->
+ gleam@dict:delete(Map, Key).
+
+-spec drop(gleam@dict:dict(FFH, FGX), list(FFH)) -> gleam@dict:dict(FFH, FGX).
+drop(Map, Disallowed_keys) ->
+ gleam@dict:drop(Map, Disallowed_keys).
+
+-spec update(
+ gleam@dict:dict(FFL, FFM),
+ FFL,
+ fun((gleam@option:option(FFM)) -> FFM)
+) -> gleam@dict:dict(FFL, FFM).
+update(Map, Key, Fun) ->
+ gleam@dict:update(Map, Key, Fun).
+
+-spec fold(gleam@dict:dict(FFR, FFS), FFQ, fun((FFQ, FFR, FFS) -> FFQ)) -> FFQ.
+fold(Map, Initial, Fun) ->
+ gleam@dict:fold(Map, Initial, Fun).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache
new file mode 100644
index 0000000..b0763c1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta
new file mode 100644
index 0000000..ff8f8df
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl
new file mode 100644
index 0000000..5c20713
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.erl
@@ -0,0 +1,147 @@
+-module(gleam@option).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([all/1, is_some/1, is_none/1, to_result/2, from_result/1, unwrap/2, lazy_unwrap/2, map/2, flatten/1, then/2, 'or'/2, lazy_or/2, values/1]).
+-export_type([option/1]).
+
+-type option(GB) :: {some, GB} | none.
+
+-spec do_all(list(option(GC)), list(GC)) -> option(list(GC)).
+do_all(List, Acc) ->
+ case List of
+ [] ->
+ {some, Acc};
+
+ [X | Rest] ->
+ Accumulate = fun(Acc@1, Item) -> case {Acc@1, Item} of
+ {{some, Values}, {some, Value}} ->
+ {some, [Value | Values]};
+
+ {_, _} ->
+ none
+ end end,
+ Accumulate(do_all(Rest, Acc), X)
+ end.
+
+-spec all(list(option(GI))) -> option(list(GI)).
+all(List) ->
+ do_all(List, []).
+
+-spec is_some(option(any())) -> boolean().
+is_some(Option) ->
+ Option /= none.
+
+-spec is_none(option(any())) -> boolean().
+is_none(Option) ->
+ Option =:= none.
+
+-spec to_result(option(GR), GU) -> {ok, GR} | {error, GU}.
+to_result(Option, E) ->
+ case Option of
+ {some, A} ->
+ {ok, A};
+
+ _ ->
+ {error, E}
+ end.
+
+-spec from_result({ok, GX} | {error, any()}) -> option(GX).
+from_result(Result) ->
+ case Result of
+ {ok, A} ->
+ {some, A};
+
+ _ ->
+ none
+ end.
+
+-spec unwrap(option(HC), HC) -> HC.
+unwrap(Option, Default) ->
+ case Option of
+ {some, X} ->
+ X;
+
+ none ->
+ Default
+ end.
+
+-spec lazy_unwrap(option(HE), fun(() -> HE)) -> HE.
+lazy_unwrap(Option, Default) ->
+ case Option of
+ {some, X} ->
+ X;
+
+ none ->
+ Default()
+ end.
+
+-spec map(option(HG), fun((HG) -> HI)) -> option(HI).
+map(Option, Fun) ->
+ case Option of
+ {some, X} ->
+ {some, Fun(X)};
+
+ none ->
+ none
+ end.
+
+-spec flatten(option(option(HK))) -> option(HK).
+flatten(Option) ->
+ case Option of
+ {some, X} ->
+ X;
+
+ none ->
+ none
+ end.
+
+-spec then(option(HO), fun((HO) -> option(HQ))) -> option(HQ).
+then(Option, Fun) ->
+ case Option of
+ {some, X} ->
+ Fun(X);
+
+ none ->
+ none
+ end.
+
+-spec 'or'(option(HT), option(HT)) -> option(HT).
+'or'(First, Second) ->
+ case First of
+ {some, _} ->
+ First;
+
+ none ->
+ Second
+ end.
+
+-spec lazy_or(option(HX), fun(() -> option(HX))) -> option(HX).
+lazy_or(First, Second) ->
+ case First of
+ {some, _} ->
+ First;
+
+ none ->
+ Second()
+ end.
+
+-spec do_values(list(option(IB)), list(IB)) -> list(IB).
+do_values(List, Acc) ->
+ case List of
+ [] ->
+ Acc;
+
+ [X | Xs] ->
+ Accumulate = fun(Acc@1, Item) -> case Item of
+ {some, Value} ->
+ [Value | Acc@1];
+
+ none ->
+ Acc@1
+ end end,
+ Accumulate(do_values(Xs, Acc), X)
+ end.
+
+-spec values(list(option(IG))) -> list(IG).
+values(Options) ->
+ do_values(Options, []).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache
new file mode 100644
index 0000000..00f75bc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta
new file mode 100644
index 0000000..c304185
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl
new file mode 100644
index 0000000..61649b9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.erl
@@ -0,0 +1,79 @@
+-module(gleam@order).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([negate/1, to_int/1, compare/2, max/2, min/2, reverse/1]).
+-export_type([order/0]).
+
+-type order() :: lt | eq | gt.
+
+-spec negate(order()) -> order().
+negate(Order) ->
+ case Order of
+ lt ->
+ gt;
+
+ eq ->
+ eq;
+
+ gt ->
+ lt
+ end.
+
+-spec to_int(order()) -> integer().
+to_int(Order) ->
+ case Order of
+ lt ->
+ -1;
+
+ eq ->
+ 0;
+
+ gt ->
+ 1
+ end.
+
+-spec compare(order(), order()) -> order().
+compare(A, B) ->
+ case {A, B} of
+ {X, Y} when X =:= Y ->
+ eq;
+
+ {lt, _} ->
+ lt;
+
+ {eq, gt} ->
+ lt;
+
+ {_, _} ->
+ gt
+ end.
+
+-spec max(order(), order()) -> order().
+max(A, B) ->
+ case {A, B} of
+ {gt, _} ->
+ gt;
+
+ {eq, lt} ->
+ eq;
+
+ {_, _} ->
+ B
+ end.
+
+-spec min(order(), order()) -> order().
+min(A, B) ->
+ case {A, B} of
+ {lt, _} ->
+ lt;
+
+ {eq, gt} ->
+ eq;
+
+ {_, _} ->
+ B
+ end.
+
+-spec reverse(fun((I, I) -> order())) -> fun((I, I) -> order()).
+reverse(Orderer) ->
+ fun(A, B) -> Orderer(B, A) end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache
new file mode 100644
index 0000000..5eb2973
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta
new file mode 100644
index 0000000..8ee3fd8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl
new file mode 100644
index 0000000..f4eff52
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.erl
@@ -0,0 +1,33 @@
+-module(gleam@pair).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([first/1, second/1, swap/1, map_first/2, map_second/2, new/2]).
+
+-spec first({FM, any()}) -> FM.
+first(Pair) ->
+ {A, _} = Pair,
+ A.
+
+-spec second({any(), FP}) -> FP.
+second(Pair) ->
+ {_, A} = Pair,
+ A.
+
+-spec swap({FQ, FR}) -> {FR, FQ}.
+swap(Pair) ->
+ {A, B} = Pair,
+ {B, A}.
+
+-spec map_first({FS, FT}, fun((FS) -> FU)) -> {FU, FT}.
+map_first(Pair, Fun) ->
+ {A, B} = Pair,
+ {Fun(A), B}.
+
+-spec map_second({FV, FW}, fun((FW) -> FX)) -> {FV, FX}.
+map_second(Pair, Fun) ->
+ {A, B} = Pair,
+ {A, Fun(B)}.
+
+-spec new(FY, FZ) -> {FY, FZ}.
+new(First, Second) ->
+ {First, Second}.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache
new file mode 100644
index 0000000..a35d701
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta
new file mode 100644
index 0000000..26ea872
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl
new file mode 100644
index 0000000..d9ec12a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.erl
@@ -0,0 +1,121 @@
+-module(gleam@queue).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, from_list/1, to_list/1, is_empty/1, length/1, push_back/2, push_front/2, pop_back/1, pop_front/1, reverse/1, is_logically_equal/3, is_equal/2]).
+-export_type([queue/1]).
+
+-opaque queue(BFE) :: {queue, list(BFE), list(BFE)}.
+
+-spec new() -> queue(any()).
+new() ->
+ {queue, [], []}.
+
+-spec from_list(list(BFH)) -> queue(BFH).
+from_list(List) ->
+ {queue, [], List}.
+
+-spec to_list(queue(BFK)) -> list(BFK).
+to_list(Queue) ->
+ _pipe = erlang:element(3, Queue),
+ gleam@list:append(_pipe, gleam@list:reverse(erlang:element(2, Queue))).
+
+-spec is_empty(queue(any())) -> boolean().
+is_empty(Queue) ->
+ (erlang:element(2, Queue) =:= []) andalso (erlang:element(3, Queue) =:= []).
+
+-spec length(queue(any())) -> integer().
+length(Queue) ->
+ gleam@list:length(erlang:element(2, Queue)) + gleam@list:length(
+ erlang:element(3, Queue)
+ ).
+
+-spec push_back(queue(BFR), BFR) -> queue(BFR).
+push_back(Queue, Item) ->
+ {queue, [Item | erlang:element(2, Queue)], erlang:element(3, Queue)}.
+
+-spec push_front(queue(BFU), BFU) -> queue(BFU).
+push_front(Queue, Item) ->
+ {queue, erlang:element(2, Queue), [Item | erlang:element(3, Queue)]}.
+
+-spec pop_back(queue(BFX)) -> {ok, {BFX, queue(BFX)}} | {error, nil}.
+pop_back(Queue) ->
+ case Queue of
+ {queue, [], []} ->
+ {error, nil};
+
+ {queue, [], Out} ->
+ pop_back({queue, gleam@list:reverse(Out), []});
+
+ {queue, [First | Rest], Out@1} ->
+ Queue@1 = {queue, Rest, Out@1},
+ {ok, {First, Queue@1}}
+ end.
+
+-spec pop_front(queue(BGC)) -> {ok, {BGC, queue(BGC)}} | {error, nil}.
+pop_front(Queue) ->
+ case Queue of
+ {queue, [], []} ->
+ {error, nil};
+
+ {queue, In, []} ->
+ pop_front({queue, [], gleam@list:reverse(In)});
+
+ {queue, In@1, [First | Rest]} ->
+ Queue@1 = {queue, In@1, Rest},
+ {ok, {First, Queue@1}}
+ end.
+
+-spec reverse(queue(BGH)) -> queue(BGH).
+reverse(Queue) ->
+ {queue, erlang:element(3, Queue), erlang:element(2, Queue)}.
+
+-spec check_equal(
+ list(BGK),
+ list(BGK),
+ list(BGK),
+ list(BGK),
+ fun((BGK, BGK) -> boolean())
+) -> boolean().
+check_equal(Xs, X_tail, Ys, Y_tail, Eq) ->
+ case {Xs, X_tail, Ys, Y_tail} of
+ {[], [], [], []} ->
+ true;
+
+ {[X | Xs@1], _, [Y | Ys@1], _} ->
+ case Eq(X, Y) of
+ false ->
+ false;
+
+ true ->
+ check_equal(Xs@1, X_tail, Ys@1, Y_tail, Eq)
+ end;
+
+ {[], [_ | _], _, _} ->
+ check_equal(gleam@list:reverse(X_tail), [], Ys, Y_tail, Eq);
+
+ {_, _, [], [_ | _]} ->
+ check_equal(Xs, X_tail, gleam@list:reverse(Y_tail), [], Eq);
+
+ {_, _, _, _} ->
+ false
+ end.
+
+-spec is_logically_equal(queue(BGP), queue(BGP), fun((BGP, BGP) -> boolean())) -> boolean().
+is_logically_equal(A, B, Element_is_equal) ->
+ check_equal(
+ erlang:element(3, A),
+ erlang:element(2, A),
+ erlang:element(3, B),
+ erlang:element(2, B),
+ Element_is_equal
+ ).
+
+-spec is_equal(queue(BGS), queue(BGS)) -> boolean().
+is_equal(A, B) ->
+ check_equal(
+ erlang:element(3, A),
+ erlang:element(2, A),
+ erlang:element(3, B),
+ erlang:element(2, B),
+ fun(A@1, B@1) -> A@1 =:= B@1 end
+ ).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache
new file mode 100644
index 0000000..de8820b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta
new file mode 100644
index 0000000..ab416af
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl
new file mode 100644
index 0000000..2d1c5fc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.erl
@@ -0,0 +1,33 @@
+-module(gleam@regex).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([compile/2, from_string/1, check/2, split/2, scan/2]).
+-export_type([regex/0, match/0, compile_error/0, options/0]).
+
+-type regex() :: any().
+
+-type match() :: {match, binary(), list(gleam@option:option(binary()))}.
+
+-type compile_error() :: {compile_error, binary(), integer()}.
+
+-type options() :: {options, boolean(), boolean()}.
+
+-spec compile(binary(), options()) -> {ok, regex()} | {error, compile_error()}.
+compile(Pattern, Options) ->
+ gleam_stdlib:compile_regex(Pattern, Options).
+
+-spec from_string(binary()) -> {ok, regex()} | {error, compile_error()}.
+from_string(Pattern) ->
+ compile(Pattern, {options, false, false}).
+
+-spec check(regex(), binary()) -> boolean().
+check(Regex, Content) ->
+ gleam_stdlib:regex_check(Regex, Content).
+
+-spec split(regex(), binary()) -> list(binary()).
+split(Regex, String) ->
+ gleam_stdlib:regex_split(Regex, String).
+
+-spec scan(regex(), binary()) -> list(match()).
+scan(Regex, String) ->
+ gleam_stdlib:regex_scan(Regex, String).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache
new file mode 100644
index 0000000..d7f9b5d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta
new file mode 100644
index 0000000..732654a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl
new file mode 100644
index 0000000..e7bdaff
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.erl
@@ -0,0 +1,201 @@
+-module(gleam@result).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([is_ok/1, is_error/1, map/2, map_error/2, flatten/1, 'try'/2, then/2, unwrap/2, lazy_unwrap/2, unwrap_error/2, unwrap_both/1, nil_error/1, 'or'/2, lazy_or/2, all/1, partition/1, replace/2, replace_error/2, values/1, try_recover/2]).
+
+-spec is_ok({ok, any()} | {error, any()}) -> boolean().
+is_ok(Result) ->
+ case Result of
+ {error, _} ->
+ false;
+
+ {ok, _} ->
+ true
+ end.
+
+-spec is_error({ok, any()} | {error, any()}) -> boolean().
+is_error(Result) ->
+ case Result of
+ {ok, _} ->
+ false;
+
+ {error, _} ->
+ true
+ end.
+
+-spec map({ok, BKA} | {error, BKB}, fun((BKA) -> BKE)) -> {ok, BKE} |
+ {error, BKB}.
+map(Result, Fun) ->
+ case Result of
+ {ok, X} ->
+ {ok, Fun(X)};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec map_error({ok, BKH} | {error, BKI}, fun((BKI) -> BKL)) -> {ok, BKH} |
+ {error, BKL}.
+map_error(Result, Fun) ->
+ case Result of
+ {ok, X} ->
+ {ok, X};
+
+ {error, Error} ->
+ {error, Fun(Error)}
+ end.
+
+-spec flatten({ok, {ok, BKO} | {error, BKP}} | {error, BKP}) -> {ok, BKO} |
+ {error, BKP}.
+flatten(Result) ->
+ case Result of
+ {ok, X} ->
+ X;
+
+ {error, Error} ->
+ {error, Error}
+ end.
+
+-spec 'try'({ok, BKW} | {error, BKX}, fun((BKW) -> {ok, BLA} | {error, BKX})) -> {ok,
+ BLA} |
+ {error, BKX}.
+'try'(Result, Fun) ->
+ case Result of
+ {ok, X} ->
+ Fun(X);
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec then({ok, BLF} | {error, BLG}, fun((BLF) -> {ok, BLJ} | {error, BLG})) -> {ok,
+ BLJ} |
+ {error, BLG}.
+then(Result, Fun) ->
+ 'try'(Result, Fun).
+
+-spec unwrap({ok, BLO} | {error, any()}, BLO) -> BLO.
+unwrap(Result, Default) ->
+ case Result of
+ {ok, V} ->
+ V;
+
+ {error, _} ->
+ Default
+ end.
+
+-spec lazy_unwrap({ok, BLS} | {error, any()}, fun(() -> BLS)) -> BLS.
+lazy_unwrap(Result, Default) ->
+ case Result of
+ {ok, V} ->
+ V;
+
+ {error, _} ->
+ Default()
+ end.
+
+-spec unwrap_error({ok, any()} | {error, BLX}, BLX) -> BLX.
+unwrap_error(Result, Default) ->
+ case Result of
+ {ok, _} ->
+ Default;
+
+ {error, E} ->
+ E
+ end.
+
+-spec unwrap_both({ok, BMA} | {error, BMA}) -> BMA.
+unwrap_both(Result) ->
+ case Result of
+ {ok, A} ->
+ A;
+
+ {error, A@1} ->
+ A@1
+ end.
+
+-spec nil_error({ok, BMD} | {error, any()}) -> {ok, BMD} | {error, nil}.
+nil_error(Result) ->
+ map_error(Result, fun(_) -> nil end).
+
+-spec 'or'({ok, BMJ} | {error, BMK}, {ok, BMJ} | {error, BMK}) -> {ok, BMJ} |
+ {error, BMK}.
+'or'(First, Second) ->
+ case First of
+ {ok, _} ->
+ First;
+
+ {error, _} ->
+ Second
+ end.
+
+-spec lazy_or({ok, BMR} | {error, BMS}, fun(() -> {ok, BMR} | {error, BMS})) -> {ok,
+ BMR} |
+ {error, BMS}.
+lazy_or(First, Second) ->
+ case First of
+ {ok, _} ->
+ First;
+
+ {error, _} ->
+ Second()
+ end.
+
+-spec all(list({ok, BMZ} | {error, BNA})) -> {ok, list(BMZ)} | {error, BNA}.
+all(Results) ->
+ gleam@list:try_map(Results, fun(X) -> X end).
+
+-spec do_partition(list({ok, BNO} | {error, BNP}), list(BNO), list(BNP)) -> {list(BNO),
+ list(BNP)}.
+do_partition(Results, Oks, Errors) ->
+ case Results of
+ [] ->
+ {Oks, Errors};
+
+ [{ok, A} | Rest] ->
+ do_partition(Rest, [A | Oks], Errors);
+
+ [{error, E} | Rest@1] ->
+ do_partition(Rest@1, Oks, [E | Errors])
+ end.
+
+-spec partition(list({ok, BNH} | {error, BNI})) -> {list(BNH), list(BNI)}.
+partition(Results) ->
+ do_partition(Results, [], []).
+
+-spec replace({ok, any()} | {error, BNX}, BOA) -> {ok, BOA} | {error, BNX}.
+replace(Result, Value) ->
+ case Result of
+ {ok, _} ->
+ {ok, Value};
+
+ {error, Error} ->
+ {error, Error}
+ end.
+
+-spec replace_error({ok, BOD} | {error, any()}, BOH) -> {ok, BOD} | {error, BOH}.
+replace_error(Result, Error) ->
+ case Result of
+ {ok, X} ->
+ {ok, X};
+
+ {error, _} ->
+ {error, Error}
+ end.
+
+-spec values(list({ok, BOK} | {error, any()})) -> list(BOK).
+values(Results) ->
+ gleam@list:filter_map(Results, fun(R) -> R end).
+
+-spec try_recover(
+ {ok, BOQ} | {error, BOR},
+ fun((BOR) -> {ok, BOQ} | {error, BOU})
+) -> {ok, BOQ} | {error, BOU}.
+try_recover(Result, Fun) ->
+ case Result of
+ {ok, Value} ->
+ {ok, Value};
+
+ {error, Error} ->
+ Fun(Error)
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache
new file mode 100644
index 0000000..43fd2a5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta
new file mode 100644
index 0000000..ee9607b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl
new file mode 100644
index 0000000..2a23b83
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.erl
@@ -0,0 +1,85 @@
+-module(gleam@set).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, size/1, insert/2, contains/2, delete/2, to_list/1, from_list/1, fold/3, filter/2, drop/2, take/2, union/2, intersection/2]).
+-export_type([set/1]).
+
+-opaque set(EYO) :: {set, gleam@dict:dict(EYO, list(nil))}.
+
+-spec new() -> set(any()).
+new() ->
+ {set, gleam@dict:new()}.
+
+-spec size(set(any())) -> integer().
+size(Set) ->
+ gleam@dict:size(erlang:element(2, Set)).
+
+-spec insert(set(EYU), EYU) -> set(EYU).
+insert(Set, Member) ->
+ {set, gleam@dict:insert(erlang:element(2, Set), Member, [])}.
+
+-spec contains(set(EYX), EYX) -> boolean().
+contains(Set, Member) ->
+ _pipe = erlang:element(2, Set),
+ _pipe@1 = gleam@dict:get(_pipe, Member),
+ gleam@result:is_ok(_pipe@1).
+
+-spec delete(set(EYZ), EYZ) -> set(EYZ).
+delete(Set, Member) ->
+ {set, gleam@dict:delete(erlang:element(2, Set), Member)}.
+
+-spec to_list(set(EZC)) -> list(EZC).
+to_list(Set) ->
+ gleam@dict:keys(erlang:element(2, Set)).
+
+-spec from_list(list(EZF)) -> set(EZF).
+from_list(Members) ->
+ Map = gleam@list:fold(
+ Members,
+ gleam@dict:new(),
+ fun(M, K) -> gleam@dict:insert(M, K, []) end
+ ),
+ {set, Map}.
+
+-spec fold(set(EZI), EZK, fun((EZK, EZI) -> EZK)) -> EZK.
+fold(Set, Initial, Reducer) ->
+ gleam@dict:fold(
+ erlang:element(2, Set),
+ Initial,
+ fun(A, K, _) -> Reducer(A, K) end
+ ).
+
+-spec filter(set(EZL), fun((EZL) -> boolean())) -> set(EZL).
+filter(Set, Predicate) ->
+ {set,
+ gleam@dict:filter(erlang:element(2, Set), fun(M, _) -> Predicate(M) end)}.
+
+-spec drop(set(EZO), list(EZO)) -> set(EZO).
+drop(Set, Disallowed) ->
+ gleam@list:fold(Disallowed, Set, fun delete/2).
+
+-spec take(set(EZS), list(EZS)) -> set(EZS).
+take(Set, Desired) ->
+ {set, gleam@dict:take(erlang:element(2, Set), Desired)}.
+
+-spec order(set(EZW), set(EZW)) -> {set(EZW), set(EZW)}.
+order(First, Second) ->
+ case gleam@dict:size(erlang:element(2, First)) > gleam@dict:size(
+ erlang:element(2, Second)
+ ) of
+ true ->
+ {First, Second};
+
+ false ->
+ {Second, First}
+ end.
+
+-spec union(set(FAB), set(FAB)) -> set(FAB).
+union(First, Second) ->
+ {Larger, Smaller} = order(First, Second),
+ fold(Smaller, Larger, fun insert/2).
+
+-spec intersection(set(FAF), set(FAF)) -> set(FAF).
+intersection(First, Second) ->
+ {Larger, Smaller} = order(First, Second),
+ take(Larger, to_list(Smaller)).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache
new file mode 100644
index 0000000..d024425
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta
new file mode 100644
index 0000000..300d752
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl
new file mode 100644
index 0000000..6cba31d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.erl
@@ -0,0 +1,352 @@
+-module(gleam@string).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([is_empty/1, length/1, reverse/1, replace/3, lowercase/1, uppercase/1, compare/2, slice/3, crop/2, drop_left/2, drop_right/2, contains/2, starts_with/2, ends_with/2, split_once/2, append/2, concat/1, repeat/2, join/2, pad_left/3, pad_right/3, trim/1, trim_left/1, trim_right/1, pop_grapheme/1, to_graphemes/1, split/2, to_utf_codepoints/1, from_utf_codepoints/1, utf_codepoint/1, utf_codepoint_to_int/1, to_option/1, first/1, last/1, capitalise/1, inspect/1, byte_size/1]).
+-export_type([direction/0]).
+
+-type direction() :: leading | trailing | both.
+
+-spec is_empty(binary()) -> boolean().
+is_empty(Str) ->
+ Str =:= <<""/utf8>>.
+
+-spec length(binary()) -> integer().
+length(String) ->
+ string:length(String).
+
+-spec do_reverse(binary()) -> binary().
+do_reverse(String) ->
+ _pipe = String,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:reverse(_pipe@1),
+ gleam@string_builder:to_string(_pipe@2).
+
+-spec reverse(binary()) -> binary().
+reverse(String) ->
+ do_reverse(String).
+
+-spec replace(binary(), binary(), binary()) -> binary().
+replace(String, Pattern, Substitute) ->
+ _pipe = String,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:replace(_pipe@1, Pattern, Substitute),
+ gleam@string_builder:to_string(_pipe@2).
+
+-spec lowercase(binary()) -> binary().
+lowercase(String) ->
+ string:lowercase(String).
+
+-spec uppercase(binary()) -> binary().
+uppercase(String) ->
+ string:uppercase(String).
+
+-spec compare(binary(), binary()) -> gleam@order:order().
+compare(A, B) ->
+ case A =:= B of
+ true ->
+ eq;
+
+ _ ->
+ case gleam_stdlib:less_than(A, B) of
+ true ->
+ lt;
+
+ _ ->
+ gt
+ end
+ end.
+
+-spec slice(binary(), integer(), integer()) -> binary().
+slice(String, Idx, Len) ->
+ case Len < 0 of
+ true ->
+ <<""/utf8>>;
+
+ false ->
+ case Idx < 0 of
+ true ->
+ Translated_idx = length(String) + Idx,
+ case Translated_idx < 0 of
+ true ->
+ <<""/utf8>>;
+
+ false ->
+ string:slice(String, Translated_idx, Len)
+ end;
+
+ false ->
+ string:slice(String, Idx, Len)
+ end
+ end.
+
+-spec crop(binary(), binary()) -> binary().
+crop(String, Substring) ->
+ gleam_stdlib:crop_string(String, Substring).
+
+-spec drop_left(binary(), integer()) -> binary().
+drop_left(String, Num_graphemes) ->
+ case Num_graphemes < 0 of
+ true ->
+ String;
+
+ false ->
+ slice(String, Num_graphemes, length(String) - Num_graphemes)
+ end.
+
+-spec drop_right(binary(), integer()) -> binary().
+drop_right(String, Num_graphemes) ->
+ case Num_graphemes < 0 of
+ true ->
+ String;
+
+ false ->
+ slice(String, 0, length(String) - Num_graphemes)
+ end.
+
+-spec contains(binary(), binary()) -> boolean().
+contains(Haystack, Needle) ->
+ gleam_stdlib:contains_string(Haystack, Needle).
+
+-spec starts_with(binary(), binary()) -> boolean().
+starts_with(String, Prefix) ->
+ gleam_stdlib:string_starts_with(String, Prefix).
+
+-spec ends_with(binary(), binary()) -> boolean().
+ends_with(String, Suffix) ->
+ gleam_stdlib:string_ends_with(String, Suffix).
+
+-spec do_split_once(binary(), binary()) -> {ok, {binary(), binary()}} |
+ {error, nil}.
+do_split_once(X, Substring) ->
+ case string:split(X, Substring) of
+ [First, Rest] ->
+ {ok, {First, Rest}};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec split_once(binary(), binary()) -> {ok, {binary(), binary()}} |
+ {error, nil}.
+split_once(X, Substring) ->
+ do_split_once(X, Substring).
+
+-spec append(binary(), binary()) -> binary().
+append(First, Second) ->
+ _pipe = First,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:append(_pipe@1, Second),
+ gleam@string_builder:to_string(_pipe@2).
+
+-spec concat(list(binary())) -> binary().
+concat(Strings) ->
+ _pipe = Strings,
+ _pipe@1 = gleam@string_builder:from_strings(_pipe),
+ gleam@string_builder:to_string(_pipe@1).
+
+-spec repeat(binary(), integer()) -> binary().
+repeat(String, Times) ->
+ _pipe = gleam@iterator:repeat(String),
+ _pipe@1 = gleam@iterator:take(_pipe, Times),
+ _pipe@2 = gleam@iterator:to_list(_pipe@1),
+ concat(_pipe@2).
+
+-spec do_join(list(binary()), binary()) -> binary().
+do_join(Strings, Separator) ->
+ _pipe = Strings,
+ _pipe@1 = gleam@list:intersperse(_pipe, Separator),
+ concat(_pipe@1).
+
+-spec join(list(binary()), binary()) -> binary().
+join(Strings, Separator) ->
+ do_join(Strings, Separator).
+
+-spec padding(integer(), binary()) -> gleam@iterator:iterator(binary()).
+padding(Size, Pad_string) ->
+ Pad_length = length(Pad_string),
+ Num_pads = case Pad_length of
+ 0 -> 0;
+ Gleam@denominator -> Size div Gleam@denominator
+ end,
+ Extra = case Pad_length of
+ 0 -> 0;
+ Gleam@denominator@1 -> Size rem Gleam@denominator@1
+ end,
+ _pipe = gleam@iterator:repeat(Pad_string),
+ _pipe@1 = gleam@iterator:take(_pipe, Num_pads),
+ gleam@iterator:append(
+ _pipe@1,
+ gleam@iterator:single(slice(Pad_string, 0, Extra))
+ ).
+
+-spec pad_left(binary(), integer(), binary()) -> binary().
+pad_left(String, Desired_length, Pad_string) ->
+ Current_length = length(String),
+ To_pad_length = Desired_length - Current_length,
+ _pipe = padding(To_pad_length, Pad_string),
+ _pipe@1 = gleam@iterator:append(_pipe, gleam@iterator:single(String)),
+ _pipe@2 = gleam@iterator:to_list(_pipe@1),
+ concat(_pipe@2).
+
+-spec pad_right(binary(), integer(), binary()) -> binary().
+pad_right(String, Desired_length, Pad_string) ->
+ Current_length = length(String),
+ To_pad_length = Desired_length - Current_length,
+ _pipe = gleam@iterator:single(String),
+ _pipe@1 = gleam@iterator:append(_pipe, padding(To_pad_length, Pad_string)),
+ _pipe@2 = gleam@iterator:to_list(_pipe@1),
+ concat(_pipe@2).
+
+-spec do_trim(binary()) -> binary().
+do_trim(String) ->
+ string:trim(String, both).
+
+-spec trim(binary()) -> binary().
+trim(String) ->
+ do_trim(String).
+
+-spec do_trim_left(binary()) -> binary().
+do_trim_left(String) ->
+ string:trim(String, leading).
+
+-spec trim_left(binary()) -> binary().
+trim_left(String) ->
+ do_trim_left(String).
+
+-spec do_trim_right(binary()) -> binary().
+do_trim_right(String) ->
+ string:trim(String, trailing).
+
+-spec trim_right(binary()) -> binary().
+trim_right(String) ->
+ do_trim_right(String).
+
+-spec pop_grapheme(binary()) -> {ok, {binary(), binary()}} | {error, nil}.
+pop_grapheme(String) ->
+ gleam_stdlib:string_pop_grapheme(String).
+
+-spec do_to_graphemes(binary(), list(binary())) -> list(binary()).
+do_to_graphemes(String, Acc) ->
+ case pop_grapheme(String) of
+ {ok, {Grapheme, Rest}} ->
+ do_to_graphemes(Rest, [Grapheme | Acc]);
+
+ _ ->
+ Acc
+ end.
+
+-spec to_graphemes(binary()) -> list(binary()).
+to_graphemes(String) ->
+ _pipe = do_to_graphemes(String, []),
+ gleam@list:reverse(_pipe).
+
+-spec split(binary(), binary()) -> list(binary()).
+split(X, Substring) ->
+ case Substring of
+ <<""/utf8>> ->
+ to_graphemes(X);
+
+ _ ->
+ _pipe = X,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:split(_pipe@1, Substring),
+ gleam@list:map(_pipe@2, fun gleam@string_builder:to_string/1)
+ end.
+
+-spec do_to_utf_codepoints_impl(bitstring(), list(integer())) -> list(integer()).
+do_to_utf_codepoints_impl(Bit_array, Acc) ->
+ case Bit_array of
+ <<First/utf8, Rest/binary>> ->
+ do_to_utf_codepoints_impl(Rest, [First | Acc]);
+
+ _ ->
+ Acc
+ end.
+
+-spec do_to_utf_codepoints(binary()) -> list(integer()).
+do_to_utf_codepoints(String) ->
+ _pipe = do_to_utf_codepoints_impl(<<String/binary>>, []),
+ gleam@list:reverse(_pipe).
+
+-spec to_utf_codepoints(binary()) -> list(integer()).
+to_utf_codepoints(String) ->
+ do_to_utf_codepoints(String).
+
+-spec from_utf_codepoints(list(integer())) -> binary().
+from_utf_codepoints(Utf_codepoints) ->
+ gleam_stdlib:utf_codepoint_list_to_string(Utf_codepoints).
+
+-spec utf_codepoint(integer()) -> {ok, integer()} | {error, nil}.
+utf_codepoint(Value) ->
+ case Value of
+ I when I > 1114111 ->
+ {error, nil};
+
+ 65534 ->
+ {error, nil};
+
+ 65535 ->
+ {error, nil};
+
+ I@1 when (I@1 >= 55296) andalso (I@1 =< 57343) ->
+ {error, nil};
+
+ I@2 ->
+ {ok, gleam_stdlib:identity(I@2)}
+ end.
+
+-spec utf_codepoint_to_int(integer()) -> integer().
+utf_codepoint_to_int(Cp) ->
+ gleam_stdlib:identity(Cp).
+
+-spec to_option(binary()) -> gleam@option:option(binary()).
+to_option(S) ->
+ case S of
+ <<""/utf8>> ->
+ none;
+
+ _ ->
+ {some, S}
+ end.
+
+-spec first(binary()) -> {ok, binary()} | {error, nil}.
+first(S) ->
+ case pop_grapheme(S) of
+ {ok, {First, _}} ->
+ {ok, First};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec last(binary()) -> {ok, binary()} | {error, nil}.
+last(S) ->
+ case pop_grapheme(S) of
+ {ok, {First, <<""/utf8>>}} ->
+ {ok, First};
+
+ {ok, {_, Rest}} ->
+ {ok, slice(Rest, -1, 1)};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec capitalise(binary()) -> binary().
+capitalise(S) ->
+ case pop_grapheme(S) of
+ {ok, {First, Rest}} ->
+ append(uppercase(First), lowercase(Rest));
+
+ _ ->
+ <<""/utf8>>
+ end.
+
+-spec inspect(any()) -> binary().
+inspect(Term) ->
+ _pipe = gleam_stdlib:inspect(Term),
+ gleam@string_builder:to_string(_pipe).
+
+-spec byte_size(binary()) -> integer().
+byte_size(String) ->
+ erlang:byte_size(String).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache
new file mode 100644
index 0000000..0d2c392
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta
new file mode 100644
index 0000000..2ef42cf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl
new file mode 100644
index 0000000..693e840
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.erl
@@ -0,0 +1,91 @@
+-module(gleam@string_builder).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([prepend_builder/2, append_builder/2, new/0, from_strings/1, concat/1, from_string/1, prepend/2, append/2, to_string/1, byte_size/1, join/2, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, is_equal/2, is_empty/1]).
+-export_type([string_builder/0, direction/0]).
+
+-type string_builder() :: any().
+
+-type direction() :: all.
+
+-spec prepend_builder(string_builder(), string_builder()) -> string_builder().
+prepend_builder(Builder, Prefix) ->
+ gleam_stdlib:iodata_append(Prefix, Builder).
+
+-spec append_builder(string_builder(), string_builder()) -> string_builder().
+append_builder(Builder, Suffix) ->
+ gleam_stdlib:iodata_append(Builder, Suffix).
+
+-spec new() -> string_builder().
+new() ->
+ gleam_stdlib:identity([]).
+
+-spec from_strings(list(binary())) -> string_builder().
+from_strings(Strings) ->
+ gleam_stdlib:identity(Strings).
+
+-spec concat(list(string_builder())) -> string_builder().
+concat(Builders) ->
+ gleam_stdlib:identity(Builders).
+
+-spec from_string(binary()) -> string_builder().
+from_string(String) ->
+ gleam_stdlib:identity(String).
+
+-spec prepend(string_builder(), binary()) -> string_builder().
+prepend(Builder, Prefix) ->
+ append_builder(from_string(Prefix), Builder).
+
+-spec append(string_builder(), binary()) -> string_builder().
+append(Builder, Second) ->
+ append_builder(Builder, from_string(Second)).
+
+-spec to_string(string_builder()) -> binary().
+to_string(Builder) ->
+ unicode:characters_to_binary(Builder).
+
+-spec byte_size(string_builder()) -> integer().
+byte_size(Builder) ->
+ erlang:iolist_size(Builder).
+
+-spec join(list(string_builder()), binary()) -> string_builder().
+join(Builders, Sep) ->
+ _pipe = Builders,
+ _pipe@1 = gleam@list:intersperse(_pipe, from_string(Sep)),
+ concat(_pipe@1).
+
+-spec lowercase(string_builder()) -> string_builder().
+lowercase(Builder) ->
+ string:lowercase(Builder).
+
+-spec uppercase(string_builder()) -> string_builder().
+uppercase(Builder) ->
+ string:uppercase(Builder).
+
+-spec reverse(string_builder()) -> string_builder().
+reverse(Builder) ->
+ string:reverse(Builder).
+
+-spec do_split(string_builder(), binary()) -> list(string_builder()).
+do_split(Iodata, Pattern) ->
+ string:split(Iodata, Pattern, all).
+
+-spec split(string_builder(), binary()) -> list(string_builder()).
+split(Iodata, Pattern) ->
+ do_split(Iodata, Pattern).
+
+-spec do_replace(string_builder(), binary(), binary()) -> string_builder().
+do_replace(Iodata, Pattern, Substitute) ->
+ string:replace(Iodata, Pattern, Substitute, all).
+
+-spec replace(string_builder(), binary(), binary()) -> string_builder().
+replace(Builder, Pattern, Substitute) ->
+ do_replace(Builder, Pattern, Substitute).
+
+-spec is_equal(string_builder(), string_builder()) -> boolean().
+is_equal(A, B) ->
+ string:equal(A, B).
+
+-spec is_empty(string_builder()) -> boolean().
+is_empty(Builder) ->
+ string:is_empty(Builder).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache
new file mode 100644
index 0000000..808bd6c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta
new file mode 100644
index 0000000..a8195fc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl
new file mode 100644
index 0000000..e7c2696
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.erl
@@ -0,0 +1,252 @@
+-module(gleam@uri).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([parse/1, parse_query/1, percent_encode/1, query_to_string/1, percent_decode/1, path_segments/1, to_string/1, origin/1, merge/2]).
+-export_type([uri/0]).
+
+-type uri() :: {uri,
+ gleam@option:option(binary()),
+ gleam@option:option(binary()),
+ gleam@option:option(binary()),
+ gleam@option:option(integer()),
+ binary(),
+ gleam@option:option(binary()),
+ gleam@option:option(binary())}.
+
+-spec parse(binary()) -> {ok, uri()} | {error, nil}.
+parse(Uri_string) ->
+ gleam_stdlib:uri_parse(Uri_string).
+
+-spec parse_query(binary()) -> {ok, list({binary(), binary()})} | {error, nil}.
+parse_query(Query) ->
+ gleam_stdlib:parse_query(Query).
+
+-spec percent_encode(binary()) -> binary().
+percent_encode(Value) ->
+ gleam_stdlib:percent_encode(Value).
+
+-spec query_pair({binary(), binary()}) -> gleam@string_builder:string_builder().
+query_pair(Pair) ->
+ gleam@string_builder:from_strings(
+ [percent_encode(erlang:element(1, Pair)),
+ <<"="/utf8>>,
+ percent_encode(erlang:element(2, Pair))]
+ ).
+
+-spec query_to_string(list({binary(), binary()})) -> binary().
+query_to_string(Query) ->
+ _pipe = Query,
+ _pipe@1 = gleam@list:map(_pipe, fun query_pair/1),
+ _pipe@2 = gleam@list:intersperse(
+ _pipe@1,
+ gleam@string_builder:from_string(<<"&"/utf8>>)
+ ),
+ _pipe@3 = gleam@string_builder:concat(_pipe@2),
+ gleam@string_builder:to_string(_pipe@3).
+
+-spec percent_decode(binary()) -> {ok, binary()} | {error, nil}.
+percent_decode(Value) ->
+ gleam_stdlib:percent_decode(Value).
+
+-spec do_remove_dot_segments(list(binary()), list(binary())) -> list(binary()).
+do_remove_dot_segments(Input, Accumulator) ->
+ case Input of
+ [] ->
+ gleam@list:reverse(Accumulator);
+
+ [Segment | Rest] ->
+ Accumulator@5 = case {Segment, Accumulator} of
+ {<<""/utf8>>, Accumulator@1} ->
+ Accumulator@1;
+
+ {<<"."/utf8>>, Accumulator@2} ->
+ Accumulator@2;
+
+ {<<".."/utf8>>, []} ->
+ [];
+
+ {<<".."/utf8>>, [_ | Accumulator@3]} ->
+ Accumulator@3;
+
+ {Segment@1, Accumulator@4} ->
+ [Segment@1 | Accumulator@4]
+ end,
+ do_remove_dot_segments(Rest, Accumulator@5)
+ end.
+
+-spec remove_dot_segments(list(binary())) -> list(binary()).
+remove_dot_segments(Input) ->
+ do_remove_dot_segments(Input, []).
+
+-spec path_segments(binary()) -> list(binary()).
+path_segments(Path) ->
+ remove_dot_segments(gleam@string:split(Path, <<"/"/utf8>>)).
+
+-spec to_string(uri()) -> binary().
+to_string(Uri) ->
+ Parts = case erlang:element(8, Uri) of
+ {some, Fragment} ->
+ [<<"#"/utf8>>, Fragment];
+
+ _ ->
+ []
+ end,
+ Parts@1 = case erlang:element(7, Uri) of
+ {some, Query} ->
+ [<<"?"/utf8>>, Query | Parts];
+
+ _ ->
+ Parts
+ end,
+ Parts@2 = [erlang:element(6, Uri) | Parts@1],
+ Parts@3 = case {erlang:element(4, Uri),
+ gleam@string:starts_with(erlang:element(6, Uri), <<"/"/utf8>>)} of
+ {{some, Host}, false} when Host =/= <<""/utf8>> ->
+ [<<"/"/utf8>> | Parts@2];
+
+ {_, _} ->
+ Parts@2
+ end,
+ Parts@4 = case {erlang:element(4, Uri), erlang:element(5, Uri)} of
+ {{some, _}, {some, Port}} ->
+ [<<":"/utf8>>, gleam@int:to_string(Port) | Parts@3];
+
+ {_, _} ->
+ Parts@3
+ end,
+ Parts@5 = case {erlang:element(2, Uri),
+ erlang:element(3, Uri),
+ erlang:element(4, Uri)} of
+ {{some, S}, {some, U}, {some, H}} ->
+ [S, <<"://"/utf8>>, U, <<"@"/utf8>>, H | Parts@4];
+
+ {{some, S@1}, none, {some, H@1}} ->
+ [S@1, <<"://"/utf8>>, H@1 | Parts@4];
+
+ {{some, S@2}, {some, _}, none} ->
+ [S@2, <<":"/utf8>> | Parts@4];
+
+ {{some, S@2}, none, none} ->
+ [S@2, <<":"/utf8>> | Parts@4];
+
+ {none, none, {some, H@2}} ->
+ [<<"//"/utf8>>, H@2 | Parts@4];
+
+ {_, _, _} ->
+ Parts@4
+ end,
+ gleam@string:concat(Parts@5).
+
+-spec origin(uri()) -> {ok, binary()} | {error, nil}.
+origin(Uri) ->
+ {uri, Scheme, _, Host, Port, _, _, _} = Uri,
+ case Scheme of
+ {some, <<"https"/utf8>>} when Port =:= {some, 443} ->
+ Origin = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none},
+ {ok, to_string(Origin)};
+
+ {some, <<"http"/utf8>>} when Port =:= {some, 80} ->
+ Origin@1 = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none},
+ {ok, to_string(Origin@1)};
+
+ {some, S} when (S =:= <<"http"/utf8>>) orelse (S =:= <<"https"/utf8>>) ->
+ Origin@2 = {uri, Scheme, none, Host, Port, <<""/utf8>>, none, none},
+ {ok, to_string(Origin@2)};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec drop_last(list(ERB)) -> list(ERB).
+drop_last(Elements) ->
+ gleam@list:take(Elements, gleam@list:length(Elements) - 1).
+
+-spec join_segments(list(binary())) -> binary().
+join_segments(Segments) ->
+ gleam@string:join([<<""/utf8>> | Segments], <<"/"/utf8>>).
+
+-spec merge(uri(), uri()) -> {ok, uri()} | {error, nil}.
+merge(Base, Relative) ->
+ case Base of
+ {uri, {some, _}, _, {some, _}, _, _, _, _} ->
+ case Relative of
+ {uri, _, _, {some, _}, _, _, _, _} ->
+ Path = begin
+ _pipe = gleam@string:split(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ ),
+ _pipe@1 = remove_dot_segments(_pipe),
+ join_segments(_pipe@1)
+ end,
+ Resolved = {uri,
+ gleam@option:'or'(
+ erlang:element(2, Relative),
+ erlang:element(2, Base)
+ ),
+ none,
+ erlang:element(4, Relative),
+ gleam@option:'or'(
+ erlang:element(5, Relative),
+ erlang:element(5, Base)
+ ),
+ Path,
+ erlang:element(7, Relative),
+ erlang:element(8, Relative)},
+ {ok, Resolved};
+
+ _ ->
+ {New_path, New_query} = case erlang:element(6, Relative) of
+ <<""/utf8>> ->
+ {erlang:element(6, Base),
+ gleam@option:'or'(
+ erlang:element(7, Relative),
+ erlang:element(7, Base)
+ )};
+
+ _ ->
+ Path_segments = case gleam@string:starts_with(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ ) of
+ true ->
+ gleam@string:split(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ );
+
+ false ->
+ _pipe@2 = gleam@string:split(
+ erlang:element(6, Base),
+ <<"/"/utf8>>
+ ),
+ _pipe@3 = drop_last(_pipe@2),
+ gleam@list:append(
+ _pipe@3,
+ gleam@string:split(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ )
+ )
+ end,
+ Path@1 = begin
+ _pipe@4 = Path_segments,
+ _pipe@5 = remove_dot_segments(_pipe@4),
+ join_segments(_pipe@5)
+ end,
+ {Path@1, erlang:element(7, Relative)}
+ end,
+ Resolved@1 = {uri,
+ erlang:element(2, Base),
+ none,
+ erlang:element(4, Base),
+ erlang:element(5, Base),
+ New_path,
+ New_query,
+ erlang:element(8, Relative)},
+ {ok, Resolved@1}
+ end;
+
+ _ ->
+ {error, nil}
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl
new file mode 100644
index 0000000..c6ea125
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.erl
@@ -0,0 +1,529 @@
+-module(gleam_stdlib).
+
+-export([
+ map_get/2, iodata_append/2, identity/1, decode_int/1, decode_bool/1,
+ decode_float/1, decode_list/1, decode_option/2, decode_field/2, parse_int/1,
+ parse_float/1, less_than/2, string_pop_grapheme/1, string_starts_with/2,
+ wrap_list/1, string_ends_with/2, string_pad/4, decode_map/1, uri_parse/1,
+ bit_array_int_to_u32/1, bit_array_int_from_u32/1, decode_result/1,
+ bit_array_slice/3, decode_bit_array/1, compile_regex/2, regex_scan/2,
+ percent_encode/1, percent_decode/1, regex_check/2, regex_split/2,
+ base_decode64/1, parse_query/1, bit_array_concat/1, size_of_tuple/1,
+ decode_tuple/1, decode_tuple2/1, decode_tuple3/1, decode_tuple4/1,
+ decode_tuple5/1, decode_tuple6/1, tuple_get/2, classify_dynamic/1, print/1,
+ println/1, print_error/1, println_error/1, inspect/1, float_to_string/1,
+ int_from_base_string/2, utf_codepoint_list_to_string/1, contains_string/2,
+ crop_string/2, base16_decode/1
+]).
+
+%% Taken from OTP's uri_string module
+-define(DEC2HEX(X),
+ if ((X) >= 0) andalso ((X) =< 9) -> (X) + $0;
+ ((X) >= 10) andalso ((X) =< 15) -> (X) + $A - 10
+ end).
+
+%% Taken from OTP's uri_string module
+-define(HEX2DEC(X),
+ if ((X) >= $0) andalso ((X) =< $9) -> (X) - $0;
+ ((X) >= $A) andalso ((X) =< $F) -> (X) - $A + 10;
+ ((X) >= $a) andalso ((X) =< $f) -> (X) - $a + 10
+ end).
+
+-define(is_lowercase_char(X), (X > 96 andalso X < 123)).
+-define(is_underscore_char(X), (X == 95)).
+-define(is_digit_char(X), (X > 47 andalso X < 58)).
+
+uppercase(X) -> X - 32.
+
+map_get(Map, Key) ->
+ case maps:find(Key, Map) of
+ error -> {error, nil};
+ OkFound -> OkFound
+ end.
+
+iodata_append(Iodata, String) -> [Iodata, String].
+
+identity(X) -> X.
+
+decode_error_msg(Expected, Data) when is_binary(Expected) ->
+ decode_error(Expected, classify_dynamic(Data)).
+decode_error(Expected, Got) when is_binary(Expected) andalso is_binary(Got) ->
+ {error, [{decode_error, Expected, Got, []}]}.
+
+classify_dynamic(nil) -> <<"Nil">>;
+classify_dynamic(X) when is_atom(X) -> <<"Atom">>;
+classify_dynamic(X) when is_binary(X) -> <<"String">>;
+classify_dynamic(X) when is_bitstring(X) -> <<"BitArray">>;
+classify_dynamic(X) when is_integer(X) -> <<"Int">>;
+classify_dynamic(X) when is_float(X) -> <<"Float">>;
+classify_dynamic(X) when is_list(X) -> <<"List">>;
+classify_dynamic(X) when is_boolean(X) -> <<"Bool">>;
+classify_dynamic(X) when is_map(X) -> <<"Map">>;
+classify_dynamic(X) when is_tuple(X) ->
+ iolist_to_binary(["Tuple of ", integer_to_list(tuple_size(X)), " elements"]);
+classify_dynamic(X) when
+ is_function(X, 0) orelse is_function(X, 1) orelse is_function(X, 2) orelse
+ is_function(X, 3) orelse is_function(X, 4) orelse is_function(X, 5) orelse
+ is_function(X, 6) orelse is_function(X, 7) orelse is_function(X, 8) orelse
+ is_function(X, 9) orelse is_function(X, 10) orelse is_function(X, 11) orelse
+ is_function(X, 12) -> <<"Function">>;
+classify_dynamic(_) -> <<"Some other type">>.
+
+decode_map(Data) when is_map(Data) -> {ok, Data};
+decode_map(Data) -> decode_error_msg(<<"Map">>, Data).
+
+decode_bit_array(Data) when is_bitstring(Data) -> {ok, Data};
+decode_bit_array(Data) -> decode_error_msg(<<"BitArray">>, Data).
+
+decode_int(Data) when is_integer(Data) -> {ok, Data};
+decode_int(Data) -> decode_error_msg(<<"Int">>, Data).
+
+decode_float(Data) when is_float(Data) -> {ok, Data};
+decode_float(Data) -> decode_error_msg(<<"Float">>, Data).
+
+decode_bool(Data) when is_boolean(Data) -> {ok, Data};
+decode_bool(Data) -> decode_error_msg(<<"Bool">>, Data).
+
+decode_list(Data) when is_list(Data) -> {ok, Data};
+decode_list(Data) -> decode_error_msg(<<"List">>, Data).
+
+decode_field(Data, Key) when is_map(Data) ->
+ case Data of
+ #{Key := Value} -> {ok, {some, Value}};
+ _ ->
+ {ok, none}
+ end;
+decode_field(Data, _) ->
+ decode_error_msg(<<"Map">>, Data).
+
+size_of_tuple(Data) -> tuple_size(Data).
+
+tuple_get(_tup, Index) when Index < 0 -> {error, nil};
+tuple_get(Data, Index) when Index >= tuple_size(Data) -> {error, nil};
+tuple_get(Data, Index) -> {ok, element(Index + 1, Data)}.
+
+decode_tuple(Data) when is_tuple(Data) -> {ok, Data};
+decode_tuple(Data) -> decode_error_msg(<<"Tuple">>, Data).
+
+decode_tuple2({_,_} = A) -> {ok, A};
+decode_tuple2([A,B]) -> {ok, {A,B}};
+decode_tuple2(Data) -> decode_error_msg(<<"Tuple of 2 elements">>, Data).
+
+decode_tuple3({_,_,_} = A) -> {ok, A};
+decode_tuple3([A,B,C]) -> {ok, {A,B,C}};
+decode_tuple3(Data) -> decode_error_msg(<<"Tuple of 3 elements">>, Data).
+
+decode_tuple4({_,_,_,_} = A) -> {ok, A};
+decode_tuple4([A,B,C,D]) -> {ok, {A,B,C,D}};
+decode_tuple4(Data) -> decode_error_msg(<<"Tuple of 4 elements">>, Data).
+
+decode_tuple5({_,_,_,_,_} = A) -> {ok, A};
+decode_tuple5([A,B,C,D,E]) -> {ok, {A,B,C,D,E}};
+decode_tuple5(Data) -> decode_error_msg(<<"Tuple of 5 elements">>, Data).
+
+decode_tuple6({_,_,_,_,_,_} = A) -> {ok, A};
+decode_tuple6([A,B,C,D,E,F]) -> {ok, {A,B,C,D,E,F}};
+decode_tuple6(Data) -> decode_error_msg(<<"Tuple of 6 elements">>, Data).
+
+decode_option(Term, F) ->
+ Decode = fun(Inner) ->
+ case F(Inner) of
+ {ok, Decoded} -> {ok, {some, Decoded}};
+ Error -> Error
+ end
+ end,
+ case Term of
+ undefined -> {ok, none};
+ error -> {ok, none};
+ null -> {ok, none};
+ none -> {ok, none};
+ nil -> {ok, none};
+ {some, Inner} -> Decode(Inner);
+ _ -> Decode(Term)
+ end.
+
+decode_result(Term) ->
+ case Term of
+ {ok, Inner} -> {ok, {ok, Inner}};
+ ok -> {ok, {ok, nil}};
+ {error, Inner} -> {ok, {error, Inner}};
+ error -> {ok, {error, nil}};
+ _ -> decode_error_msg(<<"Result">>, Term)
+ end.
+
+int_from_base_string(String, Base) ->
+ case catch binary_to_integer(String, Base) of
+ Int when is_integer(Int) -> {ok, Int};
+ _ -> {error, nil}
+ end.
+
+parse_int(String) ->
+ case catch binary_to_integer(String) of
+ Int when is_integer(Int) -> {ok, Int};
+ _ -> {error, nil}
+ end.
+
+parse_float(String) ->
+ case catch binary_to_float(String) of
+ Float when is_float(Float) -> {ok, Float};
+ _ -> {error, nil}
+ end.
+
+less_than(Lhs, Rhs) ->
+ Lhs < Rhs.
+
+string_starts_with(_, <<>>) -> true;
+string_starts_with(String, Prefix) when byte_size(Prefix) > byte_size(String) -> false;
+string_starts_with(String, Prefix) ->
+ PrefixSize = byte_size(Prefix),
+ Prefix == binary_part(String, 0, PrefixSize).
+
+string_ends_with(_, <<>>) -> true;
+string_ends_with(String, Suffix) when byte_size(Suffix) > byte_size(String) -> false;
+string_ends_with(String, Suffix) ->
+ SuffixSize = byte_size(Suffix),
+ Suffix == binary_part(String, byte_size(String) - SuffixSize, SuffixSize).
+
+string_pad(String, Length, Dir, PadString) ->
+ Chars = string:pad(String, Length, Dir, binary_to_list(PadString)),
+ case unicode:characters_to_binary(Chars) of
+ Bin when is_binary(Bin) -> Bin;
+ Error -> erlang:error({gleam_error, {string_invalid_utf8, Error}})
+ end.
+
+string_pop_grapheme(String) ->
+ case string:next_grapheme(String) of
+ [ Next | Rest ] ->
+ {ok, {unicode:characters_to_binary([Next]), unicode:characters_to_binary(Rest)}};
+ _ -> {error, nil}
+ end.
+
+bit_array_concat(BitArrays) ->
+ list_to_bitstring(BitArrays).
+
+bit_array_slice(Bin, Pos, Len) ->
+ try {ok, binary:part(Bin, Pos, Len)}
+ catch error:badarg -> {error, nil}
+ end.
+
+bit_array_int_to_u32(I) when 0 =< I, I < 4294967296 ->
+ {ok, <<I:32>>};
+bit_array_int_to_u32(_) ->
+ {error, nil}.
+
+bit_array_int_from_u32(<<I:32>>) ->
+ {ok, I};
+bit_array_int_from_u32(_) ->
+ {error, nil}.
+
+compile_regex(String, Options) ->
+ {options, Caseless, Multiline} = Options,
+ OptionsList = [
+ unicode,
+ ucp,
+ Caseless andalso caseless,
+ Multiline andalso multiline
+ ],
+ FilteredOptions = [Option || Option <- OptionsList, Option /= false],
+ case re:compile(String, FilteredOptions) of
+ {ok, MP} -> {ok, MP};
+ {error, {Str, Pos}} ->
+ {error, {compile_error, unicode:characters_to_binary(Str), Pos}}
+ end.
+
+regex_check(Regex, String) ->
+ re:run(String, Regex) /= nomatch.
+
+regex_split(Regex, String) ->
+ re:split(String, Regex).
+
+regex_submatches(_, {-1, 0}) -> none;
+regex_submatches(String, {Start, Length}) ->
+ BinarySlice = binary:part(String, {Start, Length}),
+ case string:is_empty(binary_to_list(BinarySlice)) of
+ true -> none;
+ false -> {some, BinarySlice}
+ end.
+
+regex_matches(String, [{Start, Length} | Submatches]) ->
+ Submatches1 = lists:map(fun(X) -> regex_submatches(String, X) end, Submatches),
+ {match, binary:part(String, Start, Length), Submatches1}.
+
+regex_scan(Regex, String) ->
+ case re:run(String, Regex, [global]) of
+ {match, Captured} -> lists:map(fun(X) -> regex_matches(String, X) end, Captured);
+ nomatch -> []
+ end.
+
+base_decode64(S) ->
+ try {ok, base64:decode(S)}
+ catch error:_ -> {error, nil}
+ end.
+
+wrap_list(X) when is_list(X) -> X;
+wrap_list(X) -> [X].
+
+parse_query(Query) ->
+ case uri_string:dissect_query(Query) of
+ {error, _, _} -> {error, nil};
+ Pairs ->
+ Pairs1 = lists:map(fun
+ ({K, true}) -> {K, <<"">>};
+ (Pair) -> Pair
+ end, Pairs),
+ {ok, Pairs1}
+ end.
+
+percent_encode(B) -> percent_encode(B, <<>>).
+percent_encode(<<>>, Acc) ->
+ Acc;
+percent_encode(<<H,T/binary>>, Acc) ->
+ case percent_ok(H) of
+ true ->
+ percent_encode(T, <<Acc/binary,H>>);
+ false ->
+ <<A:4,B:4>> = <<H>>,
+ percent_encode(T, <<Acc/binary,$%,(?DEC2HEX(A)),(?DEC2HEX(B))>>)
+ end.
+
+percent_decode(Cs) -> percent_decode(Cs, <<>>).
+percent_decode(<<$%, C0, C1, Cs/binary>>, Acc) ->
+ case is_hex_digit(C0) andalso is_hex_digit(C1) of
+ true ->
+ B = ?HEX2DEC(C0)*16+?HEX2DEC(C1),
+ percent_decode(Cs, <<Acc/binary, B>>);
+ false ->
+ {error, nil}
+ end;
+percent_decode(<<C,Cs/binary>>, Acc) ->
+ percent_decode(Cs, <<Acc/binary, C>>);
+percent_decode(<<>>, Acc) ->
+ check_utf8(Acc).
+
+percent_ok($!) -> true;
+percent_ok($$) -> true;
+percent_ok($') -> true;
+percent_ok($() -> true;
+percent_ok($)) -> true;
+percent_ok($*) -> true;
+percent_ok($+) -> true;
+percent_ok($-) -> true;
+percent_ok($.) -> true;
+percent_ok($_) -> true;
+percent_ok($~) -> true;
+percent_ok(C) when $0 =< C, C =< $9 -> true;
+percent_ok(C) when $A =< C, C =< $Z -> true;
+percent_ok(C) when $a =< C, C =< $z -> true;
+percent_ok(_) -> false.
+
+is_hex_digit(C) ->
+ ($0 =< C andalso C =< $9) orelse ($a =< C andalso C =< $f) orelse ($A =< C andalso C =< $F).
+
+check_utf8(Cs) ->
+ case unicode:characters_to_list(Cs) of
+ {incomplete, _, _} -> {error, nil};
+ {error, _, _} -> {error, nil};
+ _ -> {ok, Cs}
+ end.
+
+uri_parse(String) ->
+ case uri_string:parse(String) of
+ {error, _, _} -> {error, nil};
+ Uri ->
+ {ok, {uri,
+ maps_get_optional(Uri, scheme),
+ maps_get_optional(Uri, userinfo),
+ maps_get_optional(Uri, host),
+ maps_get_optional(Uri, port),
+ maps_get_or(Uri, path, <<>>),
+ maps_get_optional(Uri, query),
+ maps_get_optional(Uri, fragment)
+ }}
+ end.
+
+maps_get_optional(Map, Key) ->
+ try {some, maps:get(Key, Map)}
+ catch _:_ -> none
+ end.
+
+maps_get_or(Map, Key, Default) ->
+ try maps:get(Key, Map)
+ catch _:_ -> Default
+ end.
+
+print(String) ->
+ io:put_chars(String),
+ nil.
+
+println(String) ->
+ io:put_chars([String, $\n]),
+ nil.
+
+print_error(String) ->
+ io:put_chars(standard_error, String),
+ nil.
+
+println_error(String) ->
+ io:put_chars(standard_error, [String, $\n]),
+ nil.
+
+inspect(true) ->
+ "True";
+inspect(false) ->
+ "False";
+inspect(nil) ->
+ "Nil";
+inspect(Data) when is_map(Data) ->
+ Fields = [
+ [<<"#(">>, inspect(Key), <<", ">>, inspect(Value), <<")">>]
+ || {Key, Value} <- maps:to_list(Data)
+ ],
+ ["dict.from_list([", lists:join(", ", Fields), "])"];
+inspect(Atom) when is_atom(Atom) ->
+ Binary = erlang:atom_to_binary(Atom),
+ case inspect_maybe_gleam_atom(Binary, none, <<>>) of
+ {ok, Inspected} -> Inspected;
+ {error, _} -> ["atom.create_from_string(\"", Binary, "\")"]
+ end;
+inspect(Any) when is_integer(Any) ->
+ erlang:integer_to_list(Any);
+inspect(Any) when is_float(Any) ->
+ io_lib_format:fwrite_g(Any);
+inspect(Binary) when is_binary(Binary) ->
+ case inspect_maybe_utf8_string(Binary, <<>>) of
+ {ok, InspectedUtf8String} -> InspectedUtf8String;
+ {error, not_a_utf8_string} ->
+ Segments = [erlang:integer_to_list(X) || <<X>> <= Binary],
+ ["<<", lists:join(", ", Segments), ">>"]
+ end;
+inspect(Bits) when is_bitstring(Bits) ->
+ inspect_bit_array(Bits);
+inspect(List) when is_list(List) ->
+ case inspect_list(List) of
+ {proper, Elements} -> ["[", Elements, "]"];
+ {improper, Elements} -> ["//erl([", Elements, "])"]
+ end;
+inspect(Any) when is_tuple(Any) % Record constructors
+ andalso is_atom(element(1, Any))
+ andalso element(1, Any) =/= false
+ andalso element(1, Any) =/= true
+ andalso element(1, Any) =/= nil
+->
+ [Atom | ArgsList] = erlang:tuple_to_list(Any),
+ Args = lists:join(<<", ">>,
+ lists:map(fun inspect/1, ArgsList)
+ ),
+ [inspect(Atom), "(", Args, ")"];
+inspect(Tuple) when is_tuple(Tuple) ->
+ Elements = lists:map(fun inspect/1, erlang:tuple_to_list(Tuple)),
+ ["#(", lists:join(", ", Elements), ")"];
+inspect(Any) when is_function(Any) ->
+ {arity, Arity} = erlang:fun_info(Any, arity),
+ ArgsAsciiCodes = lists:seq($a, $a + Arity - 1),
+ Args = lists:join(<<", ">>,
+ lists:map(fun(Arg) -> <<Arg>> end, ArgsAsciiCodes)
+ ),
+ ["//fn(", Args, ") { ... }"];
+inspect(Any) ->
+ ["//erl(", io_lib:format("~p", [Any]), ")"].
+
+
+inspect_maybe_gleam_atom(<<>>, none, _) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<First, _Rest/binary>>, none, _) when ?is_digit_char(First) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, none, _) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<"_">>, _PrevChar, _Acc) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, $_, _Acc) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<First, _Rest/binary>>, _PrevChar, _Acc)
+ when not (?is_lowercase_char(First) orelse ?is_underscore_char(First) orelse ?is_digit_char(First)) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<First, Rest/binary>>, none, Acc) ->
+ inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>);
+inspect_maybe_gleam_atom(<<"_", Rest/binary>>, _PrevChar, Acc) ->
+ inspect_maybe_gleam_atom(Rest, $_, Acc);
+inspect_maybe_gleam_atom(<<First, Rest/binary>>, $_, Acc) ->
+ inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>);
+inspect_maybe_gleam_atom(<<First, Rest/binary>>, _PrevChar, Acc) ->
+ inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, First>>);
+inspect_maybe_gleam_atom(<<>>, _PrevChar, Acc) ->
+ {ok, Acc};
+inspect_maybe_gleam_atom(A, B, C) ->
+ erlang:display({A, B, C}),
+ throw({gleam_error, A, B, C}).
+
+inspect_list([]) ->
+ {proper, []};
+inspect_list([First]) ->
+ {proper, [inspect(First)]};
+inspect_list([First | Rest]) when is_list(Rest) ->
+ {Kind, Inspected} = inspect_list(Rest),
+ {Kind, [inspect(First), <<", ">> | Inspected]};
+inspect_list([First | ImproperTail]) ->
+ {improper, [inspect(First), <<" | ">>, inspect(ImproperTail)]}.
+
+inspect_bit_array(Bits) ->
+ Text = inspect_bit_array(Bits, <<"<<">>),
+ <<Text/binary, ">>">>.
+
+inspect_bit_array(<<>>, Acc) ->
+ Acc;
+inspect_bit_array(<<X, Rest/bitstring>>, Acc) ->
+ inspect_bit_array(Rest, append_segment(Acc, erlang:integer_to_binary(X)));
+inspect_bit_array(Rest, Acc) ->
+ Size = bit_size(Rest),
+ <<X:Size>> = Rest,
+ X1 = erlang:integer_to_binary(X),
+ Size1 = erlang:integer_to_binary(Size),
+ Segment = <<X1/binary, ":size(", Size1/binary, ")">>,
+ inspect_bit_array(<<>>, append_segment(Acc, Segment)).
+
+append_segment(<<"<<">>, Segment) ->
+ <<"<<", Segment/binary>>;
+append_segment(Acc, Segment) ->
+ <<Acc/binary, ", ", Segment/binary>>.
+
+
+inspect_maybe_utf8_string(Binary, Acc) ->
+ case Binary of
+ <<>> -> {ok, <<$", Acc/binary, $">>};
+ <<First/utf8, Rest/binary>> ->
+ Escaped = case First of
+ $" -> <<$\\, $">>;
+ $\\ -> <<$\\, $\\>>;
+ $\r -> <<$\\, $r>>;
+ $\n -> <<$\\, $n>>;
+ $\t -> <<$\\, $t>>;
+ Other -> <<Other/utf8>>
+ end,
+ inspect_maybe_utf8_string(Rest, <<Acc/binary, Escaped/binary>>);
+ _ -> {error, not_a_utf8_string}
+ end.
+
+float_to_string(Float) when is_float(Float) ->
+ erlang:iolist_to_binary(io_lib_format:fwrite_g(Float)).
+
+utf_codepoint_list_to_string(List) ->
+ case unicode:characters_to_binary(List) of
+ {error, _} -> erlang:error({gleam_error, {string_invalid_utf8, List}});
+ Binary -> Binary
+ end.
+
+crop_string(String, Prefix) ->
+ case string:find(String, Prefix) of
+ nomatch -> String;
+ New -> New
+ end.
+
+contains_string(String, Substring) ->
+ is_bitstring(string:find(String, Substring)).
+
+base16_decode(String) ->
+ try
+ {ok, binary:decode_hex(String)}
+ catch
+ _:_ -> {error, nil}
+ end.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs
new file mode 100644
index 0000000..a908b23
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/_gleam_artefacts/gleam_stdlib.mjs
@@ -0,0 +1,875 @@
+import {
+ BitArray,
+ Error,
+ List,
+ Ok,
+ Result,
+ UtfCodepoint,
+ stringBits,
+ toBitArray,
+ NonEmpty,
+ CustomType,
+} from "./gleam.mjs";
+import {
+ CompileError as RegexCompileError,
+ Match as RegexMatch,
+} from "./gleam/regex.mjs";
+import { DecodeError } from "./gleam/dynamic.mjs";
+import { Some, None } from "./gleam/option.mjs";
+import Dict from "./dict.mjs";
+
+const Nil = undefined;
+const NOT_FOUND = {};
+
+export function identity(x) {
+ return x;
+}
+
+export function parse_int(value) {
+ if (/^[-+]?(\d+)$/.test(value)) {
+ return new Ok(parseInt(value));
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function parse_float(value) {
+ if (/^[-+]?(\d+)\.(\d+)$/.test(value)) {
+ return new Ok(parseFloat(value));
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function to_string(term) {
+ return term.toString();
+}
+
+export function float_to_string(float) {
+ const string = float.toString();
+ if (string.indexOf(".") >= 0) {
+ return string;
+ } else {
+ return string + ".0";
+ }
+}
+
+export function int_to_base_string(int, base) {
+ return int.toString(base).toUpperCase();
+}
+
+const int_base_patterns = {
+ 2: /[^0-1]/,
+ 3: /[^0-2]/,
+ 4: /[^0-3]/,
+ 5: /[^0-4]/,
+ 6: /[^0-5]/,
+ 7: /[^0-6]/,
+ 8: /[^0-7]/,
+ 9: /[^0-8]/,
+ 10: /[^0-9]/,
+ 11: /[^0-9a]/,
+ 12: /[^0-9a-b]/,
+ 13: /[^0-9a-c]/,
+ 14: /[^0-9a-d]/,
+ 15: /[^0-9a-e]/,
+ 16: /[^0-9a-f]/,
+ 17: /[^0-9a-g]/,
+ 18: /[^0-9a-h]/,
+ 19: /[^0-9a-i]/,
+ 20: /[^0-9a-j]/,
+ 21: /[^0-9a-k]/,
+ 22: /[^0-9a-l]/,
+ 23: /[^0-9a-m]/,
+ 24: /[^0-9a-n]/,
+ 25: /[^0-9a-o]/,
+ 26: /[^0-9a-p]/,
+ 27: /[^0-9a-q]/,
+ 28: /[^0-9a-r]/,
+ 29: /[^0-9a-s]/,
+ 30: /[^0-9a-t]/,
+ 31: /[^0-9a-u]/,
+ 32: /[^0-9a-v]/,
+ 33: /[^0-9a-w]/,
+ 34: /[^0-9a-x]/,
+ 35: /[^0-9a-y]/,
+ 36: /[^0-9a-z]/,
+};
+
+export function int_from_base_string(string, base) {
+ if (int_base_patterns[base].test(string.replace(/^-/, "").toLowerCase())) {
+ return new Error(Nil);
+ }
+
+ const result = parseInt(string, base);
+
+ if (isNaN(result)) {
+ return new Error(Nil);
+ }
+
+ return new Ok(result);
+}
+
+export function string_replace(string, target, substitute) {
+ if (typeof string.replaceAll !== "undefined") {
+ return string.replaceAll(target, substitute);
+ }
+ // Fallback for older Node.js versions:
+ // 1. <https://stackoverflow.com/a/1144788>
+ // 2. <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping>
+ // TODO: This fallback could be remove once Node.js 14 is EOL
+ // aka <https://nodejs.org/en/about/releases/> on or after 2024-04-30
+ return string.replace(
+ // $& means the whole matched string
+ new RegExp(target.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"),
+ substitute
+ );
+}
+
+export function string_reverse(string) {
+ return [...string].reverse().join("");
+}
+
+export function string_length(string) {
+ if (string === "") {
+ return 0;
+ }
+ const iterator = graphemes_iterator(string);
+ if (iterator) {
+ let i = 0;
+ for (const _ of iterator) {
+ i++;
+ }
+ return i;
+ } else {
+ return string.match(/./gsu).length;
+ }
+}
+
+export function graphemes(string) {
+ return List.fromArray(
+ Array.from(graphemes_iterator(string)).map((item) => item.segment)
+ );
+}
+
+function graphemes_iterator(string) {
+ if (Intl && Intl.Segmenter) {
+ return new Intl.Segmenter().segment(string)[Symbol.iterator]();
+ }
+}
+
+export function pop_grapheme(string) {
+ let first;
+ const iterator = graphemes_iterator(string);
+ if (iterator) {
+ first = iterator.next().value?.segment;
+ } else {
+ first = string.match(/./su)?.[0];
+ }
+ if (first) {
+ return new Ok([first, string.slice(first.length)]);
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function lowercase(string) {
+ return string.toLowerCase();
+}
+
+export function uppercase(string) {
+ return string.toUpperCase();
+}
+
+export function less_than(a, b) {
+ return a < b;
+}
+
+export function add(a, b) {
+ return a + b;
+}
+
+export function equal(a, b) {
+ return a === b;
+}
+
+export function split(xs, pattern) {
+ return List.fromArray(xs.split(pattern));
+}
+
+export function join(xs, separator) {
+ const iterator = xs[Symbol.iterator]();
+ let result = iterator.next().value || "";
+ let current = iterator.next();
+ while (!current.done) {
+ result = result + separator + current.value;
+ current = iterator.next();
+ }
+ return result;
+}
+
+export function concat(xs) {
+ let result = "";
+ for (const x of xs) {
+ result = result + x;
+ }
+ return result;
+}
+
+export function length(data) {
+ return data.length;
+}
+
+export function crop_string(string, substring) {
+ return string.substring(string.indexOf(substring));
+}
+
+export function contains_string(haystack, needle) {
+ return haystack.indexOf(needle) >= 0;
+}
+
+export function starts_with(haystack, needle) {
+ return haystack.startsWith(needle);
+}
+
+export function ends_with(haystack, needle) {
+ return haystack.endsWith(needle);
+}
+
+export function split_once(haystack, needle) {
+ const index = haystack.indexOf(needle);
+ if (index >= 0) {
+ const before = haystack.slice(0, index);
+ const after = haystack.slice(index + needle.length);
+ return new Ok([before, after]);
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function trim(string) {
+ return string.trim();
+}
+
+export function trim_left(string) {
+ return string.trimLeft();
+}
+
+export function trim_right(string) {
+ return string.trimRight();
+}
+
+export function bit_array_from_string(string) {
+ return toBitArray([stringBits(string)]);
+}
+
+export function bit_array_concat(bit_arrays) {
+ return toBitArray(bit_arrays.toArray().map((b) => b.buffer));
+}
+
+export function console_log(term) {
+ console.log(term);
+}
+
+export function console_error(term) {
+ console.error(term);
+}
+
+export function crash(message) {
+ throw new globalThis.Error(message);
+}
+
+export function bit_array_to_string(bit_array) {
+ try {
+ const decoder = new TextDecoder("utf-8", { fatal: true });
+ return new Ok(decoder.decode(bit_array.buffer));
+ } catch (_error) {
+ return new Error(Nil);
+ }
+}
+
+export function print(string) {
+ if (typeof process === "object") {
+ process.stdout.write(string); // We can write without a trailing newline
+ } else if (typeof Deno === "object") {
+ Deno.stdout.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline
+ } else {
+ console.log(string); // We're in a browser. Newlines are mandated
+ }
+}
+
+export function print_error(string) {
+ if (typeof process === "object" && process.stderr?.write) {
+ process.stderr.write(string); // We can write without a trailing newline
+ } else if (typeof Deno === "object") {
+ Deno.stderr.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline
+ } else {
+ console.error(string); // We're in a browser. Newlines are mandated
+ }
+}
+
+export function print_debug(string) {
+ if (typeof process === "object" && process.stderr?.write) {
+ process.stderr.write(string + "\n"); // If we're in Node.js, use `stderr`
+ } else if (typeof Deno === "object") {
+ Deno.stderr.writeSync(new TextEncoder().encode(string + "\n")); // If we're in Deno, use `stderr`
+ } else {
+ console.log(string); // Otherwise, use `console.log` (so that it doesn't look like an error)
+ }
+}
+
+export function ceiling(float) {
+ return Math.ceil(float);
+}
+
+export function floor(float) {
+ return Math.floor(float);
+}
+
+export function round(float) {
+ return Math.round(float);
+}
+
+export function truncate(float) {
+ return Math.trunc(float);
+}
+
+export function power(base, exponent) {
+ // It is checked in Gleam that:
+ // - The base is non-negative and that the exponent is not fractional.
+ // - The base is non-zero and the exponent is non-negative (otherwise
+ // the result will essentially be division by zero).
+ // It can thus be assumed that valid input is passed to the Math.pow
+ // function and a NaN or Infinity value will not be produced.
+ return Math.pow(base, exponent);
+}
+
+export function random_uniform() {
+ const random_uniform_result = Math.random();
+ // With round-to-nearest-even behavior, the ranges claimed for the functions below
+ // (excluding the one for Math.random() itself) aren't exact.
+ // If extremely large bounds are chosen (2^53 or higher),
+ // it's possible in extremely rare cases to calculate the usually-excluded upper bound.
+ // Note that as numbers in JavaScript are IEEE 754 floating point numbers
+ // See: <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random>
+ // Because of this, we just loop 'until' we get a valid result where 0.0 <= x < 1.0:
+ if (random_uniform_result === 1.0) {
+ return random_uniform();
+ }
+ return random_uniform_result;
+}
+
+export function bit_array_slice(bits, position, length) {
+ const start = Math.min(position, position + length);
+ const end = Math.max(position, position + length);
+ if (start < 0 || end > bits.length) return new Error(Nil);
+ const buffer = new Uint8Array(bits.buffer.buffer, start, Math.abs(length));
+ return new Ok(new BitArray(buffer));
+}
+
+export function codepoint(int) {
+ return new UtfCodepoint(int);
+}
+
+export function string_to_codepoint_integer_list(string) {
+ return List.fromArray(Array.from(string).map((item) => item.codePointAt(0)));
+}
+
+export function utf_codepoint_list_to_string(utf_codepoint_integer_list) {
+ return utf_codepoint_integer_list
+ .toArray()
+ .map((x) => String.fromCodePoint(x.value))
+ .join("");
+}
+
+export function utf_codepoint_to_int(utf_codepoint) {
+ return utf_codepoint.value;
+}
+
+export function regex_check(regex, string) {
+ regex.lastIndex = 0;
+ return regex.test(string);
+}
+
+export function compile_regex(pattern, options) {
+ try {
+ let flags = "gu";
+ if (options.case_insensitive) flags += "i";
+ if (options.multi_line) flags += "m";
+ return new Ok(new RegExp(pattern, flags));
+ } catch (error) {
+ const number = (error.columnNumber || 0) | 0;
+ return new Error(new RegexCompileError(error.message, number));
+ }
+}
+
+export function regex_scan(regex, string) {
+ const matches = Array.from(string.matchAll(regex)).map((match) => {
+ const content = match[0];
+ const submatches = [];
+ for (let n = match.length - 1; n > 0; n--) {
+ if (match[n]) {
+ submatches[n - 1] = new Some(match[n]);
+ continue;
+ }
+ if (submatches.length > 0) {
+ submatches[n - 1] = new None();
+ }
+ }
+ return new RegexMatch(content, List.fromArray(submatches));
+ });
+ return List.fromArray(matches);
+}
+
+export function new_map() {
+ return Dict.new();
+}
+
+export function map_size(map) {
+ return map.size;
+}
+
+export function map_to_list(map) {
+ return List.fromArray(map.entries());
+}
+
+export function map_remove(key, map) {
+ return map.delete(key);
+}
+
+export function map_get(map, key) {
+ const value = map.get(key, NOT_FOUND);
+ if (value === NOT_FOUND) {
+ return new Error(Nil);
+ }
+ return new Ok(value);
+}
+
+export function map_insert(key, value, map) {
+ return map.set(key, value);
+}
+
+function unsafe_percent_decode(string) {
+ return decodeURIComponent((string || "").replace("+", " "));
+}
+
+export function percent_decode(string) {
+ try {
+ return new Ok(unsafe_percent_decode(string));
+ } catch (_error) {
+ return new Error(Nil);
+ }
+}
+
+export function percent_encode(string) {
+ return encodeURIComponent(string);
+}
+
+export function parse_query(query) {
+ try {
+ const pairs = [];
+ for (const section of query.split("&")) {
+ const [key, value] = section.split("=");
+ if (!key) continue;
+ pairs.push([unsafe_percent_decode(key), unsafe_percent_decode(value)]);
+ }
+ return new Ok(List.fromArray(pairs));
+ } catch (_error) {
+ return new Error(Nil);
+ }
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+export function encode64(bit_array) {
+ const aBytes = bit_array.buffer;
+ let nMod3 = 2;
+ let sB64Enc = "";
+
+ for (let nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
+ nMod3 = nIdx % 3;
+ if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) {
+ sB64Enc += "\r\n";
+ }
+ nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24);
+ if (nMod3 === 2 || aBytes.length - nIdx === 1) {
+ sB64Enc += String.fromCharCode(
+ uint6ToB64((nUint24 >>> 18) & 63),
+ uint6ToB64((nUint24 >>> 12) & 63),
+ uint6ToB64((nUint24 >>> 6) & 63),
+ uint6ToB64(nUint24 & 63)
+ );
+ nUint24 = 0;
+ }
+ }
+
+ return (
+ sB64Enc.substr(0, sB64Enc.length - 2 + nMod3) +
+ (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==")
+ );
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+function uint6ToB64(nUint6) {
+ return nUint6 < 26
+ ? nUint6 + 65
+ : nUint6 < 52
+ ? nUint6 + 71
+ : nUint6 < 62
+ ? nUint6 - 4
+ : nUint6 === 62
+ ? 43
+ : nUint6 === 63
+ ? 47
+ : 65;
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+function b64ToUint6(nChr) {
+ return nChr > 64 && nChr < 91
+ ? nChr - 65
+ : nChr > 96 && nChr < 123
+ ? nChr - 71
+ : nChr > 47 && nChr < 58
+ ? nChr + 4
+ : nChr === 43
+ ? 62
+ : nChr === 47
+ ? 63
+ : 0;
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+export function decode64(sBase64) {
+ if (sBase64.match(/[^A-Za-z0-9\+\/=]/g)) return new Error(Nil);
+ const sB64Enc = sBase64.replace(/=/g, "");
+ const nInLen = sB64Enc.length;
+ const nOutLen = (nInLen * 3 + 1) >> 2;
+ const taBytes = new Uint8Array(nOutLen);
+
+ for (
+ let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0;
+ nInIdx < nInLen;
+ nInIdx++
+ ) {
+ nMod4 = nInIdx & 3;
+ nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4));
+ if (nMod4 === 3 || nInLen - nInIdx === 1) {
+ for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
+ taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;
+ }
+ nUint24 = 0;
+ }
+ }
+
+ return new Ok(new BitArray(taBytes));
+}
+
+export function classify_dynamic(data) {
+ if (typeof data === "string") {
+ return "String";
+ } else if (data instanceof Result) {
+ return "Result";
+ } else if (data instanceof List) {
+ return "List";
+ } else if (data instanceof BitArray) {
+ return "BitArray";
+ } else if (data instanceof Dict) {
+ return "Map";
+ } else if (Number.isInteger(data)) {
+ return "Int";
+ } else if (Array.isArray(data)) {
+ return `Tuple of ${data.length} elements`;
+ } else if (typeof data === "number") {
+ return "Float";
+ } else if (data === null) {
+ return "Null";
+ } else if (data === undefined) {
+ return "Nil";
+ } else {
+ const type = typeof data;
+ return type.charAt(0).toUpperCase() + type.slice(1);
+ }
+}
+
+function decoder_error(expected, got) {
+ return decoder_error_no_classify(expected, classify_dynamic(got));
+}
+
+function decoder_error_no_classify(expected, got) {
+ return new Error(
+ List.fromArray([new DecodeError(expected, got, List.fromArray([]))])
+ );
+}
+
+export function decode_string(data) {
+ return typeof data === "string"
+ ? new Ok(data)
+ : decoder_error("String", data);
+}
+
+export function decode_int(data) {
+ return Number.isInteger(data) ? new Ok(data) : decoder_error("Int", data);
+}
+
+export function decode_float(data) {
+ return typeof data === "number" ? new Ok(data) : decoder_error("Float", data);
+}
+
+export function decode_bool(data) {
+ return typeof data === "boolean" ? new Ok(data) : decoder_error("Bool", data);
+}
+
+export function decode_bit_array(data) {
+ if (data instanceof BitArray) {
+ return new Ok(data);
+ }
+ if (data instanceof Uint8Array) {
+ return new Ok(new BitArray(data));
+ }
+ return decoder_error("BitArray", data);
+}
+
+export function decode_tuple(data) {
+ return Array.isArray(data) ? new Ok(data) : decoder_error("Tuple", data);
+}
+
+export function decode_tuple2(data) {
+ return decode_tupleN(data, 2);
+}
+
+export function decode_tuple3(data) {
+ return decode_tupleN(data, 3);
+}
+
+export function decode_tuple4(data) {
+ return decode_tupleN(data, 4);
+}
+
+export function decode_tuple5(data) {
+ return decode_tupleN(data, 5);
+}
+
+export function decode_tuple6(data) {
+ return decode_tupleN(data, 6);
+}
+
+function decode_tupleN(data, n) {
+ if (Array.isArray(data) && data.length == n) {
+ return new Ok(data);
+ }
+
+ const list = decode_exact_length_list(data, n);
+ if (list) return new Ok(list);
+
+ return decoder_error(`Tuple of ${n} elements`, data);
+}
+
+function decode_exact_length_list(data, n) {
+ if (!(data instanceof List)) return;
+
+ const elements = [];
+ let current = data;
+
+ for (let i = 0; i < n; i++) {
+ if (!(current instanceof NonEmpty)) break;
+ elements.push(current.head);
+ current = current.tail;
+ }
+
+ if (elements.length === n && !(current instanceof NonEmpty)) return elements;
+}
+
+export function tuple_get(data, index) {
+ return index >= 0 && data.length > index
+ ? new Ok(data[index])
+ : new Error(Nil);
+}
+
+export function decode_list(data) {
+ if (Array.isArray(data)) {
+ return new Ok(List.fromArray(data));
+ }
+ return data instanceof List ? new Ok(data) : decoder_error("List", data);
+}
+
+export function decode_result(data) {
+ return data instanceof Result ? new Ok(data) : decoder_error("Result", data);
+}
+
+export function decode_map(data) {
+ if (data instanceof Dict) {
+ return new Ok(Dict.fromMap(data));
+ }
+ if (data == null) {
+ return decoder_error("Map", data);
+ }
+ if (typeof data !== "object") {
+ return decoder_error("Map", data);
+ }
+ const proto = Object.getPrototypeOf(data);
+ if (proto === Object.prototype || proto === null) {
+ return new Ok(Dict.fromObject(data));
+ }
+ return decoder_error("Map", data);
+}
+
+export function decode_option(data, decoder) {
+ if (data === null || data === undefined || data instanceof None)
+ return new Ok(new None());
+ if (data instanceof Some) data = data[0];
+ const result = decoder(data);
+ if (result.isOk()) {
+ return new Ok(new Some(result[0]));
+ } else {
+ return result;
+ }
+}
+
+export function decode_field(value, name) {
+ const not_a_map_error = () => decoder_error("Map", value);
+
+ if (
+ value instanceof Dict ||
+ value instanceof WeakMap ||
+ value instanceof Map
+ ) {
+ const entry = map_get(value, name);
+ return new Ok(entry.isOk() ? new Some(entry[0]) : new None());
+ } else if (Object.getPrototypeOf(value) == Object.prototype) {
+ return try_get_field(value, name, () => new Ok(new None()));
+ } else {
+ return try_get_field(value, name, not_a_map_error);
+ }
+}
+
+function try_get_field(value, field, or_else) {
+ try {
+ return field in value ? new Ok(new Some(value[field])) : or_else();
+ } catch {
+ return or_else();
+ }
+}
+
+export function byte_size(string) {
+ return new TextEncoder().encode(string).length;
+}
+
+// In Javascript bitwise operations convert numbers to a sequence of 32 bits
+// while Erlang uses arbitrary precision.
+// To get around this problem and get consistent results use BigInt and then
+// downcast the value back to a Number value.
+
+export function bitwise_and(x, y) {
+ return Number(BigInt(x) & BigInt(y));
+}
+
+export function bitwise_not(x) {
+ return Number(~BigInt(x));
+}
+
+export function bitwise_or(x, y) {
+ return Number(BigInt(x) | BigInt(y));
+}
+
+export function bitwise_exclusive_or(x, y) {
+ return Number(BigInt(x) ^ BigInt(y));
+}
+
+export function bitwise_shift_left(x, y) {
+ return Number(BigInt(x) << BigInt(y));
+}
+
+export function bitwise_shift_right(x, y) {
+ return Number(BigInt(x) >> BigInt(y));
+}
+
+export function inspect(v) {
+ const t = typeof v;
+ if (v === true) return "True";
+ if (v === false) return "False";
+ if (v === null) return "//js(null)";
+ if (v === undefined) return "Nil";
+ if (t === "string") return JSON.stringify(v);
+ if (t === "bigint" || t === "number") return v.toString();
+ if (Array.isArray(v)) return `#(${v.map(inspect).join(", ")})`;
+ if (v instanceof List) return inspectList(v);
+ if (v instanceof UtfCodepoint) return inspectUtfCodepoint(v);
+ if (v instanceof BitArray) return inspectBitArray(v);
+ if (v instanceof CustomType) return inspectCustomType(v);
+ if (v instanceof Dict) return inspectDict(v);
+ if (v instanceof Set) return `//js(Set(${[...v].map(inspect).join(", ")}))`;
+ if (v instanceof RegExp) return `//js(${v})`;
+ if (v instanceof Date) return `//js(Date("${v.toISOString()}"))`;
+ if (v instanceof Function) {
+ const args = [];
+ for (const i of Array(v.length).keys())
+ args.push(String.fromCharCode(i + 97));
+ return `//fn(${args.join(", ")}) { ... }`;
+ }
+ return inspectObject(v);
+}
+
+function inspectDict(map) {
+ let body = "dict.from_list([";
+ let first = true;
+ map.forEach((value, key) => {
+ if (!first) body = body + ", ";
+ body = body + "#(" + inspect(key) + ", " + inspect(value) + ")";
+ first = false;
+ });
+ return body + "])";
+}
+
+function inspectObject(v) {
+ const name = Object.getPrototypeOf(v)?.constructor?.name || "Object";
+ const props = [];
+ for (const k of Object.keys(v)) {
+ props.push(`${inspect(k)}: ${inspect(v[k])}`);
+ }
+ const body = props.length ? " " + props.join(", ") + " " : "";
+ const head = name === "Object" ? "" : name + " ";
+ return `//js(${head}{${body}})`;
+}
+
+function inspectCustomType(record) {
+ const props = Object.keys(record)
+ .map((label) => {
+ const value = inspect(record[label]);
+ return isNaN(parseInt(label)) ? `${label}: ${value}` : value;
+ })
+ .join(", ");
+ return props
+ ? `${record.constructor.name}(${props})`
+ : record.constructor.name;
+}
+
+export function inspectList(list) {
+ return `[${list.toArray().map(inspect).join(", ")}]`;
+}
+
+export function inspectBitArray(bits) {
+ return `<<${Array.from(bits.buffer).join(", ")}>>`;
+}
+
+export function inspectUtfCodepoint(codepoint) {
+ return `//utfcodepoint(${String.fromCodePoint(codepoint.value)})`;
+}
+
+export function base16_encode(bit_array) {
+ let result = "";
+ for (const byte of bit_array.buffer) {
+ result += byte.toString(16).padStart(2, "0").toUpperCase();
+ }
+ return result;
+}
+
+export function base16_decode(string) {
+ const bytes = new Uint8Array(string.length / 2);
+ for (let i = 0; i < string.length; i += 2) {
+ const a = parseInt(string[i], 16);
+ const b = parseInt(string[i + 1], 16);
+ if (isNaN(a) || isNaN(b)) return new Error(Nil);
+ bytes[i / 2] = a * 16 + b;
+ }
+ return new Ok(new BitArray(bytes));
+}
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beam
new file mode 100644
index 0000000..66ecfaf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@base.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beam
new file mode 100644
index 0000000..12fe362
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_array.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beam
new file mode 100644
index 0000000..ea1ebc6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_builder.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beam
new file mode 100644
index 0000000..b8a7f29
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bit_string.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beam
new file mode 100644
index 0000000..49ceff6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bool.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beam
new file mode 100644
index 0000000..768e658
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@bytes_builder.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beam
new file mode 100644
index 0000000..91ac492
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dict.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beam
new file mode 100644
index 0000000..4945547
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@dynamic.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beam
new file mode 100644
index 0000000..b0b6b33
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@float.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beam
new file mode 100644
index 0000000..1a0aca0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@function.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beam
new file mode 100644
index 0000000..a8594f4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@int.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beam
new file mode 100644
index 0000000..fdadf55
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@io.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beam
new file mode 100644
index 0000000..e7997d2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@iterator.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beam
new file mode 100644
index 0000000..2d8125f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@list.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beam
new file mode 100644
index 0000000..ba9c9e2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@map.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beam
new file mode 100644
index 0000000..ed16040
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@option.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beam
new file mode 100644
index 0000000..e5a5990
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@order.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beam
new file mode 100644
index 0000000..1db55b8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@pair.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beam
new file mode 100644
index 0000000..c4e81fc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@queue.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beam
new file mode 100644
index 0000000..d4daa3f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@regex.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beam
new file mode 100644
index 0000000..13eeb10
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@result.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beam
new file mode 100644
index 0000000..ad16119
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@set.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beam
new file mode 100644
index 0000000..6565dd5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beam
new file mode 100644
index 0000000..f968a74
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@string_builder.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beam
new file mode 100644
index 0000000..8c0d9ec
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam@uri.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app
new file mode 100644
index 0000000..8231979
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.app
@@ -0,0 +1,7 @@
+{application, gleam_stdlib, [
+ {vsn, "0.33.0"},
+ {applications, []},
+ {description, "A standard library for the Gleam programming language"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beam b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beam
new file mode 100644
index 0000000..4215626
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/ebin/gleam_stdlib.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl
new file mode 100644
index 0000000..b1135f2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl
@@ -0,0 +1,5 @@
+-record(decode_error, {
+ expected :: binary(),
+ found :: binary(),
+ path :: list(binary())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl
new file mode 100644
index 0000000..b0d08dc
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Iterator.hrl
@@ -0,0 +1 @@
+-record(iterator, {continuation :: fun(() -> gleam@iterator:action(any()))}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl
new file mode 100644
index 0000000..1f61922
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@iterator_Next.hrl
@@ -0,0 +1 @@
+-record(next, {element :: any(), accumulator :: any()}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl
new file mode 100644
index 0000000..88ac25e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@queue_Queue.hrl
@@ -0,0 +1 @@
+-record(queue, {in :: list(any()), out :: list(any())}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl
new file mode 100644
index 0000000..ad5511e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_CompileError.hrl
@@ -0,0 +1 @@
+-record(compile_error, {error :: binary(), byte_index :: integer()}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl
new file mode 100644
index 0000000..4216619
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Match.hrl
@@ -0,0 +1,4 @@
+-record(match, {
+ content :: binary(),
+ submatches :: list(gleam@option:option(binary()))
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl
new file mode 100644
index 0000000..0074603
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@regex_Options.hrl
@@ -0,0 +1 @@
+-record(options, {case_insensitive :: boolean(), multi_line :: boolean()}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl
new file mode 100644
index 0000000..6e1e226
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@set_Set.hrl
@@ -0,0 +1 @@
+-record(set, {map :: gleam@dict:dict(any(), list(nil))}).
diff --git a/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl
new file mode 100644
index 0000000..50150f4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_stdlib/include/gleam@uri_Uri.hrl
@@ -0,0 +1,9 @@
+-record(uri, {
+ scheme :: gleam@option:option(binary()),
+ userinfo :: gleam@option:option(binary()),
+ host :: gleam@option:option(binary()),
+ port :: gleam@option:option(integer()),
+ path :: binary(),
+ 'query' :: gleam@option:option(binary()),
+ fragment :: gleam@option:option(binary())
+}).
diff --git a/aoc2023/build/dev/erlang/gleam_version b/aoc2023/build/dev/erlang/gleam_version
new file mode 100644
index 0000000..048acbd
--- /dev/null
+++ b/aoc2023/build/dev/erlang/gleam_version
@@ -0,0 +1 @@
+0.33.0-rc2 \ No newline at end of file
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache
new file mode 100644
index 0000000..d1a66cb
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_meta b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_meta
new file mode 100644
index 0000000..23d66d7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl
new file mode 100644
index 0000000..13ae369
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint.erl
@@ -0,0 +1,513 @@
+-module(glint).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([with_config/2, with_pretty_help/2, without_pretty_help/1, with_name/2, new/0, command/1, description/2, flag/3, flag_tuple/2, flags/2, global_flag/3, global_flag_tuple/2, global_flags/2, default_pretty_help/0, add/3, help_flag/0, execute/2, run_and_handle/3, run/2, add_command_from_stub/2]).
+-export_type([config/0, pretty_help/0, glint/1, command/1, command_input/0, command_node/1, out/1, stub/1]).
+
+-type config() :: {config,
+ gleam@option:option(pretty_help()),
+ gleam@option:option(binary())}.
+
+-type pretty_help() :: {pretty_help,
+ gleam_community@colour:colour(),
+ gleam_community@colour:colour(),
+ gleam_community@colour:colour()}.
+
+-opaque glint(JFP) :: {glint,
+ config(),
+ command_node(JFP),
+ gleam@dict:dict(binary(), glint@flag:flag())}.
+
+-opaque command(JFQ) :: {command,
+ fun((command_input()) -> JFQ),
+ gleam@dict:dict(binary(), glint@flag:flag()),
+ binary()}.
+
+-type command_input() :: {command_input,
+ list(binary()),
+ gleam@dict:dict(binary(), glint@flag:flag())}.
+
+-type command_node(JFR) :: {command_node,
+ gleam@option:option(command(JFR)),
+ gleam@dict:dict(binary(), command_node(JFR))}.
+
+-type out(JFS) :: {out, JFS} | {help, binary()}.
+
+-type stub(JFT) :: {stub,
+ list(binary()),
+ fun((command_input()) -> JFT),
+ list({binary(), glint@flag:flag()}),
+ binary()}.
+
+-spec with_config(glint(JFY), config()) -> glint(JFY).
+with_config(Glint, Config) ->
+ erlang:setelement(2, Glint, Config).
+
+-spec with_pretty_help(glint(JGB), pretty_help()) -> glint(JGB).
+with_pretty_help(Glint, Pretty) ->
+ _pipe = erlang:setelement(2, erlang:element(2, Glint), {some, Pretty}),
+ with_config(Glint, _pipe).
+
+-spec without_pretty_help(glint(JGE)) -> glint(JGE).
+without_pretty_help(Glint) ->
+ _pipe = erlang:setelement(2, erlang:element(2, Glint), none),
+ with_config(Glint, _pipe).
+
+-spec with_name(glint(JGH), binary()) -> glint(JGH).
+with_name(Glint, Name) ->
+ _pipe = erlang:setelement(3, erlang:element(2, Glint), {some, Name}),
+ with_config(Glint, _pipe).
+
+-spec empty_command() -> command_node(any()).
+empty_command() ->
+ {command_node, none, gleam@map:new()}.
+
+-spec new() -> glint(any()).
+new() ->
+ {glint, {config, none, none}, empty_command(), gleam@map:new()}.
+
+-spec do_add(command_node(JGR), list(binary()), command(JGR)) -> command_node(JGR).
+do_add(Root, Path, Contents) ->
+ case Path of
+ [] ->
+ erlang:setelement(2, Root, {some, Contents});
+
+ [X | Xs] ->
+ erlang:setelement(
+ 3,
+ Root,
+ (gleam@map:update(
+ erlang:element(3, Root),
+ X,
+ fun(Node) -> _pipe = Node,
+ _pipe@1 = gleam@option:lazy_unwrap(
+ _pipe,
+ fun empty_command/0
+ ),
+ do_add(_pipe@1, Xs, Contents) end
+ ))
+ )
+ end.
+
+-spec command(fun((command_input()) -> JHA)) -> command(JHA).
+command(Runner) ->
+ {command, Runner, gleam@map:new(), <<""/utf8>>}.
+
+-spec description(command(JHD), binary()) -> command(JHD).
+description(Cmd, Description) ->
+ erlang:setelement(4, Cmd, Description).
+
+-spec flag(command(JHG), binary(), glint@flag:flag_builder(any())) -> command(JHG).
+flag(Cmd, Key, Flag) ->
+ erlang:setelement(
+ 3,
+ Cmd,
+ gleam@map:insert(erlang:element(3, Cmd), Key, glint@flag:build(Flag))
+ ).
+
+-spec flag_tuple(command(JHL), {binary(), glint@flag:flag_builder(any())}) -> command(JHL).
+flag_tuple(Cmd, Tup) ->
+ flag(Cmd, erlang:element(1, Tup), erlang:element(2, Tup)).
+
+-spec flags(command(JHQ), list({binary(), glint@flag:flag()})) -> command(JHQ).
+flags(Cmd, Flags) ->
+ gleam@list:fold(
+ Flags,
+ Cmd,
+ fun(Cmd@1, _use1) ->
+ {Key, Flag} = _use1,
+ erlang:setelement(
+ 3,
+ Cmd@1,
+ gleam@map:insert(erlang:element(3, Cmd@1), Key, Flag)
+ )
+ end
+ ).
+
+-spec global_flag(glint(JHU), binary(), glint@flag:flag_builder(any())) -> glint(JHU).
+global_flag(Glint, Key, Flag) ->
+ erlang:setelement(
+ 4,
+ Glint,
+ gleam@map:insert(erlang:element(4, Glint), Key, glint@flag:build(Flag))
+ ).
+
+-spec global_flag_tuple(glint(JHZ), {binary(), glint@flag:flag_builder(any())}) -> glint(JHZ).
+global_flag_tuple(Glint, Tup) ->
+ global_flag(Glint, erlang:element(1, Tup), erlang:element(2, Tup)).
+
+-spec global_flags(glint(JIE), list({binary(), glint@flag:flag()})) -> glint(JIE).
+global_flags(Glint, Flags) ->
+ erlang:setelement(
+ 4,
+ Glint,
+ (gleam@list:fold(
+ Flags,
+ erlang:element(4, Glint),
+ fun(Acc, Tup) ->
+ gleam@map:insert(
+ Acc,
+ erlang:element(1, Tup),
+ erlang:element(2, Tup)
+ )
+ end
+ ))
+ ).
+
+-spec execute_root(
+ command_node(JIS),
+ gleam@dict:dict(binary(), glint@flag:flag()),
+ list(binary()),
+ list(binary())
+) -> {ok, out(JIS)} | {error, snag:snag()}.
+execute_root(Cmd, Global_flags, Args, Flag_inputs) ->
+ _pipe@3 = case erlang:element(2, Cmd) of
+ {some, Contents} ->
+ gleam@result:'try'(
+ gleam@list:try_fold(
+ Flag_inputs,
+ gleam@map:merge(Global_flags, erlang:element(3, Contents)),
+ fun glint@flag:update_flags/2
+ ),
+ fun(New_flags) -> _pipe = {command_input, Args, New_flags},
+ _pipe@1 = (erlang:element(2, Contents))(_pipe),
+ _pipe@2 = {out, _pipe@1},
+ {ok, _pipe@2} end
+ );
+
+ none ->
+ snag:error(<<"command not found"/utf8>>)
+ end,
+ snag:context(_pipe@3, <<"failed to run command"/utf8>>).
+
+-spec default_pretty_help() -> pretty_help().
+default_pretty_help() ->
+ _assert_subject = gleam_community@colour:from_rgb255(182, 255, 234),
+ {ok, Usage_colour} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"glint"/utf8>>,
+ function => <<"default_pretty_help"/utf8>>,
+ line => 404})
+ end,
+ _assert_subject@1 = gleam_community@colour:from_rgb255(255, 175, 243),
+ {ok, Flags_colour} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"glint"/utf8>>,
+ function => <<"default_pretty_help"/utf8>>,
+ line => 405})
+ end,
+ _assert_subject@2 = gleam_community@colour:from_rgb255(252, 226, 174),
+ {ok, Subcommands_colour} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"glint"/utf8>>,
+ function => <<"default_pretty_help"/utf8>>,
+ line => 406})
+ end,
+ {pretty_help, Usage_colour, Flags_colour, Subcommands_colour}.
+
+-spec is_not_empty(binary()) -> boolean().
+is_not_empty(S) ->
+ S /= <<""/utf8>>.
+
+-spec sanitize_path(list(binary())) -> list(binary()).
+sanitize_path(Path) ->
+ _pipe = Path,
+ _pipe@1 = gleam@list:map(_pipe, fun gleam@string:trim/1),
+ gleam@list:filter(_pipe@1, fun is_not_empty/1).
+
+-spec add(glint(JGM), list(binary()), command(JGM)) -> glint(JGM).
+add(Glint, Path, Contents) ->
+ erlang:setelement(
+ 3,
+ Glint,
+ begin
+ _pipe = Path,
+ _pipe@1 = sanitize_path(_pipe),
+ do_add(erlang:element(3, Glint), _pipe@1, Contents)
+ end
+ ).
+
+-spec help_flag() -> binary().
+help_flag() ->
+ <<(<<"--"/utf8>>)/binary, "help"/utf8>>.
+
+-spec wrap_with_space(binary()) -> binary().
+wrap_with_space(S) ->
+ case S of
+ <<""/utf8>> ->
+ <<" "/utf8>>;
+
+ _ ->
+ <<<<" "/utf8, S/binary>>/binary, " "/utf8>>
+ end.
+
+-spec subcommand_help(binary(), command_node(any())) -> binary().
+subcommand_help(Name, Cmd) ->
+ case erlang:element(2, Cmd) of
+ none ->
+ Name;
+
+ {some, Contents} ->
+ <<<<Name/binary, "\t\t"/utf8>>/binary,
+ (erlang:element(4, Contents))/binary>>
+ end.
+
+-spec subcommands_help(gleam@dict:dict(binary(), command_node(any()))) -> binary().
+subcommands_help(Cmds) ->
+ _pipe = Cmds,
+ _pipe@1 = gleam@map:map_values(_pipe, fun subcommand_help/2),
+ _pipe@2 = gleam@map:values(_pipe@1),
+ _pipe@3 = gleam@list:sort(_pipe@2, fun gleam@string:compare/2),
+ gleam@string:join(_pipe@3, <<"\n\t"/utf8>>).
+
+-spec heading_style(binary(), gleam_community@colour:colour()) -> binary().
+heading_style(Heading, Colour) ->
+ _pipe = Heading,
+ _pipe@1 = gleam_community@ansi:bold(_pipe),
+ _pipe@2 = gleam_community@ansi:underline(_pipe@1),
+ _pipe@3 = gleam_community@ansi:italic(_pipe@2),
+ _pipe@4 = gleam_community@ansi:hex(
+ _pipe@3,
+ gleam_community@colour:to_rgb_hex(Colour)
+ ),
+ gleam_community@ansi:reset(_pipe@4).
+
+-spec usage_help(
+ binary(),
+ gleam@dict:dict(binary(), glint@flag:flag()),
+ config()
+) -> binary().
+usage_help(Cmd_name, Flags, Config) ->
+ App_name = gleam@option:unwrap(
+ erlang:element(3, Config),
+ <<"gleam run"/utf8>>
+ ),
+ Flags@1 = begin
+ _pipe = Flags,
+ _pipe@1 = gleam@map:to_list(_pipe),
+ _pipe@2 = gleam@list:map(_pipe@1, fun glint@flag:flag_type_help/1),
+ gleam@list:sort(_pipe@2, fun gleam@string:compare/2)
+ end,
+ Flag_sb = case Flags@1 of
+ [] ->
+ gleam@string_builder:new();
+
+ _ ->
+ _pipe@3 = Flags@1,
+ _pipe@4 = gleam@list:intersperse(_pipe@3, <<" "/utf8>>),
+ _pipe@5 = gleam@string_builder:from_strings(_pipe@4),
+ _pipe@6 = gleam@string_builder:prepend(_pipe@5, <<" [ "/utf8>>),
+ gleam@string_builder:append(_pipe@6, <<" ]"/utf8>>)
+ end,
+ _pipe@7 = [App_name, wrap_with_space(Cmd_name), <<"[ ARGS ]"/utf8>>],
+ _pipe@8 = gleam@string_builder:from_strings(_pipe@7),
+ _pipe@9 = gleam@string_builder:append_builder(_pipe@8, Flag_sb),
+ _pipe@12 = gleam@string_builder:prepend(
+ _pipe@9,
+ <<(begin
+ _pipe@10 = erlang:element(2, Config),
+ _pipe@11 = gleam@option:map(
+ _pipe@10,
+ fun(Styling) ->
+ heading_style(
+ <<"USAGE:"/utf8>>,
+ erlang:element(2, Styling)
+ )
+ end
+ ),
+ gleam@option:unwrap(_pipe@11, <<"USAGE:"/utf8>>)
+ end)/binary,
+ "\n\t"/utf8>>
+ ),
+ gleam@string_builder:to_string(_pipe@12).
+
+-spec cmd_help(
+ list(binary()),
+ command_node(any()),
+ config(),
+ gleam@dict:dict(binary(), glint@flag:flag())
+) -> binary().
+cmd_help(Path, Cmd, Config, Global_flags) ->
+ Name = begin
+ _pipe = Path,
+ _pipe@1 = gleam@list:reverse(_pipe),
+ gleam@string:join(_pipe@1, <<" "/utf8>>)
+ end,
+ Flags = begin
+ _pipe@2 = gleam@option:map(
+ erlang:element(2, Cmd),
+ fun(Contents) -> erlang:element(3, Contents) end
+ ),
+ _pipe@3 = gleam@option:lazy_unwrap(_pipe@2, fun gleam@map:new/0),
+ gleam@map:merge(Global_flags, _pipe@3)
+ end,
+ Flags_help_body = <<<<(begin
+ _pipe@4 = erlang:element(2, Config),
+ _pipe@5 = gleam@option:map(
+ _pipe@4,
+ fun(P) ->
+ heading_style(<<"FLAGS:"/utf8>>, erlang:element(3, P))
+ end
+ ),
+ gleam@option:unwrap(_pipe@5, <<"FLAGS:"/utf8>>)
+ end)/binary,
+ "\n\t"/utf8>>/binary,
+ (gleam@string:join(
+ gleam@list:sort(
+ [<<"--help\t\t\tPrint help information"/utf8>> |
+ glint@flag:flags_help(Flags)],
+ fun gleam@string:compare/2
+ ),
+ <<"\n\t"/utf8>>
+ ))/binary>>,
+ Usage = usage_help(Name, Flags, Config),
+ Description = begin
+ _pipe@6 = erlang:element(2, Cmd),
+ _pipe@7 = gleam@option:map(
+ _pipe@6,
+ fun(Contents@1) -> erlang:element(4, Contents@1) end
+ ),
+ gleam@option:unwrap(_pipe@7, <<""/utf8>>)
+ end,
+ Header_items = begin
+ _pipe@8 = [Name, Description],
+ _pipe@9 = gleam@list:filter(_pipe@8, fun is_not_empty/1),
+ gleam@string:join(_pipe@9, <<"\n"/utf8>>)
+ end,
+ Subcommands = case subcommands_help(erlang:element(3, Cmd)) of
+ <<""/utf8>> ->
+ <<""/utf8>>;
+
+ Subcommands_help_body ->
+ <<<<(begin
+ _pipe@10 = erlang:element(2, Config),
+ _pipe@11 = gleam@option:map(
+ _pipe@10,
+ fun(P@1) ->
+ heading_style(
+ <<"SUBCOMMANDS:"/utf8>>,
+ erlang:element(4, P@1)
+ )
+ end
+ ),
+ gleam@option:unwrap(_pipe@11, <<"SUBCOMMANDS:"/utf8>>)
+ end)/binary,
+ "\n\t"/utf8>>/binary,
+ Subcommands_help_body/binary>>
+ end,
+ _pipe@12 = [Header_items, Usage, Flags_help_body, Subcommands],
+ _pipe@13 = gleam@list:filter(_pipe@12, fun is_not_empty/1),
+ gleam@string:join(_pipe@13, <<"\n\n"/utf8>>).
+
+-spec do_execute(
+ command_node(JIM),
+ config(),
+ gleam@dict:dict(binary(), glint@flag:flag()),
+ list(binary()),
+ list(binary()),
+ boolean(),
+ list(binary())
+) -> {ok, out(JIM)} | {error, snag:snag()}.
+do_execute(Cmd, Config, Global_flags, Args, Flags, Help, Command_path) ->
+ case Args of
+ [] when Help ->
+ _pipe = Command_path,
+ _pipe@1 = cmd_help(_pipe, Cmd, Config, Global_flags),
+ _pipe@2 = {help, _pipe@1},
+ {ok, _pipe@2};
+
+ [] ->
+ execute_root(Cmd, Global_flags, [], Flags);
+
+ [Arg | Rest] ->
+ case gleam@map:get(erlang:element(3, Cmd), Arg) of
+ {ok, Cmd@1} ->
+ do_execute(
+ Cmd@1,
+ Config,
+ Global_flags,
+ Rest,
+ Flags,
+ Help,
+ [Arg | Command_path]
+ );
+
+ _ when Help ->
+ _pipe@3 = Command_path,
+ _pipe@4 = cmd_help(_pipe@3, Cmd, Config, Global_flags),
+ _pipe@5 = {help, _pipe@4},
+ {ok, _pipe@5};
+
+ _ ->
+ execute_root(Cmd, Global_flags, Args, Flags)
+ end
+ end.
+
+-spec execute(glint(JII), list(binary())) -> {ok, out(JII)} |
+ {error, snag:snag()}.
+execute(Glint, Args) ->
+ Help_flag = help_flag(),
+ {Help, Args@2} = case gleam@list:pop(Args, fun(S) -> S =:= Help_flag end) of
+ {ok, {_, Args@1}} ->
+ {true, Args@1};
+
+ _ ->
+ {false, Args}
+ end,
+ {Flags, Args@3} = gleam@list:partition(
+ Args@2,
+ fun(_capture) -> gleam@string:starts_with(_capture, <<"--"/utf8>>) end
+ ),
+ do_execute(
+ erlang:element(3, Glint),
+ erlang:element(2, Glint),
+ erlang:element(4, Glint),
+ Args@3,
+ Flags,
+ Help,
+ []
+ ).
+
+-spec run_and_handle(glint(JJA), list(binary()), fun((JJA) -> any())) -> nil.
+run_and_handle(Glint, Args, Handle) ->
+ case execute(Glint, Args) of
+ {error, Err} ->
+ _pipe = Err,
+ _pipe@1 = snag:pretty_print(_pipe),
+ gleam@io:println(_pipe@1);
+
+ {ok, {help, Help}} ->
+ gleam@io:println(Help);
+
+ {ok, {out, Out}} ->
+ Handle(Out),
+ nil
+ end.
+
+-spec run(glint(any()), list(binary())) -> nil.
+run(Glint, Args) ->
+ run_and_handle(Glint, Args, gleam@function:constant(nil)).
+
+-spec add_command_from_stub(glint(JJN), stub(JJN)) -> glint(JJN).
+add_command_from_stub(Glint, Stub) ->
+ add(
+ Glint,
+ erlang:element(2, Stub),
+ begin
+ _pipe = command(erlang:element(3, Stub)),
+ _pipe@1 = flags(_pipe, erlang:element(4, Stub)),
+ description(_pipe@1, erlang:element(5, Stub))
+ end
+ ).
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache
new file mode 100644
index 0000000..90aed37
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_meta b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_meta
new file mode 100644
index 0000000..be367e3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl
new file mode 100644
index 0000000..634b37b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag.erl
@@ -0,0 +1,523 @@
+-module(glint@flag).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([string/0, string_list/0, build/1, constraint/2, description/2, default/2, build_map/1, int/0, int_list/0, float/0, float_list/0, bool/0, flag_type_help/1, flags_help/1, update_flags/2, get_int_value/1, get_int/2, get_ints_value/1, get_ints/2, get_bool_value/1, get_bool/2, get_string_value/1, get_string/2, get_strings_value/1, get_strings/2, get_float_value/1, get_float/2, get_floats_value/1, get_floats/2]).
+-export_type([value/0, flag_builder/1, internal/1, flag/0]).
+
+-type value() :: {b, internal(boolean())} |
+ {i, internal(integer())} |
+ {li, internal(list(integer()))} |
+ {f, internal(float())} |
+ {lf, internal(list(float()))} |
+ {s, internal(binary())} |
+ {ls, internal(list(binary()))}.
+
+-opaque flag_builder(IRX) :: {flag_builder,
+ binary(),
+ fun((binary()) -> {ok, IRX} | {error, snag:snag()}),
+ fun((internal(IRX)) -> value()),
+ gleam@option:option(IRX)}.
+
+-opaque internal(IRY) :: {internal,
+ gleam@option:option(IRY),
+ fun((binary()) -> {ok, IRY} | {error, snag:snag()})}.
+
+-type flag() :: {flag, value(), binary()}.
+
+-spec new(
+ fun((internal(ISP)) -> value()),
+ fun((binary()) -> {ok, ISP} | {error, snag:snag()})
+) -> flag_builder(ISP).
+new(Valuer, P) ->
+ {flag_builder, <<""/utf8>>, P, Valuer, none}.
+
+-spec string() -> flag_builder(binary()).
+string() ->
+ new(fun(Field@0) -> {s, Field@0} end, fun(S) -> {ok, S} end).
+
+-spec string_list() -> flag_builder(list(binary())).
+string_list() ->
+ new(fun(Field@0) -> {ls, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
+ {ok, _pipe@1} end).
+
+-spec build(flag_builder(any())) -> flag().
+build(Fb) ->
+ {flag,
+ (erlang:element(4, Fb))(
+ {internal, erlang:element(5, Fb), erlang:element(3, Fb)}
+ ),
+ erlang:element(2, Fb)}.
+
+-spec attempt(
+ {ok, ITG} | {error, ITH},
+ fun((ITG) -> {ok, any()} | {error, ITH})
+) -> {ok, ITG} | {error, ITH}.
+attempt(Val, F) ->
+ gleam@result:'try'(Val, fun(A) -> gleam@result:replace(F(A), A) end).
+
+-spec wrap_with_constraint(
+ fun((binary()) -> {ok, ITA} | {error, snag:snag()}),
+ fun((ITA) -> {ok, nil} | {error, snag:snag()})
+) -> fun((binary()) -> {ok, ITA} | {error, snag:snag()}).
+wrap_with_constraint(P, Constraint) ->
+ fun(Input) -> attempt(P(Input), Constraint) end.
+
+-spec constraint(
+ flag_builder(ISW),
+ fun((ISW) -> {ok, nil} | {error, snag:snag()})
+) -> flag_builder(ISW).
+constraint(Builder, Constraint) ->
+ erlang:setelement(
+ 3,
+ Builder,
+ wrap_with_constraint(erlang:element(3, Builder), Constraint)
+ ).
+
+-spec description(flag_builder(ITP), binary()) -> flag_builder(ITP).
+description(Builder, Description) ->
+ erlang:setelement(2, Builder, Description).
+
+-spec default(flag_builder(ITS), ITS) -> flag_builder(ITS).
+default(Builder, Default) ->
+ erlang:setelement(5, Builder, {some, Default}).
+
+-spec build_map(list({binary(), flag()})) -> gleam@dict:dict(binary(), flag()).
+build_map(Flags) ->
+ gleam@map:from_list(Flags).
+
+-spec access_type_error(binary()) -> {ok, any()} | {error, snag:snag()}.
+access_type_error(Flag_type) ->
+ snag:error(<<"cannot access flag as "/utf8, Flag_type/binary>>).
+
+-spec flag_not_provided_error() -> {ok, any()} | {error, snag:snag()}.
+flag_not_provided_error() ->
+ snag:error(<<"no value provided"/utf8>>).
+
+-spec construct_value(binary(), internal(IUC), fun((internal(IUC)) -> value())) -> {ok,
+ value()} |
+ {error, snag:snag()}.
+construct_value(Input, Internal, Constructor) ->
+ gleam@result:map(
+ (erlang:element(3, Internal))(Input),
+ fun(Val) -> Constructor(erlang:setelement(2, Internal, {some, Val})) end
+ ).
+
+-spec compute_flag(binary(), value()) -> {ok, value()} | {error, snag:snag()}.
+compute_flag(Input, Current) ->
+ _pipe = Input,
+ _pipe@1 = case Current of
+ {i, Internal} ->
+ fun(_capture) ->
+ construct_value(
+ _capture,
+ Internal,
+ fun(Field@0) -> {i, Field@0} end
+ )
+ end;
+
+ {li, Internal@1} ->
+ fun(_capture@1) ->
+ construct_value(
+ _capture@1,
+ Internal@1,
+ fun(Field@0) -> {li, Field@0} end
+ )
+ end;
+
+ {f, Internal@2} ->
+ fun(_capture@2) ->
+ construct_value(
+ _capture@2,
+ Internal@2,
+ fun(Field@0) -> {f, Field@0} end
+ )
+ end;
+
+ {lf, Internal@3} ->
+ fun(_capture@3) ->
+ construct_value(
+ _capture@3,
+ Internal@3,
+ fun(Field@0) -> {lf, Field@0} end
+ )
+ end;
+
+ {s, Internal@4} ->
+ fun(_capture@4) ->
+ construct_value(
+ _capture@4,
+ Internal@4,
+ fun(Field@0) -> {s, Field@0} end
+ )
+ end;
+
+ {ls, Internal@5} ->
+ fun(_capture@5) ->
+ construct_value(
+ _capture@5,
+ Internal@5,
+ fun(Field@0) -> {ls, Field@0} end
+ )
+ end;
+
+ {b, Internal@6} ->
+ fun(_capture@6) ->
+ construct_value(
+ _capture@6,
+ Internal@6,
+ fun(Field@0) -> {b, Field@0} end
+ )
+ end
+ end(_pipe),
+ snag:context(_pipe@1, <<"failed to compute value for flag"/utf8>>).
+
+-spec layer_invalid_flag(snag:snag(), binary()) -> snag:snag().
+layer_invalid_flag(Err, Flag) ->
+ snag:layer(Err, <<<<"invalid flag '"/utf8, Flag/binary>>/binary, "'"/utf8>>).
+
+-spec no_value_flag_err(binary()) -> snag:snag().
+no_value_flag_err(Flag_input) ->
+ _pipe = (<<<<"flag '"/utf8, Flag_input/binary>>/binary,
+ "' has no assigned value"/utf8>>),
+ _pipe@1 = snag:new(_pipe),
+ layer_invalid_flag(_pipe@1, Flag_input).
+
+-spec undefined_flag_err(binary()) -> snag:snag().
+undefined_flag_err(Key) ->
+ _pipe = <<"flag provided but not defined"/utf8>>,
+ _pipe@1 = snag:new(_pipe),
+ layer_invalid_flag(_pipe@1, Key).
+
+-spec cannot_parse(binary(), binary()) -> snag:snag().
+cannot_parse(Value, Kind) ->
+ _pipe = (<<<<<<"cannot parse value '"/utf8, Value/binary>>/binary,
+ "' as "/utf8>>/binary,
+ Kind/binary>>),
+ snag:new(_pipe).
+
+-spec int() -> flag_builder(integer()).
+int() ->
+ new(fun(Field@0) -> {i, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@int:parse(_pipe),
+ gleam@result:replace_error(
+ _pipe@1,
+ cannot_parse(Input, <<"int"/utf8>>)
+ ) end).
+
+-spec int_list() -> flag_builder(list(integer())).
+int_list() ->
+ new(fun(Field@0) -> {li, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
+ _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@int:parse/1),
+ gleam@result:replace_error(
+ _pipe@2,
+ cannot_parse(Input, <<"int list"/utf8>>)
+ ) end).
+
+-spec float() -> flag_builder(float()).
+float() ->
+ new(fun(Field@0) -> {f, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@float:parse(_pipe),
+ gleam@result:replace_error(
+ _pipe@1,
+ cannot_parse(Input, <<"float"/utf8>>)
+ ) end).
+
+-spec float_list() -> flag_builder(list(float())).
+float_list() ->
+ new(fun(Field@0) -> {lf, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
+ _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@float:parse/1),
+ gleam@result:replace_error(
+ _pipe@2,
+ cannot_parse(Input, <<"float list"/utf8>>)
+ ) end).
+
+-spec bool() -> flag_builder(boolean()).
+bool() ->
+ new(
+ fun(Field@0) -> {b, Field@0} end,
+ fun(Input) -> case gleam@string:lowercase(Input) of
+ <<"true"/utf8>> ->
+ {ok, true};
+
+ <<"t"/utf8>> ->
+ {ok, true};
+
+ <<"false"/utf8>> ->
+ {ok, false};
+
+ <<"f"/utf8>> ->
+ {ok, false};
+
+ _ ->
+ {error, cannot_parse(Input, <<"bool"/utf8>>)}
+ end end
+ ).
+
+-spec flag_type_help({binary(), flag()}) -> binary().
+flag_type_help(Flag) ->
+ {Name, Contents} = Flag,
+ Kind = case erlang:element(2, Contents) of
+ {i, _} ->
+ <<"INT"/utf8>>;
+
+ {b, _} ->
+ <<"BOOL"/utf8>>;
+
+ {f, _} ->
+ <<"FLOAT"/utf8>>;
+
+ {lf, _} ->
+ <<"FLOAT_LIST"/utf8>>;
+
+ {li, _} ->
+ <<"INT_LIST"/utf8>>;
+
+ {ls, _} ->
+ <<"STRING_LIST"/utf8>>;
+
+ {s, _} ->
+ <<"STRING"/utf8>>
+ end,
+ <<<<<<<<<<"--"/utf8, Name/binary>>/binary, "="/utf8>>/binary, "<"/utf8>>/binary,
+ Kind/binary>>/binary,
+ ">"/utf8>>.
+
+-spec flag_help({binary(), flag()}) -> binary().
+flag_help(Flag) ->
+ <<<<(flag_type_help(Flag))/binary, "\t\t"/utf8>>/binary,
+ (erlang:element(3, (erlang:element(2, Flag))))/binary>>.
+
+-spec flags_help(gleam@dict:dict(binary(), flag())) -> list(binary()).
+flags_help(Flags) ->
+ _pipe = Flags,
+ _pipe@1 = gleam@map:to_list(_pipe),
+ gleam@list:map(_pipe@1, fun flag_help/1).
+
+-spec access(gleam@dict:dict(binary(), flag()), binary()) -> {ok, flag()} |
+ {error, snag:snag()}.
+access(Flags, Name) ->
+ _pipe = gleam@map:get(Flags, Name),
+ gleam@result:replace_error(_pipe, undefined_flag_err(Name)).
+
+-spec update_flag_value(gleam@dict:dict(binary(), flag()), {binary(), binary()}) -> {ok,
+ gleam@dict:dict(binary(), flag())} |
+ {error, snag:snag()}.
+update_flag_value(Flags, Data) ->
+ {Key, Input} = Data,
+ gleam@result:'try'(
+ access(Flags, Key),
+ fun(Contents) ->
+ gleam@result:map(
+ begin
+ _pipe = compute_flag(Input, erlang:element(2, Contents)),
+ gleam@result:map_error(
+ _pipe,
+ fun(_capture) -> layer_invalid_flag(_capture, Key) end
+ )
+ end,
+ fun(Value) ->
+ gleam@map:insert(
+ Flags,
+ Key,
+ erlang:setelement(2, Contents, Value)
+ )
+ end
+ )
+ end
+ ).
+
+-spec attempt_toggle_flag(gleam@dict:dict(binary(), flag()), binary()) -> {ok,
+ gleam@dict:dict(binary(), flag())} |
+ {error, snag:snag()}.
+attempt_toggle_flag(Flags, Key) ->
+ gleam@result:'try'(
+ access(Flags, Key),
+ fun(Contents) -> case erlang:element(2, Contents) of
+ {b, {internal, none, _} = Internal} ->
+ _pipe = erlang:setelement(2, Internal, {some, true}),
+ _pipe@1 = {b, _pipe},
+ _pipe@2 = (fun(Val) ->
+ erlang:setelement(2, Contents, Val)
+ end)(_pipe@1),
+ _pipe@3 = gleam@map:insert(Flags, Key, _pipe@2),
+ {ok, _pipe@3};
+
+ {b, {internal, {some, Val@1}, _} = Internal@1} ->
+ _pipe@4 = erlang:setelement(
+ 2,
+ Internal@1,
+ {some, not Val@1}
+ ),
+ _pipe@5 = {b, _pipe@4},
+ _pipe@6 = (fun(Val@2) ->
+ erlang:setelement(2, Contents, Val@2)
+ end)(_pipe@5),
+ _pipe@7 = gleam@map:insert(Flags, Key, _pipe@6),
+ {ok, _pipe@7};
+
+ _ ->
+ {error, no_value_flag_err(Key)}
+ end end
+ ).
+
+-spec update_flags(gleam@dict:dict(binary(), flag()), binary()) -> {ok,
+ gleam@dict:dict(binary(), flag())} |
+ {error, snag:snag()}.
+update_flags(Flags, Flag_input) ->
+ Flag_input@1 = gleam@string:drop_left(
+ Flag_input,
+ gleam@string:length(<<"--"/utf8>>)
+ ),
+ case gleam@string:split_once(Flag_input@1, <<"="/utf8>>) of
+ {ok, Data} ->
+ update_flag_value(Flags, Data);
+
+ {error, _} ->
+ attempt_toggle_flag(Flags, Flag_input@1)
+ end.
+
+-spec get_value(
+ gleam@dict:dict(binary(), flag()),
+ binary(),
+ fun((flag()) -> {ok, IUK} | {error, snag:snag()})
+) -> {ok, IUK} | {error, snag:snag()}.
+get_value(Flags, Key, Kind) ->
+ _pipe = access(Flags, Key),
+ _pipe@1 = gleam@result:'try'(_pipe, Kind),
+ snag:context(
+ _pipe@1,
+ <<<<"failed to retrieve value for flag '"/utf8, Key/binary>>/binary,
+ "'"/utf8>>
+ ).
+
+-spec get_int_value(flag()) -> {ok, integer()} | {error, snag:snag()}.
+get_int_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {i, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {i, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"int"/utf8>>)
+ end.
+
+-spec get_int(gleam@dict:dict(binary(), flag()), binary()) -> {ok, integer()} |
+ {error, snag:snag()}.
+get_int(Flags, Name) ->
+ get_value(Flags, Name, fun get_int_value/1).
+
+-spec get_ints_value(flag()) -> {ok, list(integer())} | {error, snag:snag()}.
+get_ints_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {li, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {li, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"int list"/utf8>>)
+ end.
+
+-spec get_ints(gleam@dict:dict(binary(), flag()), binary()) -> {ok,
+ list(integer())} |
+ {error, snag:snag()}.
+get_ints(Flags, Name) ->
+ get_value(Flags, Name, fun get_ints_value/1).
+
+-spec get_bool_value(flag()) -> {ok, boolean()} | {error, snag:snag()}.
+get_bool_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {b, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {b, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"bool"/utf8>>)
+ end.
+
+-spec get_bool(gleam@dict:dict(binary(), flag()), binary()) -> {ok, boolean()} |
+ {error, snag:snag()}.
+get_bool(Flags, Name) ->
+ get_value(Flags, Name, fun get_bool_value/1).
+
+-spec get_string_value(flag()) -> {ok, binary()} | {error, snag:snag()}.
+get_string_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {s, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {s, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"string"/utf8>>)
+ end.
+
+-spec get_string(gleam@dict:dict(binary(), flag()), binary()) -> {ok, binary()} |
+ {error, snag:snag()}.
+get_string(Flags, Name) ->
+ get_value(Flags, Name, fun get_string_value/1).
+
+-spec get_strings_value(flag()) -> {ok, list(binary())} | {error, snag:snag()}.
+get_strings_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {ls, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {ls, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"string list"/utf8>>)
+ end.
+
+-spec get_strings(gleam@dict:dict(binary(), flag()), binary()) -> {ok,
+ list(binary())} |
+ {error, snag:snag()}.
+get_strings(Flags, Name) ->
+ get_value(Flags, Name, fun get_strings_value/1).
+
+-spec get_float_value(flag()) -> {ok, float()} | {error, snag:snag()}.
+get_float_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {f, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {f, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"float"/utf8>>)
+ end.
+
+-spec get_float(gleam@dict:dict(binary(), flag()), binary()) -> {ok, float()} |
+ {error, snag:snag()}.
+get_float(Flags, Name) ->
+ get_value(Flags, Name, fun get_float_value/1).
+
+-spec get_floats_value(flag()) -> {ok, list(float())} | {error, snag:snag()}.
+get_floats_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {lf, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {lf, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"float list"/utf8>>)
+ end.
+
+-spec get_floats(gleam@dict:dict(binary(), flag()), binary()) -> {ok,
+ list(float())} |
+ {error, snag:snag()}.
+get_floats(Flags, Name) ->
+ get_value(Flags, Name, fun get_floats_value/1).
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache
new file mode 100644
index 0000000..6881dda
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta
new file mode 100644
index 0000000..355567d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl
new file mode 100644
index 0000000..52eb319
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/_gleam_artefacts/glint@flag@constraint.erl
@@ -0,0 +1,68 @@
+-module(glint@flag@constraint).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([one_of/1, none_of/1, each/1]).
+
+-spec one_of(list(IQG)) -> fun((IQG) -> {ok, nil} | {error, snag:snag()}).
+one_of(Allowed) ->
+ Allowed_set = gleam@set:from_list(Allowed),
+ fun(Val) -> case gleam@set:contains(Allowed_set, Val) of
+ true ->
+ {ok, nil};
+
+ false ->
+ snag:error(
+ <<<<<<"invalid value '"/utf8,
+ (gleam@string:inspect(Val))/binary>>/binary,
+ "', must be one of: ["/utf8>>/binary,
+ ((<<(begin
+ _pipe = Allowed,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(A) ->
+ <<<<"'"/utf8,
+ (gleam@string:inspect(A))/binary>>/binary,
+ "'"/utf8>>
+ end
+ ),
+ gleam@string:join(_pipe@1, <<", "/utf8>>)
+ end)/binary,
+ "]"/utf8>>))/binary>>
+ )
+ end end.
+
+-spec none_of(list(IQJ)) -> fun((IQJ) -> {ok, nil} | {error, snag:snag()}).
+none_of(Disallowed) ->
+ Disallowed_set = gleam@set:from_list(Disallowed),
+ fun(Val) -> case gleam@set:contains(Disallowed_set, Val) of
+ false ->
+ {ok, nil};
+
+ true ->
+ snag:error(
+ <<<<<<"invalid value '"/utf8,
+ (gleam@string:inspect(Val))/binary>>/binary,
+ "', must not be one of: ["/utf8>>/binary,
+ (((<<(begin
+ _pipe = Disallowed,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(A) ->
+ <<<<"'"/utf8,
+ (gleam@string:inspect(A))/binary>>/binary,
+ "'"/utf8>>
+ end
+ ),
+ gleam@string:join(_pipe@1, <<", "/utf8>>)
+ end)/binary,
+ "]"/utf8>>)))/binary>>
+ )
+ end end.
+
+-spec each(fun((IQM) -> {ok, nil} | {error, snag:snag()})) -> fun((list(IQM)) -> {ok,
+ nil} |
+ {error, snag:snag()}).
+each(Constraint) ->
+ fun(L) -> _pipe = L,
+ _pipe@1 = gleam@list:try_map(_pipe, Constraint),
+ gleam@result:replace(_pipe@1, nil) end.
diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint.app b/aoc2023/build/dev/erlang/glint/ebin/glint.app
new file mode 100644
index 0000000..41fba79
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/ebin/glint.app
@@ -0,0 +1,10 @@
+{application, glint, [
+ {vsn, "0.13.0"},
+ {applications, [gleam_community_ansi,
+ gleam_community_colour,
+ gleam_stdlib,
+ snag]},
+ {description, "Gleam command line argument parsing with basic flag support."},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint.beam b/aoc2023/build/dev/erlang/glint/ebin/glint.beam
new file mode 100644
index 0000000..39b9ce7
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/ebin/glint.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint@flag.beam b/aoc2023/build/dev/erlang/glint/ebin/glint@flag.beam
new file mode 100644
index 0000000..14b7dec
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/ebin/glint@flag.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beam b/aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beam
new file mode 100644
index 0000000..1d36d10
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/ebin/glint@flag@constraint.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl b/aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl
new file mode 100644
index 0000000..645cb12
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint@flag_Flag.hrl
@@ -0,0 +1 @@
+-record(flag, {value :: glint@flag:value(), description :: binary()}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl b/aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl
new file mode 100644
index 0000000..b5e21a2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint@flag_FlagBuilder.hrl
@@ -0,0 +1,6 @@
+-record(flag_builder, {
+ desc :: binary(),
+ parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()}),
+ value :: fun((glint@flag:internal(any())) -> glint@flag:value()),
+ default :: gleam@option:option(any())
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl b/aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl
new file mode 100644
index 0000000..281bbd0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint@flag_Internal.hrl
@@ -0,0 +1,4 @@
+-record(internal, {
+ value :: gleam@option:option(any()),
+ parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()})
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Command.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Command.hrl
new file mode 100644
index 0000000..2761365
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint_Command.hrl
@@ -0,0 +1,5 @@
+-record(command, {
+ do :: fun((glint:command_input()) -> any()),
+ flags :: gleam@dict:dict(binary(), glint@flag:flag()),
+ description :: binary()
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl b/aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl
new file mode 100644
index 0000000..e0e1a81
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint_CommandInput.hrl
@@ -0,0 +1,4 @@
+-record(command_input, {
+ args :: list(binary()),
+ flags :: gleam@dict:dict(binary(), glint@flag:flag())
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Config.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Config.hrl
new file mode 100644
index 0000000..70cf645
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint_Config.hrl
@@ -0,0 +1,4 @@
+-record(config, {
+ pretty_help :: gleam@option:option(glint:pretty_help()),
+ name :: gleam@option:option(binary())
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl
new file mode 100644
index 0000000..f14c34c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint_Glint.hrl
@@ -0,0 +1,5 @@
+-record(glint, {
+ config :: glint:config(),
+ cmd :: glint:command_node(any()),
+ global_flags :: gleam@dict:dict(binary(), glint@flag:flag())
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl b/aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl
new file mode 100644
index 0000000..79bd887
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint_PrettyHelp.hrl
@@ -0,0 +1,5 @@
+-record(pretty_help, {
+ usage :: gleam_community@colour:colour(),
+ flags :: gleam_community@colour:colour(),
+ subcommands :: gleam_community@colour:colour()
+}).
diff --git a/aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl b/aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl
new file mode 100644
index 0000000..5aa5d83
--- /dev/null
+++ b/aoc2023/build/dev/erlang/glint/include/glint_Stub.hrl
@@ -0,0 +1,6 @@
+-record(stub, {
+ path :: list(binary()),
+ run :: fun((glint:command_input()) -> any()),
+ flags :: list({binary(), glint@flag:flag()}),
+ description :: binary()
+}).
diff --git a/aoc2023/build/dev/erlang/pqueue/LICENSE b/aoc2023/build/dev/erlang/pqueue/LICENSE
new file mode 100644
index 0000000..5697803
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2011-2023 Michael Truog <mjtruog at protonmail dot com>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/aoc2023/build/dev/erlang/pqueue/README.markdown b/aoc2023/build/dev/erlang/pqueue/README.markdown
new file mode 100644
index 0000000..77aaf1c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/README.markdown
@@ -0,0 +1,31 @@
+Erlang Priority Queue Implementation
+====================================
+
+The priority queue implementations implement a subset of the stdlib Erlang queue interface as seen in the implementation used by both [Riak and RabbitMQ](https://github.com/basho/riak_core/blob/master/src/riak_core_priority_queue.erl).
+
+The implementations:
+
+* `priority_queue` (fastest for any priorities when only using a single priority at a time)
+* `pqueue` (fastest for 41 priorities, -20 (high) to 20 (low), when using 2 or more priorities at the same time)
+* `pqueue2` (slower heap implementation)
+* `pqueue3` (faster than `pqueue2` and `priority_queue` when using 64 or more priorities at the same time)
+* `pqueue4` (slightly slower than `pqueue` but fastest for allowing 257 priorities, -128 (high) to 128 (low), i.e., fastest when using 42 or more priorities at the same time)
+
+[The latest results are here](http://okeuday.livejournal.com/19539.html), with [the benchmark here](http://github.com/okeuday/erlbench).
+
+Author
+------
+
+Michael Truog (mjtruog at protonmail dot com)
+
+Thanks
+------
+
+* Jesper Louis andersen (PropEr integration and testing)
+* Ulf Wiger (suggestions and insight)
+
+License
+-------
+
+MIT License
+
diff --git a/aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag b/aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag
new file mode 100644
index 0000000..fe3f9f8
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag
Binary files differ
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/edoc-info b/aoc2023/build/dev/erlang/pqueue/doc/edoc-info
new file mode 100644
index 0000000..5e5a8d3
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/edoc-info
@@ -0,0 +1,3 @@
+%% encoding: UTF-8
+{application,pqueue}.
+{modules,[pqueue,pqueue2,pqueue3,pqueue4]}.
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/erlang.png b/aoc2023/build/dev/erlang/pqueue/doc/erlang.png
new file mode 100644
index 0000000..987a618
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/erlang.png
Binary files differ
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/index.html b/aoc2023/build/dev/erlang/pqueue/doc/index.html
new file mode 100644
index 0000000..d55b5e6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>The pqueue application</title>
+</head>
+<frameset cols="20%,80%">
+<frame src="modules-frame.html" name="modulesFrame" title="">
+
+<frame src="overview-summary.html" name="overviewFrame" title="">
+<noframes>
+<h2>This page uses frames</h2>
+<p>Your browser does not accept frames.
+<br>You should go to the <a href="overview-summary.html">non-frame version</a> instead.
+</p>
+</noframes>
+</frameset>
+</html> \ No newline at end of file
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html b/aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html
new file mode 100644
index 0000000..5a87cc4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/modules-frame.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>The pqueue application</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<h2 class="indextitle">Modules</h2>
+<table width="100%" border="0" summary="list of modules">
+<tr><td><a href="pqueue.html" target="overviewFrame" class="module">pqueue</a></td></tr>
+<tr><td><a href="pqueue2.html" target="overviewFrame" class="module">pqueue2</a></td></tr>
+<tr><td><a href="pqueue3.html" target="overviewFrame" class="module">pqueue3</a></td></tr>
+<tr><td><a href="pqueue4.html" target="overviewFrame" class="module">pqueue4</a></td></tr></table>
+</body>
+</html> \ No newline at end of file
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html b/aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html
new file mode 100644
index 0000000..e2f8906
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/overview-summary.html
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>The pqueue application</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<h1>The pqueue application</h1>
+
+<hr>
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue.html
new file mode 100644
index 0000000..40b05ac
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-20 (high) to 20 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-20 (high) to 20 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations. This implementation was created to
+ avoid the slowness within the priority queue used by both RabbitMQ and Riak
+ (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue">pqueue()</a></h3>
+<p><tt>pqueue() = {integer(), {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}} | {empty, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}}</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#join-2">join/2</a></td><td>
+ <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#test-0">test/0</a></td><td>
+ <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N).</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(X::term(), Q::<a href="#type-pqueue">pqueue()</a>) -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(X::term(), P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="join-2">join/2</a></h3>
+<div class="spec">
+<p><tt>join(X1::<a href="#type-pqueue">pqueue()</a>, X2::<a href="#type-pqueue">pqueue()</a>) -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(Q::<a href="#type-pqueue">pqueue()</a>) -&gt; {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -&gt; {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(Q::<a href="#type-pqueue">pqueue()</a>) -&gt; {{value, term(), integer()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="test-0">test/0</a></h3>
+<div class="spec">
+<p><tt>test() -&gt; any()</tt></p>
+</div><p>
+ <h4><a name="Regression_test.">Regression test.</a></h4>
+</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; [term()]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N)</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html
new file mode 100644
index 0000000..2942b84
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue2.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue2</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue2</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3>
+ Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority
+ queue implementation.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3>
+ Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority
+ queue implementation. Unfortunately, testing has shown this solution to
+ be more than 2 times slower than pqueue.
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue2">pqueue2()</a></h3>
+<p><tt>pqueue2() = empty | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, element, term()} | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, queue, <a href="queue.html#type-queue">queue:queue()</a>}</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#test-0">test/0</a></td><td>
+ <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>.</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; <a href="#type-pqueue2">pqueue2()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; <a href="#type-pqueue2">pqueue2()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue2">pqueue2()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; {{value, term(), integer()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</p>
+
+<h3 class="function"><a name="test-0">test/0</a></h3>
+<div class="spec">
+<p><tt>test() -&gt; any()</tt></p>
+</div><p>
+ <h4><a name="Regression_test.">Regression test.</a></h4>
+</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; [term()]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html
new file mode 100644
index 0000000..35f1a7b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue3.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue3</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue3</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3>
+ This priority queue implementation depends on layered tuples, so that tuple
+ access times can be exploited for quick in/out priority queue operations
+ when using 64 or more total priorities.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3>
+ This priority queue implementation depends on layered tuples, so that tuple
+ access times can be exploited for quick in/out priority queue operations
+ when using 64 or more total priorities. This implementation was created
+ to avoid the slowness within the priority queue used by
+ both RabbitMQ and Riak
+ (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue3">pqueue3()</a></h3>
+<p><tt>pqueue3() = {integer(), integer(), empty | integer(), tuple()}</tt></p>
+
+
+<h3 class="typedecl"><a name="type-pqueue3_empty">pqueue3_empty()</a></h3>
+<p><tt>pqueue3_empty() = {integer(), integer(), empty, tuple()}</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#new-1">new/1</a></td><td>
+ <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N).</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; <a href="#type-pqueue3">pqueue3()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), P::integer(), X3::<a href="#type-pqueue3">pqueue3()</a>) -&gt; <a href="#type-pqueue3">pqueue3()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue3">pqueue3()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue3_empty">pqueue3_empty()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="new-1">new/1</a></h3>
+<div class="spec">
+<p><tt>new(Options::[{atom(), term()}]) -&gt; <a href="#type-pqueue3">pqueue3()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; {{value, term(), integer()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; [term()]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N)</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html b/aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html
new file mode 100644
index 0000000..edcdb6e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/pqueue4.html
@@ -0,0 +1,205 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue4</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue4</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-128 (high) to 128 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-128 (high) to 128 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations. This implementation was created to
+ avoid the slowness within the priority queue used by both RabbitMQ and Riak
+ (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3>
+<p><tt>pqueue4() = <a href="#type-pqueue4">pqueue4</a>(any())</tt></p>
+
+
+<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3>
+<p><tt>pqueue4(T) = {<a href="#type-priority">priority()</a> | empty, non_neg_integer(), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, <a href="queue.html#type-queue">queue:queue</a>(T), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}}</tt></p>
+
+
+<h3 class="typedecl"><a name="type-priority">priority()</a></h3>
+<p><tt>priority() = -128..128</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#filter-2">filter/2</a></td><td>
+ <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#filter-3">filter/3</a></td><td>
+ <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#remove_unique-2">remove_unique/2</a></td><td>
+ <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/2.</td></tr>
+<tr><td valign="top"><a href="#remove_unique-3">remove_unique/3</a></td><td>
+ <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/3.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#to_plist-1">to_plist/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4>
+ O(N).</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="filter-2">filter/2</a></h3>
+<div class="spec">
+<p><tt>filter(F::fun((any()) -&gt; boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="filter-3">filter/3</a></h3>
+<div class="spec">
+<p><tt>filter(F::fun((any()) -&gt; boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(X::any(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(X::any(), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(X1::<a href="#type-pqueue4">pqueue4()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue4">pqueue4()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(X1::<a href="#type-pqueue4">pqueue4()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {{value, any(), integer()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="remove_unique-2">remove_unique/2</a></h3>
+<div class="spec">
+<p><tt>remove_unique(F::fun((any()) -&gt; boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/2</p>
+
+<h3 class="function"><a name="remove_unique-3">remove_unique/3</a></h3>
+<div class="spec">
+<p><tt>remove_unique(F::fun((any()) -&gt; boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/3</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; list()</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="to_plist-1">to_plist/1</a></h3>
+<div class="spec">
+<p><tt>to_plist(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; [{<a href="#type-priority">priority()</a>, list()}]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4>
+ O(N)</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css b/aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css
new file mode 100644
index 0000000..ab170c0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/doc/stylesheet.css
@@ -0,0 +1,55 @@
+/* standard EDoc style sheet */
+body {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ margin-left: .25in;
+ margin-right: .2in;
+ margin-top: 0.2in;
+ margin-bottom: 0.2in;
+ color: #000000;
+ background-color: #ffffff;
+}
+h1,h2 {
+ margin-left: -0.2in;
+}
+div.navbar {
+ background-color: #add8e6;
+ padding: 0.2em;
+}
+h2.indextitle {
+ padding: 0.4em;
+ background-color: #add8e6;
+}
+h3.function,h3.typedecl {
+ background-color: #add8e6;
+ padding-left: 1em;
+}
+div.spec {
+ margin-left: 2em;
+ background-color: #eeeeee;
+}
+a.module {
+ text-decoration:none
+}
+a.module:hover {
+ background-color: #eeeeee;
+}
+ul.definitions {
+ list-style-type: none;
+}
+ul.index {
+ list-style-type: none;
+ background-color: #eeeeee;
+}
+
+/*
+ * Minor style tweaks
+ */
+ul {
+ list-style-type: square;
+}
+table {
+ border-collapse: collapse;
+}
+td {
+ padding: 3
+}
diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app
new file mode 100644
index 0000000..974098f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.app
@@ -0,0 +1,6 @@
+{application,pqueue,
+ [{description,"Priority Queue Data Structures"},
+ {vsn,"2.0.7"},
+ {modules,[pqueue,pqueue2,pqueue3,pqueue4]},
+ {registered,[]},
+ {applications,[stdlib,kernel]}]}.
diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beam
new file mode 100644
index 0000000..bf379ea
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beam
new file mode 100644
index 0000000..2913682
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue2.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beam
new file mode 100644
index 0000000..1d55303
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue3.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beam b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beam
new file mode 100644
index 0000000..13f75f5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/ebin/pqueue4.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/pqueue/rebar.config b/aoc2023/build/dev/erlang/pqueue/rebar.config
new file mode 100644
index 0000000..f8022f0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/rebar.config
@@ -0,0 +1,14 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+
+{erl_opts,
+ [{platform_define, "^R16", 'ERLANG_OTP_VERSION_16'},
+ {platform_define, "^17\.", 'ERLANG_OTP_VERSION_17'},
+ {platform_define, "^18\.", 'ERLANG_OTP_VERSION_18'},
+ {platform_define, "^19\.", 'ERLANG_OTP_VERSION_19'},
+ {platform_define, "^20\.", 'ERLANG_OTP_VERSION_20'},
+ warn_export_vars,
+ warn_unused_import,
+ %warn_missing_spec,
+ warnings_as_errors]}.
+{edoc_opts, [{preprocess, true}]}.
diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src b/aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src
new file mode 100644
index 0000000..b153ad1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue.app.src
@@ -0,0 +1,10 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+
+{application, pqueue,
+ [{description, "Priority Queue Data Structures"},
+ {vsn, "2.0.7"},
+ {modules, [pqueue, pqueue2, pqueue3, pqueue4]},
+ {registered, []},
+ {applications, [stdlib, kernel]}]}.
+
diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue.erl
new file mode 100644
index 0000000..2c57fa2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue.erl
@@ -0,0 +1,2246 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==Static Priority Queue.==
+%%% This priority queue implementation depends on a static number of priorities
+%%% (-20 (high) to 20 (low)) so that tuple access times can be exploited for
+%%% quick in/out priority queue operations. This implementation was created to
+%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak
+%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([in/2, % O(1)
+ in/3, % O(1)
+ is_empty/1, % O(1)
+ is_queue/1, % O(1)
+ join/2, % O(N) typically (?)
+ len/1, % O(N)
+ new/0, % O(1)
+ out/1, % O(1) amortized, O(N) worst case
+ out/2, % O(1) amortized, O(N) worst case
+ pout/1, % O(1) amortized, O(N) worst case
+ to_list/1, % O(N)
+ test/0]).
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-ifdef(ERLANG_OTP_VERSION_16).
+-type pqueue() ::
+ {integer(),
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ queue(),
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()}} |
+ {'empty',
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ queue(),
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()}}.
+-else.
+-type pqueue() ::
+ {integer(),
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ queue:queue(),
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()}} |
+ {'empty',
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ queue:queue(),
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()}}.
+-endif.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), pqueue()) -> pqueue().
+
+in(X, Q) ->
+ in(X, 0, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), integer(), pqueue()) -> pqueue().
+
+in(_, P, _)
+ when P < -20; P > 20 ->
+ erlang:exit(badarg);
+in(X, P, {empty, _, _, _, _, _, _, _} = Q) ->
+ in_higher(P, Q, X);
+in(X, P, {Pc, _, _, _, _, _, _, _} = Q)
+ when P < Pc ->
+ in_higher(P, Q, X);
+in(X, P, Q) ->
+ in_lower(P, Q, X).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue()) -> 'true' | 'false'.
+
+is_empty({empty, _, _, _, _, _, _, _}) ->
+ true;
+is_empty({_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ queue:is_empty(Qn20) and queue:is_empty(Qn19) and queue:is_empty(Qn18) and
+ queue:is_empty(Qn17) and queue:is_empty(Qn16) and queue:is_empty(Qn15) and
+ queue:is_empty(Qn14) and
+ queue:is_empty(Qn13) and queue:is_empty(Qn12) and queue:is_empty(Qn11) and
+ queue:is_empty(Qn10) and queue:is_empty(Qn9) and queue:is_empty(Qn8) and
+ queue:is_empty(Qn7) and
+ queue:is_empty(Qn6) and queue:is_empty(Qn5) and queue:is_empty(Qn4) and
+ queue:is_empty(Qn3) and queue:is_empty(Qn2) and queue:is_empty(Qn1) and
+ queue:is_empty(Q0) and
+ queue:is_empty(Qp1) and queue:is_empty(Qp2) and queue:is_empty(Qp3) and
+ queue:is_empty(Qp4) and queue:is_empty(Qp5) and queue:is_empty(Qp6) and
+ queue:is_empty(Qp7) and queue:is_empty(Qp8) and queue:is_empty(Qp9) and
+ queue:is_empty(Qp10) and queue:is_empty(Qp11) and queue:is_empty(Qp12) and
+ queue:is_empty(Qp13) and
+ queue:is_empty(Qp14) and queue:is_empty(Qp15) and queue:is_empty(Qp16) and
+ queue:is_empty(Qp17) and queue:is_empty(Qp18) and queue:is_empty(Qp19) and
+ queue:is_empty(Qp20).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue()) -> 'true' | 'false'.
+
+is_queue({Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14})
+ when tuple_size(Qsn14) == 7, tuple_size(Qsn7) == 7, tuple_size(Qsn1) == 6,
+ tuple_size(Qsp14) == 7, tuple_size(Qsp7) == 7, tuple_size(Qsp1) == 6 ->
+ (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0));
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Join two priority queues.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec join(pqueue(), pqueue()) -> pqueue().
+
+join({P1c,
+ {Q1_n20, Q1_n19, Q1_n18, Q1_n17, Q1_n16, Q1_n15, Q1_n14},
+ {Q1_n13, Q1_n12, Q1_n11, Q1_n10, Q1_n9, Q1_n8, Q1_n7},
+ {Q1_n6, Q1_n5, Q1_n4, Q1_n3, Q1_n2, Q1_n1},
+ Q1_0,
+ {Q1_p1, Q1_p2, Q1_p3, Q1_p4, Q1_p5, Q1_p6},
+ {Q1_p7, Q1_p8, Q1_p9, Q1_p10, Q1_p11, Q1_p12, Q1_p13},
+ {Q1_p14, Q1_p15, Q1_p16, Q1_p17, Q1_p18, Q1_p19, Q1_p20}},
+ {P2c,
+ {Q2_n20, Q2_n19, Q2_n18, Q2_n17, Q2_n16, Q2_n15, Q2_n14},
+ {Q2_n13, Q2_n12, Q2_n11, Q2_n10, Q2_n9, Q2_n8, Q2_n7},
+ {Q2_n6, Q2_n5, Q2_n4, Q2_n3, Q2_n2, Q2_n1},
+ Q2_0,
+ {Q2_p1, Q2_p2, Q2_p3, Q2_p4, Q2_p5, Q2_p6},
+ {Q2_p7, Q2_p8, Q2_p9, Q2_p10, Q2_p11, Q2_p12, Q2_p13},
+ {Q2_p14, Q2_p15, Q2_p16, Q2_p17, Q2_p18, Q2_p19, Q2_p20}}) ->
+ {erlang:min(P1c, P2c),
+ {queue:join(Q1_n20, Q2_n20), queue:join(Q1_n19, Q2_n19),
+ queue:join(Q1_n18, Q2_n18), queue:join(Q1_n17, Q2_n17),
+ queue:join(Q1_n16, Q2_n16), queue:join(Q1_n15, Q2_n15),
+ queue:join(Q1_n14, Q2_n14)},
+ {queue:join(Q1_n13, Q2_n13), queue:join(Q1_n12, Q2_n12),
+ queue:join(Q1_n11, Q2_n11), queue:join(Q1_n10, Q2_n10),
+ queue:join(Q1_n9, Q2_n9), queue:join(Q1_n8, Q2_n8),
+ queue:join(Q1_n7, Q2_n7)},
+ {queue:join(Q1_n6, Q2_n6), queue:join(Q1_n5, Q2_n5),
+ queue:join(Q1_n4, Q2_n4), queue:join(Q1_n3, Q2_n3),
+ queue:join(Q1_n2, Q2_n2), queue:join(Q1_n1, Q2_n1)},
+ queue:join(Q1_0, Q2_0),
+ {queue:join(Q1_p1, Q2_p1), queue:join(Q1_p2, Q2_p2),
+ queue:join(Q1_p3, Q2_p3), queue:join(Q1_p4, Q2_p4),
+ queue:join(Q1_p5, Q2_p5), queue:join(Q1_p6, Q2_p6)},
+ {queue:join(Q1_p7, Q2_p7), queue:join(Q1_p8, Q2_p8),
+ queue:join(Q1_p9, Q2_p9), queue:join(Q1_p10, Q2_p10),
+ queue:join(Q1_p11, Q2_p11), queue:join(Q1_p12, Q2_p12),
+ queue:join(Q1_p13, Q2_p13)},
+ {queue:join(Q1_p14, Q2_p14), queue:join(Q1_p15, Q2_p15),
+ queue:join(Q1_p16, Q2_p16), queue:join(Q1_p17, Q2_p17),
+ queue:join(Q1_p18, Q2_p18), queue:join(Q1_p19, Q2_p19),
+ queue:join(Q1_p20, Q2_p20)}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue()) -> non_neg_integer().
+
+len({_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ queue:len(Qn20) + queue:len(Qn19) + queue:len(Qn18) + queue:len(Qn17) +
+ queue:len(Qn16) + queue:len(Qn15) + queue:len(Qn14) +
+ queue:len(Qn13) + queue:len(Qn12) + queue:len(Qn11) + queue:len(Qn10) +
+ queue:len(Qn9) + queue:len(Qn8) + queue:len(Qn7) +
+ queue:len(Qn6) + queue:len(Qn5) + queue:len(Qn4) + queue:len(Qn3) +
+ queue:len(Qn2) + queue:len(Qn1) +
+ queue:len(Q0) +
+ queue:len(Qp1) + queue:len(Qp2) + queue:len(Qp3) + queue:len(Qp4) +
+ queue:len(Qp5) + queue:len(Qp6) +
+ queue:len(Qp7) + queue:len(Qp8) + queue:len(Qp9) + queue:len(Qp10) +
+ queue:len(Qp11) + queue:len(Qp12) + queue:len(Qp13) +
+ queue:len(Qp14) + queue:len(Qp15) + queue:len(Qp16) + queue:len(Qp17) +
+ queue:len(Qp18) + queue:len(Qp19) + queue:len(Qp20).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue().
+
+new() ->
+ {empty, % current priority
+ erlang:make_tuple(7, queue:new()), % priority [-20..-14]
+ erlang:make_tuple(7, queue:new()), % priority [-13.. -7]
+ erlang:make_tuple(6, queue:new()), % priority [ -6.. -1]
+ queue:new(), % priority 0 (default)
+ erlang:make_tuple(6, queue:new()), % priority [ 1.. 6]
+ erlang:make_tuple(7, queue:new()), % priority [ 7.. 13]
+ erlang:make_tuple(7, queue:new())}. % priority [ 14.. 20]
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue()) ->
+ {{'value', term()}, pqueue()} | {'empty', pqueue()}.
+
+out({empty, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out({Pc, _, _, _, _, _, _, _} = Q) ->
+ out_current(Pc, Q, nopriority).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue()) ->
+ {{'value', term()}, pqueue()} | {'empty', pqueue()}.
+
+out(P, _)
+ when P < -20; P > 20 ->
+ erlang:exit(badarg);
+out(_, {empty, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out(P, Q) ->
+ out_specific(P, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue()) ->
+ {{'value', term(), integer()}, pqueue()} | {'empty', pqueue()}.
+
+pout({empty, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+pout({Pc, _, _, _, _, _, _, _} = Q) ->
+ out_current(Pc, Q, priority).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue()) -> list(term()).
+
+to_list({_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ queue:to_list(Qn20) ++ queue:to_list(Qn19) ++ queue:to_list(Qn18) ++
+ queue:to_list(Qn17) ++ queue:to_list(Qn16) ++ queue:to_list(Qn15) ++
+ queue:to_list(Qn14) ++
+ queue:to_list(Qn13) ++ queue:to_list(Qn12) ++ queue:to_list(Qn11) ++
+ queue:to_list(Qn10) ++ queue:to_list(Qn9) ++ queue:to_list(Qn8) ++
+ queue:to_list(Qn7) ++
+ queue:to_list(Qn6) ++ queue:to_list(Qn5) ++ queue:to_list(Qn4) ++
+ queue:to_list(Qn3) ++ queue:to_list(Qn2) ++ queue:to_list(Qn1) ++
+ queue:to_list(Q0) ++
+ queue:to_list(Qp1) ++ queue:to_list(Qp2) ++ queue:to_list(Qp3) ++
+ queue:to_list(Qp4) ++ queue:to_list(Qp5) ++ queue:to_list(Qp6) ++
+ queue:to_list(Qp7) ++ queue:to_list(Qp8) ++ queue:to_list(Qp9) ++
+ queue:to_list(Qp10) ++ queue:to_list(Qp11) ++ queue:to_list(Qp12) ++
+ queue:to_list(Qp13) ++
+ queue:to_list(Qp14) ++ queue:to_list(Qp15) ++ queue:to_list(Qp16) ++
+ queue:to_list(Qp17) ++ queue:to_list(Qp18) ++ queue:to_list(Qp19) ++
+ queue:to_list(Qp20).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Regression test.===
+%% @end
+%%-------------------------------------------------------------------------
+
+test() ->
+ Q0 = pqueue:new(),
+ true = pqueue:is_queue(Q0),
+ Q1 = pqueue:in(20, 20, Q0),
+ Q2 = pqueue:in(19, 19, Q1),
+ Q3 = pqueue:in(18, 18, Q2),
+ Q4 = pqueue:in(17, 17, Q3),
+ Q5 = pqueue:in(16, 16, Q4),
+ Q6 = pqueue:in(15, 15, Q5),
+ Q7 = pqueue:in(14, 14, Q6),
+ Q8 = pqueue:in(13, 13, Q7),
+ Q9 = pqueue:in(12, 12, Q8),
+ Q10 = pqueue:in(11, 11, Q9),
+ Q11 = pqueue:in(10, 10, Q10),
+ Q12 = pqueue:in(9, 9, Q11),
+ Q13 = pqueue:in(8, 8, Q12),
+ Q14 = pqueue:in(7, 7, Q13),
+ Q15 = pqueue:in(6, 6, Q14),
+ Q16 = pqueue:in(5, 5, Q15),
+ Q17 = pqueue:in(4, 4, Q16),
+ Q18 = pqueue:in(3, 3, Q17),
+ Q19 = pqueue:in(2, 2, Q18),
+ Q20 = pqueue:in(1, 1, Q19),
+ Q21 = pqueue:in(0, 0, Q20),
+ Q22 = pqueue:in(-1, -1, Q21),
+ Q23 = pqueue:in(-2, -2, Q22),
+ Q24 = pqueue:in(-3, -3, Q23),
+ Q25 = pqueue:in(-4, -4, Q24),
+ Q26 = pqueue:in(-5, -5, Q25),
+ Q27 = pqueue:in(-6, -6, Q26),
+ Q28 = pqueue:in(-7, -7, Q27),
+ Q29 = pqueue:in(-8, -8, Q28),
+ Q30 = pqueue:in(-9, -9, Q29),
+ Q31 = pqueue:in(-10, -10, Q30),
+ Q32 = pqueue:in(-11, -11, Q31),
+ Q33 = pqueue:in(-12, -12, Q32),
+ Q34 = pqueue:in(-13, -13, Q33),
+ Q35 = pqueue:in(-14, -14, Q34),
+ Q36 = pqueue:in(-15, -15, Q35),
+ Q37 = pqueue:in(-16, -16, Q36),
+ Q38 = pqueue:in(-17, -17, Q37),
+ Q39 = pqueue:in(-18, -18, Q38),
+ Q40 = pqueue:in(-19, -19, Q39),
+ Q41 = pqueue:in(-20, -20, Q40),
+ Q42 = pqueue:in(-20, -20, Q41),
+ Q43 = pqueue:in(-19, -19, Q42),
+ Q44 = pqueue:in(-18, -18, Q43),
+ Q45 = pqueue:in(-17, -17, Q44),
+ Q46 = pqueue:in(-16, -16, Q45),
+ Q47 = pqueue:in(-15, -15, Q46),
+ Q48 = pqueue:in(-14, -14, Q47),
+ Q49 = pqueue:in(-13, -13, Q48),
+ Q50 = pqueue:in(-12, -12, Q49),
+ Q51 = pqueue:in(-11, -11, Q50),
+ Q52 = pqueue:in(-10, -10, Q51),
+ Q53 = pqueue:in(-9, -9, Q52),
+ Q54 = pqueue:in(-8, -8, Q53),
+ Q55 = pqueue:in(-7, -7, Q54),
+ Q56 = pqueue:in(-6, -6, Q55),
+ Q57 = pqueue:in(-5, -5, Q56),
+ Q58 = pqueue:in(-4, -4, Q57),
+ Q59 = pqueue:in(-3, -3, Q58),
+ Q60 = pqueue:in(-2, -2, Q59),
+ Q61 = pqueue:in(-1, -1, Q60),
+ Q62 = pqueue:in(0, 0, Q61),
+ Q63 = pqueue:in(1, 1, Q62),
+ Q64 = pqueue:in(2, 2, Q63),
+ Q65 = pqueue:in(3, 3, Q64),
+ Q66 = pqueue:in(4, 4, Q65),
+ Q67 = pqueue:in(5, 5, Q66),
+ Q68 = pqueue:in(6, 6, Q67),
+ Q69 = pqueue:in(7, 7, Q68),
+ Q70 = pqueue:in(8, 8, Q69),
+ Q71 = pqueue:in(9, 9, Q70),
+ Q72 = pqueue:in(10, 10, Q71),
+ Q73 = pqueue:in(11, 11, Q72),
+ Q74 = pqueue:in(12, 12, Q73),
+ Q75 = pqueue:in(13, 13, Q74),
+ Q76 = pqueue:in(14, 14, Q75),
+ Q77 = pqueue:in(15, 15, Q76),
+ Q78 = pqueue:in(16, 16, Q77),
+ Q79 = pqueue:in(17, 17, Q78),
+ Q80 = pqueue:in(18, 18, Q79),
+ Q81 = pqueue:in(19, 19, Q80),
+ Q82 = pqueue:in(20, 20, Q81),
+ true = pqueue:is_queue(Q82),
+ 82 = pqueue:len(Q82),
+ [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14,
+ -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6,
+ -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
+ 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue:to_list(Q82),
+ {{value, -20}, Q83} = pqueue:out(Q82),
+ {{value, -20}, Q84} = pqueue:out(Q83),
+ {{value, -19}, Q85} = pqueue:out(Q84),
+ {{value, -19}, Q86} = pqueue:out(Q85),
+ {{value, -18}, Q87} = pqueue:out(Q86),
+ {{value, -18}, Q88} = pqueue:out(Q87),
+ {{value, 0}, Q89} = pqueue:out(0, Q88),
+ {{value, 0}, Q90} = pqueue:out(0, Q89),
+ {empty, _} = pqueue:out(0, Q90),
+ {{value, -17, -17}, Q91} = pqueue:pout(Q90),
+ {{value, -17, -17}, Q92} = pqueue:pout(Q91),
+ {{value, -16, -16}, Q93} = pqueue:pout(Q92),
+ {{value, -16, -16}, Q94} = pqueue:pout(Q93),
+ {{value, -15, -15}, Q95} = pqueue:pout(Q94),
+ {{value, -15, -15}, Q96} = pqueue:pout(Q95),
+ {{value, -14, -14}, Q97} = pqueue:pout(Q96),
+ {{value, -14, -14}, Q98} = pqueue:pout(Q97),
+ {{value, -13, -13}, Q99} = pqueue:pout(Q98),
+ {{value, -13, -13}, Q100} = pqueue:pout(Q99),
+ {{value, -12, -12}, Q101} = pqueue:pout(Q100),
+ {{value, -12, -12}, Q102} = pqueue:pout(Q101),
+ {{value, -11, -11}, Q103} = pqueue:pout(Q102),
+ {{value, -11, -11}, Q104} = pqueue:pout(Q103),
+ {{value, -10, -10}, Q105} = pqueue:pout(Q104),
+ {{value, -10, -10}, Q106} = pqueue:pout(Q105),
+ {{value, -9, -9}, Q107} = pqueue:pout(Q106),
+ {{value, -9, -9}, Q108} = pqueue:pout(Q107),
+ {{value, -8, -8}, Q109} = pqueue:pout(Q108),
+ {{value, -8, -8}, Q110} = pqueue:pout(Q109),
+ {{value, -7, -7}, Q111} = pqueue:pout(Q110),
+ {{value, -7, -7}, Q112} = pqueue:pout(Q111),
+ {{value, -6, -6}, Q113} = pqueue:pout(Q112),
+ {{value, -6, -6}, Q114} = pqueue:pout(Q113),
+ {{value, -5, -5}, Q115} = pqueue:pout(Q114),
+ {{value, -5, -5}, Q116} = pqueue:pout(Q115),
+ {{value, -4, -4}, Q117} = pqueue:pout(Q116),
+ {{value, -4, -4}, Q118} = pqueue:pout(Q117),
+ {{value, -3, -3}, Q119} = pqueue:pout(Q118),
+ {{value, -3, -3}, Q120} = pqueue:pout(Q119),
+ {{value, -2, -2}, Q121} = pqueue:pout(Q120),
+ {{value, -2, -2}, Q122} = pqueue:pout(Q121),
+ {{value, -1, -1}, Q123} = pqueue:pout(Q122),
+ {{value, -1, -1}, Q124} = pqueue:pout(Q123),
+ {{value, 1, 1}, Q125} = pqueue:pout(Q124),
+ {{value, 1, 1}, Q126} = pqueue:pout(Q125),
+ {{value, 2, 2}, Q127} = pqueue:pout(Q126),
+ {{value, 2, 2}, Q128} = pqueue:pout(Q127),
+ {{value, 3, 3}, Q129} = pqueue:pout(Q128),
+ {{value, 3, 3}, Q130} = pqueue:pout(Q129),
+ {{value, 4, 4}, Q131} = pqueue:pout(Q130),
+ {{value, 4, 4}, Q132} = pqueue:pout(Q131),
+ {{value, 5, 5}, Q133} = pqueue:pout(Q132),
+ {{value, 5, 5}, Q134} = pqueue:pout(Q133),
+ {{value, 6, 6}, Q135} = pqueue:pout(Q134),
+ {{value, 6, 6}, Q136} = pqueue:pout(Q135),
+ {{value, 7, 7}, Q137} = pqueue:pout(Q136),
+ {{value, 7, 7}, Q138} = pqueue:pout(Q137),
+ {{value, 8, 8}, Q139} = pqueue:pout(Q138),
+ {{value, 8, 8}, Q140} = pqueue:pout(Q139),
+ {{value, 9, 9}, Q141} = pqueue:pout(Q140),
+ {{value, 9, 9}, Q142} = pqueue:pout(Q141),
+ {{value, 10, 10}, Q143} = pqueue:pout(Q142),
+ {{value, 10, 10}, Q144} = pqueue:pout(Q143),
+ {{value, 11, 11}, Q145} = pqueue:pout(Q144),
+ {{value, 11, 11}, Q146} = pqueue:pout(Q145),
+ {{value, 12, 12}, Q147} = pqueue:pout(Q146),
+ {{value, 12, 12}, Q148} = pqueue:pout(Q147),
+ {{value, 13, 13}, Q149} = pqueue:pout(Q148),
+ {{value, 13, 13}, Q150} = pqueue:pout(Q149),
+ {{value, 14, 14}, Q151} = pqueue:pout(Q150),
+ {{value, 14, 14}, Q152} = pqueue:pout(Q151),
+ {{value, 15, 15}, Q153} = pqueue:pout(Q152),
+ {{value, 15, 15}, Q154} = pqueue:pout(Q153),
+ {{value, 16, 16}, Q155} = pqueue:pout(Q154),
+ {{value, 16, 16}, Q156} = pqueue:pout(Q155),
+ {{value, 17, 17}, Q157} = pqueue:pout(Q156),
+ {{value, 17, 17}, Q158} = pqueue:pout(Q157),
+ {{value, 18, 18}, Q159} = pqueue:pout(Q158),
+ {{value, 18, 18}, Q160} = pqueue:pout(Q159),
+ {{value, 19, 19}, Q161} = pqueue:pout(Q160),
+ {{value, 19, 19}, Q162} = pqueue:pout(Q161),
+ {{value, 20, 20}, Q163} = pqueue:pout(Q162),
+ {{value, 20, 20}, Q164} = pqueue:pout(Q163),
+ true = pqueue:is_empty(Q164),
+ {empty, Q165} = pqueue:pout(Q164),
+ true = pqueue:is_empty(Q165),
+ ok.
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+in_higher(-20, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-20,
+ {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-19, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-19,
+ {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-18, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-18,
+ {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-17, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-17,
+ {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-16, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-16,
+ {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-15, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-15,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-14, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-14,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-13, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-13, Qsn14,
+ {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-12, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-12, Qsn14,
+ {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-11, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-11, Qsn14,
+ {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-10, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-10, Qsn14,
+ {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-9, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-9, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-8, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-8, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-7, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-7, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-6, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-6, Qsn14, Qsn7,
+ {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-5, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-5, Qsn14, Qsn7,
+ {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-4, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-4, Qsn14, Qsn7,
+ {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-3, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-3, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-2, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-2, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-1, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-1, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(0, {_, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {0, Qsn14, Qsn7, Qsn1,
+ queue:in(X, Q0),
+ Qsp1, Qsp7, Qsp14};
+in_higher(1, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {1, Qsn14, Qsn7, Qsn1, Q0,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(2, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {2, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(3, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {3, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(4, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {4, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(5, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {5, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6},
+ Qsp7, Qsp14};
+in_higher(6, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {6, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)},
+ Qsp7, Qsp14};
+in_higher(7, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(8, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(9, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(10, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(11, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13},
+ Qsp14};
+in_higher(12, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13},
+ Qsp14};
+in_higher(13, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)},
+ Qsp14};
+in_higher(14, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_higher(15, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_higher(16, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}};
+in_higher(17, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}};
+in_higher(18, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}};
+in_higher(19, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}};
+in_higher(20, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}.
+
+in_lower(-20, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-19, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-18, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-17, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-16, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-15, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-14, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-13, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-12, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-11, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-10, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-9, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-8, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-7, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-6, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-5, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-4, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-3, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-2, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-1, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(0, {Pc, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1,
+ queue:in(X, Q0),
+ Qsp1, Qsp7, Qsp14};
+in_lower(1, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(2, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(3, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(4, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(5, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6},
+ Qsp7, Qsp14};
+in_lower(6, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)},
+ Qsp7, Qsp14};
+in_lower(7, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(8, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(9, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(10, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(11, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13},
+ Qsp14};
+in_lower(12, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13},
+ Qsp14};
+in_lower(13, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)},
+ Qsp14};
+in_lower(14, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_lower(15, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_lower(16, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}};
+in_lower(17, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}};
+in_lower(18, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}};
+in_lower(19, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}};
+in_lower(20, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}.
+
+out_current(-20,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn20} = queue:out(Qn20),
+ if
+ Value =:= empty ->
+ out_current(-19, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -20};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-20,
+ {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-19,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn19} = queue:out(Qn19),
+ if
+ Value =:= empty ->
+ out_current(-18, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -19};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-19,
+ {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-18,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn18} = queue:out(Qn18),
+ if
+ Value =:= empty ->
+ out_current(-17, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -18};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-18,
+ {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-17,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn17} = queue:out(Qn17),
+ if
+ Value =:= empty ->
+ out_current(-16, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -17};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-17,
+ {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-16,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn16} = queue:out(Qn16),
+ if
+ Value =:= empty ->
+ out_current(-15, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -16};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-16,
+ {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-15,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn15} = queue:out(Qn15),
+ if
+ Value =:= empty ->
+ out_current(-14, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -15};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-15,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-14,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn14} = queue:out(Qn14),
+ if
+ Value =:= empty ->
+ out_current(-13, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -14};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-14,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-13,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn13} = queue:out(Qn13),
+ if
+ Value =:= empty ->
+ out_current(-12, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -13};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-13, Qsn14,
+ {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-12,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn12} = queue:out(Qn12),
+ if
+ Value =:= empty ->
+ out_current(-11, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -12};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-12, Qsn14,
+ {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-11,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn11} = queue:out(Qn11),
+ if
+ Value =:= empty ->
+ out_current(-10, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -11};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-11, Qsn14,
+ {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-10,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn10} = queue:out(Qn10),
+ if
+ Value =:= empty ->
+ out_current(-9, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -10};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-10, Qsn14,
+ {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-9,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn9} = queue:out(Qn9),
+ if
+ Value =:= empty ->
+ out_current(-8, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -9};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-9, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-8,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn8} = queue:out(Qn8),
+ if
+ Value =:= empty ->
+ out_current(-7, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -8};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-8, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-7,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn7} = queue:out(Qn7),
+ if
+ Value =:= empty ->
+ out_current(-6, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -7};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-7, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-6,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn6} = queue:out(Qn6),
+ if
+ Value =:= empty ->
+ out_current(-5, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -6};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-6, Qsn14, Qsn7,
+ {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-5,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn5} = queue:out(Qn5),
+ if
+ Value =:= empty ->
+ out_current(-4, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -5};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-5, Qsn14, Qsn7,
+ {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-4,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn4} = queue:out(Qn4),
+ if
+ Value =:= empty ->
+ out_current(-3, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -4};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-4, Qsn14, Qsn7,
+ {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-3,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn3} = queue:out(Qn3),
+ if
+ Value =:= empty ->
+ out_current(-2, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -3};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-3, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-2,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn2} = queue:out(Qn2),
+ if
+ Value =:= empty ->
+ out_current(-1, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -2};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-2, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-1,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn1} = queue:out(Qn1),
+ if
+ Value =:= empty ->
+ out_current(0, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -1};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-1, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(0,
+ {_, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQ0} = queue:out(Q0),
+ if
+ Value =:= empty ->
+ out_current(1, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 0};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {0, Qsn14, Qsn7, Qsn1,
+ NewQ0,
+ Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(1,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp1} = queue:out(Qp1),
+ if
+ Value =:= empty ->
+ out_current(2, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 1};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {1, Qsn14, Qsn7, Qsn1, Q0,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(2,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp2} = queue:out(Qp2),
+ if
+ Value =:= empty ->
+ out_current(3, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 2};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {2, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(3,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp3} = queue:out(Qp3),
+ if
+ Value =:= empty ->
+ out_current(4, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 3};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {3, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(4,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp4} = queue:out(Qp4),
+ if
+ Value =:= empty ->
+ out_current(5, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 4};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {4, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(5,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp5} = queue:out(Qp5),
+ if
+ Value =:= empty ->
+ out_current(6, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 5};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {5, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(6,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp6} = queue:out(Qp6),
+ if
+ Value =:= empty ->
+ out_current(7, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 6};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {6, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(7,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp7} = queue:out(Qp7),
+ if
+ Value =:= empty ->
+ out_current(8, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 7};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(8,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp8} = queue:out(Qp8),
+ if
+ Value =:= empty ->
+ out_current(9, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 8};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(9,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp9} = queue:out(Qp9),
+ if
+ Value =:= empty ->
+ out_current(10, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 9};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(10,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp10} = queue:out(Qp10),
+ if
+ Value =:= empty ->
+ out_current(11, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 10};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(11,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp11} = queue:out(Qp11),
+ if
+ Value =:= empty ->
+ out_current(12, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 11};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(12,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp12} = queue:out(Qp12),
+ if
+ Value =:= empty ->
+ out_current(13, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 12};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13},
+ Qsp14}}
+ end;
+out_current(13,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp13} = queue:out(Qp13),
+ if
+ Value =:= empty ->
+ out_current(14, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 13};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13},
+ Qsp14}}
+ end;
+out_current(14,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp14} = queue:out(Qp14),
+ if
+ Value =:= empty ->
+ out_current(15, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 14};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(15,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp15} = queue:out(Qp15),
+ if
+ Value =:= empty ->
+ out_current(16, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 15};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(16,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp16} = queue:out(Qp16),
+ if
+ Value =:= empty ->
+ out_current(17, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 16};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(17,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp17} = queue:out(Qp17),
+ if
+ Value =:= empty ->
+ out_current(18, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 17};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(18,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp18} = queue:out(Qp18),
+ if
+ Value =:= empty ->
+ out_current(19, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 18};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}}
+ end;
+out_current(19,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp19} = queue:out(Qp19),
+ if
+ Value =:= empty ->
+ out_current(20, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 19};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}}
+ end;
+out_current(20,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20} = Qsp14}, ReturnType) ->
+ {Value, NewQp20} = queue:out(Qp20),
+ if
+ Value =:= empty ->
+ {empty, {empty, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 20};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}}
+ end.
+
+out_specific(-20,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn20} = queue:out(Qn20),
+ {Value,
+ {Pc,
+ {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-19,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn19} = queue:out(Qn19),
+ {Value,
+ {Pc,
+ {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-18,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn18} = queue:out(Qn18),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-17,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn17} = queue:out(Qn17),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-16,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn16} = queue:out(Qn16),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-15,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn15} = queue:out(Qn15),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-14,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn14} = queue:out(Qn14),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-13,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn13} = queue:out(Qn13),
+ {Value,
+ {Pc, Qsn14,
+ {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-12,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn12} = queue:out(Qn12),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-11,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn11} = queue:out(Qn11),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-10,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn10} = queue:out(Qn10),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-9,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn9} = queue:out(Qn9),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-8,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn8} = queue:out(Qn8),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-7,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn7} = queue:out(Qn7),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-6,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn6} = queue:out(Qn6),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-5,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn5} = queue:out(Qn5),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-4,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn4} = queue:out(Qn4),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-3,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn3} = queue:out(Qn3),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-2,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn2} = queue:out(Qn2),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-1,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn1} = queue:out(Qn1),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(0,
+ {Pc, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQ0} = queue:out(Q0),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1,
+ NewQ0,
+ Qsp1, Qsp7, Qsp14}};
+out_specific(1,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp1} = queue:out(Qp1),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(2,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp2} = queue:out(Qp2),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(3,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp3} = queue:out(Qp3),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(4,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp4} = queue:out(Qp4),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(5,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp5} = queue:out(Qp5),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(6,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp6} = queue:out(Qp6),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6},
+ Qsp7, Qsp14}};
+out_specific(7,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp7} = queue:out(Qp7),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(8,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp8} = queue:out(Qp8),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(9,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp9} = queue:out(Qp9),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(10,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp10} = queue:out(Qp10),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(11,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp11} = queue:out(Qp11),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(12,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp12} = queue:out(Qp12),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13},
+ Qsp14}};
+out_specific(13,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp13} = queue:out(Qp13),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13},
+ Qsp14}};
+out_specific(14,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp14} = queue:out(Qp14),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}};
+out_specific(15,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp15} = queue:out(Qp15),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}};
+out_specific(16,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp16} = queue:out(Qp16),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}};
+out_specific(17,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp17} = queue:out(Qp17),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}};
+out_specific(18,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp18} = queue:out(Qp18),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}};
+out_specific(19,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp19} = queue:out(Qp19),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}};
+out_specific(20,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp20} = queue:out(Qp20),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}}.
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("pqueue_test.hrl").
+
+module_test_() ->
+ {timeout, ?TEST_TIMEOUT, [
+ {"internal tests", ?_assertOk(test())}
+ ]}.
+
+long_test_() ->
+ test_condition([
+ {"proper tests", ?_assert(pqueue_proper:qc_pq())}
+ ], ?CLOUDI_LONG_TEST_TIMEOUT).
+
+-endif.
+
diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl
new file mode 100644
index 0000000..bbdeaaf
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue2.erl
@@ -0,0 +1,483 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==Skew Heap Priority Queue.==
+%%% Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority
+%%% queue implementation. Unfortunately, testing has shown this solution to
+%%% be more than 2 times slower than pqueue.
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue2).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([in/2,
+ in/3,
+ is_empty/1,
+ is_queue/1,
+ len/1,
+ new/0,
+ out/1,
+ out/2,
+ pout/1,
+ to_list/1,
+ test/0]).
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-ifdef(ERLANG_OTP_VERSION_16).
+-type pqueue2() ::
+ empty |
+ {integer(), pqueue2(), pqueue2(), element, term()} |
+ {integer(), pqueue2(), pqueue2(), queue, queue()}.
+-else.
+-type pqueue2() ::
+ empty |
+ {integer(), pqueue2(), pqueue2(), element, term()} |
+ {integer(), pqueue2(), pqueue2(), queue, queue:queue()}.
+-endif.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), pqueue2()) -> pqueue2().
+
+in(Value, H) ->
+ in(Value, 0, H).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), integer(), pqueue2()) -> pqueue2().
+
+in(Value, P, H) ->
+ merge({P, empty, empty, element, Value}, H).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue2()) -> 'true' | 'false'.
+
+is_empty(empty) ->
+ true;
+is_empty({_, HL, HR, queue, Queue}) ->
+ is_empty(HL) andalso is_empty(HR) andalso queue:is_empty(Queue);
+is_empty(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue2()) -> 'true' | 'false'.
+
+is_queue(empty) ->
+ true;
+is_queue({P, _, _, element, _})
+ when is_integer(P) ->
+ true;
+is_queue({P, _, _, queue, Queue})
+ when is_integer(P) ->
+ queue:is_queue(Queue);
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue2()) -> non_neg_integer().
+
+len(H) ->
+ len(0, out(H)).
+len(I, {empty, _}) ->
+ I;
+len(I, {{value, _}, H}) ->
+ len(I + 1, out(H)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue2().
+
+new() ->
+ empty.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue2()) ->
+ {{'value', term()}, pqueue2()} | {'empty', pqueue2()}.
+
+out(empty) ->
+ {empty, empty};
+out({_, HL, HR, element, Value}) ->
+ {{value, Value}, merge(HL, HR)};
+out({P, HL, HR, queue, Queue}) ->
+ case queue:out(Queue) of
+ {{value, _} = Result, NewQueue} ->
+ {Result, {P, HL, HR, queue, NewQueue}};
+ {empty, _} ->
+ out(merge(HL, HR))
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue2()) ->
+ {{'value', term()}, pqueue2()} | {'empty', pqueue2()}.
+
+out(_, empty) ->
+ {empty, empty};
+out(P, {P1, _, _, _, _} = H) when P < P1 ->
+ {empty, H};
+out(P, {P1, HL1, HR1, T, D}) when P > P1 ->
+ case out(P, HL1) of
+ {{value, _} = Result, HL2} ->
+ {Result, {P1, HL2, HR1, T, D}};
+ {empty, HL2} ->
+ case out(P, HR1) of
+ {{value, _} = Result, HR2} ->
+ {Result, {P1, HL2, HR2, T, D}};
+ {empty, HR2} ->
+ {empty, {P1, HL2, HR2, T, D}}
+ end
+ end;
+out(P, {P, HL, HR, element, Value}) ->
+ {{value, Value}, merge(HL, HR)};
+out(P, {P, HL, HR, queue, Queue}) ->
+ case queue:out(Queue) of
+ {{value, _} = Result, NewQueue} ->
+ {Result, {P, HL, HR, queue, NewQueue}};
+ {empty, _} ->
+ out(P, merge(HL, HR))
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue2()) ->
+ {{'value', term(), integer()}, pqueue2()} | {'empty', pqueue2()}.
+
+pout(empty) ->
+ {empty, empty};
+pout({P, HL, HR, element, Value}) ->
+ {{value, Value, P}, merge(HL, HR)};
+pout({P, HL, HR, queue, Queue}) ->
+ case queue:out(Queue) of
+ {{value, Value}, NewQueue} ->
+ {{value, Value, P}, {P, HL, HR, queue, NewQueue}};
+ {empty, _} ->
+ pout(merge(HL, HR))
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue2()) -> list(term()).
+
+to_list(H) ->
+ to_list([], out(H)).
+to_list(L, {empty, _}) ->
+ lists:reverse(L);
+to_list(L, {{value, Value}, H}) ->
+ to_list([Value | L], out(H)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Regression test.===
+%% @end
+%%-------------------------------------------------------------------------
+
+test() ->
+ Q0 = pqueue2:new(),
+ true = pqueue2:is_queue(Q0),
+ Q1 = pqueue2:in(20, 20, Q0),
+ Q2 = pqueue2:in(19, 19, Q1),
+ Q3 = pqueue2:in(18, 18, Q2),
+ Q4 = pqueue2:in(17, 17, Q3),
+ Q5 = pqueue2:in(16, 16, Q4),
+ Q6 = pqueue2:in(15, 15, Q5),
+ Q7 = pqueue2:in(14, 14, Q6),
+ Q8 = pqueue2:in(13, 13, Q7),
+ Q9 = pqueue2:in(12, 12, Q8),
+ Q10 = pqueue2:in(11, 11, Q9),
+ Q11 = pqueue2:in(10, 10, Q10),
+ Q12 = pqueue2:in(9, 9, Q11),
+ Q13 = pqueue2:in(8, 8, Q12),
+ Q14 = pqueue2:in(7, 7, Q13),
+ Q15 = pqueue2:in(6, 6, Q14),
+ Q16 = pqueue2:in(5, 5, Q15),
+ Q17 = pqueue2:in(4, 4, Q16),
+ Q18 = pqueue2:in(3, 3, Q17),
+ Q19 = pqueue2:in(2, 2, Q18),
+ Q20 = pqueue2:in(1, 1, Q19),
+ Q21 = pqueue2:in(0, 0, Q20),
+ Q22 = pqueue2:in(-1, -1, Q21),
+ Q23 = pqueue2:in(-2, -2, Q22),
+ Q24 = pqueue2:in(-3, -3, Q23),
+ Q25 = pqueue2:in(-4, -4, Q24),
+ Q26 = pqueue2:in(-5, -5, Q25),
+ Q27 = pqueue2:in(-6, -6, Q26),
+ Q28 = pqueue2:in(-7, -7, Q27),
+ Q29 = pqueue2:in(-8, -8, Q28),
+ Q30 = pqueue2:in(-9, -9, Q29),
+ Q31 = pqueue2:in(-10, -10, Q30),
+ Q32 = pqueue2:in(-11, -11, Q31),
+ Q33 = pqueue2:in(-12, -12, Q32),
+ Q34 = pqueue2:in(-13, -13, Q33),
+ Q35 = pqueue2:in(-14, -14, Q34),
+ Q36 = pqueue2:in(-15, -15, Q35),
+ Q37 = pqueue2:in(-16, -16, Q36),
+ Q38 = pqueue2:in(-17, -17, Q37),
+ Q39 = pqueue2:in(-18, -18, Q38),
+ Q40 = pqueue2:in(-19, -19, Q39),
+ Q41 = pqueue2:in(-20, -20, Q40),
+ Q42 = pqueue2:in(-20, -20, Q41),
+ Q43 = pqueue2:in(-19, -19, Q42),
+ Q44 = pqueue2:in(-18, -18, Q43),
+ Q45 = pqueue2:in(-17, -17, Q44),
+ Q46 = pqueue2:in(-16, -16, Q45),
+ Q47 = pqueue2:in(-15, -15, Q46),
+ Q48 = pqueue2:in(-14, -14, Q47),
+ Q49 = pqueue2:in(-13, -13, Q48),
+ Q50 = pqueue2:in(-12, -12, Q49),
+ Q51 = pqueue2:in(-11, -11, Q50),
+ Q52 = pqueue2:in(-10, -10, Q51),
+ Q53 = pqueue2:in(-9, -9, Q52),
+ Q54 = pqueue2:in(-8, -8, Q53),
+ Q55 = pqueue2:in(-7, -7, Q54),
+ Q56 = pqueue2:in(-6, -6, Q55),
+ Q57 = pqueue2:in(-5, -5, Q56),
+ Q58 = pqueue2:in(-4, -4, Q57),
+ Q59 = pqueue2:in(-3, -3, Q58),
+ Q60 = pqueue2:in(-2, -2, Q59),
+ Q61 = pqueue2:in(-1, -1, Q60),
+ Q62 = pqueue2:in(0, 0, Q61),
+ Q63 = pqueue2:in(1, 1, Q62),
+ Q64 = pqueue2:in(2, 2, Q63),
+ Q65 = pqueue2:in(3, 3, Q64),
+ Q66 = pqueue2:in(4, 4, Q65),
+ Q67 = pqueue2:in(5, 5, Q66),
+ Q68 = pqueue2:in(6, 6, Q67),
+ Q69 = pqueue2:in(7, 7, Q68),
+ Q70 = pqueue2:in(8, 8, Q69),
+ Q71 = pqueue2:in(9, 9, Q70),
+ Q72 = pqueue2:in(10, 10, Q71),
+ Q73 = pqueue2:in(11, 11, Q72),
+ Q74 = pqueue2:in(12, 12, Q73),
+ Q75 = pqueue2:in(13, 13, Q74),
+ Q76 = pqueue2:in(14, 14, Q75),
+ Q77 = pqueue2:in(15, 15, Q76),
+ Q78 = pqueue2:in(16, 16, Q77),
+ Q79 = pqueue2:in(17, 17, Q78),
+ Q80 = pqueue2:in(18, 18, Q79),
+ Q81 = pqueue2:in(19, 19, Q80),
+ Q82 = pqueue2:in(20, 20, Q81),
+ true = pqueue2:is_queue(Q82),
+ 82 = pqueue2:len(Q82),
+ [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14,
+ -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6,
+ -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
+ 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue2:to_list(Q82),
+ {{value, -20}, Q83} = pqueue2:out(Q82),
+ {{value, -20}, Q84} = pqueue2:out(Q83),
+ {{value, -19}, Q85} = pqueue2:out(Q84),
+ {{value, -19}, Q86} = pqueue2:out(Q85),
+ {{value, -18}, Q87} = pqueue2:out(Q86),
+ {{value, -18}, Q88} = pqueue2:out(Q87),
+ {{value, 0}, Q89} = pqueue2:out(0, Q88),
+ {{value, 0}, Q90} = pqueue2:out(0, Q89),
+ {empty, _} = pqueue2:out(0, Q90),
+ {{value, -17, -17}, Q91} = pqueue2:pout(Q90),
+ {{value, -17, -17}, Q92} = pqueue2:pout(Q91),
+ {{value, -16, -16}, Q93} = pqueue2:pout(Q92),
+ {{value, -16, -16}, Q94} = pqueue2:pout(Q93),
+ {{value, -15, -15}, Q95} = pqueue2:pout(Q94),
+ {{value, -15, -15}, Q96} = pqueue2:pout(Q95),
+ {{value, -14, -14}, Q97} = pqueue2:pout(Q96),
+ {{value, -14, -14}, Q98} = pqueue2:pout(Q97),
+ {{value, -13, -13}, Q99} = pqueue2:pout(Q98),
+ {{value, -13, -13}, Q100} = pqueue2:pout(Q99),
+ {{value, -12, -12}, Q101} = pqueue2:pout(Q100),
+ {{value, -12, -12}, Q102} = pqueue2:pout(Q101),
+ {{value, -11, -11}, Q103} = pqueue2:pout(Q102),
+ {{value, -11, -11}, Q104} = pqueue2:pout(Q103),
+ {{value, -10, -10}, Q105} = pqueue2:pout(Q104),
+ {{value, -10, -10}, Q106} = pqueue2:pout(Q105),
+ {{value, -9, -9}, Q107} = pqueue2:pout(Q106),
+ {{value, -9, -9}, Q108} = pqueue2:pout(Q107),
+ {{value, -8, -8}, Q109} = pqueue2:pout(Q108),
+ {{value, -8, -8}, Q110} = pqueue2:pout(Q109),
+ {{value, -7, -7}, Q111} = pqueue2:pout(Q110),
+ {{value, -7, -7}, Q112} = pqueue2:pout(Q111),
+ {{value, -6, -6}, Q113} = pqueue2:pout(Q112),
+ {{value, -6, -6}, Q114} = pqueue2:pout(Q113),
+ {{value, -5, -5}, Q115} = pqueue2:pout(Q114),
+ {{value, -5, -5}, Q116} = pqueue2:pout(Q115),
+ {{value, -4, -4}, Q117} = pqueue2:pout(Q116),
+ {{value, -4, -4}, Q118} = pqueue2:pout(Q117),
+ {{value, -3, -3}, Q119} = pqueue2:pout(Q118),
+ {{value, -3, -3}, Q120} = pqueue2:pout(Q119),
+ {{value, -2, -2}, Q121} = pqueue2:pout(Q120),
+ {{value, -2, -2}, Q122} = pqueue2:pout(Q121),
+ {{value, -1, -1}, Q123} = pqueue2:pout(Q122),
+ {{value, -1, -1}, Q124} = pqueue2:pout(Q123),
+ {{value, 1, 1}, Q125} = pqueue2:pout(Q124),
+ {{value, 1, 1}, Q126} = pqueue2:pout(Q125),
+ {{value, 2, 2}, Q127} = pqueue2:pout(Q126),
+ {{value, 2, 2}, Q128} = pqueue2:pout(Q127),
+ {{value, 3, 3}, Q129} = pqueue2:pout(Q128),
+ {{value, 3, 3}, Q130} = pqueue2:pout(Q129),
+ {{value, 4, 4}, Q131} = pqueue2:pout(Q130),
+ {{value, 4, 4}, Q132} = pqueue2:pout(Q131),
+ {{value, 5, 5}, Q133} = pqueue2:pout(Q132),
+ {{value, 5, 5}, Q134} = pqueue2:pout(Q133),
+ {{value, 6, 6}, Q135} = pqueue2:pout(Q134),
+ {{value, 6, 6}, Q136} = pqueue2:pout(Q135),
+ {{value, 7, 7}, Q137} = pqueue2:pout(Q136),
+ {{value, 7, 7}, Q138} = pqueue2:pout(Q137),
+ {{value, 8, 8}, Q139} = pqueue2:pout(Q138),
+ {{value, 8, 8}, Q140} = pqueue2:pout(Q139),
+ {{value, 9, 9}, Q141} = pqueue2:pout(Q140),
+ {{value, 9, 9}, Q142} = pqueue2:pout(Q141),
+ {{value, 10, 10}, Q143} = pqueue2:pout(Q142),
+ {{value, 10, 10}, Q144} = pqueue2:pout(Q143),
+ {{value, 11, 11}, Q145} = pqueue2:pout(Q144),
+ {{value, 11, 11}, Q146} = pqueue2:pout(Q145),
+ {{value, 12, 12}, Q147} = pqueue2:pout(Q146),
+ {{value, 12, 12}, Q148} = pqueue2:pout(Q147),
+ {{value, 13, 13}, Q149} = pqueue2:pout(Q148),
+ {{value, 13, 13}, Q150} = pqueue2:pout(Q149),
+ {{value, 14, 14}, Q151} = pqueue2:pout(Q150),
+ {{value, 14, 14}, Q152} = pqueue2:pout(Q151),
+ {{value, 15, 15}, Q153} = pqueue2:pout(Q152),
+ {{value, 15, 15}, Q154} = pqueue2:pout(Q153),
+ {{value, 16, 16}, Q155} = pqueue2:pout(Q154),
+ {{value, 16, 16}, Q156} = pqueue2:pout(Q155),
+ {{value, 17, 17}, Q157} = pqueue2:pout(Q156),
+ {{value, 17, 17}, Q158} = pqueue2:pout(Q157),
+ {{value, 18, 18}, Q159} = pqueue2:pout(Q158),
+ {{value, 18, 18}, Q160} = pqueue2:pout(Q159),
+ {{value, 19, 19}, Q161} = pqueue2:pout(Q160),
+ {{value, 19, 19}, Q162} = pqueue2:pout(Q161),
+ {{value, 20, 20}, Q163} = pqueue2:pout(Q162),
+ {{value, 20, 20}, Q164} = pqueue2:pout(Q163),
+ true = pqueue2:is_empty(Q164),
+ {empty, Q165} = pqueue2:pout(Q164),
+ true = pqueue2:is_empty(Q165),
+ % test case 1, based on proper testing
+ C1V0 = pqueue2:in(-18, pqueue2:new()),
+ C1V1 = pqueue2:in(9, C1V0),
+ C1V2 = pqueue2:in(-10, -4, C1V1),
+ C1V3 = pqueue2:in(-29, C1V2),
+ C1V4 = pqueue2:in(11, C1V3),
+ 5 = pqueue2:len(C1V4),
+ [-10, -18, 9, -29, 11] = pqueue2:to_list(C1V4),
+ % test case 2, based on proper testing
+ C2V0 = pqueue2:in(-4, -15, pqueue2:new()),
+ C2V1 = pqueue2:in(13, C2V0),
+ C2V2 = pqueue2:in(2, C2V1),
+ [-4, 13, 2] = to_list(C2V2),
+ ok.
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+merge(empty, empty) ->
+ empty;
+merge(empty, {_, _, _, _, _} = H) ->
+ H;
+merge({_, _, _, _, _} = H, empty) ->
+ H;
+merge({P1, HL1, HR1, T, D}, {P2, _, _, _, _} = H2) when P1 < P2 ->
+ {P1, HL1, merge(HR1, H2), T, D};
+merge({P1, _, _, _, _} = H1, {P2, HL2, HR2, T, D}) when P1 > P2 ->
+ {P2, HL2, merge(H1, HR2), T, D};
+merge({P, HL1, HR1, element, Value1}, {P, HL2, HR2, element, Value2}) ->
+ {P, merge(HL1, HR1), merge(HL2, HR2), queue,
+ queue:from_list([Value2, Value1])};
+merge({P, HL1, HR1, queue, Queue}, {P, HL2, HR2, element, Value}) ->
+ {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)};
+merge({P, HL1, HR1, element, Value}, {P, HL2, HR2, queue, Queue}) ->
+ {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)}.
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("pqueue_test.hrl").
+
+module_test_() ->
+ {timeout, ?TEST_TIMEOUT, [
+ {"internal tests", ?_assertOk(test())}
+ ]}.
+
+long_test_() ->
+ test_condition([
+ {"proper tests", ?_assert(pqueue_proper:qc_pq2())}
+ ], ?CLOUDI_LONG_TEST_TIMEOUT).
+
+-endif.
+
diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl
new file mode 100644
index 0000000..03b370a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue3.erl
@@ -0,0 +1,404 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==A Large Priority Queue.==
+%%% This priority queue implementation depends on layered tuples, so that tuple
+%%% access times can be exploited for quick in/out priority queue operations
+%%% when using 64 or more total priorities. This implementation was created
+%%% to avoid the slowness within the priority queue used by
+%%% both RabbitMQ and Riak
+%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue3).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([in/2, % O(1)
+ in/3, % O(1)
+ is_empty/1, % O(1)
+ is_queue/1, % O(1)
+ len/1, % O(N)
+ new/0, % O(1)
+ new/1, % O(1)
+ out/1, % O(1) amortized, O(N) worst case
+ out/2, % O(1) amortized, O(N) worst case
+ pout/1, % O(1) amortized, O(N) worst case
+ to_list/1]). % O(N)
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-type pqueue3() :: {integer(), integer(), empty | integer(), tuple()}.
+-type pqueue3_empty() :: {integer(), integer(), empty, tuple()}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), pqueue3()) -> pqueue3().
+
+in(Value, Q) ->
+ in(Value, 0, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), integer(), pqueue3()) -> pqueue3().
+
+in(_, P, {Size, Offset, _, _})
+ when (P + Offset) < 0; (P + Offset) > Size ->
+ erlang:exit(badarg);
+in(Value, P, {Size, Offset, empty, Bins}) ->
+ PriorityIndex = P + Offset,
+ {Size, Offset, PriorityIndex,
+ in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)};
+in(Value, P, {Size, Offset, I, Bins})
+ when (P + Offset) < I ->
+ PriorityIndex = P + Offset,
+ {Size, Offset, PriorityIndex,
+ in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)};
+in(Value, P, {Size, Offset, I, Bins}) ->
+ {Size, Offset, I,
+ in_queue(layer_indexes(Size, P + Offset), Value, Bins)}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue3()) -> 'true' | 'false'.
+
+is_empty({_, _, empty, _}) ->
+ true;
+is_empty({_, _, _, _} = Q) ->
+ case out(Q) of
+ {empty, _} ->
+ true;
+ {{value, _}, _} ->
+ false
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue3()) -> 'true' | 'false'.
+
+is_queue({Size, Offset, I, Bins})
+ when is_integer(Size), is_integer(Offset), is_tuple(Bins) ->
+ (I =:= empty) or is_integer(I);
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue3()) -> non_neg_integer().
+
+len(Q) ->
+ len(0, out(Q)).
+len(I, {empty, _}) ->
+ I;
+len(I, {{value, _}, Q}) ->
+ len(I + 1, out(Q)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue3_empty().
+
+new() ->
+ new([]).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue with customization options.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new(list({atom(), term()})) -> pqueue3().
+
+new(Options) ->
+ Size = proplists:get_value(priorities, Options, 256),
+ MiddleZero = proplists:get_value(middle_priority_zero, Options, true),
+ Offset = if
+ MiddleZero =:= true ->
+ erlang:round((Size / 2) + 0.5) - 1;
+ true ->
+ 0
+ end,
+ {Size, Offset, empty, create(layer_sizes(Size))}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue3()) ->
+ {{'value', term()}, pqueue3()} | {'empty', pqueue3()}.
+
+out({_, _, empty, _} = Q) ->
+ {empty, Q};
+out({Size, Offset, I, Bins}) ->
+ {Result, NewI, NewBins} = out_check(
+ I, Size, out_queue(layer_indexes(Size, I), Bins)
+ ),
+ {Result, {Size, Offset, NewI, NewBins}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue3()) ->
+ {{'value', term()}, pqueue3()} | {'empty', pqueue3()}.
+
+out(P, {Size, Offset, _, _})
+ when (P + Offset) < 0; (P + Offset) > Size ->
+ erlang:exit(badarg);
+out(_, {_, _, empty, _} = Q) ->
+ {empty, Q};
+out(P, {Size, Offset, I, Bins}) ->
+ {Result, NewBins} = out_queue(layer_indexes(Size, P + Offset), Bins),
+ {Result, {Size, Offset, I, NewBins}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue3()) ->
+ {{'value', term(), integer()}, pqueue3()} | {'empty', pqueue3()}.
+
+pout({_, _, empty, _} = Q) ->
+ {empty, Q};
+pout({Size, Offset, I, Bins}) ->
+ {Result, NewI, NewBins} = pout_check(
+ I, Size, Offset, out_queue(layer_indexes(Size, I), Bins)
+ ),
+ {Result, {Size, Offset, NewI, NewBins}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue3()) -> list(term()).
+
+to_list(Q) ->
+ to_list([], out(Q)).
+to_list(L, {empty, _}) ->
+ lists:reverse(L);
+to_list(L, {{value, Value}, Q}) ->
+ to_list([Value | L], out(Q)).
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+create([]) ->
+ queue:new();
+
+create([I | Is]) ->
+ erlang:make_tuple(I + 1, create(Is)).
+
+in_queue({I1}, Value, Bins1) ->
+ erlang:setelement(I1, Bins1, queue:in(Value, erlang:element(I1, Bins1)));
+
+in_queue({I1, I2}, Value, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2, queue:in(Value, erlang:element(I2, Bins2))));
+
+in_queue({I1, I2, I3}, Value, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3, queue:in(Value, erlang:element(I3, Bins3)))));
+
+in_queue({I1, I2, I3, I4}, Value, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ Bins4 = erlang:element(I3, Bins3),
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3,
+ erlang:setelement(I4, Bins4, queue:in(Value, erlang:element(I4, Bins4)))))).
+
+pout_check(Size, Size, _, {empty, Bins}) ->
+ {empty, empty, Bins};
+pout_check(I, _, Offset, {{value, Value}, Bins}) ->
+ {{value, Value, I - Offset}, I, Bins};
+pout_check(I, Size, Offset, {empty, Bins}) ->
+ NewI = I + 1,
+ pout_check(NewI, Size, Offset, out_queue(layer_indexes(Size, NewI), Bins)).
+
+out_check(Size, Size, {empty, Bins}) ->
+ {empty, empty, Bins};
+out_check(I, _, {{value, _} = Result, Bins}) ->
+ {Result, I, Bins};
+out_check(I, Size, {empty, Bins}) ->
+ NewI = I + 1,
+ out_check(NewI, Size, out_queue(layer_indexes(Size, NewI), Bins)).
+
+out_queue({I1}, Bins1) ->
+ {Result, NewQueue} = queue:out(erlang:element(I1, Bins1)),
+ {Result,
+ erlang:setelement(I1, Bins1, NewQueue)};
+
+out_queue({I1, I2}, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ {Result, NewQueue} = queue:out(erlang:element(I2, Bins2)),
+ {Result,
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2, NewQueue))};
+
+out_queue({I1, I2, I3}, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ {Result, NewQueue} = queue:out(erlang:element(I3, Bins3)),
+ {Result,
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3, NewQueue)))};
+
+out_queue({I1, I2, I3, I4}, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ Bins4 = erlang:element(I3, Bins3),
+ {Result, NewQueue} = queue:out(erlang:element(I4, Bins4)),
+ {Result,
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3,
+ erlang:setelement(I4, Bins4, NewQueue))))}.
+
+layer_indexes(Size, PriorityIndex) ->
+ if
+ Size =< 127 ->
+ {PriorityIndex + 1};
+ Size =< 255 ->
+ <<I1:4, I2:4>> = <<PriorityIndex:8>>,
+ {I1 + 1, I2 + 1};
+ Size =< 511 ->
+ <<I1:4, I2:5>> = <<PriorityIndex:9>>,
+ {I1 + 1, I2 + 1};
+ Size =< 1023 ->
+ <<I1:3, I2:3, I3:4>> = <<PriorityIndex:10>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 2047 ->
+ <<I1:3, I2:4, I3:4>> = <<PriorityIndex:11>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 4095 ->
+ <<I1:4, I2:4, I3:4>> = <<PriorityIndex:12>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 8191 ->
+ <<I1:4, I2:4, I3:5>> = <<PriorityIndex:13>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 16383 ->
+ <<I1:4, I2:5, I3:5>> = <<PriorityIndex:14>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 32767 ->
+ <<I1:3, I2:4, I3:4, I4:4>> = <<PriorityIndex:15>>,
+ {I1 + 1, I2 + 1, I3 + 1, I4 + 1};
+ Size =< 65535 ->
+ <<I1:4, I2:4, I3:4, I4:4>> = <<PriorityIndex:16>>,
+ {I1 + 1, I2 + 1, I3 + 1, I4 + 1}
+ end.
+
+layer_sizes(Size) ->
+ if
+ Size =< 127 ->
+ <<I1:7>> = <<127:7>>,
+ [I1];
+ Size =< 255 ->
+ <<I1:4, I2:4>> = <<255:8>>,
+ [I1, I2];
+ Size =< 511 ->
+ <<I1:4, I2:5>> = <<511:9>>,
+ [I1, I2];
+ Size =< 1023 ->
+ <<I1:3, I2:3, I3:4>> = <<1023:10>>,
+ [I1, I2, I3];
+ Size =< 2047 ->
+ <<I1:3, I2:4, I3:4>> = <<2047:11>>,
+ [I1, I2, I3];
+ Size =< 4095 ->
+ <<I1:4, I2:4, I3:4>> = <<4095:12>>,
+ [I1, I2, I3];
+ Size =< 8191 ->
+ <<I1:4, I2:4, I3:5>> = <<8191:13>>,
+ [I1, I2, I3];
+ Size =< 16383 ->
+ <<I1:4, I2:5, I3:5>> = <<16383:14>>,
+ [I1, I2, I3];
+ Size =< 32767 ->
+ <<I1:3, I2:4, I3:4, I4:4>> = <<32767:15>>,
+ [I1, I2, I3, I4];
+ Size =< 65535 ->
+ <<I1:4, I2:4, I3:4, I4:4>> = <<65535:16>>,
+ [I1, I2, I3, I4]
+ end.
+
diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl b/aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl
new file mode 100644
index 0000000..30b188d
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue4.erl
@@ -0,0 +1,11662 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==Static Priority Queue.==
+%%% This priority queue implementation depends on a static number of priorities
+%%% (-128 (high) to 128 (low)) so that tuple access times can be exploited for
+%%% quick in/out priority queue operations. This implementation was created to
+%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak
+%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%%
+%%% queue_remove_unique/2 is based on queue:filter/2
+%%% which is under the Apache License 2.0:
+%%%
+%%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
+%%%
+%%% Licensed under the Apache License, Version 2.0 (the "License");
+%%% you may not use this file except in compliance with the License.
+%%% You may obtain a copy of the License at
+%%%
+%%% http://www.apache.org/licenses/LICENSE-2.0
+%%%
+%%% Unless required by applicable law or agreed to in writing, software
+%%% distributed under the License is distributed on an "AS IS" BASIS,
+%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%%% See the License for the specific language governing permissions and
+%%% limitations under the License.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue4).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([filter/2, % O(N)
+ filter/3, % O(N)
+ in/2, % O(1)
+ in/3, % O(1)
+ is_empty/1, % O(1)
+ is_queue/1, % O(1)
+ len/1, % O(1)
+ new/0, % O(1)
+ out/1, % O(1) amortized, O(N) worst case
+ out/2, % O(1) amortized, O(N) worst case
+ pout/1, % O(1) amortized, O(N) worst case
+ remove_unique/2, % O(N) but smaller constant than filter/2
+ remove_unique/3, % O(N) but smaller constant than filter/3
+ to_list/1, % O(N)
+ to_plist/1, % O(N)
+ test/0]).
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-type priority() :: -128..128.
+-ifdef(ERLANG_OTP_VERSION_16).
+-type pqueue4(_) ::
+ {priority() | 'empty', % current priority
+ non_neg_integer(), % total size
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ queue(),
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}}.
+-else.
+-type pqueue4(T) ::
+ {priority() | 'empty', % current priority
+ non_neg_integer(), % total size
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ queue:queue(T),
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}}.
+-endif.
+-type pqueue4() :: pqueue4(any()).
+-export_type([pqueue4/0, pqueue4/1]).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Filter the priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec filter(fun((any()) -> boolean()), pqueue4()) -> pqueue4().
+
+filter(F, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ Q;
+filter(F, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ filter_all(Pc, F, Q).
+
+filter_all(_, _, {_, 0, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _} = Q) ->
+ Q;
+filter_all(128, F, Q) ->
+ filter_priority(128, F, Q);
+filter_all(P, F, Q) when is_integer(P) ->
+ filter_all(P + 1, F, filter_priority(P, F, Q)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Filter a specific priority within the priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec filter(fun((any()) -> boolean()), integer(), pqueue4()) -> pqueue4().
+
+filter(_, P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+filter(F, P, Q) when is_function(F, 1) ->
+ filter_priority(P, F, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(any(), pqueue4()) -> pqueue4().
+
+in(X, Q) ->
+ in(X, 0, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(any(), integer(), pqueue4()) -> pqueue4().
+
+in(_, P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+in(X, P, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ in_higher(P, Q, X); % (in a higher priority)
+in(X, P, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q)
+ when P < Pc ->
+ in_higher(P, Q, X); % (in a higher priority)
+in(X, P, Q) ->
+ in_lower(P, Q, X). % (in a lower priority)
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue4()) -> 'true' | 'false'.
+
+is_empty({_, 0, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
+ true;
+is_empty({_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue4()) -> 'true' | 'false'.
+
+is_queue({Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128})
+ when is_integer(Size),
+ tuple_size(Qn128) == 16, tuple_size(Qn112) == 16,
+ tuple_size(Qn96) == 16, tuple_size(Qn80) == 16,
+ tuple_size(Qn64) == 16, tuple_size(Qn48) == 16,
+ tuple_size(Qn32) == 16, tuple_size(Qn16) == 16,
+ tuple_size(Qp16) == 16, tuple_size(Qp32) == 16,
+ tuple_size(Qp48) == 16, tuple_size(Qp64) == 16,
+ tuple_size(Qp80) == 16, tuple_size(Qp96) == 16,
+ tuple_size(Qp112) == 16, tuple_size(Qp128) == 16 ->
+ (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0));
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue4()) -> non_neg_integer().
+
+len({_, Size, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
+ Size.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue4().
+
+new() ->
+ {empty, % current priority
+ 0, % current size
+ erlang:make_tuple(16, queue:new()), % priority [-128..-113]
+ erlang:make_tuple(16, queue:new()), % priority [-112.. -97]
+ erlang:make_tuple(16, queue:new()), % priority [ -96.. -81]
+ erlang:make_tuple(16, queue:new()), % priority [ -80.. -65]
+ erlang:make_tuple(16, queue:new()), % priority [ -64.. -49]
+ erlang:make_tuple(16, queue:new()), % priority [ -48.. -33]
+ erlang:make_tuple(16, queue:new()), % priority [ -32.. -17]
+ erlang:make_tuple(16, queue:new()), % priority [ -16.. -1]
+ queue:new(), % priority 0 (default)
+ erlang:make_tuple(16, queue:new()), % priority [ 1.. 16]
+ erlang:make_tuple(16, queue:new()), % priority [ 17.. 32]
+ erlang:make_tuple(16, queue:new()), % priority [ 33.. 48]
+ erlang:make_tuple(16, queue:new()), % priority [ 49.. 64]
+ erlang:make_tuple(16, queue:new()), % priority [ 65.. 80]
+ erlang:make_tuple(16, queue:new()), % priority [ 81.. 96]
+ erlang:make_tuple(16, queue:new()), % priority [ 97.. 112]
+ erlang:make_tuple(16, queue:new())}. % priority [ 113.. 128]
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue4()) ->
+ {{'value', any()}, pqueue4()} | {'empty', pqueue4()}.
+
+out({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ out_current(Pc, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue4()) ->
+ {{'value', any()}, pqueue4()} | {'empty', pqueue4()}.
+
+out(P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+out(_, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out(P, Q) ->
+ out_specific(P, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue4()) ->
+ {{'value', any(), integer()}, pqueue4()} | {'empty', pqueue4()}.
+
+pout({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+pout({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ out_current_p(Pc, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Remove a unique value from the priority queue with a binary predicate.===
+%% O(N) but smaller constant than filter/2
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec remove_unique(fun((any()) -> boolean()), pqueue4()) ->
+ {boolean(), pqueue4()}.
+
+remove_unique(F, {_, 0, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ {false, Q};
+remove_unique(F, {Pc, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ remove_unique_all(Pc, F, Q).
+
+remove_unique_all(128, F, Q) ->
+ remove_unique_p(128, F, Q);
+remove_unique_all(P, F, Q) when is_integer(P) ->
+ case remove_unique_p(P, F, Q) of
+ {true, _} = Result ->
+ Result;
+ {false, Q} ->
+ remove_unique_all(P + 1, F, Q)
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Remove a unique value in a specific priority within the priority queue with a binary predicate.===
+%% O(N) but smaller constant than filter/3
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec remove_unique(fun((any()) -> boolean()), integer(), pqueue4()) ->
+ {boolean(), pqueue4()}.
+
+remove_unique(_, P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+remove_unique(F, P, Q) when is_function(F, 1) ->
+ remove_unique_p(P, F, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue4()) -> list().
+
+to_list(Q) ->
+ to_list([], out(Q)).
+to_list(L, {empty, _}) ->
+ lists:reverse(L);
+to_list(L, {{value, Value}, Q}) ->
+ to_list([Value | L], out(Q)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list with priorities.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_plist(pqueue4()) -> list({priority(), list()}).
+
+to_plist(Q) ->
+ to_plist([], [], undefined, pout(Q)).
+to_plist(L, [], _, {empty, _}) ->
+ lists:reverse(L);
+to_plist(L, Lp, Pc, {empty, _}) ->
+ lists:reverse([{Pc, lists:reverse(Lp)} | L]);
+to_plist(L, Lp, Pc, {{value, Value, Pc}, Q}) ->
+ to_plist(L, [Value | Lp], Pc, pout(Q));
+to_plist(L, [], _, {{value, Value, Pc}, Q}) ->
+ to_plist(L, [Value], Pc, pout(Q));
+to_plist(L, Lp, P, {{value, Value, Pc}, Q}) ->
+ to_plist([{P, lists:reverse(Lp)} | L], [Value], Pc, pout(Q)).
+
+%%-------------------------------------------------------------------------
+%% @private
+%% @doc
+%% ===Regression test.===
+%% @end
+%%-------------------------------------------------------------------------
+
+test() ->
+ Q0 = pqueue4:new(),
+ true = pqueue4:is_queue(Q0),
+ Q1 = pqueue4:in(20, 20, Q0),
+ Q2 = pqueue4:in(19, 19, Q1),
+ Q3 = pqueue4:in(18, 18, Q2),
+ Q4 = pqueue4:in(17, 17, Q3),
+ Q5 = pqueue4:in(16, 16, Q4),
+ Q6 = pqueue4:in(15, 15, Q5),
+ Q7 = pqueue4:in(14, 14, Q6),
+ Q8 = pqueue4:in(13, 13, Q7),
+ Q9 = pqueue4:in(12, 12, Q8),
+ Q10 = pqueue4:in(11, 11, Q9),
+ Q11 = pqueue4:in(10, 10, Q10),
+ Q12 = pqueue4:in(9, 9, Q11),
+ Q13 = pqueue4:in(8, 8, Q12),
+ Q14 = pqueue4:in(7, 7, Q13),
+ Q15 = pqueue4:in(6, 6, Q14),
+ Q16 = pqueue4:in(5, 5, Q15),
+ Q17 = pqueue4:in(4, 4, Q16),
+ Q18 = pqueue4:in(3, 3, Q17),
+ Q19 = pqueue4:in(2, 2, Q18),
+ Q20 = pqueue4:in(1, 1, Q19),
+ Q21 = pqueue4:in(0, 0, Q20),
+ Q22 = pqueue4:in(-1, -1, Q21),
+ Q23 = pqueue4:in(-2, -2, Q22),
+ Q24 = pqueue4:in(-3, -3, Q23),
+ Q25 = pqueue4:in(-4, -4, Q24),
+ Q26 = pqueue4:in(-5, -5, Q25),
+ Q27 = pqueue4:in(-6, -6, Q26),
+ Q28 = pqueue4:in(-7, -7, Q27),
+ Q29 = pqueue4:in(-8, -8, Q28),
+ Q30 = pqueue4:in(-9, -9, Q29),
+ Q31 = pqueue4:in(-10, -10, Q30),
+ Q32 = pqueue4:in(-11, -11, Q31),
+ Q33 = pqueue4:in(-12, -12, Q32),
+ Q34 = pqueue4:in(-13, -13, Q33),
+ Q35 = pqueue4:in(-14, -14, Q34),
+ Q36 = pqueue4:in(-15, -15, Q35),
+ Q37 = pqueue4:in(-16, -16, Q36),
+ Q38 = pqueue4:in(-17, -17, Q37),
+ Q39 = pqueue4:in(-18, -18, Q38),
+ Q40 = pqueue4:in(-19, -19, Q39),
+ Q41 = pqueue4:in(-20, -20, Q40),
+ Q42 = pqueue4:in(-20, -20, Q41),
+ Q43 = pqueue4:in(-19, -19, Q42),
+ Q44 = pqueue4:in(-18, -18, Q43),
+ Q45 = pqueue4:in(-17, -17, Q44),
+ Q46 = pqueue4:in(-16, -16, Q45),
+ Q47 = pqueue4:in(-15, -15, Q46),
+ Q48 = pqueue4:in(-14, -14, Q47),
+ Q49 = pqueue4:in(-13, -13, Q48),
+ Q50 = pqueue4:in(-12, -12, Q49),
+ Q51 = pqueue4:in(-11, -11, Q50),
+ Q52 = pqueue4:in(-10, -10, Q51),
+ Q53 = pqueue4:in(-9, -9, Q52),
+ Q54 = pqueue4:in(-8, -8, Q53),
+ Q55 = pqueue4:in(-7, -7, Q54),
+ Q56 = pqueue4:in(-6, -6, Q55),
+ Q57 = pqueue4:in(-5, -5, Q56),
+ Q58 = pqueue4:in(-4, -4, Q57),
+ Q59 = pqueue4:in(-3, -3, Q58),
+ Q60 = pqueue4:in(-2, -2, Q59),
+ Q61 = pqueue4:in(-1, -1, Q60),
+ Q62 = pqueue4:in(0, 0, Q61),
+ Q63 = pqueue4:in(1, 1, Q62),
+ Q64 = pqueue4:in(2, 2, Q63),
+ Q65 = pqueue4:in(3, 3, Q64),
+ Q66 = pqueue4:in(4, 4, Q65),
+ Q67 = pqueue4:in(5, 5, Q66),
+ Q68 = pqueue4:in(6, 6, Q67),
+ Q69 = pqueue4:in(7, 7, Q68),
+ Q70 = pqueue4:in(8, 8, Q69),
+ Q71 = pqueue4:in(9, 9, Q70),
+ Q72 = pqueue4:in(10, 10, Q71),
+ Q73 = pqueue4:in(11, 11, Q72),
+ Q74 = pqueue4:in(12, 12, Q73),
+ Q75 = pqueue4:in(13, 13, Q74),
+ Q76 = pqueue4:in(14, 14, Q75),
+ Q77 = pqueue4:in(15, 15, Q76),
+ Q78 = pqueue4:in(16, 16, Q77),
+ Q79 = pqueue4:in(17, 17, Q78),
+ Q80 = pqueue4:in(18, 18, Q79),
+ Q81 = pqueue4:in(19, 19, Q80),
+ Q82 = pqueue4:in(20, 20, Q81),
+ true = pqueue4:is_queue(Q82),
+ 82 = pqueue4:len(Q82),
+ [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14,
+ -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6,
+ -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
+ 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue4:to_list(Q82),
+ [{-20, [-20, -20]}, {-19, [-19, -19]}, {-18, [-18, -18]},
+ {-17, [-17, -17]}, {-16, [-16, -16]}, {-15, [-15, -15]},
+ {-14, [-14, -14]}, {-13, [-13, -13]}, {-12, [-12, -12]},
+ {-11, [-11, -11]}, {-10, [-10, -10]}, {-9, [-9, -9]},
+ {-8, [-8, -8]}, {-7, [-7, -7]}, {-6, [-6, -6]},
+ {-5, [-5, -5]}, {-4, [-4, -4]}, {-3, [-3, -3]},
+ {-2, [-2, -2]}, {-1, [-1, -1]}, {0, [0, 0]},
+ {1, [1, 1]}, {2, [2, 2]}, {3, [3, 3]},
+ {4, [4, 4]}, {5, [5, 5]}, {6, [6, 6]},
+ {7, [7, 7]}, {8, [8, 8]}, {9, [9, 9]},
+ {10, [10, 10]}, {11, [11, 11]}, {12, [12, 12]},
+ {13, [13, 13]}, {14, [14, 14]}, {15, [15, 15]},
+ {16, [16, 16]}, {17, [17, 17]}, {18, [18, 18]},
+ {19, [19, 19]}, {20, [20, 20]}] = pqueue4:to_plist(Q82),
+ {{value, -20}, Q83} = pqueue4:out(Q82),
+ {{value, -20}, Q84} = pqueue4:out(Q83),
+ {{value, -19}, Q85} = pqueue4:out(Q84),
+ {{value, -19}, Q86} = pqueue4:out(Q85),
+ {{value, -18}, Q87} = pqueue4:out(Q86),
+ {{value, -18}, Q88} = pqueue4:out(Q87),
+ {{value, 0}, Q89} = pqueue4:out(0, Q88),
+ {{value, 0}, Q90} = pqueue4:out(0, Q89),
+ {empty, _} = pqueue4:out(0, Q90),
+ {{value, -17, -17}, Q91} = pqueue4:pout(Q90),
+ {{value, -17, -17}, Q92} = pqueue4:pout(Q91),
+ {{value, -16, -16}, Q93} = pqueue4:pout(Q92),
+ {{value, -16, -16}, Q94} = pqueue4:pout(Q93),
+ {{value, -15, -15}, Q95} = pqueue4:pout(Q94),
+ {{value, -15, -15}, Q96} = pqueue4:pout(Q95),
+ {{value, -14, -14}, Q97} = pqueue4:pout(Q96),
+ {{value, -14, -14}, Q98} = pqueue4:pout(Q97),
+ {{value, -13, -13}, Q99} = pqueue4:pout(Q98),
+ {{value, -13, -13}, Q100} = pqueue4:pout(Q99),
+ {{value, -12, -12}, Q101} = pqueue4:pout(Q100),
+ {{value, -12, -12}, Q102} = pqueue4:pout(Q101),
+ {{value, -11, -11}, Q103} = pqueue4:pout(Q102),
+ {{value, -11, -11}, Q104} = pqueue4:pout(Q103),
+ {{value, -10, -10}, Q105} = pqueue4:pout(Q104),
+ {{value, -10, -10}, Q106} = pqueue4:pout(Q105),
+ {{value, -9, -9}, Q107} = pqueue4:pout(Q106),
+ {{value, -9, -9}, Q108} = pqueue4:pout(Q107),
+ {{value, -8, -8}, Q109} = pqueue4:pout(Q108),
+ {{value, -8, -8}, Q110} = pqueue4:pout(Q109),
+ {{value, -7, -7}, Q111} = pqueue4:pout(Q110),
+ {{value, -7, -7}, Q112} = pqueue4:pout(Q111),
+ {{value, -6, -6}, Q113} = pqueue4:pout(Q112),
+ {{value, -6, -6}, Q114} = pqueue4:pout(Q113),
+ {{value, -5, -5}, Q115} = pqueue4:pout(Q114),
+ {{value, -5, -5}, Q116} = pqueue4:pout(Q115),
+ {{value, -4, -4}, Q117} = pqueue4:pout(Q116),
+ {{value, -4, -4}, Q118} = pqueue4:pout(Q117),
+ {{value, -3, -3}, Q119} = pqueue4:pout(Q118),
+ {{value, -3, -3}, Q120} = pqueue4:pout(Q119),
+ {{value, -2, -2}, Q121} = pqueue4:pout(Q120),
+ {{value, -2, -2}, Q122} = pqueue4:pout(Q121),
+ {{value, -1, -1}, Q123} = pqueue4:pout(Q122),
+ {{value, -1, -1}, Q124} = pqueue4:pout(Q123),
+ {{value, 1, 1}, Q125} = pqueue4:pout(Q124),
+ {{value, 1, 1}, Q126} = pqueue4:pout(Q125),
+ {{value, 2, 2}, Q127} = pqueue4:pout(Q126),
+ {{value, 2, 2}, Q128} = pqueue4:pout(Q127),
+ {{value, 3, 3}, Q129} = pqueue4:pout(Q128),
+ {{value, 3, 3}, Q130} = pqueue4:pout(Q129),
+ {{value, 4, 4}, Q131} = pqueue4:pout(Q130),
+ {{value, 4, 4}, Q132} = pqueue4:pout(Q131),
+ {{value, 5, 5}, Q133} = pqueue4:pout(Q132),
+ {{value, 5, 5}, Q134} = pqueue4:pout(Q133),
+ {{value, 6, 6}, Q135} = pqueue4:pout(Q134),
+ {{value, 6, 6}, Q136} = pqueue4:pout(Q135),
+ {{value, 7, 7}, Q137} = pqueue4:pout(Q136),
+ {{value, 7, 7}, Q138} = pqueue4:pout(Q137),
+ {{value, 8, 8}, Q139} = pqueue4:pout(Q138),
+ {{value, 8, 8}, Q140} = pqueue4:pout(Q139),
+ {{value, 9, 9}, Q141} = pqueue4:pout(Q140),
+ {{value, 9, 9}, Q142} = pqueue4:pout(Q141),
+ {{value, 10, 10}, Q143} = pqueue4:pout(Q142),
+ {{value, 10, 10}, Q144} = pqueue4:pout(Q143),
+ {{value, 11, 11}, Q145} = pqueue4:pout(Q144),
+ {{value, 11, 11}, Q146} = pqueue4:pout(Q145),
+ {{value, 12, 12}, Q147} = pqueue4:pout(Q146),
+ {{value, 12, 12}, Q148} = pqueue4:pout(Q147),
+ {{value, 13, 13}, Q149} = pqueue4:pout(Q148),
+ {{value, 13, 13}, Q150} = pqueue4:pout(Q149),
+ {{value, 14, 14}, Q151} = pqueue4:pout(Q150),
+ {{value, 14, 14}, Q152} = pqueue4:pout(Q151),
+ {{value, 15, 15}, Q153} = pqueue4:pout(Q152),
+ {{value, 15, 15}, Q154} = pqueue4:pout(Q153),
+ {{value, 16, 16}, Q155} = pqueue4:pout(Q154),
+ {{value, 16, 16}, Q156} = pqueue4:pout(Q155),
+ {{value, 17, 17}, Q157} = pqueue4:pout(Q156),
+ {{value, 17, 17}, Q158} = pqueue4:pout(Q157),
+ {{value, 18, 18}, Q159} = pqueue4:pout(Q158),
+ {{value, 18, 18}, Q160} = pqueue4:pout(Q159),
+ {{value, 19, 19}, Q161} = pqueue4:pout(Q160),
+ {{value, 19, 19}, Q162} = pqueue4:pout(Q161),
+ {{value, 20, 20}, Q163} = pqueue4:pout(Q162),
+ {{value, 20, 20}, Q164} = pqueue4:pout(Q163),
+ {{value, 20}, Q164} = pqueue4:out(Q163),
+ {{value, 20}, Q164} = pqueue4:out(20, Q163),
+ true = pqueue4:is_empty(Q164),
+ empty = erlang:element(1, Q164), % current priority
+ 0 = erlang:element(2, Q164), % size
+ {empty, Q164} = pqueue4:pout(Q164),
+ {empty, Q164} = pqueue4:out(Q164),
+ {empty, Q164} = pqueue4:out(20, Q164),
+
+ Queue0 = queue:new(),
+ "{[],[]}" = lists:flatten(io_lib:format("~p", [Queue0])),
+ Queue1 = queue:in(1, Queue0),
+ Queue2 = queue:in(2, Queue1),
+ Queue3 = queue:in(3, Queue2),
+ {{value, 1}, _} = queue:out(Queue2),
+ "{[3,2],[1]}" = lists:flatten(io_lib:format("~p", [Queue3])),
+ {true, {[3],[1]}} = queue_remove_unique(fun(I) -> I == 2 end, {[3,2],[1]}),
+ Queue4 = queue:filter(fun(I) -> not (I == 2) end, Queue3),
+ "{[3],[1]}" = lists:flatten(io_lib:format("~p", [Queue4])),
+ 2 = queue:len(Queue4),
+ {{value, 1}, _} = queue:out(Queue4),
+ [1, 3] = queue:to_list(Queue4),
+
+ Q166 = pqueue4:new(),
+ true = pqueue4:is_queue(Q166),
+ Q167 = pqueue4:in(6, 1, Q166),
+ Q168 = pqueue4:in(7, 1, Q167),
+ Q169 = pqueue4:in(8, 1, Q168),
+ Q170 = pqueue4:in(3, 0, Q169),
+ Q171 = pqueue4:in(4, 0, Q170),
+ Q172 = pqueue4:in(5, 0, Q171),
+ Q173 = pqueue4:in(0, -1, Q172),
+ Q174 = pqueue4:in(1, -1, Q173),
+ Q175 = pqueue4:in(2, -1, Q174),
+ [{-1, [0, 1, 2]}, {0, [3, 4, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q175),
+ 3 = pqueue4:len(pqueue4:filter(fun(I) -> I > 5 end, Q175)),
+ 3 = pqueue4:len(pqueue4:filter(fun(I) -> I < 3 end, Q175)),
+ 3 = pqueue4:len(pqueue4:filter(fun(I) -> (I < 1) orelse (I > 6) end, Q175)),
+ {true, Q176} = pqueue4:remove_unique(fun(I) -> I == 4 end, Q175),
+ [{-1, [0, 1, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q176),
+ {true, Q177} = pqueue4:remove_unique(fun(I) -> I == 1 end, Q176),
+ [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q177),
+ {true, Q178} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q177),
+ [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 8]}] = pqueue4:to_plist(Q178),
+ 6 = pqueue4:len(Q178),
+ {{value, 0, -1}, Q179} = pqueue4:pout(Q178),
+ {{value, 2}, Q180} = pqueue4:out(Q179),
+ {{value, 6}, Q181} = pqueue4:out(1, Q180),
+ {false, Q181} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q181),
+ [{0, [3, 5]}, {1, [8]}] = pqueue4:to_plist(Q181),
+ {true, Q182} = pqueue4:remove_unique(fun(I) -> I == 5 end, Q181),
+ {true, Q183} = pqueue4:remove_unique(fun(I) -> I == 8 end, 1, Q182),
+ {true, Q184} = pqueue4:remove_unique(fun(I) -> I == 3 end, Q183),
+ {empty, Q184} = pqueue4:pout(Q184),
+ {empty, Q184} = pqueue4:out(Q184),
+ {empty, Q184} = pqueue4:out(0, Q184),
+ ok.
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+%% @hidden
+-define(FILTER_P_Qn128(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn112(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn96(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn80(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn64(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn48(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn32(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn16(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp16(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp32(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp48(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp64(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp80(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp96(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}).
+-define(FILTER_P_Qp112(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}).
+-define(FILTER_P_Qp128(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}).
+
+?FILTER_P_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?FILTER_P_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?FILTER_P_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?FILTER_P_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?FILTER_P_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?FILTER_P_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?FILTER_P_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?FILTER_P_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?FILTER_P_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?FILTER_P_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?FILTER_P_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?FILTER_P_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?FILTER_P_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?FILTER_P_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?FILTER_P_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?FILTER_P_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?FILTER_P_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?FILTER_P_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?FILTER_P_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?FILTER_P_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?FILTER_P_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?FILTER_P_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?FILTER_P_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?FILTER_P_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+filter_priority(0, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ NewQ0 = queue:filter(F, Q0),
+ NewSize = Size - (queue:len(Q0) - queue:len(NewQ0)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128};
+?FILTER_P_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?FILTER_P_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?FILTER_P_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?FILTER_P_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?FILTER_P_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?FILTER_P_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?FILTER_P_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?FILTER_P_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?FILTER_P_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?FILTER_P_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?FILTER_P_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?FILTER_P_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?FILTER_P_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?FILTER_P_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?FILTER_P_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?FILTER_P_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?FILTER_P_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?FILTER_P_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?FILTER_P_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?FILTER_P_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?FILTER_P_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?FILTER_P_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?FILTER_P_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+?FILTER_P_Qp128(128,
+ Qp128, NewQp128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, NewQp128}).
+
+%% @hidden
+-define(IN_HIGHER_Qn128(P, V),
+in_higher(P,
+ {_,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ V,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn112(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128,
+ V,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn96(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112,
+ V,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn80(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96,
+ V,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn64(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80,
+ V,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn48(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn32(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn16(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp16(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp32(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp48(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V,
+ Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp64(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V,
+ Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp80(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V,
+ Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp96(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V,
+ Qp112, Qp128}).
+-define(IN_HIGHER_Qp112(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V,
+ Qp128}).
+-define(IN_HIGHER_Qp128(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V}).
+
+?IN_HIGHER_Qn128(-128,
+ {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-127,
+ {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-126,
+ {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-125,
+ {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-124,
+ {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124),
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118),
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113});
+?IN_HIGHER_Qn128(-114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113});
+?IN_HIGHER_Qn128(-113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)});
+?IN_HIGHER_Qn112(-112,
+ {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-111,
+ {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-110,
+ {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-109,
+ {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-108,
+ {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108),
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102),
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97});
+?IN_HIGHER_Qn112(-98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97});
+?IN_HIGHER_Qn112(-97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)});
+?IN_HIGHER_Qn96(-96,
+ {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-95,
+ {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-94,
+ {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-93,
+ {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-92,
+ {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92),
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86),
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81});
+?IN_HIGHER_Qn96(-82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81});
+?IN_HIGHER_Qn96(-81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)});
+?IN_HIGHER_Qn80(-80,
+ {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-79,
+ {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-78,
+ {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-77,
+ {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-76,
+ {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76),
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70),
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65});
+?IN_HIGHER_Qn80(-66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65});
+?IN_HIGHER_Qn80(-65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)});
+?IN_HIGHER_Qn64(-64,
+ {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-63,
+ {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-62,
+ {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-61,
+ {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-60,
+ {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60),
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54),
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49});
+?IN_HIGHER_Qn64(-50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49});
+?IN_HIGHER_Qn64(-49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)});
+?IN_HIGHER_Qn48(-48,
+ {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-47,
+ {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-46,
+ {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-45,
+ {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-44,
+ {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44),
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38),
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33});
+?IN_HIGHER_Qn48(-34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33});
+?IN_HIGHER_Qn48(-33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)});
+?IN_HIGHER_Qn32(-32,
+ {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-31,
+ {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-30,
+ {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-29,
+ {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-28,
+ {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28),
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22),
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17});
+?IN_HIGHER_Qn32(-18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17});
+?IN_HIGHER_Qn32(-17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)});
+?IN_HIGHER_Qn16(-16,
+ {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-15,
+ {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-14,
+ {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-13,
+ {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-12,
+ {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12),
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6),
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1});
+?IN_HIGHER_Qn16(-2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1});
+?IN_HIGHER_Qn16(-1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)});
+in_higher(0,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {0,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ queue:in(X, Q0),
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128};
+?IN_HIGHER_Qp16(1,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(2,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(3,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(4,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(5,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5),
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11),
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16});
+?IN_HIGHER_Qp16(15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16});
+?IN_HIGHER_Qp16(16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)});
+?IN_HIGHER_Qp32(17,
+ {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(18,
+ {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(19,
+ {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(20,
+ {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(21,
+ {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21),
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27),
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32});
+?IN_HIGHER_Qp32(31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32});
+?IN_HIGHER_Qp32(32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)});
+?IN_HIGHER_Qp48(33,
+ {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(34,
+ {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(35,
+ {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(36,
+ {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(37,
+ {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37),
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43),
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48});
+?IN_HIGHER_Qp48(47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48});
+?IN_HIGHER_Qp48(48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)});
+?IN_HIGHER_Qp64(49,
+ {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(50,
+ {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(51,
+ {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(52,
+ {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(53,
+ {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53),
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59),
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64});
+?IN_HIGHER_Qp64(63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64});
+?IN_HIGHER_Qp64(64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)});
+?IN_HIGHER_Qp80(65,
+ {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(66,
+ {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(67,
+ {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(68,
+ {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(69,
+ {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69),
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75),
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80});
+?IN_HIGHER_Qp80(79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80});
+?IN_HIGHER_Qp80(80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)});
+?IN_HIGHER_Qp96(81,
+ {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(82,
+ {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(83,
+ {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(84,
+ {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(85,
+ {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85),
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91),
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96});
+?IN_HIGHER_Qp96(95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96});
+?IN_HIGHER_Qp96(96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)});
+?IN_HIGHER_Qp112(97,
+ {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(98,
+ {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(99,
+ {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(100,
+ {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(101,
+ {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101),
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107),
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112});
+?IN_HIGHER_Qp112(111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112});
+?IN_HIGHER_Qp112(112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)});
+?IN_HIGHER_Qp128(113,
+ {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(114,
+ {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(115,
+ {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(116,
+ {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(117,
+ {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117),
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123),
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128});
+?IN_HIGHER_Qp128(127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128});
+?IN_HIGHER_Qp128(128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}).
+
+%% @hidden
+-define(IN_LOWER_Qn128(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ V,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn112(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128,
+ V,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn96(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112,
+ V,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn80(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96,
+ V,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn64(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80,
+ V,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn48(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn32(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn16(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp16(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp32(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp48(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V,
+ Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp64(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V,
+ Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp80(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V,
+ Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp96(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V,
+ Qp112, Qp128}).
+-define(IN_LOWER_Qp112(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V,
+ Qp128}).
+-define(IN_LOWER_Qp128(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V}).
+
+?IN_LOWER_Qn128(-128,
+ {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-127,
+ {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-126,
+ {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-125,
+ {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-124,
+ {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124),
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118),
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113});
+?IN_LOWER_Qn128(-114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113});
+?IN_LOWER_Qn128(-113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)});
+?IN_LOWER_Qn112(-112,
+ {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-111,
+ {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-110,
+ {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-109,
+ {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-108,
+ {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108),
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102),
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97});
+?IN_LOWER_Qn112(-98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97});
+?IN_LOWER_Qn112(-97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)});
+?IN_LOWER_Qn96(-96,
+ {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-95,
+ {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-94,
+ {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-93,
+ {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-92,
+ {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92),
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86),
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81});
+?IN_LOWER_Qn96(-82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81});
+?IN_LOWER_Qn96(-81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)});
+?IN_LOWER_Qn80(-80,
+ {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-79,
+ {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-78,
+ {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-77,
+ {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-76,
+ {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76),
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70),
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65});
+?IN_LOWER_Qn80(-66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65});
+?IN_LOWER_Qn80(-65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)});
+?IN_LOWER_Qn64(-64,
+ {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-63,
+ {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-62,
+ {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-61,
+ {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-60,
+ {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60),
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54),
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49});
+?IN_LOWER_Qn64(-50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49});
+?IN_LOWER_Qn64(-49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)});
+?IN_LOWER_Qn48(-48,
+ {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-47,
+ {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-46,
+ {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-45,
+ {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-44,
+ {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44),
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38),
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33});
+?IN_LOWER_Qn48(-34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33});
+?IN_LOWER_Qn48(-33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)});
+?IN_LOWER_Qn32(-32,
+ {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-31,
+ {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-30,
+ {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-29,
+ {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-28,
+ {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28),
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22),
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17});
+?IN_LOWER_Qn32(-18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17});
+?IN_LOWER_Qn32(-17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)});
+?IN_LOWER_Qn16(-16,
+ {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-15,
+ {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-14,
+ {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-13,
+ {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-12,
+ {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12),
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6),
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1});
+?IN_LOWER_Qn16(-2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1});
+?IN_LOWER_Qn16(-1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)});
+in_lower(0,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ queue:in(X, Q0),
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128};
+?IN_LOWER_Qp16(1,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(2,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(3,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(4,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(5,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5),
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11),
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16});
+?IN_LOWER_Qp16(15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16});
+?IN_LOWER_Qp16(16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)});
+?IN_LOWER_Qp32(17,
+ {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(18,
+ {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(19,
+ {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(20,
+ {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(21,
+ {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21),
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27),
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32});
+?IN_LOWER_Qp32(31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32});
+?IN_LOWER_Qp32(32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)});
+?IN_LOWER_Qp48(33,
+ {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(34,
+ {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(35,
+ {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(36,
+ {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(37,
+ {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37),
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43),
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48});
+?IN_LOWER_Qp48(47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48});
+?IN_LOWER_Qp48(48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)});
+?IN_LOWER_Qp64(49,
+ {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(50,
+ {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(51,
+ {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(52,
+ {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(53,
+ {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53),
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59),
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64});
+?IN_LOWER_Qp64(63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64});
+?IN_LOWER_Qp64(64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)});
+?IN_LOWER_Qp80(65,
+ {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(66,
+ {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(67,
+ {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(68,
+ {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(69,
+ {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69),
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75),
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80});
+?IN_LOWER_Qp80(79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80});
+?IN_LOWER_Qp80(80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)});
+?IN_LOWER_Qp96(81,
+ {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(82,
+ {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(83,
+ {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(84,
+ {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(85,
+ {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85),
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91),
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96});
+?IN_LOWER_Qp96(95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96});
+?IN_LOWER_Qp96(96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)});
+?IN_LOWER_Qp112(97,
+ {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(98,
+ {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(99,
+ {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(100,
+ {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(101,
+ {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101),
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107),
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112});
+?IN_LOWER_Qp112(111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112});
+?IN_LOWER_Qp112(112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)});
+?IN_LOWER_Qp128(113,
+ {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(114,
+ {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(115,
+ {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(116,
+ {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(117,
+ {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117),
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123),
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128});
+?IN_LOWER_Qp128(127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128});
+?IN_LOWER_Qp128(128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}).
+
+%% @hidden
+-define(OUT_CURRENT_Qn128(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn112(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn96(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn80(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn64(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn48(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn32(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn16(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp16(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp32(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp48(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp64(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp80(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp96(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp112(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}
+ end).
+-define(OUT_CURRENT_Qp128(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}
+ end).
+
+?OUT_CURRENT_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?OUT_CURRENT_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?OUT_CURRENT_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?OUT_CURRENT_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?OUT_CURRENT_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?OUT_CURRENT_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?OUT_CURRENT_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?OUT_CURRENT_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?OUT_CURRENT_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?OUT_CURRENT_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?OUT_CURRENT_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?OUT_CURRENT_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?OUT_CURRENT_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?OUT_CURRENT_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?OUT_CURRENT_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?OUT_CURRENT_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+out_current(0,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, NewQ0} = queue:out(Q0),
+ if
+ Value =:= empty ->
+ out_current(1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> 0 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end;
+?OUT_CURRENT_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?OUT_CURRENT_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?OUT_CURRENT_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?OUT_CURRENT_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?OUT_CURRENT_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?OUT_CURRENT_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?OUT_CURRENT_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?OUT_CURRENT_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?OUT_CURRENT_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?OUT_CURRENT_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?OUT_CURRENT_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?OUT_CURRENT_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?OUT_CURRENT_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?OUT_CURRENT_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?OUT_CURRENT_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+out_current(128,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ {Value, NewQp128} = queue:out(Qp128),
+ if
+ Value =:= empty ->
+ {empty,
+ {empty,
+ 0,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}};
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> 128 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}}
+ end.
+
+%% @hidden
+-define(OUT_CURRENT_P_Qn128(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn112(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn96(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn80(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn64(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn48(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn32(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn16(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp16(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp32(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp48(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp64(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp80(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp96(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp112(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp128(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}
+ end).
+
+?OUT_CURRENT_P_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?OUT_CURRENT_P_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?OUT_CURRENT_P_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?OUT_CURRENT_P_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?OUT_CURRENT_P_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?OUT_CURRENT_P_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?OUT_CURRENT_P_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?OUT_CURRENT_P_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?OUT_CURRENT_P_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?OUT_CURRENT_P_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?OUT_CURRENT_P_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?OUT_CURRENT_P_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?OUT_CURRENT_P_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?OUT_CURRENT_P_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?OUT_CURRENT_P_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?OUT_CURRENT_P_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+out_current_p(0,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(Q0) of
+ {empty, _} ->
+ out_current_p(1, Q);
+ {{value, X}, NewQ0} ->
+ NewSize = Size - 1,
+ {{value, X, 0},
+ {if NewSize == 0 -> empty; true -> 0 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end;
+?OUT_CURRENT_P_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?OUT_CURRENT_P_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?OUT_CURRENT_P_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?OUT_CURRENT_P_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?OUT_CURRENT_P_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?OUT_CURRENT_P_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?OUT_CURRENT_P_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?OUT_CURRENT_P_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?OUT_CURRENT_P_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?OUT_CURRENT_P_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?OUT_CURRENT_P_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?OUT_CURRENT_P_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?OUT_CURRENT_P_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?OUT_CURRENT_P_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?OUT_CURRENT_P_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+out_current_p(128,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ case queue:out(Qp128) of
+ {empty, _} ->
+ {empty,
+ {empty,
+ 0,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}};
+ {{value, X}, NewQp128} ->
+ NewSize = Size - 1,
+ {{value, X, 128},
+ {if NewSize == 0 -> empty; true -> 128 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}}
+ end.
+
+%% @hidden
+-define(OUT_SPECIFIC_Qn128(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn112(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn96(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn80(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn64(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn48(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn32(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn16(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp16(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp32(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp48(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp64(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp80(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp96(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp112(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}).
+-define(OUT_SPECIFIC_Qp128(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}).
+
+?OUT_SPECIFIC_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?OUT_SPECIFIC_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?OUT_SPECIFIC_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?OUT_SPECIFIC_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?OUT_SPECIFIC_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?OUT_SPECIFIC_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?OUT_SPECIFIC_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?OUT_SPECIFIC_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?OUT_SPECIFIC_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?OUT_SPECIFIC_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?OUT_SPECIFIC_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?OUT_SPECIFIC_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?OUT_SPECIFIC_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?OUT_SPECIFIC_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?OUT_SPECIFIC_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?OUT_SPECIFIC_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+out_specific(0,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, NewQ0} = queue:out(Q0),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}};
+?OUT_SPECIFIC_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?OUT_SPECIFIC_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?OUT_SPECIFIC_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?OUT_SPECIFIC_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?OUT_SPECIFIC_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?OUT_SPECIFIC_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?OUT_SPECIFIC_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?OUT_SPECIFIC_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?OUT_SPECIFIC_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?OUT_SPECIFIC_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?OUT_SPECIFIC_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?OUT_SPECIFIC_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?OUT_SPECIFIC_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?OUT_SPECIFIC_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?OUT_SPECIFIC_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+?OUT_SPECIFIC_Qp128(128,
+ Qp128, NewQp128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, NewQp128}).
+
+%% @hidden
+-define(REMOVE_UNIQ_P_Qn128(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn112(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn96(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn80(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn64(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn48(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn32(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn16(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp16(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp32(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp48(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp64(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp80(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp96(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp112(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}).
+-define(REMOVE_UNIQ_P_Qp128(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}).
+
+?REMOVE_UNIQ_P_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?REMOVE_UNIQ_P_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?REMOVE_UNIQ_P_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?REMOVE_UNIQ_P_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?REMOVE_UNIQ_P_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?REMOVE_UNIQ_P_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?REMOVE_UNIQ_P_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?REMOVE_UNIQ_P_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+remove_unique_p(0, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, NewQ0} = queue_remove_unique(F, Q0),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}};
+?REMOVE_UNIQ_P_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?REMOVE_UNIQ_P_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?REMOVE_UNIQ_P_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?REMOVE_UNIQ_P_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?REMOVE_UNIQ_P_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?REMOVE_UNIQ_P_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?REMOVE_UNIQ_P_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?REMOVE_UNIQ_P_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(128,
+ Qp128, NewQp128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, NewQp128}).
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("pqueue_test.hrl").
+
+module_test_() ->
+ {timeout, ?TEST_TIMEOUT, [
+ {"internal tests", ?_assertOk(test())}
+ ]}.
+
+long_test_() ->
+ test_condition([
+ {"proper tests", ?_assert(pqueue_proper:qc_pq4())}
+ ], ?CLOUDI_LONG_TEST_TIMEOUT).
+
+-endif.
+
+%%-------------------------------------------------------------------------
+%% @hidden
+%% remove a unique value from a queue based on a binary predicate,
+%% traversal order is undefined to keep it efficient (i.e., shouldn't matter)
+%% (based on the implementation of queue:filter/2
+%% which is under the Apache License 2.0)
+%%-------------------------------------------------------------------------
+
+-spec queue_remove_unique(F :: fun((any()) -> boolean()),
+ Q :: {list(), list()}) ->
+ {boolean(), {list(), list()}}.
+
+queue_remove_unique(Fun, {R0, F0} = Q)
+ when is_function(Fun, 1), is_list(R0), is_list(F0) ->
+ case queue_remove_unique_f(Fun, F0) of
+ {true, []} ->
+ {true, queue_r2f(R0)};
+ {true, F1} ->
+ {true, {R0, F1}};
+ {false, F1} ->
+ %true = F1 == F0,
+ case queue_remove_unique_f(Fun, R0) of % backwards
+ {true, []} ->
+ {true, queue_f2r(F1)};
+ {true, R1} ->
+ {true, {R1, F1}};
+ {false, _} ->
+ {false, Q}
+ end
+ end;
+queue_remove_unique(Fun, Q) ->
+ erlang:error(badarg, [Fun,Q]).
+
+% Call Fun in front to back order
+queue_remove_unique_f(_, [] = F) ->
+ {false, F};
+queue_remove_unique_f(Fun, F) ->
+ queue_remove_unique_f(F, [], F, Fun).
+
+queue_remove_unique_f([], _, F, _) ->
+ {false, F};
+queue_remove_unique_f([X | F0], F1, F, Fun) ->
+ case Fun(X) of
+ true ->
+ {true, lists:reverse(F1, F0)};
+ false ->
+ queue_remove_unique_f(F0, [X | F1], F, Fun)
+ end.
+
+-compile({inline, [{queue_r2f,1},{queue_f2r,1}]}).
+
+% Move half of elements from R to F, if there are at least three
+queue_r2f([]) ->
+ {[],[]};
+queue_r2f([_]=R) ->
+ {[],R};
+queue_r2f([X,Y]) ->
+ {[X],[Y]};
+queue_r2f(List) ->
+ {FF,RR} = lists:split(length(List) div 2 + 1, List),
+ {FF,lists:reverse(RR, [])}.
+
+% Move half of elements from F to R, if there are enough
+queue_f2r([]) ->
+ {[],[]};
+queue_f2r([_]=F) ->
+ {F,[]};
+queue_f2r([X,Y]) ->
+ {[Y],[X]};
+queue_f2r(List) ->
+ {FF,RR} = lists:split(length(List) div 2 + 1, List),
+ {lists:reverse(RR, []),FF}.
+
diff --git a/aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl b/aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl
new file mode 100644
index 0000000..cedffe0
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/src/pqueue_test.hrl
@@ -0,0 +1,49 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% pqueue eunit common functionality
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%%------------------------------------------------------------------------
+
+-ifndef(_assertOk).
+-define(_assertOk(Expr), ?_assertEqual(ok, Expr)).
+-endif.
+
+-ifdef(CLOUDI_TEST_TIMEOUT).
+-define(TEST_TIMEOUT, ?CLOUDI_TEST_TIMEOUT). % seconds
+-else.
+-define(TEST_TIMEOUT, 10). % seconds
+-endif.
+-ifndef(CLOUDI_LONG_TEST_TIMEOUT).
+-define(CLOUDI_LONG_TEST_TIMEOUT, 60). % minutes
+-endif.
+
+test_condition(_, 0) ->
+ [];
+test_condition(L, LongTestTimeout)
+ when LongTestTimeout > 0 ->
+ {timeout, LongTestTimeout * 60, L}.
+
diff --git a/aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl b/aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl
new file mode 100644
index 0000000..6702960
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/test/pqueue_proper.erl
@@ -0,0 +1,156 @@
+-module(pqueue_proper).
+-ifdef(TEST).
+-include_lib("proper/include/proper.hrl").
+
+-behaviour(proper_statem).
+
+-export([qc_pq/0, qc_pq2/0, qc_pq3/0, qc_pq4/0, correct/1]).
+
+-export([command/1, initial_state/0, next_state/3, postcondition/3,
+ precondition/2]).
+
+-type value() :: integer().
+-record(state, { in_queue :: [{value(), term()}] }).
+-define(SERVER, queue_srv).
+
+priority() ->
+ integer(-20, 20).
+
+%% Selects priorities we have added
+priority(InQ) ->
+ elements([P || {P, _} <- InQ]).
+
+value() ->
+ integer().
+
+initial_state() ->
+ #state { in_queue = [] }.
+
+command(#state { in_queue = InQ }) ->
+ oneof([{call, ?SERVER, in, [value()]},
+ {call, ?SERVER, in, [value(), priority()]},
+ {call, ?SERVER, is_empty, []},
+ {call, ?SERVER, is_queue, []},
+ {call, ?SERVER, len, []},
+ {call, ?SERVER, out, []}] ++
+ [{call, ?SERVER, out, [priority(InQ)]} || InQ =/= []] ++
+ [{call, ?SERVER, pout, []},
+ {call, ?SERVER, to_list, []}]).
+
+next_state(#state { in_queue = InQ } = S, _V, {call, _, out, []}) ->
+ S#state { in_queue = listq_rem(InQ) };
+next_state(#state { in_queue = InQ } = S, _V, {call, _, out, [Prio]}) ->
+ S#state { in_queue = listq_rem(InQ, Prio) };
+next_state(#state { in_queue = InQ } = S, _V, {call, _, pout, _}) ->
+ S#state { in_queue = listq_rem(InQ) };
+next_state(S, _V, {call, _, to_list, _}) -> S;
+next_state(S, _V, {call, _, is_queue, _}) -> S;
+next_state(S, _V, {call, _, is_empty, _}) -> S;
+next_state(S, _V, {call, _, len, _}) -> S;
+next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value, Prio]}) ->
+ S#state { in_queue = listq_insert({Prio, Value}, InQ) };
+next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value]}) ->
+ S#state { in_queue = listq_insert({0, Value}, InQ) }.
+
+precondition(_S, _Call) ->
+ true. % No limitation on the things we can call at all.
+
+postcondition(#state { in_queue = InQ }, {call, _, out, [Prio]}, R) ->
+ R == listq_prio_peek(InQ, Prio);
+postcondition(#state { in_queue = InQ }, {call, _, pout, _}, R) ->
+ R == listq_ppeek(InQ);
+postcondition(#state { in_queue = InQ }, {call, _, out, _}, R) ->
+ R == listq_peek(InQ);
+postcondition(S, {call, _, to_list, _}, R) ->
+ R == listq_to_list(S#state.in_queue);
+postcondition(S, {call, _, len, _}, L) ->
+ L == listq_length(S#state.in_queue);
+postcondition(_S, {call, _, is_queue, _}, true) -> true;
+postcondition(S, {call, _, is_empty, _}, Res) ->
+ Res == (S#state.in_queue == []);
+postcondition(_S, {call, _, in, _}, _) ->
+ true;
+postcondition(_, _, _) ->
+ false.
+
+correct(M) ->
+ ?FORALL(Cmds, commands(?MODULE),
+ ?TRAPEXIT(
+ begin
+ ?SERVER:start_link(M),
+ {History,State,Result} = run_commands(?MODULE, Cmds),
+ ?SERVER:stop(),
+ ?WHENFAIL(io:format("History: ~w\nState: ~w\nResult: ~w\n",
+ [History,State,Result]),
+ aggregate(command_names(Cmds), Result =:= ok))
+ end)).
+
+qc_opts() ->
+ [{numtests, 10000}].
+
+qc_pq() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue), qc_opts()).
+
+qc_pq2() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue2), qc_opts()).
+
+qc_pq3() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue3), qc_opts()).
+
+qc_pq4() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue4), qc_opts()).
+
+%% ----------------------------------------------------------------------
+
+%% A listq is a sorted list of priorities
+listq_insert({P, V}, []) ->
+ [{P, [V]}];
+listq_insert({P, V}, [{P1, _} | _] = LQ) when P < P1 ->
+ [{P, [V]} | LQ];
+listq_insert({P, V}, [{P1, Vs} | Next]) when P == P1 ->
+ [{P, Vs ++ [V]} | Next];
+listq_insert({P, V}, [{P1, Vs} | Next]) when P > P1 ->
+ [{P1, Vs} | listq_insert({P, V}, Next)].
+
+listq_to_list(L) ->
+ lists:concat(
+ [ Vals || {_Prio, Vals} <- L]).
+
+listq_length(L) ->
+ lists:sum(
+ [ length(Vs) || {_Prio, Vs} <- L]).
+
+listq_rem([]) ->
+ [];
+listq_rem([{_P, [_V]} | Next]) ->
+ Next;
+listq_rem([{P, [_V1 | Vs]} | Next]) ->
+ [{P, Vs} | Next].
+
+listq_rem([], _P) ->
+ [];
+listq_rem([{P, [_]} | Next], P) ->
+ Next;
+listq_rem([{P, [_ | Vs]} | Next], P) ->
+ [{P, Vs} | Next];
+listq_rem([{P1, Vs} | Next], P) ->
+ [{P1, Vs} | listq_rem(Next, P)].
+
+listq_peek([]) ->
+ empty;
+listq_peek([{_P, [V | _]} | _]) ->
+ {value, V}.
+
+listq_prio_peek([{P, [V | _]} | _], P) ->
+ {value, V};
+listq_prio_peek([{_P1, _} | Next], P) ->
+ listq_prio_peek(Next, P);
+listq_prio_peek([], _P) ->
+ empty.
+
+listq_ppeek([]) ->
+ empty;
+listq_ppeek([{P, [V | _]} | _]) ->
+ {value, V, P}.
+
+-endif.
diff --git a/aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl b/aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl
new file mode 100644
index 0000000..7fcb0a1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/pqueue/test/queue_srv.erl
@@ -0,0 +1,183 @@
+%%%-------------------------------------------------------------------
+%%% @author Jesper Louis andersen <>
+%%% @copyright (C) 2011, Jesper Louis andersen
+%%% @doc
+%%%
+%%% @end
+%%% Created : 11 Nov 2011 by Jesper Louis andersen <>
+%%%-------------------------------------------------------------------
+-module(queue_srv).
+
+-behaviour(gen_server).
+
+%% API
+-export([start_link/1, stop/0, len/0, in/1, in/2, is_empty/0,
+ out/0, out/1, pout/0,
+ is_queue/0, to_list/0]).
+
+%% gen_server callbacks
+-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
+ terminate/2, code_change/3]).
+
+-define(SERVER, ?MODULE).
+
+-record(state, { mod, q }).
+
+%%%===================================================================
+%%% API
+%%%===================================================================
+
+%%--------------------------------------------------------------------
+%% @doc
+%% Starts the server
+%%
+%% @spec start_link(Mod) -> {ok, Pid} | ignore | {error, Error}
+%% @end
+%%--------------------------------------------------------------------
+start_link(Mod) ->
+ gen_server:start_link({local, ?SERVER}, ?MODULE, [Mod], []).
+
+stop() ->
+ gen_server:stop(?SERVER).
+
+call(M) ->
+ gen_server:call(?SERVER, M, infinity).
+
+in(I) ->
+ call({in, I}).
+
+in(I, P) ->
+ call({in, I, P}).
+
+len() ->
+ call(len).
+
+is_empty() ->
+ call(is_empty).
+
+is_queue() ->
+ call(is_queue).
+
+to_list() ->
+ call(to_list).
+
+out() ->
+ call(out).
+
+out(P) ->
+ call({out, P}).
+
+pout() ->
+ call(pout).
+
+%%%===================================================================
+%%% gen_server callbacks
+%%%===================================================================
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Initializes the server
+%%
+%% @spec init(Args) -> {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% @end
+%%--------------------------------------------------------------------
+init([Mod]) ->
+ {ok, #state{ mod = Mod,
+ q = Mod:new() }}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Handling call messages
+%%
+%% @spec handle_call(Request, From, State) ->
+%% {reply, Reply, State} |
+%% {reply, Reply, State, Timeout} |
+%% {noreply, State} |
+%% {noreply, State, Timeout} |
+%% {stop, Reason, Reply, State} |
+%% {stop, Reason, State}
+%% @end
+%%--------------------------------------------------------------------
+handle_call({in, Item}, _F, #state { q = Q, mod = M } = S) ->
+ NQ = M:in(Item, Q),
+ {reply, ok, S#state { q = NQ }};
+handle_call({in, Item, Prio}, _F, #state { q = Q, mod = M } = S) ->
+ NQ = M:in(Item, Prio, Q),
+ {reply, ok, S#state { q = NQ }};
+handle_call({out, P}, _F, #state { q = Q, mod = M } = S) ->
+ {R, NQ} = M:out(P, Q),
+ {reply, R, S#state { q = NQ }};
+handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == out;
+ Ty == pout ->
+ {R, NQ} = M:Ty(Q),
+ {reply, R, S#state { q = NQ }};
+handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == is_queue;
+ Ty == is_empty;
+ Ty == len;
+ Ty == to_list ->
+ R = M:Ty(Q),
+ {reply, R, S};
+handle_call(Req, From, State) ->
+ error_logger:info_report([{handle_call, Req, From, State}]),
+ Reply = ok,
+ {reply, Reply, State}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Handling cast messages
+%%
+%% @spec handle_cast(Msg, State) -> {noreply, State} |
+%% {noreply, State, Timeout} |
+%% {stop, Reason, State}
+%% @end
+%%--------------------------------------------------------------------
+handle_cast(_Msg, State) ->
+ {noreply, State}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Handling all non call/cast messages
+%%
+%% @spec handle_info(Info, State) -> {noreply, State} |
+%% {noreply, State, Timeout} |
+%% {stop, Reason, State}
+%% @end
+%%--------------------------------------------------------------------
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% This function is called by a gen_server when it is about to
+%% terminate. It should be the opposite of Module:init/1 and do any
+%% necessary cleaning up. When it returns, the gen_server terminates
+%% with Reason. The return value is ignored.
+%%
+%% @spec terminate(Reason, State) -> void()
+%% @end
+%%--------------------------------------------------------------------
+terminate(_Reason, _State) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Convert process state when code is changed
+%%
+%% @spec code_change(OldVsn, State, Extra) -> {ok, NewState}
+%% @end
+%%--------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache
new file mode 100644
index 0000000..4ef501f
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta
new file mode 100644
index 0000000..90aa893
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl
new file mode 100644
index 0000000..59361a2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile.erl
@@ -0,0 +1,287 @@
+-module(simplifile).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([read/1, write/2, delete/1, delete_all/1, append/2, read_bits/1, write_bits/2, append_bits/2, is_directory/1, create_directory/1, read_directory/1, is_file/1, create_file/1, get_files/1, create_directory_all/1, copy_directory/2, rename_directory/2, copy_file/2, rename_file/2]).
+-export_type([file_error/0]).
+
+-type file_error() :: eacces |
+ eagain |
+ ebadf |
+ ebadmsg |
+ ebusy |
+ edeadlk |
+ edeadlock |
+ edquot |
+ eexist |
+ efault |
+ efbig |
+ eftype |
+ eintr |
+ einval |
+ eio |
+ eisdir |
+ eloop |
+ emfile |
+ emlink |
+ emultihop |
+ enametoolong |
+ enfile |
+ enobufs |
+ enodev |
+ enolck |
+ enolink |
+ enoent |
+ enomem |
+ enospc |
+ enosr |
+ enostr |
+ enosys |
+ enotblk |
+ enotdir |
+ enotsup |
+ enxio |
+ eopnotsupp |
+ eoverflow |
+ eperm |
+ epipe |
+ erange |
+ erofs |
+ espipe |
+ esrch |
+ estale |
+ etxtbsy |
+ exdev |
+ not_utf8 |
+ unknown.
+
+-spec do_append(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+do_append(Content, Filepath) ->
+ _pipe = Content,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ simplifile_erl:append_file(_pipe@1, Filepath).
+
+-spec do_write(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+do_write(Content, Filepath) ->
+ _pipe = Content,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ simplifile_erl:write_file(_pipe@1, Filepath).
+
+-spec do_read(binary()) -> {ok, binary()} | {error, file_error()}.
+do_read(Filepath) ->
+ case simplifile_erl:read_file(Filepath) of
+ {ok, Bits} ->
+ case gleam@bit_array:to_string(Bits) of
+ {ok, Str} ->
+ {ok, Str};
+
+ _ ->
+ {error, not_utf8}
+ end;
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec cast_error({ok, JXG} | {error, file_error()}) -> {ok, JXG} |
+ {error, file_error()}.
+cast_error(Input) ->
+ Input.
+
+-spec read(binary()) -> {ok, binary()} | {error, file_error()}.
+read(Filepath) ->
+ _pipe = do_read(Filepath),
+ cast_error(_pipe).
+
+-spec write(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+write(Filepath, Contents) ->
+ _pipe = do_write(Contents, Filepath),
+ cast_error(_pipe).
+
+-spec delete(binary()) -> {ok, nil} | {error, file_error()}.
+delete(Path) ->
+ _pipe = simplifile_erl:recursive_delete(Path),
+ cast_error(_pipe).
+
+-spec delete_all(list(binary())) -> {ok, nil} | {error, file_error()}.
+delete_all(Paths) ->
+ case Paths of
+ [] ->
+ {ok, nil};
+
+ [Path | Rest] ->
+ case delete(Path) of
+ {ok, nil} ->
+ delete_all(Rest);
+
+ {error, enoent} ->
+ delete_all(Rest);
+
+ E ->
+ E
+ end
+ end.
+
+-spec append(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+append(Filepath, Contents) ->
+ _pipe = do_append(Contents, Filepath),
+ cast_error(_pipe).
+
+-spec read_bits(binary()) -> {ok, bitstring()} | {error, file_error()}.
+read_bits(Filepath) ->
+ _pipe = simplifile_erl:read_file(Filepath),
+ cast_error(_pipe).
+
+-spec write_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}.
+write_bits(Filepath, Bits) ->
+ _pipe = simplifile_erl:write_file(Bits, Filepath),
+ cast_error(_pipe).
+
+-spec append_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}.
+append_bits(Filepath, Bits) ->
+ _pipe = simplifile_erl:append_file(Bits, Filepath),
+ cast_error(_pipe).
+
+-spec is_directory(binary()) -> boolean().
+is_directory(Filepath) ->
+ filelib:is_dir(Filepath).
+
+-spec create_directory(binary()) -> {ok, nil} | {error, file_error()}.
+create_directory(Filepath) ->
+ _pipe = simplifile_erl:make_directory(Filepath),
+ cast_error(_pipe).
+
+-spec read_directory(binary()) -> {ok, list(binary())} | {error, file_error()}.
+read_directory(Path) ->
+ _pipe = simplifile_erl:list_directory(Path),
+ cast_error(_pipe).
+
+-spec is_file(binary()) -> boolean().
+is_file(Filepath) ->
+ simplifile_erl:is_file(Filepath).
+
+-spec create_file(binary()) -> {ok, nil} | {error, file_error()}.
+create_file(Filepath) ->
+ case begin
+ _pipe = Filepath,
+ is_file(_pipe)
+ end
+ orelse begin
+ _pipe@1 = Filepath,
+ is_directory(_pipe@1)
+ end of
+ true ->
+ {error, eexist};
+
+ false ->
+ write_bits(Filepath, <<>>)
+ end.
+
+-spec do_copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+do_copy_directory(Src, Dest) ->
+ gleam@result:'try'(
+ read_directory(Src),
+ fun(Segments) ->
+ _pipe = Segments,
+ gleam@list:each(
+ _pipe,
+ fun(Segment) ->
+ Src_path = <<<<Src/binary, "/"/utf8>>/binary,
+ Segment/binary>>,
+ Dest_path = <<<<Dest/binary, "/"/utf8>>/binary,
+ Segment/binary>>,
+ case {is_file(Src_path), is_directory(Src_path)} of
+ {true, false} ->
+ gleam@result:'try'(
+ read_bits(Src_path),
+ fun(Content) -> _pipe@1 = Content,
+ write_bits(Dest_path, _pipe@1) end
+ );
+
+ {false, true} ->
+ gleam@result:'try'(
+ create_directory(Dest_path),
+ fun(_) ->
+ do_copy_directory(Src_path, Dest_path)
+ end
+ );
+
+ {_, _} ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"unreachable"/utf8>>,
+ module => <<"simplifile"/utf8>>,
+ function => <<"do_copy_directory"/utf8>>,
+ line => 341})
+ end
+ end
+ ),
+ {ok, nil}
+ end
+ ).
+
+-spec get_files(binary()) -> {ok, list(binary())} | {error, file_error()}.
+get_files(Directory) ->
+ gleam@result:'try'(
+ read_directory(Directory),
+ fun(Contents) ->
+ Paths = gleam@list:map(
+ Contents,
+ fun(Segment) ->
+ <<<<Directory/binary, "/"/utf8>>/binary, Segment/binary>>
+ end
+ ),
+ Files = gleam@list:filter(Paths, fun is_file/1),
+ case gleam@list:filter(Paths, fun is_directory/1) of
+ [] ->
+ {ok, Files};
+
+ Directories ->
+ gleam@result:'try'(
+ gleam@list:try_map(Directories, fun get_files/1),
+ fun(Nested_files) ->
+ {ok,
+ gleam@list:append(
+ Files,
+ gleam@list:flatten(Nested_files)
+ )}
+ end
+ )
+ end
+ end
+ ).
+
+-spec create_directory_all(binary()) -> {ok, nil} | {error, file_error()}.
+create_directory_all(Dirpath) ->
+ Path = case begin
+ _pipe = Dirpath,
+ gleam@string:ends_with(_pipe, <<"/"/utf8>>)
+ end of
+ true ->
+ Dirpath;
+
+ false ->
+ <<Dirpath/binary, "/"/utf8>>
+ end,
+ _pipe@1 = simplifile_erl:create_dir_all(Path),
+ cast_error(_pipe@1).
+
+-spec copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+copy_directory(Src, Dest) ->
+ gleam@result:'try'(
+ create_directory_all(Dest),
+ fun(_) -> do_copy_directory(Src, Dest) end
+ ).
+
+-spec rename_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+rename_directory(Src, Dest) ->
+ gleam@result:'try'(copy_directory(Src, Dest), fun(_) -> delete(Src) end).
+
+-spec copy_file(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+copy_file(Src, Dest) ->
+ _pipe = file:copy(Src, Dest),
+ _pipe@1 = gleam@result:replace(_pipe, nil),
+ cast_error(_pipe@1).
+
+-spec rename_file(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+rename_file(Src, Dest) ->
+ _pipe = simplifile_erl:rename_file(Src, Dest),
+ cast_error(_pipe).
diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl
new file mode 100644
index 0000000..dac135a
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_erl.erl
@@ -0,0 +1,70 @@
+-module(simplifile_erl).
+-export([
+ read_file/1,
+ append_file/2, write_file/2, delete_file/1, delete_directory/1, recursive_delete/1,
+ list_directory/1, make_directory/1, is_file/1, create_dir_all/1, rename_file/2
+]).
+
+-define(is_posix_error(Error),
+ Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse
+ Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse
+ Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse
+ Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse
+ Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse
+ Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse
+ Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse
+ Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse
+ Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse
+ Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse
+ Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse
+ Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse
+ Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse
+ Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse
+ Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse
+ Error =:= etxtbsy orelse Error =:= exdev
+).
+
+posix_result(Result) ->
+ case Result of
+ ok -> {ok, nil};
+ {ok, Value} -> {ok, Value};
+ {error, Reason} when ?is_posix_error(Reason) -> {error, Reason}
+ end.
+
+read_file(Filename) ->
+ posix_result(file:read_file(Filename)).
+
+write_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents)).
+
+append_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents, [append])).
+
+delete_file(Filename) ->
+ posix_result(file:delete(Filename)).
+
+make_directory(Dir) ->
+ posix_result(file:make_dir(Dir)).
+
+list_directory(Dir) ->
+ case file:list_dir(Dir) of
+ {ok, Filenames} ->
+ {ok, [list_to_binary(Filename) || Filename <- Filenames]};
+ {error, Reason} when ?is_posix_error(Reason) ->
+ {error, Reason}
+ end.
+
+delete_directory(Dir) ->
+ posix_result(file:del_dir(Dir)).
+
+recursive_delete(Dir) ->
+ posix_result(file:del_dir_r(Dir)).
+
+is_file(Filename) ->
+ not (file:read_file_info(Filename) == {error, enoent}) and not filelib: is_dir(Filename).
+
+create_dir_all(Filename) ->
+ posix_result(filelib:ensure_dir(Filename)).
+
+rename_file(Source, Destination) ->
+ posix_result(file:rename(Source, Destination)).
diff --git a/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs
new file mode 100644
index 0000000..faf4109
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/_gleam_artefacts/simplifile_js.mjs
@@ -0,0 +1,102 @@
+import fs from "node:fs"
+import path from "node:path"
+import { BitArray, Ok, Error as GError, toList} from "./gleam.mjs";
+
+export function readBits(filepath) {
+ try {
+ const contents = fs.readFileSync(path.normalize(filepath))
+ return new Ok(new BitArray(new Uint8Array(contents)))
+ } catch(e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function writeBits(contents, filepath) {
+ try {
+ fs.writeFileSync(path.normalize(filepath), contents.buffer)
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function appendBits(contents, filepath) {
+ try {
+ fs.appendFileSync(path.normalize(filepath), contents.buffer)
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+function stringifyError(e) {
+ return e.code
+}
+
+export function isFile(filepath) {
+ let fp = path.normalize(filepath)
+ return fs.existsSync(fp) && fs.lstatSync(fp).isFile();
+}
+
+export function isDirectory(filepath) {
+ let fp = path.normalize(filepath)
+ return fs.existsSync(fp) && fs.lstatSync(fp).isDirectory();
+}
+
+export function makeDirectory(filepath) {
+ try {
+ fs.mkdirSync(path.normalize(filepath))
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function createDirAll(filepath) {
+ try {
+ fs.mkdirSync(filepath, { recursive: true })
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function deleteFileOrDirRecursive(fileOrDirPath) {
+ try {
+ if (isDirectory(fileOrDirPath)) {
+ fs.rmSync(path.normalize(fileOrDirPath), { recursive: true })
+ } else {
+ fs.unlinkSync(path.normalize(fileOrDirPath))
+ }
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function listContents(filepath) {
+ try {
+ const stuff = toList(fs.readdirSync(path.normalize(filepath)))
+ return new Ok(stuff)
+ } catch(e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function copyFile(srcpath, destpath) {
+ try {
+ fs.copyFileSync(path.normalize(srcpath), path.normalize(destpath))
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function renameFile(srcpath, destpath) {
+ try {
+ fs.renameSync(path.normalize(srcpath), path.normalize(destpath))
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+} \ No newline at end of file
diff --git a/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app
new file mode 100644
index 0000000..3bb63fa
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.app
@@ -0,0 +1,7 @@
+{application, simplifile, [
+ {vsn, "1.0.0"},
+ {applications, [gleam_stdlib]},
+ {description, "Basic file operations that work on all targets"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beam b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beam
new file mode 100644
index 0000000..7d3bcd6
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beam b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beam
new file mode 100644
index 0000000..b859e1e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/simplifile/ebin/simplifile_erl.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache
new file mode 100644
index 0000000..7fa2fe5
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_meta b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_meta
new file mode 100644
index 0000000..daef1e9
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl
new file mode 100644
index 0000000..a3ad8f4
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/_gleam_artefacts/snag.erl
@@ -0,0 +1,74 @@
+-module(snag).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/1, error/1, layer/2, context/2, pretty_print/1, line_print/1]).
+-export_type([snag/0]).
+
+-type snag() :: {snag, binary(), list(binary())}.
+
+-spec new(binary()) -> snag().
+new(Issue) ->
+ {snag, Issue, []}.
+
+-spec error(binary()) -> {ok, any()} | {error, snag()}.
+error(Issue) ->
+ {error, new(Issue)}.
+
+-spec layer(snag(), binary()) -> snag().
+layer(Snag, Issue) ->
+ {snag, Issue, [erlang:element(2, Snag) | erlang:element(3, Snag)]}.
+
+-spec context({ok, IOV} | {error, snag()}, binary()) -> {ok, IOV} |
+ {error, snag()}.
+context(Result, Issue) ->
+ case Result of
+ {ok, _} ->
+ Result;
+
+ {error, Snag} ->
+ {error, layer(Snag, Issue)}
+ end.
+
+-spec pretty_print_cause(list(binary())) -> gleam@string_builder:string_builder().
+pretty_print_cause(Cause) ->
+ _pipe = Cause,
+ _pipe@1 = gleam@list:index_map(
+ _pipe,
+ fun(Index, Line) ->
+ gleam@string:concat(
+ [<<" "/utf8>>,
+ gleam@int:to_string(Index),
+ <<": "/utf8>>,
+ Line,
+ <<"\n"/utf8>>]
+ )
+ end
+ ),
+ gleam@string_builder:from_strings(_pipe@1).
+
+-spec pretty_print(snag()) -> binary().
+pretty_print(Snag) ->
+ Builder = gleam@string_builder:from_strings(
+ [<<"error: "/utf8>>, erlang:element(2, Snag), <<"\n"/utf8>>]
+ ),
+ gleam@string_builder:to_string(case erlang:element(3, Snag) of
+ [] ->
+ Builder;
+
+ Cause ->
+ _pipe = Builder,
+ _pipe@1 = gleam@string_builder:append(
+ _pipe,
+ <<"\ncause:\n"/utf8>>
+ ),
+ gleam@string_builder:append_builder(
+ _pipe@1,
+ pretty_print_cause(Cause)
+ )
+ end).
+
+-spec line_print(snag()) -> binary().
+line_print(Snag) ->
+ _pipe = [gleam@string:append(<<"error: "/utf8>>, erlang:element(2, Snag)) |
+ erlang:element(3, Snag)],
+ gleam@string:join(_pipe, <<" <- "/utf8>>).
diff --git a/aoc2023/build/dev/erlang/snag/ebin/snag.app b/aoc2023/build/dev/erlang/snag/ebin/snag.app
new file mode 100644
index 0000000..724fb97
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/ebin/snag.app
@@ -0,0 +1,7 @@
+{application, snag, [
+ {vsn, "0.2.1"},
+ {applications, [gleam_stdlib]},
+ {description, "A boilerplate-free ad-hoc error type"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/snag/ebin/snag.beam b/aoc2023/build/dev/erlang/snag/ebin/snag.beam
new file mode 100644
index 0000000..4af73ad
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/ebin/snag.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl b/aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl
new file mode 100644
index 0000000..5d6614e
--- /dev/null
+++ b/aoc2023/build/dev/erlang/snag/include/snag_Snag.hrl
@@ -0,0 +1 @@
+-record(snag, {issue :: binary(), cause :: list(binary())}).
diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl
new file mode 100644
index 0000000..543db88
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/gleam@@compile.erl
@@ -0,0 +1,157 @@
+#!/usr/bin/env escript
+
+% TODO: Don't concurrently print warnings and errors
+% TODO: Some tests
+
+-record(arguments, {lib = "./", out = "./", modules = []}).
+
+main(Args) ->
+ #arguments{out = Out, lib = Lib, modules = Modules} = parse(Args),
+ IsElixirModule = fun(Module) ->
+ filename:extension(Module) =:= ".ex"
+ end,
+ {ElixirModules, ErlangModules} = lists:partition(IsElixirModule, Modules),
+ ok = configure_logging(),
+ ok = add_lib_to_erlang_path(Lib),
+ ok = filelib:ensure_dir([Out, $/]),
+ {ErlangOk, _ErlangBeams} = compile_erlang(ErlangModules, Out),
+ {ElixirOk, _ElixirBeams} = case ErlangOk of
+ true -> compile_elixir(ElixirModules, Out);
+ false -> {false, []}
+ end,
+ case ErlangOk and ElixirOk of
+ true -> ok;
+ false -> erlang:halt(1)
+ end.
+
+compile_erlang(Modules, Out) ->
+ Workers = start_compiler_workers(Out),
+ ok = producer_loop(Modules, Workers),
+ collect_results({true, []}).
+
+collect_results(Acc = {Result, Beams}) ->
+ receive
+ {compiled, Beam} -> collect_results({Result, [Beam | Beams]});
+ failed -> collect_results({false, Beams})
+ after 0 -> Acc
+ end.
+
+producer_loop([], 0) ->
+ ok;
+producer_loop([], Workers) ->
+ receive
+ {work_please, _} -> producer_loop([], Workers - 1)
+ end;
+producer_loop([Module | Modules], Workers) ->
+ receive
+ {work_please, Worker} ->
+ erlang:send(Worker, {module, Module}),
+ producer_loop(Modules, Workers)
+ end.
+
+start_compiler_workers(Out) ->
+ Parent = self(),
+ NumSchedulers = erlang:system_info(schedulers),
+ SpawnWorker = fun(_) ->
+ erlang:spawn_link(fun() -> worker_loop(Parent, Out) end)
+ end,
+ lists:foreach(SpawnWorker, lists:seq(1, NumSchedulers)),
+ NumSchedulers.
+
+worker_loop(Parent, Out) ->
+ Options = [report_errors, report_warnings, debug_info, {outdir, Out}],
+ erlang:send(Parent, {work_please, self()}),
+ receive
+ {module, Module} ->
+ log({compiling, Module}),
+ case compile:file(Module, Options) of
+ {ok, ModuleName} ->
+ Beam = filename:join(Out, ModuleName) ++ ".beam",
+ Message = {compiled, Beam},
+ log(Message),
+ erlang:send(Parent, Message);
+ error ->
+ log({failed, Module}),
+ erlang:send(Parent, failed)
+ end,
+ worker_loop(Parent, Out)
+ end.
+
+compile_elixir(Modules, Out) ->
+ Error = [
+ "The program elixir was not found. Is it installed?",
+ $\n,
+ "Documentation for installing Elixir can be viewed here:",
+ $\n,
+ "https://elixir-lang.org/install.html"
+ ],
+ case Modules of
+ [] -> {true, []};
+ _ ->
+ log({starting, "compiler.app"}),
+ ok = application:start(compiler),
+ log({starting, "elixir.app"}),
+ case application:start(elixir) of
+ ok -> do_compile_elixir(Modules, Out);
+ _ ->
+ io:put_chars(standard_error, [Error, $\n]),
+ {false, []}
+ end
+ end.
+
+do_compile_elixir(Modules, Out) ->
+ ModuleBins = lists:map(fun(Module) ->
+ log({compiling, Module}),
+ list_to_binary(Module)
+ end, Modules),
+ OutBin = list_to_binary(Out),
+ Options = [{dest, OutBin}],
+ % Silence "redefining module" warnings.
+ % Compiled modules in the build directory are added to the code path.
+ % These warnings result from recompiling loaded modules.
+ % TODO: This line can likely be removed if/when the build directory is cleaned before every compilation.
+ 'Elixir.Code':compiler_options([{ignore_module_conflict, true}]),
+ case 'Elixir.Kernel.ParallelCompiler':compile_to_path(ModuleBins, OutBin, Options) of
+ {ok, ModuleAtoms, _} ->
+ ToBeam = fun(ModuleAtom) ->
+ Beam = filename:join(Out, atom_to_list(ModuleAtom)) ++ ".beam",
+ log({compiled, Beam}),
+ Beam
+ end,
+ {true, lists:map(ToBeam, ModuleAtoms)};
+ {error, Errors, _} ->
+ % Log all filenames associated with modules that failed to compile.
+ % Note: The compiler prints compilation errors upon encountering them.
+ ErrorFiles = lists:usort([File || {File, _, _} <- Errors]),
+ Log = fun(File) ->
+ log({failed, binary_to_list(File)})
+ end,
+ lists:foreach(Log, ErrorFiles),
+ {false, []};
+ _ -> {false, []}
+ end.
+
+add_lib_to_erlang_path(Lib) ->
+ code:add_paths(filelib:wildcard([Lib, "/*/ebin"])).
+
+parse(Args) ->
+ parse(Args, #arguments{}).
+
+parse([], Arguments) ->
+ Arguments;
+parse(["--lib", Lib | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{lib = Lib});
+parse(["--out", Out | Rest], Arguments) ->
+ parse(Rest, Arguments#arguments{out = Out});
+parse([Module | Rest], Arguments = #arguments{modules = Modules}) ->
+ parse(Rest, Arguments#arguments{modules = [Module | Modules]}).
+
+configure_logging() ->
+ Enabled = os:getenv("GLEAM_LOG") /= false,
+ persistent_term:put(gleam_logging_enabled, Enabled).
+
+log(Term) ->
+ case persistent_term:get(gleam_logging_enabled) of
+ true -> erlang:display(Term), ok;
+ false -> ok
+ end.
diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache
new file mode 100644
index 0000000..036c033
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache
Binary files differ
diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_meta b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_meta
new file mode 100644
index 0000000..492599b
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.cache_meta
Binary files differ
diff --git a/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl
new file mode 100644
index 0000000..0429a31
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/_gleam_artefacts/tom.erl
@@ -0,0 +1,2142 @@
+-module(tom).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get/2, get_int/2, get_float/2, get_bool/2, get_string/2, get_date/2, get_time/2, get_date_time/2, get_array/2, get_table/2, get_number/2, parse/1]).
+-export_type([toml/0, date_time/0, date/0, time/0, offset/0, sign/0, parse_error/0, number_/0, get_error/0]).
+
+-type toml() :: {int, integer()} |
+ {float, float()} |
+ {infinity, sign()} |
+ {nan, sign()} |
+ {bool, boolean()} |
+ {string, binary()} |
+ {date, date()} |
+ {time, time()} |
+ {date_time, date_time()} |
+ {array, list(toml())} |
+ {array_of_tables, list(gleam@dict:dict(binary(), toml()))} |
+ {table, gleam@dict:dict(binary(), toml())} |
+ {inline_table, gleam@dict:dict(binary(), toml())}.
+
+-type date_time() :: {date_time_value, date(), time(), offset()}.
+
+-type date() :: {date_value, integer(), integer(), integer()}.
+
+-type time() :: {time_value, integer(), integer(), integer(), integer()}.
+
+-type offset() :: local | {offset, sign(), integer(), integer()}.
+
+-type sign() :: positive | negative.
+
+-type parse_error() :: {unexpected, binary(), binary()} |
+ {key_already_in_use, list(binary())}.
+
+-type number_() :: {number_int, integer()} |
+ {number_float, float()} |
+ {number_infinity, sign()} |
+ {number_nan, sign()}.
+
+-type get_error() :: {not_found, list(binary())} |
+ {wrong_type, list(binary()), binary(), binary()}.
+
+-spec classify(toml()) -> binary().
+classify(Toml) ->
+ case Toml of
+ {int, _} ->
+ <<"Int"/utf8>>;
+
+ {float, _} ->
+ <<"Float"/utf8>>;
+
+ {nan, positive} ->
+ <<"NaN"/utf8>>;
+
+ {nan, negative} ->
+ <<"Negative NaN"/utf8>>;
+
+ {infinity, positive} ->
+ <<"Infinity"/utf8>>;
+
+ {infinity, negative} ->
+ <<"Negative Infinity"/utf8>>;
+
+ {bool, _} ->
+ <<"Bool"/utf8>>;
+
+ {string, _} ->
+ <<"String"/utf8>>;
+
+ {date, _} ->
+ <<"Date"/utf8>>;
+
+ {time, _} ->
+ <<"Time"/utf8>>;
+
+ {date_time, _} ->
+ <<"DateTime"/utf8>>;
+
+ {array, _} ->
+ <<"Array"/utf8>>;
+
+ {array_of_tables, _} ->
+ <<"Array"/utf8>>;
+
+ {table, _} ->
+ <<"Table"/utf8>>;
+
+ {inline_table, _} ->
+ <<"Table"/utf8>>
+ end.
+
+-spec push_key({ok, KFC} | {error, get_error()}, binary()) -> {ok, KFC} |
+ {error, get_error()}.
+push_key(Result, Key) ->
+ case Result of
+ {ok, T} ->
+ {ok, T};
+
+ {error, {not_found, Path}} ->
+ {error, {not_found, [Key | Path]}};
+
+ {error, {wrong_type, Path@1, Expected, Got}} ->
+ {error, {wrong_type, [Key | Path@1], Expected, Got}}
+ end.
+
+-spec get(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok, toml()} |
+ {error, get_error()}.
+get(Toml, Key) ->
+ case Key of
+ [] ->
+ {error, {not_found, []}};
+
+ [K] ->
+ gleam@result:replace_error(gleam@map:get(Toml, K), {not_found, [K]});
+
+ [K@1 | Key@1] ->
+ case gleam@map:get(Toml, K@1) of
+ {ok, {table, T}} ->
+ push_key(get(T, Key@1), K@1);
+
+ {ok, Other} ->
+ {error,
+ {wrong_type, [K@1], <<"Table"/utf8>>, classify(Other)}};
+
+ {error, _} ->
+ {error, {not_found, [K@1]}}
+ end
+ end.
+
+-spec get_int(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ integer()} |
+ {error, get_error()}.
+get_int(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {int, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Int"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_float(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ float()} |
+ {error, get_error()}.
+get_float(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {float, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Float"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_bool(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ boolean()} |
+ {error, get_error()}.
+get_bool(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {bool, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Bool"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_string(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ binary()} |
+ {error, get_error()}.
+get_string(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {string, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"String"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_date(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ date()} |
+ {error, get_error()}.
+get_date(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {date, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Date"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_time(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ time()} |
+ {error, get_error()}.
+get_time(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {time, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Time"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_date_time(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ date_time()} |
+ {error, get_error()}.
+get_date_time(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {date_time, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"DateTime"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_array(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ list(toml())} |
+ {error, get_error()}.
+get_array(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {array, I}} ->
+ {ok, I};
+
+ {ok, {array_of_tables, I@1}} ->
+ {ok, gleam@list:map(I@1, fun(Field@0) -> {table, Field@0} end)};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Array"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_table(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ gleam@dict:dict(binary(), toml())} |
+ {error, get_error()}.
+get_table(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {table, I}} ->
+ {ok, I};
+
+ {ok, {inline_table, I@1}} ->
+ {ok, I@1};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Table"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_number(gleam@dict:dict(binary(), toml()), list(binary())) -> {ok,
+ number_()} |
+ {error, get_error()}.
+get_number(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {int, X}} ->
+ {ok, {number_int, X}};
+
+ {ok, {float, X@1}} ->
+ {ok, {number_float, X@1}};
+
+ {ok, {nan, X@2}} ->
+ {ok, {number_nan, X@2}};
+
+ {ok, {infinity, X@3}} ->
+ {ok, {number_infinity, X@3}};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Number"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec merge(gleam@dict:dict(binary(), toml()), binary(), toml(), toml()) -> {ok,
+ gleam@dict:dict(binary(), toml())} |
+ {error, list(binary())}.
+merge(Table, Key, Old, New) ->
+ case {Old, New} of
+ {{array_of_tables, Tables}, {array_of_tables, New@1}} ->
+ {ok,
+ gleam@map:insert(
+ Table,
+ Key,
+ {array_of_tables, gleam@list:append(New@1, Tables)}
+ )};
+
+ {_, _} ->
+ {error, [Key]}
+ end.
+
+-spec insert_loop(gleam@dict:dict(binary(), toml()), list(binary()), toml()) -> {ok,
+ gleam@dict:dict(binary(), toml())} |
+ {error, list(binary())}.
+insert_loop(Table, Key, Value) ->
+ case Key of
+ [] ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"unreachable"/utf8>>,
+ module => <<"tom"/utf8>>,
+ function => <<"insert_loop"/utf8>>,
+ line => 511});
+
+ [K] ->
+ case gleam@map:get(Table, K) of
+ {error, nil} ->
+ {ok, gleam@map:insert(Table, K, Value)};
+
+ {ok, Old} ->
+ merge(Table, K, Old, Value)
+ end;
+
+ [K@1 | Key@1] ->
+ case gleam@map:get(Table, K@1) of
+ {error, nil} ->
+ case insert_loop(gleam@map:new(), Key@1, Value) of
+ {ok, Inner} ->
+ {ok, gleam@map:insert(Table, K@1, {table, Inner})};
+
+ {error, Path} ->
+ {error, [K@1 | Path]}
+ end;
+
+ {ok, {array_of_tables, [Inner@1 | Rest]}} ->
+ case insert_loop(Inner@1, Key@1, Value) of
+ {ok, Inner@2} ->
+ {ok,
+ gleam@map:insert(
+ Table,
+ K@1,
+ {array_of_tables, [Inner@2 | Rest]}
+ )};
+
+ {error, Path@1} ->
+ {error, [K@1 | Path@1]}
+ end;
+
+ {ok, {table, Inner@3}} ->
+ case insert_loop(Inner@3, Key@1, Value) of
+ {ok, Inner@4} ->
+ {ok, gleam@map:insert(Table, K@1, {table, Inner@4})};
+
+ {error, Path@2} ->
+ {error, [K@1 | Path@2]}
+ end;
+
+ {ok, _} ->
+ {error, [K@1]}
+ end
+ end.
+
+-spec insert(gleam@dict:dict(binary(), toml()), list(binary()), toml()) -> {ok,
+ gleam@dict:dict(binary(), toml())} |
+ {error, parse_error()}.
+insert(Table, Key, Value) ->
+ case insert_loop(Table, Key, Value) of
+ {ok, Table@1} ->
+ {ok, Table@1};
+
+ {error, Path} ->
+ {error, {key_already_in_use, Path}}
+ end.
+
+-spec expect_end_of_line(
+ list(binary()),
+ fun((list(binary())) -> {ok, {KHH, list(binary())}} | {error, parse_error()})
+) -> {ok, {KHH, list(binary())}} | {error, parse_error()}.
+expect_end_of_line(Input, Next) ->
+ case Input of
+ [<<"\n"/utf8>> | Input@1] ->
+ Next(Input@1);
+
+ [<<"\r\n"/utf8>> | Input@2] ->
+ Next(Input@2);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"\n"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\n"/utf8>>}}
+ end.
+
+-spec parse_key_quoted(list(binary()), binary(), binary()) -> {ok,
+ {binary(), list(binary())}} |
+ {error, parse_error()}.
+parse_key_quoted(Input, Close, Name) ->
+ case Input of
+ [G | Input@1] when G =:= Close ->
+ {ok, {Name, Input@1}};
+
+ [G@1 | Input@2] ->
+ parse_key_quoted(Input@2, Close, <<Name/binary, G@1/binary>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, Close}}
+ end.
+
+-spec parse_key_bare(list(binary()), binary()) -> {ok,
+ {binary(), list(binary())}} |
+ {error, parse_error()}.
+parse_key_bare(Input, Name) ->
+ case Input of
+ [<<" "/utf8>> | Input@1] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input@1}};
+
+ [<<"="/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input}};
+
+ [<<"."/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input}};
+
+ [<<"]"/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input}};
+
+ [<<","/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {error, {unexpected, <<","/utf8>>, <<"="/utf8>>}};
+
+ [<<"\n"/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"="/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"="/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"key"/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"key"/utf8>>}};
+
+ [<<"]"/utf8>> | _] ->
+ {error, {unexpected, <<"]"/utf8>>, <<"key"/utf8>>}};
+
+ [<<","/utf8>> | _] ->
+ {error, {unexpected, <<","/utf8>>, <<"key"/utf8>>}};
+
+ [G | Input@2] ->
+ parse_key_bare(Input@2, <<Name/binary, G/binary>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"key"/utf8>>}}
+ end.
+
+-spec skip_line_whitespace(list(binary())) -> list(binary()).
+skip_line_whitespace(Input) ->
+ gleam@list:drop_while(
+ Input,
+ fun(G) -> (G =:= <<" "/utf8>>) orelse (G =:= <<"\t"/utf8>>) end
+ ).
+
+-spec parse_key_segment(list(binary())) -> {ok, {binary(), list(binary())}} |
+ {error, parse_error()}.
+parse_key_segment(Input) ->
+ Input@1 = skip_line_whitespace(Input),
+ case Input@1 of
+ [<<"="/utf8>> | _] ->
+ {error, {unexpected, <<"="/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"["/utf8>> | _] ->
+ {error, {unexpected, <<"["/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"\""/utf8>> | Input@2] ->
+ parse_key_quoted(Input@2, <<"\""/utf8>>, <<""/utf8>>);
+
+ [<<"'"/utf8>> | Input@3] ->
+ parse_key_quoted(Input@3, <<"'"/utf8>>, <<""/utf8>>);
+
+ _ ->
+ parse_key_bare(Input@1, <<""/utf8>>)
+ end.
+
+-spec skip_whitespace(list(binary())) -> list(binary()).
+skip_whitespace(Input) ->
+ case Input of
+ [<<" "/utf8>> | Input@1] ->
+ skip_whitespace(Input@1);
+
+ [<<"\t"/utf8>> | Input@2] ->
+ skip_whitespace(Input@2);
+
+ [<<"\n"/utf8>> | Input@3] ->
+ skip_whitespace(Input@3);
+
+ [<<"\r\n"/utf8>> | Input@4] ->
+ skip_whitespace(Input@4);
+
+ Input@5 ->
+ Input@5
+ end.
+
+-spec drop_comments(list(binary()), list(binary())) -> list(binary()).
+drop_comments(Input, Acc) ->
+ case Input of
+ [<<"#"/utf8>> | Input@1] ->
+ _pipe = Input@1,
+ _pipe@1 = gleam@list:drop_while(
+ _pipe,
+ fun(G) -> G /= <<"\n"/utf8>> end
+ ),
+ drop_comments(_pipe@1, Acc);
+
+ [G@1 | Input@2] ->
+ drop_comments(Input@2, [G@1 | Acc]);
+
+ [] ->
+ gleam@list:reverse(Acc)
+ end.
+
+-spec do(
+ {ok, {KHS, list(binary())}} | {error, parse_error()},
+ fun((KHS, list(binary())) -> {ok, KHV} | {error, parse_error()})
+) -> {ok, KHV} | {error, parse_error()}.
+do(Result, Next) ->
+ case Result of
+ {ok, {A, Input}} ->
+ Next(A, Input);
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec parse_key(list(binary()), list(binary())) -> {ok,
+ {list(binary()), list(binary())}} |
+ {error, parse_error()}.
+parse_key(Input, Segments) ->
+ do(
+ parse_key_segment(Input),
+ fun(Segment, Input@1) ->
+ Segments@1 = [Segment | Segments],
+ Input@2 = skip_line_whitespace(Input@1),
+ case Input@2 of
+ [<<"."/utf8>> | Input@3] ->
+ parse_key(Input@3, Segments@1);
+
+ _ ->
+ {ok, {gleam@list:reverse(Segments@1), Input@2}}
+ end
+ end
+ ).
+
+-spec expect(
+ list(binary()),
+ binary(),
+ fun((list(binary())) -> {ok, {KIA, list(binary())}} | {error, parse_error()})
+) -> {ok, {KIA, list(binary())}} | {error, parse_error()}.
+expect(Input, Expected, Next) ->
+ case Input of
+ [G | Input@1] when G =:= Expected ->
+ Next(Input@1);
+
+ [G@1 | _] ->
+ {error, {unexpected, G@1, Expected}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, Expected}}
+ end.
+
+-spec parse_table_header(list(binary())) -> {ok,
+ {list(binary()), list(binary())}} |
+ {error, parse_error()}.
+parse_table_header(Input) ->
+ Input@1 = skip_line_whitespace(Input),
+ do(
+ parse_key(Input@1, []),
+ fun(Key, Input@2) ->
+ expect(
+ Input@2,
+ <<"]"/utf8>>,
+ fun(Input@3) ->
+ Input@4 = skip_line_whitespace(Input@3),
+ expect_end_of_line(
+ Input@4,
+ fun(Input@5) -> {ok, {Key, Input@5}} end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_hex(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_hex(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_hex(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_hex(Input@2, (Number * 16) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_hex(Input@3, (Number * 16) + 1, Sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_hex(Input@4, (Number * 16) + 2, Sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_hex(Input@5, (Number * 16) + 3, Sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_hex(Input@6, (Number * 16) + 4, Sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_hex(Input@7, (Number * 16) + 5, Sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_hex(Input@8, (Number * 16) + 6, Sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_hex(Input@9, (Number * 16) + 7, Sign);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_hex(Input@10, (Number * 16) + 8, Sign);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_hex(Input@11, (Number * 16) + 9, Sign);
+
+ [<<"a"/utf8>> | Input@12] ->
+ parse_hex(Input@12, (Number * 16) + 10, Sign);
+
+ [<<"b"/utf8>> | Input@13] ->
+ parse_hex(Input@13, (Number * 16) + 11, Sign);
+
+ [<<"c"/utf8>> | Input@14] ->
+ parse_hex(Input@14, (Number * 16) + 12, Sign);
+
+ [<<"d"/utf8>> | Input@15] ->
+ parse_hex(Input@15, (Number * 16) + 13, Sign);
+
+ [<<"e"/utf8>> | Input@16] ->
+ parse_hex(Input@16, (Number * 16) + 14, Sign);
+
+ [<<"f"/utf8>> | Input@17] ->
+ parse_hex(Input@17, (Number * 16) + 15, Sign);
+
+ [<<"A"/utf8>> | Input@18] ->
+ parse_hex(Input@18, (Number * 16) + 10, Sign);
+
+ [<<"B"/utf8>> | Input@19] ->
+ parse_hex(Input@19, (Number * 16) + 11, Sign);
+
+ [<<"C"/utf8>> | Input@20] ->
+ parse_hex(Input@20, (Number * 16) + 12, Sign);
+
+ [<<"D"/utf8>> | Input@21] ->
+ parse_hex(Input@21, (Number * 16) + 13, Sign);
+
+ [<<"E"/utf8>> | Input@22] ->
+ parse_hex(Input@22, (Number * 16) + 14, Sign);
+
+ [<<"F"/utf8>> | Input@23] ->
+ parse_hex(Input@23, (Number * 16) + 15, Sign);
+
+ Input@24 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@24}}
+ end.
+
+-spec parse_octal(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_octal(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_octal(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_octal(Input@2, (Number * 8) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_octal(Input@3, (Number * 8) + 1, Sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_octal(Input@4, (Number * 8) + 2, Sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_octal(Input@5, (Number * 8) + 3, Sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_octal(Input@6, (Number * 8) + 4, Sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_octal(Input@7, (Number * 8) + 5, Sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_octal(Input@8, (Number * 8) + 6, Sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_octal(Input@9, (Number * 8) + 7, Sign);
+
+ Input@10 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@10}}
+ end.
+
+-spec parse_binary(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_binary(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_binary(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_binary(Input@2, (Number * 2) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_binary(Input@3, (Number * 2) + 1, Sign);
+
+ Input@4 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@4}}
+ end.
+
+-spec parse_exponent(list(binary()), float(), sign(), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_exponent(Input, N, N_sign, Ex, Ex_sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_exponent(Input@1, N, N_sign, Ex, Ex_sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_exponent(Input@2, N, N_sign, Ex * 10, Ex_sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_exponent(Input@3, N, N_sign, (Ex * 10) + 1, Ex_sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_exponent(Input@4, N, N_sign, (Ex * 10) + 2, Ex_sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_exponent(Input@5, N, N_sign, (Ex * 10) + 3, Ex_sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_exponent(Input@6, N, N_sign, (Ex * 10) + 4, Ex_sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_exponent(Input@7, N, N_sign, (Ex * 10) + 5, Ex_sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_exponent(Input@8, N, N_sign, (Ex * 10) + 6, Ex_sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_exponent(Input@9, N, N_sign, (Ex * 10) + 7, Ex_sign);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_exponent(Input@10, N, N_sign, (Ex * 10) + 8, Ex_sign);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_exponent(Input@11, N, N_sign, (Ex * 10) + 9, Ex_sign);
+
+ Input@12 ->
+ Number = case N_sign of
+ positive ->
+ N;
+
+ negative ->
+ N * -1.0
+ end,
+ Exponent = gleam@int:to_float(case Ex_sign of
+ positive ->
+ Ex;
+
+ negative ->
+ - Ex
+ end),
+ Multiplier@1 = case gleam@float:power(10.0, Exponent) of
+ {ok, Multiplier} ->
+ Multiplier;
+
+ {error, _} ->
+ 1.0
+ end,
+ {ok, {{float, Number * Multiplier@1}, Input@12}}
+ end.
+
+-spec parse_float(list(binary()), float(), sign(), float()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_float(Input, Number, Sign, Unit) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_float(Input@1, Number, Sign, Unit);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_float(Input@2, Number, Sign, Unit * 0.1);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_float(Input@3, Number + (1.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_float(Input@4, Number + (2.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_float(Input@5, Number + (3.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_float(Input@6, Number + (4.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_float(Input@7, Number + (5.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_float(Input@8, Number + (6.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_float(Input@9, Number + (7.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_float(Input@10, Number + (8.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_float(Input@11, Number + (9.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"e"/utf8>>, <<"+"/utf8>> | Input@12] ->
+ parse_exponent(Input@12, Number, Sign, 0, positive);
+
+ [<<"e"/utf8>>, <<"-"/utf8>> | Input@13] ->
+ parse_exponent(Input@13, Number, Sign, 0, negative);
+
+ [<<"e"/utf8>> | Input@14] ->
+ parse_exponent(Input@14, Number, Sign, 0, positive);
+
+ [<<"E"/utf8>>, <<"+"/utf8>> | Input@15] ->
+ parse_exponent(Input@15, Number, Sign, 0, positive);
+
+ [<<"E"/utf8>>, <<"-"/utf8>> | Input@16] ->
+ parse_exponent(Input@16, Number, Sign, 0, negative);
+
+ [<<"E"/utf8>> | Input@17] ->
+ parse_exponent(Input@17, Number, Sign, 0, positive);
+
+ Input@18 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ Number * -1.0
+ end,
+ {ok, {{float, Number@1}, Input@18}}
+ end.
+
+-spec parse_string(list(binary()), binary()) -> {ok, {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_string(Input, String) ->
+ case Input of
+ [<<"\""/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [<<"\\"/utf8>>, <<"t"/utf8>> | Input@2] ->
+ parse_string(Input@2, <<String/binary, "\t"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"n"/utf8>> | Input@3] ->
+ parse_string(Input@3, <<String/binary, "\n"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"r"/utf8>> | Input@4] ->
+ parse_string(Input@4, <<String/binary, "\r"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\""/utf8>> | Input@5] ->
+ parse_string(Input@5, <<String/binary, "\""/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@6] ->
+ parse_string(Input@6, <<String/binary, "\\"/utf8>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"\""/utf8>>}};
+
+ [G | Input@7] ->
+ parse_string(Input@7, <<String/binary, G/binary>>)
+ end.
+
+-spec parse_multi_line_string(list(binary()), binary()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_multi_line_string(Input, String) ->
+ case Input of
+ [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [<<"\\"/utf8>>, <<"\n"/utf8>> | Input@2] ->
+ parse_multi_line_string(skip_whitespace(Input@2), String);
+
+ [<<"\\"/utf8>>, <<"\r\n"/utf8>> | Input@3] ->
+ parse_multi_line_string(skip_whitespace(Input@3), String);
+
+ [<<"\r\n"/utf8>> | Input@4] when String =:= <<""/utf8>> ->
+ parse_multi_line_string(Input@4, String);
+
+ [<<"\n"/utf8>> | Input@5] when String =:= <<""/utf8>> ->
+ parse_multi_line_string(Input@5, String);
+
+ [<<"\r\n"/utf8>> | Input@6] when String =:= <<""/utf8>> ->
+ parse_multi_line_string(Input@6, String);
+
+ [<<"\\"/utf8>>, <<"t"/utf8>> | Input@7] ->
+ parse_multi_line_string(Input@7, <<String/binary, "\t"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"n"/utf8>> | Input@8] ->
+ parse_multi_line_string(Input@8, <<String/binary, "\n"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"r"/utf8>> | Input@9] ->
+ parse_multi_line_string(Input@9, <<String/binary, "\r"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\""/utf8>> | Input@10] ->
+ parse_multi_line_string(Input@10, <<String/binary, "\""/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@11] ->
+ parse_multi_line_string(Input@11, <<String/binary, "\\"/utf8>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [G | Input@12] ->
+ parse_multi_line_string(Input@12, <<String/binary, G/binary>>)
+ end.
+
+-spec parse_multi_line_literal_string(list(binary()), binary()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_multi_line_literal_string(Input, String) ->
+ case Input of
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | _] ->
+ {error, {unexpected, <<"''''"/utf8>>, <<"'''"/utf8>>}};
+
+ [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [<<"\n"/utf8>> | Input@2] when String =:= <<""/utf8>> ->
+ parse_multi_line_literal_string(Input@2, String);
+
+ [<<"\r\n"/utf8>> | Input@3] when String =:= <<""/utf8>> ->
+ parse_multi_line_literal_string(Input@3, String);
+
+ [G | Input@4] ->
+ parse_multi_line_literal_string(
+ Input@4,
+ <<String/binary, G/binary>>
+ )
+ end.
+
+-spec parse_literal_string(list(binary()), binary()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_literal_string(Input, String) ->
+ case Input of
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"'"/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"'"/utf8>>}};
+
+ [<<"'"/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [G | Input@2] ->
+ parse_literal_string(Input@2, <<String/binary, G/binary>>)
+ end.
+
+-spec parse_time_ms(list(binary()), integer(), integer()) -> {ok,
+ {{integer(), integer()}, list(binary())}} |
+ {error, parse_error()}.
+parse_time_ms(Input, Seconds, Ms) ->
+ case Input of
+ [<<"0"/utf8>> | Input@1] when Ms < 100000 ->
+ parse_time_ms(Input@1, Seconds, (Ms * 10) + 0);
+
+ [<<"1"/utf8>> | Input@2] when Ms < 100000 ->
+ parse_time_ms(Input@2, Seconds, (Ms * 10) + 1);
+
+ [<<"2"/utf8>> | Input@3] when Ms < 100000 ->
+ parse_time_ms(Input@3, Seconds, (Ms * 10) + 2);
+
+ [<<"3"/utf8>> | Input@4] when Ms < 100000 ->
+ parse_time_ms(Input@4, Seconds, (Ms * 10) + 3);
+
+ [<<"4"/utf8>> | Input@5] when Ms < 100000 ->
+ parse_time_ms(Input@5, Seconds, (Ms * 10) + 4);
+
+ [<<"5"/utf8>> | Input@6] when Ms < 100000 ->
+ parse_time_ms(Input@6, Seconds, (Ms * 10) + 5);
+
+ [<<"6"/utf8>> | Input@7] when Ms < 100000 ->
+ parse_time_ms(Input@7, Seconds, (Ms * 10) + 6);
+
+ [<<"7"/utf8>> | Input@8] when Ms < 100000 ->
+ parse_time_ms(Input@8, Seconds, (Ms * 10) + 7);
+
+ [<<"8"/utf8>> | Input@9] when Ms < 100000 ->
+ parse_time_ms(Input@9, Seconds, (Ms * 10) + 8);
+
+ [<<"9"/utf8>> | Input@10] when Ms < 100000 ->
+ parse_time_ms(Input@10, Seconds, (Ms * 10) + 9);
+
+ _ ->
+ {ok, {{Seconds, Ms}, Input}}
+ end.
+
+-spec parse_number_under_60(list(binary()), binary()) -> {ok,
+ {integer(), list(binary())}} |
+ {error, parse_error()}.
+parse_number_under_60(Input, Expected) ->
+ case Input of
+ [<<"0"/utf8>>, <<"0"/utf8>> | Input@1] ->
+ {ok, {0, Input@1}};
+
+ [<<"0"/utf8>>, <<"1"/utf8>> | Input@2] ->
+ {ok, {1, Input@2}};
+
+ [<<"0"/utf8>>, <<"2"/utf8>> | Input@3] ->
+ {ok, {2, Input@3}};
+
+ [<<"0"/utf8>>, <<"3"/utf8>> | Input@4] ->
+ {ok, {3, Input@4}};
+
+ [<<"0"/utf8>>, <<"4"/utf8>> | Input@5] ->
+ {ok, {4, Input@5}};
+
+ [<<"0"/utf8>>, <<"5"/utf8>> | Input@6] ->
+ {ok, {5, Input@6}};
+
+ [<<"0"/utf8>>, <<"6"/utf8>> | Input@7] ->
+ {ok, {6, Input@7}};
+
+ [<<"0"/utf8>>, <<"7"/utf8>> | Input@8] ->
+ {ok, {7, Input@8}};
+
+ [<<"0"/utf8>>, <<"8"/utf8>> | Input@9] ->
+ {ok, {8, Input@9}};
+
+ [<<"0"/utf8>>, <<"9"/utf8>> | Input@10] ->
+ {ok, {9, Input@10}};
+
+ [<<"1"/utf8>>, <<"0"/utf8>> | Input@11] ->
+ {ok, {10, Input@11}};
+
+ [<<"1"/utf8>>, <<"1"/utf8>> | Input@12] ->
+ {ok, {11, Input@12}};
+
+ [<<"1"/utf8>>, <<"2"/utf8>> | Input@13] ->
+ {ok, {12, Input@13}};
+
+ [<<"1"/utf8>>, <<"3"/utf8>> | Input@14] ->
+ {ok, {13, Input@14}};
+
+ [<<"1"/utf8>>, <<"4"/utf8>> | Input@15] ->
+ {ok, {14, Input@15}};
+
+ [<<"1"/utf8>>, <<"5"/utf8>> | Input@16] ->
+ {ok, {15, Input@16}};
+
+ [<<"1"/utf8>>, <<"6"/utf8>> | Input@17] ->
+ {ok, {16, Input@17}};
+
+ [<<"1"/utf8>>, <<"7"/utf8>> | Input@18] ->
+ {ok, {17, Input@18}};
+
+ [<<"1"/utf8>>, <<"8"/utf8>> | Input@19] ->
+ {ok, {18, Input@19}};
+
+ [<<"1"/utf8>>, <<"9"/utf8>> | Input@20] ->
+ {ok, {19, Input@20}};
+
+ [<<"2"/utf8>>, <<"0"/utf8>> | Input@21] ->
+ {ok, {20, Input@21}};
+
+ [<<"2"/utf8>>, <<"1"/utf8>> | Input@22] ->
+ {ok, {21, Input@22}};
+
+ [<<"2"/utf8>>, <<"2"/utf8>> | Input@23] ->
+ {ok, {22, Input@23}};
+
+ [<<"2"/utf8>>, <<"3"/utf8>> | Input@24] ->
+ {ok, {23, Input@24}};
+
+ [<<"2"/utf8>>, <<"4"/utf8>> | Input@25] ->
+ {ok, {24, Input@25}};
+
+ [<<"2"/utf8>>, <<"5"/utf8>> | Input@26] ->
+ {ok, {25, Input@26}};
+
+ [<<"2"/utf8>>, <<"6"/utf8>> | Input@27] ->
+ {ok, {26, Input@27}};
+
+ [<<"2"/utf8>>, <<"7"/utf8>> | Input@28] ->
+ {ok, {27, Input@28}};
+
+ [<<"2"/utf8>>, <<"8"/utf8>> | Input@29] ->
+ {ok, {28, Input@29}};
+
+ [<<"2"/utf8>>, <<"9"/utf8>> | Input@30] ->
+ {ok, {29, Input@30}};
+
+ [<<"3"/utf8>>, <<"0"/utf8>> | Input@31] ->
+ {ok, {30, Input@31}};
+
+ [<<"3"/utf8>>, <<"1"/utf8>> | Input@32] ->
+ {ok, {31, Input@32}};
+
+ [<<"3"/utf8>>, <<"2"/utf8>> | Input@33] ->
+ {ok, {32, Input@33}};
+
+ [<<"3"/utf8>>, <<"3"/utf8>> | Input@34] ->
+ {ok, {33, Input@34}};
+
+ [<<"3"/utf8>>, <<"4"/utf8>> | Input@35] ->
+ {ok, {34, Input@35}};
+
+ [<<"3"/utf8>>, <<"5"/utf8>> | Input@36] ->
+ {ok, {35, Input@36}};
+
+ [<<"3"/utf8>>, <<"6"/utf8>> | Input@37] ->
+ {ok, {36, Input@37}};
+
+ [<<"3"/utf8>>, <<"7"/utf8>> | Input@38] ->
+ {ok, {37, Input@38}};
+
+ [<<"3"/utf8>>, <<"8"/utf8>> | Input@39] ->
+ {ok, {38, Input@39}};
+
+ [<<"3"/utf8>>, <<"9"/utf8>> | Input@40] ->
+ {ok, {39, Input@40}};
+
+ [<<"4"/utf8>>, <<"0"/utf8>> | Input@41] ->
+ {ok, {40, Input@41}};
+
+ [<<"4"/utf8>>, <<"1"/utf8>> | Input@42] ->
+ {ok, {41, Input@42}};
+
+ [<<"4"/utf8>>, <<"2"/utf8>> | Input@43] ->
+ {ok, {42, Input@43}};
+
+ [<<"4"/utf8>>, <<"3"/utf8>> | Input@44] ->
+ {ok, {43, Input@44}};
+
+ [<<"4"/utf8>>, <<"4"/utf8>> | Input@45] ->
+ {ok, {44, Input@45}};
+
+ [<<"4"/utf8>>, <<"5"/utf8>> | Input@46] ->
+ {ok, {45, Input@46}};
+
+ [<<"4"/utf8>>, <<"6"/utf8>> | Input@47] ->
+ {ok, {46, Input@47}};
+
+ [<<"4"/utf8>>, <<"7"/utf8>> | Input@48] ->
+ {ok, {47, Input@48}};
+
+ [<<"4"/utf8>>, <<"8"/utf8>> | Input@49] ->
+ {ok, {48, Input@49}};
+
+ [<<"4"/utf8>>, <<"9"/utf8>> | Input@50] ->
+ {ok, {49, Input@50}};
+
+ [<<"5"/utf8>>, <<"0"/utf8>> | Input@51] ->
+ {ok, {50, Input@51}};
+
+ [<<"5"/utf8>>, <<"1"/utf8>> | Input@52] ->
+ {ok, {51, Input@52}};
+
+ [<<"5"/utf8>>, <<"2"/utf8>> | Input@53] ->
+ {ok, {52, Input@53}};
+
+ [<<"5"/utf8>>, <<"3"/utf8>> | Input@54] ->
+ {ok, {53, Input@54}};
+
+ [<<"5"/utf8>>, <<"4"/utf8>> | Input@55] ->
+ {ok, {54, Input@55}};
+
+ [<<"5"/utf8>>, <<"5"/utf8>> | Input@56] ->
+ {ok, {55, Input@56}};
+
+ [<<"5"/utf8>>, <<"6"/utf8>> | Input@57] ->
+ {ok, {56, Input@57}};
+
+ [<<"5"/utf8>>, <<"7"/utf8>> | Input@58] ->
+ {ok, {57, Input@58}};
+
+ [<<"5"/utf8>>, <<"8"/utf8>> | Input@59] ->
+ {ok, {58, Input@59}};
+
+ [<<"5"/utf8>>, <<"9"/utf8>> | Input@60] ->
+ {ok, {59, Input@60}};
+
+ [G | _] ->
+ {error, {unexpected, G, Expected}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, Expected}}
+ end.
+
+-spec parse_hour_minute(list(binary())) -> {ok,
+ {{integer(), integer()}, list(binary())}} |
+ {error, parse_error()}.
+parse_hour_minute(Input) ->
+ do(case Input of
+ [<<"0"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@1] ->
+ {ok, {0, Input@1}};
+
+ [<<"0"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@2] ->
+ {ok, {1, Input@2}};
+
+ [<<"0"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@3] ->
+ {ok, {2, Input@3}};
+
+ [<<"0"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@4] ->
+ {ok, {3, Input@4}};
+
+ [<<"0"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@5] ->
+ {ok, {4, Input@5}};
+
+ [<<"0"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@6] ->
+ {ok, {5, Input@6}};
+
+ [<<"0"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@7] ->
+ {ok, {6, Input@7}};
+
+ [<<"0"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@8] ->
+ {ok, {7, Input@8}};
+
+ [<<"0"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@9] ->
+ {ok, {8, Input@9}};
+
+ [<<"0"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@10] ->
+ {ok, {9, Input@10}};
+
+ [<<"1"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@11] ->
+ {ok, {10, Input@11}};
+
+ [<<"1"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@12] ->
+ {ok, {11, Input@12}};
+
+ [<<"1"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@13] ->
+ {ok, {12, Input@13}};
+
+ [<<"1"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@14] ->
+ {ok, {13, Input@14}};
+
+ [<<"1"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@15] ->
+ {ok, {14, Input@15}};
+
+ [<<"1"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@16] ->
+ {ok, {15, Input@16}};
+
+ [<<"1"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@17] ->
+ {ok, {16, Input@17}};
+
+ [<<"1"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@18] ->
+ {ok, {17, Input@18}};
+
+ [<<"1"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@19] ->
+ {ok, {18, Input@19}};
+
+ [<<"1"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@20] ->
+ {ok, {19, Input@20}};
+
+ [<<"2"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@21] ->
+ {ok, {20, Input@21}};
+
+ [<<"2"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@22] ->
+ {ok, {21, Input@22}};
+
+ [<<"2"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@23] ->
+ {ok, {22, Input@23}};
+
+ [<<"2"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@24] ->
+ {ok, {23, Input@24}};
+
+ [G | _] ->
+ {error, {unexpected, G, <<"time"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"time"/utf8>>}}
+ end, fun(Hours, Input@25) ->
+ do(
+ parse_number_under_60(Input@25, <<"minutes"/utf8>>),
+ fun(Minutes, Input@26) -> {ok, {{Hours, Minutes}, Input@26}} end
+ )
+ end).
+
+-spec parse_time_s_ms(list(binary())) -> {ok,
+ {{integer(), integer()}, list(binary())}} |
+ {error, parse_error()}.
+parse_time_s_ms(Input) ->
+ case Input of
+ [<<":"/utf8>> | Input@1] ->
+ do(
+ parse_number_under_60(Input@1, <<"seconds"/utf8>>),
+ fun(Seconds, Input@2) -> case Input@2 of
+ [<<"."/utf8>> | Input@3] ->
+ parse_time_ms(Input@3, Seconds, 0);
+
+ _ ->
+ {ok, {{Seconds, 0}, Input@2}}
+ end end
+ );
+
+ _ ->
+ {ok, {{0, 0}, Input}}
+ end.
+
+-spec parse_time_minute(list(binary()), integer()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_time_minute(Input, Hours) ->
+ do(
+ parse_number_under_60(Input, <<"minutes"/utf8>>),
+ fun(Minutes, Input@1) ->
+ do(
+ parse_time_s_ms(Input@1),
+ fun(_use0, Input@2) ->
+ {Seconds, Ms} = _use0,
+ Time = {time_value, Hours, Minutes, Seconds, Ms},
+ {ok, {{time, Time}, Input@2}}
+ end
+ )
+ end
+ ).
+
+-spec parse_time_value(list(binary())) -> {ok, {time(), list(binary())}} |
+ {error, parse_error()}.
+parse_time_value(Input) ->
+ do(
+ parse_hour_minute(Input),
+ fun(_use0, Input@1) ->
+ {Hours, Minutes} = _use0,
+ do(
+ parse_time_s_ms(Input@1),
+ fun(_use0@1, Input@2) ->
+ {Seconds, Ms} = _use0@1,
+ Time = {time_value, Hours, Minutes, Seconds, Ms},
+ {ok, {Time, Input@2}}
+ end
+ )
+ end
+ ).
+
+-spec parse_offset_hours(list(binary()), sign()) -> {ok,
+ {offset(), list(binary())}} |
+ {error, parse_error()}.
+parse_offset_hours(Input, Sign) ->
+ do(
+ parse_hour_minute(Input),
+ fun(_use0, Input@1) ->
+ {Hours, Minutes} = _use0,
+ {ok, {{offset, Sign, Hours, Minutes}, Input@1}}
+ end
+ ).
+
+-spec parse_offset(list(binary())) -> {ok, {offset(), list(binary())}} |
+ {error, parse_error()}.
+parse_offset(Input) ->
+ case Input of
+ [<<"Z"/utf8>> | Input@1] ->
+ {ok, {{offset, positive, 0, 0}, Input@1}};
+
+ [<<"+"/utf8>> | Input@2] ->
+ parse_offset_hours(Input@2, positive);
+
+ [<<"-"/utf8>> | Input@3] ->
+ parse_offset_hours(Input@3, negative);
+
+ _ ->
+ {ok, {local, Input}}
+ end.
+
+-spec parse_date_end(list(binary()), integer(), integer(), integer()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_date_end(Input, Year, Month, Day) ->
+ Date = {date_value, Year, Month, Day},
+ case Input of
+ [<<" "/utf8>> | Input@1] ->
+ do(
+ parse_time_value(Input@1),
+ fun(Time, Input@2) ->
+ do(
+ parse_offset(Input@2),
+ fun(Offset, Input@3) ->
+ {ok,
+ {{date_time,
+ {date_time_value, Date, Time, Offset}},
+ Input@3}}
+ end
+ )
+ end
+ );
+
+ [<<"T"/utf8>> | Input@1] ->
+ do(
+ parse_time_value(Input@1),
+ fun(Time, Input@2) ->
+ do(
+ parse_offset(Input@2),
+ fun(Offset, Input@3) ->
+ {ok,
+ {{date_time,
+ {date_time_value, Date, Time, Offset}},
+ Input@3}}
+ end
+ )
+ end
+ );
+
+ _ ->
+ {ok, {{date, Date}, Input}}
+ end.
+
+-spec parse_date_day(list(binary()), integer(), integer()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_date_day(Input, Year, Month) ->
+ case Input of
+ [<<"0"/utf8>>, <<"1"/utf8>> | Input@1] ->
+ parse_date_end(Input@1, Year, Month, 1);
+
+ [<<"0"/utf8>>, <<"2"/utf8>> | Input@2] ->
+ parse_date_end(Input@2, Year, Month, 2);
+
+ [<<"0"/utf8>>, <<"3"/utf8>> | Input@3] ->
+ parse_date_end(Input@3, Year, Month, 3);
+
+ [<<"0"/utf8>>, <<"4"/utf8>> | Input@4] ->
+ parse_date_end(Input@4, Year, Month, 4);
+
+ [<<"0"/utf8>>, <<"5"/utf8>> | Input@5] ->
+ parse_date_end(Input@5, Year, Month, 5);
+
+ [<<"0"/utf8>>, <<"6"/utf8>> | Input@6] ->
+ parse_date_end(Input@6, Year, Month, 6);
+
+ [<<"0"/utf8>>, <<"7"/utf8>> | Input@7] ->
+ parse_date_end(Input@7, Year, Month, 7);
+
+ [<<"0"/utf8>>, <<"8"/utf8>> | Input@8] ->
+ parse_date_end(Input@8, Year, Month, 8);
+
+ [<<"0"/utf8>>, <<"9"/utf8>> | Input@9] ->
+ parse_date_end(Input@9, Year, Month, 9);
+
+ [<<"1"/utf8>>, <<"0"/utf8>> | Input@10] ->
+ parse_date_end(Input@10, Year, Month, 10);
+
+ [<<"1"/utf8>>, <<"1"/utf8>> | Input@11] ->
+ parse_date_end(Input@11, Year, Month, 11);
+
+ [<<"1"/utf8>>, <<"2"/utf8>> | Input@12] ->
+ parse_date_end(Input@12, Year, Month, 12);
+
+ [<<"1"/utf8>>, <<"3"/utf8>> | Input@13] ->
+ parse_date_end(Input@13, Year, Month, 13);
+
+ [<<"1"/utf8>>, <<"4"/utf8>> | Input@14] ->
+ parse_date_end(Input@14, Year, Month, 14);
+
+ [<<"1"/utf8>>, <<"5"/utf8>> | Input@15] ->
+ parse_date_end(Input@15, Year, Month, 15);
+
+ [<<"1"/utf8>>, <<"6"/utf8>> | Input@16] ->
+ parse_date_end(Input@16, Year, Month, 16);
+
+ [<<"1"/utf8>>, <<"7"/utf8>> | Input@17] ->
+ parse_date_end(Input@17, Year, Month, 17);
+
+ [<<"1"/utf8>>, <<"8"/utf8>> | Input@18] ->
+ parse_date_end(Input@18, Year, Month, 18);
+
+ [<<"1"/utf8>>, <<"9"/utf8>> | Input@19] ->
+ parse_date_end(Input@19, Year, Month, 19);
+
+ [<<"2"/utf8>>, <<"0"/utf8>> | Input@20] ->
+ parse_date_end(Input@20, Year, Month, 20);
+
+ [<<"2"/utf8>>, <<"1"/utf8>> | Input@21] ->
+ parse_date_end(Input@21, Year, Month, 21);
+
+ [<<"2"/utf8>>, <<"2"/utf8>> | Input@22] ->
+ parse_date_end(Input@22, Year, Month, 22);
+
+ [<<"2"/utf8>>, <<"3"/utf8>> | Input@23] ->
+ parse_date_end(Input@23, Year, Month, 23);
+
+ [<<"2"/utf8>>, <<"4"/utf8>> | Input@24] ->
+ parse_date_end(Input@24, Year, Month, 24);
+
+ [<<"2"/utf8>>, <<"5"/utf8>> | Input@25] ->
+ parse_date_end(Input@25, Year, Month, 25);
+
+ [<<"2"/utf8>>, <<"6"/utf8>> | Input@26] ->
+ parse_date_end(Input@26, Year, Month, 26);
+
+ [<<"2"/utf8>>, <<"7"/utf8>> | Input@27] ->
+ parse_date_end(Input@27, Year, Month, 27);
+
+ [<<"2"/utf8>>, <<"8"/utf8>> | Input@28] ->
+ parse_date_end(Input@28, Year, Month, 28);
+
+ [<<"2"/utf8>>, <<"9"/utf8>> | Input@29] ->
+ parse_date_end(Input@29, Year, Month, 29);
+
+ [<<"3"/utf8>>, <<"0"/utf8>> | Input@30] ->
+ parse_date_end(Input@30, Year, Month, 30);
+
+ [<<"3"/utf8>>, <<"1"/utf8>> | Input@31] ->
+ parse_date_end(Input@31, Year, Month, 31);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"date day"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"date day"/utf8>>}}
+ end.
+
+-spec parse_date(list(binary()), integer()) -> {ok, {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_date(Input, Year) ->
+ case Input of
+ [<<"0"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@1] ->
+ parse_date_day(Input@1, Year, 1);
+
+ [<<"0"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@2] ->
+ parse_date_day(Input@2, Year, 2);
+
+ [<<"0"/utf8>>, <<"3"/utf8>>, <<"-"/utf8>> | Input@3] ->
+ parse_date_day(Input@3, Year, 3);
+
+ [<<"0"/utf8>>, <<"4"/utf8>>, <<"-"/utf8>> | Input@4] ->
+ parse_date_day(Input@4, Year, 4);
+
+ [<<"0"/utf8>>, <<"5"/utf8>>, <<"-"/utf8>> | Input@5] ->
+ parse_date_day(Input@5, Year, 5);
+
+ [<<"0"/utf8>>, <<"6"/utf8>>, <<"-"/utf8>> | Input@6] ->
+ parse_date_day(Input@6, Year, 6);
+
+ [<<"0"/utf8>>, <<"7"/utf8>>, <<"-"/utf8>> | Input@7] ->
+ parse_date_day(Input@7, Year, 7);
+
+ [<<"0"/utf8>>, <<"8"/utf8>>, <<"-"/utf8>> | Input@8] ->
+ parse_date_day(Input@8, Year, 8);
+
+ [<<"0"/utf8>>, <<"9"/utf8>>, <<"-"/utf8>> | Input@9] ->
+ parse_date_day(Input@9, Year, 9);
+
+ [<<"1"/utf8>>, <<"0"/utf8>>, <<"-"/utf8>> | Input@10] ->
+ parse_date_day(Input@10, Year, 10);
+
+ [<<"1"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@11] ->
+ parse_date_day(Input@11, Year, 11);
+
+ [<<"1"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@12] ->
+ parse_date_day(Input@12, Year, 12);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"date month"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"date month"/utf8>>}}
+ end.
+
+-spec parse_number(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_number(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_number(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_number(Input@2, (Number * 10) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_number(Input@3, (Number * 10) + 1, Sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_number(Input@4, (Number * 10) + 2, Sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_number(Input@5, (Number * 10) + 3, Sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_number(Input@6, (Number * 10) + 4, Sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_number(Input@7, (Number * 10) + 5, Sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_number(Input@8, (Number * 10) + 6, Sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_number(Input@9, (Number * 10) + 7, Sign);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_number(Input@10, (Number * 10) + 8, Sign);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_number(Input@11, (Number * 10) + 9, Sign);
+
+ [<<"-"/utf8>> | Input@12] ->
+ parse_date(Input@12, Number);
+
+ [<<":"/utf8>> | Input@13] when Number < 24 ->
+ parse_time_minute(Input@13, Number);
+
+ [<<"."/utf8>> | Input@14] ->
+ parse_float(Input@14, gleam@int:to_float(Number), Sign, 0.1);
+
+ [<<"e"/utf8>>, <<"+"/utf8>> | Input@15] ->
+ parse_exponent(
+ Input@15,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ [<<"e"/utf8>>, <<"-"/utf8>> | Input@16] ->
+ parse_exponent(
+ Input@16,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ negative
+ );
+
+ [<<"e"/utf8>> | Input@17] ->
+ parse_exponent(
+ Input@17,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ [<<"E"/utf8>>, <<"+"/utf8>> | Input@18] ->
+ parse_exponent(
+ Input@18,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ [<<"E"/utf8>>, <<"-"/utf8>> | Input@19] ->
+ parse_exponent(
+ Input@19,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ negative
+ );
+
+ [<<"E"/utf8>> | Input@20] ->
+ parse_exponent(
+ Input@20,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ Input@21 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@21}}
+ end.
+
+-spec reverse_arrays_of_tables(toml()) -> toml().
+reverse_arrays_of_tables(Toml) ->
+ case Toml of
+ {array_of_tables, Tables} ->
+ {array_of_tables, reverse_arrays_of_tables_array(Tables, [])};
+
+ {table, Table} ->
+ {table, reverse_arrays_of_tables_table(Table)};
+
+ _ ->
+ Toml
+ end.
+
+-spec reverse_arrays_of_tables_table(gleam@dict:dict(binary(), toml())) -> gleam@dict:dict(binary(), toml()).
+reverse_arrays_of_tables_table(Table) ->
+ gleam@map:map_values(Table, fun(_, V) -> reverse_arrays_of_tables(V) end).
+
+-spec reverse_arrays_of_tables_array(
+ list(gleam@dict:dict(binary(), toml())),
+ list(gleam@dict:dict(binary(), toml()))
+) -> list(gleam@dict:dict(binary(), toml())).
+reverse_arrays_of_tables_array(Array, Acc) ->
+ case Array of
+ [] ->
+ Acc;
+
+ [First | Rest] ->
+ First@1 = reverse_arrays_of_tables_table(First),
+ reverse_arrays_of_tables_array(Rest, [First@1 | Acc])
+ end.
+
+-spec parse_inline_table_property(
+ list(binary()),
+ gleam@dict:dict(binary(), toml())
+) -> {ok, {gleam@dict:dict(binary(), toml()), list(binary())}} |
+ {error, parse_error()}.
+parse_inline_table_property(Input, Properties) ->
+ Input@1 = skip_whitespace(Input),
+ do(
+ parse_key(Input@1, []),
+ fun(Key, Input@2) ->
+ Input@3 = skip_line_whitespace(Input@2),
+ expect(
+ Input@3,
+ <<"="/utf8>>,
+ fun(Input@4) ->
+ Input@5 = skip_line_whitespace(Input@4),
+ do(
+ parse_value(Input@5),
+ fun(Value, Input@6) ->
+ case insert(Properties, Key, Value) of
+ {ok, Properties@1} ->
+ {ok, {Properties@1, Input@6}};
+
+ {error, E} ->
+ {error, E}
+ end
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_value(list(binary())) -> {ok, {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_value(Input) ->
+ case Input of
+ [<<"t"/utf8>>, <<"r"/utf8>>, <<"u"/utf8>>, <<"e"/utf8>> | Input@1] ->
+ {ok, {{bool, true}, Input@1}};
+
+ [<<"f"/utf8>>,
+ <<"a"/utf8>>,
+ <<"l"/utf8>>,
+ <<"s"/utf8>>,
+ <<"e"/utf8>> |
+ Input@2] ->
+ {ok, {{bool, false}, Input@2}};
+
+ [<<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@3] ->
+ {ok, {{nan, positive}, Input@3}};
+
+ [<<"+"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@4] ->
+ {ok, {{nan, positive}, Input@4}};
+
+ [<<"-"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@5] ->
+ {ok, {{nan, negative}, Input@5}};
+
+ [<<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@6] ->
+ {ok, {{infinity, positive}, Input@6}};
+
+ [<<"+"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@7] ->
+ {ok, {{infinity, positive}, Input@7}};
+
+ [<<"-"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@8] ->
+ {ok, {{infinity, negative}, Input@8}};
+
+ [<<"["/utf8>> | Input@9] ->
+ parse_array(Input@9, []);
+
+ [<<"{"/utf8>> | Input@10] ->
+ parse_inline_table(Input@10, gleam@map:new());
+
+ [<<"0"/utf8>>, <<"x"/utf8>> | Input@11] ->
+ parse_hex(Input@11, 0, positive);
+
+ [<<"+"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@12] ->
+ parse_hex(Input@12, 0, positive);
+
+ [<<"-"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@13] ->
+ parse_hex(Input@13, 0, negative);
+
+ [<<"0"/utf8>>, <<"o"/utf8>> | Input@14] ->
+ parse_octal(Input@14, 0, positive);
+
+ [<<"+"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@15] ->
+ parse_octal(Input@15, 0, positive);
+
+ [<<"-"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@16] ->
+ parse_octal(Input@16, 0, negative);
+
+ [<<"0"/utf8>>, <<"b"/utf8>> | Input@17] ->
+ parse_binary(Input@17, 0, positive);
+
+ [<<"+"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@18] ->
+ parse_binary(Input@18, 0, positive);
+
+ [<<"-"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@19] ->
+ parse_binary(Input@19, 0, negative);
+
+ [<<"+"/utf8>> | Input@20] ->
+ parse_number(Input@20, 0, positive);
+
+ [<<"-"/utf8>> | Input@21] ->
+ parse_number(Input@21, 0, negative);
+
+ [<<"0"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"1"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"2"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"3"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"4"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"5"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"6"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"7"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"8"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"9"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@22] ->
+ parse_multi_line_string(Input@22, <<""/utf8>>);
+
+ [<<"\""/utf8>> | Input@23] ->
+ parse_string(Input@23, <<""/utf8>>);
+
+ [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@24] ->
+ parse_multi_line_literal_string(Input@24, <<""/utf8>>);
+
+ [<<"'"/utf8>> | Input@25] ->
+ parse_literal_string(Input@25, <<""/utf8>>);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"value"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"value"/utf8>>}}
+ end.
+
+-spec parse_inline_table(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_inline_table(Input, Properties) ->
+ Input@1 = skip_whitespace(Input),
+ case Input@1 of
+ [<<"}"/utf8>> | Input@2] ->
+ {ok, {{inline_table, Properties}, Input@2}};
+
+ _ ->
+ case parse_inline_table_property(Input@1, Properties) of
+ {ok, {Properties@1, Input@3}} ->
+ Input@4 = skip_whitespace(Input@3),
+ case Input@4 of
+ [<<"}"/utf8>> | Input@5] ->
+ {ok, {{inline_table, Properties@1}, Input@5}};
+
+ [<<","/utf8>> | Input@6] ->
+ Input@7 = skip_whitespace(Input@6),
+ parse_inline_table(Input@7, Properties@1);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"}"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"}"/utf8>>}}
+ end;
+
+ {error, E} ->
+ {error, E}
+ end
+ end.
+
+-spec parse_key_value(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok,
+ {gleam@dict:dict(binary(), toml()), list(binary())}} |
+ {error, parse_error()}.
+parse_key_value(Input, Toml) ->
+ do(
+ parse_key(Input, []),
+ fun(Key, Input@1) ->
+ Input@2 = skip_line_whitespace(Input@1),
+ expect(
+ Input@2,
+ <<"="/utf8>>,
+ fun(Input@3) ->
+ Input@4 = skip_line_whitespace(Input@3),
+ do(
+ parse_value(Input@4),
+ fun(Value, Input@5) -> case insert(Toml, Key, Value) of
+ {ok, Toml@1} ->
+ {ok, {Toml@1, Input@5}};
+
+ {error, E} ->
+ {error, E}
+ end end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_table(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok,
+ {gleam@dict:dict(binary(), toml()), list(binary())}} |
+ {error, parse_error()}.
+parse_table(Input, Toml) ->
+ Input@1 = skip_whitespace(Input),
+ case Input@1 of
+ [<<"["/utf8>> | _] ->
+ {ok, {Toml, Input@1}};
+
+ [] ->
+ {ok, {Toml, Input@1}};
+
+ _ ->
+ case parse_key_value(Input@1, Toml) of
+ {ok, {Toml@1, Input@2}} ->
+ case skip_line_whitespace(Input@2) of
+ [] ->
+ {ok, {Toml@1, []}};
+
+ [<<"\n"/utf8>> | In] ->
+ parse_table(In, Toml@1);
+
+ [<<"\r\n"/utf8>> | In] ->
+ parse_table(In, Toml@1);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"\n"/utf8>>}}
+ end;
+
+ E ->
+ E
+ end
+ end.
+
+-spec parse_array_of_tables(list(binary())) -> {ok,
+ {{list(binary()), gleam@dict:dict(binary(), toml())}, list(binary())}} |
+ {error, parse_error()}.
+parse_array_of_tables(Input) ->
+ Input@1 = skip_line_whitespace(Input),
+ do(
+ parse_key(Input@1, []),
+ fun(Key, Input@2) ->
+ expect(
+ Input@2,
+ <<"]"/utf8>>,
+ fun(Input@3) ->
+ expect(
+ Input@3,
+ <<"]"/utf8>>,
+ fun(Input@4) ->
+ do(
+ parse_table(Input@4, gleam@map:new()),
+ fun(Table, Input@5) ->
+ {ok, {{Key, Table}, Input@5}}
+ end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_table_and_header(list(binary())) -> {ok,
+ {{list(binary()), gleam@dict:dict(binary(), toml())}, list(binary())}} |
+ {error, parse_error()}.
+parse_table_and_header(Input) ->
+ do(
+ parse_table_header(Input),
+ fun(Key, Input@1) ->
+ do(
+ parse_table(Input@1, gleam@map:new()),
+ fun(Table, Input@2) -> {ok, {{Key, Table}, Input@2}} end
+ )
+ end
+ ).
+
+-spec parse_tables(list(binary()), gleam@dict:dict(binary(), toml())) -> {ok,
+ gleam@dict:dict(binary(), toml())} |
+ {error, parse_error()}.
+parse_tables(Input, Toml) ->
+ case Input of
+ [<<"["/utf8>>, <<"["/utf8>> | Input@1] ->
+ case parse_array_of_tables(Input@1) of
+ {error, E} ->
+ {error, E};
+
+ {ok, {{Key, Table}, Input@2}} ->
+ case insert(Toml, Key, {array_of_tables, [Table]}) of
+ {ok, Toml@1} ->
+ parse_tables(Input@2, Toml@1);
+
+ {error, E@1} ->
+ {error, E@1}
+ end
+ end;
+
+ [<<"["/utf8>> | Input@3] ->
+ case parse_table_and_header(Input@3) of
+ {error, E@2} ->
+ {error, E@2};
+
+ {ok, {{Key@1, Table@1}, Input@4}} ->
+ case insert(Toml, Key@1, {table, Table@1}) of
+ {ok, Toml@2} ->
+ parse_tables(Input@4, Toml@2);
+
+ {error, E@3} ->
+ {error, E@3}
+ end
+ end;
+
+ [G | _] ->
+ {error, {unexpected, G, <<"["/utf8>>}};
+
+ [] ->
+ {ok, Toml}
+ end.
+
+-spec parse(binary()) -> {ok, gleam@dict:dict(binary(), toml())} |
+ {error, parse_error()}.
+parse(Input) ->
+ Input@1 = gleam@string:to_graphemes(Input),
+ Input@2 = drop_comments(Input@1, []),
+ Input@3 = skip_whitespace(Input@2),
+ do(
+ parse_table(Input@3, gleam@map:new()),
+ fun(Toml, Input@4) -> case parse_tables(Input@4, Toml) of
+ {ok, Toml@1} ->
+ {ok, reverse_arrays_of_tables_table(Toml@1)};
+
+ {error, E} ->
+ {error, E}
+ end end
+ ).
+
+-spec parse_array(list(binary()), list(toml())) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_array(Input, Elements) ->
+ Input@1 = skip_whitespace(Input),
+ case Input@1 of
+ [<<"]"/utf8>> | Input@2] ->
+ {ok, {{array, gleam@list:reverse(Elements)}, Input@2}};
+
+ _ ->
+ do(
+ parse_value(Input@1),
+ fun(Element, Input@3) ->
+ Elements@1 = [Element | Elements],
+ Input@4 = skip_whitespace(Input@3),
+ case Input@4 of
+ [<<"]"/utf8>> | Input@5] ->
+ {ok,
+ {{array, gleam@list:reverse(Elements@1)},
+ Input@5}};
+
+ [<<","/utf8>> | Input@6] ->
+ Input@7 = skip_whitespace(Input@6),
+ parse_array(Input@7, Elements@1);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"]"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"]"/utf8>>}}
+ end
+ end
+ )
+ end.
diff --git a/aoc2023/build/dev/erlang/tom/ebin/tom.app b/aoc2023/build/dev/erlang/tom/ebin/tom.app
new file mode 100644
index 0000000..ade9be1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/ebin/tom.app
@@ -0,0 +1,7 @@
+{application, tom, [
+ {vsn, "0.2.1"},
+ {applications, [gleam_stdlib]},
+ {description, "A pure Gleam TOML parser!"},
+ {modules, []},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/dev/erlang/tom/ebin/tom.beam b/aoc2023/build/dev/erlang/tom/ebin/tom.beam
new file mode 100644
index 0000000..0d4e0d2
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/ebin/tom.beam
Binary files differ
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl b/aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl
new file mode 100644
index 0000000..3b1e660
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_DateTimeValue.hrl
@@ -0,0 +1,5 @@
+-record(date_time_value, {
+ date :: tom:date(),
+ time :: tom:time(),
+ offset :: tom:offset()
+}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl b/aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl
new file mode 100644
index 0000000..c41f901
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_DateValue.hrl
@@ -0,0 +1 @@
+-record(date_value, {year :: integer(), month :: integer(), day :: integer()}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl b/aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl
new file mode 100644
index 0000000..930df26
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_KeyAlreadyInUse.hrl
@@ -0,0 +1 @@
+-record(key_already_in_use, {key :: list(binary())}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl b/aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl
new file mode 100644
index 0000000..19c9a17
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_NotFound.hrl
@@ -0,0 +1 @@
+-record(not_found, {key :: list(binary())}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl b/aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl
new file mode 100644
index 0000000..a58a8e1
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_Offset.hrl
@@ -0,0 +1,5 @@
+-record(offset, {
+ direction :: tom:sign(),
+ hours :: integer(),
+ minutes :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl b/aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl
new file mode 100644
index 0000000..e1275de
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_TimeValue.hrl
@@ -0,0 +1,6 @@
+-record(time_value, {
+ hour :: integer(),
+ minute :: integer(),
+ second :: integer(),
+ millisecond :: integer()
+}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl b/aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl
new file mode 100644
index 0000000..ab1091c
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_Unexpected.hrl
@@ -0,0 +1 @@
+-record(unexpected, {got :: binary(), expected :: binary()}).
diff --git a/aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl b/aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl
new file mode 100644
index 0000000..ae57352
--- /dev/null
+++ b/aoc2023/build/dev/erlang/tom/include/tom_WrongType.hrl
@@ -0,0 +1,5 @@
+-record(wrong_type, {
+ key :: list(binary()),
+ expected :: binary(),
+ got :: binary()
+}).
diff --git a/aoc2023/build/dev/javascript/gleam.lock b/aoc2023/build/dev/javascript/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/dev/javascript/gleam.lock
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache
new file mode 100644
index 0000000..521ceaf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_meta
new file mode 100644
index 0000000..5b2e4fa
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache
new file mode 100644
index 0000000..4a84a17
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta
new file mode 100644
index 0000000..13db829
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@day.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache
new file mode 100644
index 0000000..fc93f49
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta
new file mode 100644
index 0000000..25d46c5
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/adglent@init.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache
new file mode 100644
index 0000000..3f2627e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta
new file mode 100644
index 0000000..ea20543
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@aoc_client.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache
new file mode 100644
index 0000000..6b372e3
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta
new file mode 100644
index 0000000..d74550f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@errors.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache
new file mode 100644
index 0000000..892378a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta
new file mode 100644
index 0000000..6069b5f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@prompt.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache
new file mode 100644
index 0000000..59c03e8
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_meta
new file mode 100644
index 0000000..4280edf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@template.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache
new file mode 100644
index 0000000..eabceb6
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta
new file mode 100644
index 0000000..efc3c1e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@solution.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache
new file mode 100644
index 0000000..7941b60
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta
new file mode 100644
index 0000000..a43f871
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@test_main.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache
new file mode 100644
index 0000000..3c13e17
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta
new file mode 100644
index 0000000..171b42d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_gleeunit.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache
new file mode 100644
index 0000000..6f3ef24
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta
new file mode 100644
index 0000000..943d5d1
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@templates@testfile_showtime.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache
new file mode 100644
index 0000000..689de34
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta
new file mode 100644
index 0000000..dd43210
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/priv@toml.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache
new file mode 100644
index 0000000..222be7f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_meta
new file mode 100644
index 0000000..a6a146a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache
new file mode 100644
index 0000000..2827e6a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta
new file mode 100644
index 0000000..7772183
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@cli.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache
new file mode 100644
index 0000000..be4949e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta
new file mode 100644
index 0000000..c4fec3d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@common_event_handler.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache
new file mode 100644
index 0000000..e21cf07
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta
new file mode 100644
index 0000000..1756ecb
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_result.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache
new file mode 100644
index 0000000..6fc886b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta
new file mode 100644
index 0000000..6ee96ca
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@common@test_suite.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache
new file mode 100644
index 0000000..1fb5bce
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta
new file mode 100644
index 0000000..f515230
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@discover.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache
new file mode 100644
index 0000000..a37646a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta
new file mode 100644
index 0000000..7cfc212
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@event_handler.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache
new file mode 100644
index 0000000..2215915
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta
new file mode 100644
index 0000000..39219c2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@module_handler.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache
new file mode 100644
index 0000000..6d99c72
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta
new file mode 100644
index 0000000..3c79f10
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@erlang@runner.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache
new file mode 100644
index 0000000..552c884
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta
new file mode 100644
index 0000000..b8918d9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@compare.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache
new file mode 100644
index 0000000..1a93299
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta
new file mode 100644
index 0000000..8edfde1
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@formatter.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache
new file mode 100644
index 0000000..90c98f2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta
new file mode 100644
index 0000000..b116b96
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@styles.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache
new file mode 100644
index 0000000..6fbddc2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta
new file mode 100644
index 0000000..ff3b647
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@internal@reports@table.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache
new file mode 100644
index 0000000..6d293dd
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta
new file mode 100644
index 0000000..1236a4e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@meta.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache
new file mode 100644
index 0000000..56d5588
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta
new file mode 100644
index 0000000..8458464
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@should.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache
new file mode 100644
index 0000000..18e4c90
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta
new file mode 100644
index 0000000..784c0c6
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/adglent/_gleam_artefacts/showtime@tests@test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache
new file mode 100644
index 0000000..03ccd8d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta
new file mode 100644
index 0000000..010588b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache
new file mode 100644
index 0000000..a3e359f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta
new file mode 100644
index 0000000..7e5812c
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/aoc2023_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache
new file mode 100644
index 0000000..679e63b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta
new file mode 100644
index 0000000..492226f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@day10_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache
new file mode 100644
index 0000000..cac1824
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta
new file mode 100644
index 0000000..f684afc
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day10@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache
new file mode 100644
index 0000000..1924a60
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta
new file mode 100644
index 0000000..e9f22f9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@day11_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache
new file mode 100644
index 0000000..94061b3
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta
new file mode 100644
index 0000000..fb68ddf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day11@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache
new file mode 100644
index 0000000..ae12c19
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta
new file mode 100644
index 0000000..8696694
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@day12_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache
new file mode 100644
index 0000000..d66a1b7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta
new file mode 100644
index 0000000..dbcb771
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day12@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache
new file mode 100644
index 0000000..6605c0f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta
new file mode 100644
index 0000000..e8e1290
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@day13_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache
new file mode 100644
index 0000000..285fc49
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta
new file mode 100644
index 0000000..7ef4eea
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day13@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache
new file mode 100644
index 0000000..99eb8b4
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta
new file mode 100644
index 0000000..c6b6dc6
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@day14_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache
new file mode 100644
index 0000000..19fc049
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta
new file mode 100644
index 0000000..eb4b13e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day14@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache
new file mode 100644
index 0000000..2cd9b6f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta
new file mode 100644
index 0000000..a5a8349
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@day15_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache
new file mode 100644
index 0000000..ec1b22a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta
new file mode 100644
index 0000000..c27e086
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day15@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache
new file mode 100644
index 0000000..9aed405
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta
new file mode 100644
index 0000000..a3e7398
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@day16_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache
new file mode 100644
index 0000000..30d5d19
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta
new file mode 100644
index 0000000..09cc64c
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day16@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache
new file mode 100644
index 0000000..a859e78
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta
new file mode 100644
index 0000000..1de55c9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@day17_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache
new file mode 100644
index 0000000..2efed01
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta
new file mode 100644
index 0000000..71761c7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day17@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache
new file mode 100644
index 0000000..65f231e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta
new file mode 100644
index 0000000..8373480
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@day18_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache
new file mode 100644
index 0000000..f9f0f27
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta
new file mode 100644
index 0000000..dcebbaf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day18@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache
new file mode 100644
index 0000000..b29c52a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta
new file mode 100644
index 0000000..51fdff1
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@day19_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache
new file mode 100644
index 0000000..586dc8a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta
new file mode 100644
index 0000000..7d7d9f7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day19@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache
new file mode 100644
index 0000000..81e1b95
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta
new file mode 100644
index 0000000..216bc61
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@day1_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache
new file mode 100644
index 0000000..7fb41c1
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta
new file mode 100644
index 0000000..683844e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day1@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache
new file mode 100644
index 0000000..17bd031
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta
new file mode 100644
index 0000000..a62c67e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@day20_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache
new file mode 100644
index 0000000..b0eb623
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta
new file mode 100644
index 0000000..2fec13e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day20@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache
new file mode 100644
index 0000000..6ca601f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_meta
new file mode 100644
index 0000000..d2ccb36
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@day21_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache
new file mode 100644
index 0000000..696553d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_meta
new file mode 100644
index 0000000..d86557e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day21@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache
new file mode 100644
index 0000000..ba7b665
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_meta
new file mode 100644
index 0000000..e3b757f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@day22_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache
new file mode 100644
index 0000000..4367d01
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_meta
new file mode 100644
index 0000000..1debfe9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day22@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache
new file mode 100644
index 0000000..a911091
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_meta
new file mode 100644
index 0000000..828230e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@day23_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache
new file mode 100644
index 0000000..9b88d01
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_meta
new file mode 100644
index 0000000..35a9a48
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day23@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache
new file mode 100644
index 0000000..482a3bf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta
new file mode 100644
index 0000000..2af1fbe
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@day2_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache
new file mode 100644
index 0000000..50d9065
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta
new file mode 100644
index 0000000..e326f72
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day2@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache
new file mode 100644
index 0000000..80b9225
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta
new file mode 100644
index 0000000..e9df393
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@day3_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache
new file mode 100644
index 0000000..52a1a03
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta
new file mode 100644
index 0000000..bb3d942
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day3@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache
new file mode 100644
index 0000000..9adb008
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta
new file mode 100644
index 0000000..d80de98
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@day4_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache
new file mode 100644
index 0000000..fc70a08
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta
new file mode 100644
index 0000000..3b1a2a0
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day4@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache
new file mode 100644
index 0000000..d2b4607
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta
new file mode 100644
index 0000000..eca9fea
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@day5_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache
new file mode 100644
index 0000000..0a13d69
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta
new file mode 100644
index 0000000..054cd0e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day5@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache
new file mode 100644
index 0000000..6764230
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta
new file mode 100644
index 0000000..d316cb3
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@day6_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache
new file mode 100644
index 0000000..0172460
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta
new file mode 100644
index 0000000..bd28173
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day6@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache
new file mode 100644
index 0000000..fefff2d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta
new file mode 100644
index 0000000..5355703
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@day7_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache
new file mode 100644
index 0000000..2c9cded
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta
new file mode 100644
index 0000000..a7d2130
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day7@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache
new file mode 100644
index 0000000..4d54d49
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta
new file mode 100644
index 0000000..4f164d5
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@day8_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache
new file mode 100644
index 0000000..5fa8a20
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta
new file mode 100644
index 0000000..c13d429
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day8@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache
new file mode 100644
index 0000000..a99c932
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta
new file mode 100644
index 0000000..bff2f05
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@day9_test.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache
new file mode 100644
index 0000000..beefe36
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta
new file mode 100644
index 0000000..de6a9ae
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/day9@solve.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache
new file mode 100644
index 0000000..afe092f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta
new file mode 100644
index 0000000..88a04e0
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@array2d.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache
new file mode 100644
index 0000000..9273efb
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta
new file mode 100644
index 0000000..f81ca7a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@memo.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache
new file mode 100644
index 0000000..5a113a7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta
new file mode 100644
index 0000000..f3cebb8
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/aoc2023/_gleam_artefacts/utilities@prioqueue.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache
new file mode 100644
index 0000000..58fdf0a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_meta
new file mode 100644
index 0000000..edd8d2a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache
new file mode 100644
index 0000000..df62224
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta
new file mode 100644
index 0000000..3bc139d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@comparison.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache
new file mode 100644
index 0000000..bbfe5ed
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_meta
new file mode 100644
index 0000000..4a36f3c
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@myers.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache
new file mode 100644
index 0000000..65752d7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta
new file mode 100644
index 0000000..ca915f3
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styled_comparison.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache
new file mode 100644
index 0000000..c0172d9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_meta b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_meta
new file mode 100644
index 0000000..3773567
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gap/_gleam_artefacts/gap@styling.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam.lock b/aoc2023/build/lsp/erlang/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam.lock
diff --git a/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache
new file mode 100644
index 0000000..5163da7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta
new file mode 100644
index 0000000..6988904
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_ansi/_gleam_artefacts/gleam_community@ansi.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache
new file mode 100644
index 0000000..d1acf6b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta
new file mode 100644
index 0000000..53e1ad9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache
new file mode 100644
index 0000000..7012d28
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta
new file mode 100644
index 0000000..e926edf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_colour/_gleam_artefacts/gleam_community@colour@accessibility.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache
new file mode 100644
index 0000000..dbe18f4
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta
new file mode 100644
index 0000000..ac9cd0c
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@arithmetics.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache
new file mode 100644
index 0000000..82de246
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta
new file mode 100644
index 0000000..8124d25
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@combinatorics.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache
new file mode 100644
index 0000000..18e058a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta
new file mode 100644
index 0000000..eada136
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@conversion.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache
new file mode 100644
index 0000000..706c48f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta
new file mode 100644
index 0000000..ade0e09
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@elementary.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache
new file mode 100644
index 0000000..e21f351
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta
new file mode 100644
index 0000000..7edd566
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@metrics.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache
new file mode 100644
index 0000000..31e4bd8
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta
new file mode 100644
index 0000000..14c1d0f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@piecewise.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache
new file mode 100644
index 0000000..a0c65e8
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta
new file mode 100644
index 0000000..8d56c49
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@predicates.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache
new file mode 100644
index 0000000..c1adae5
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta
new file mode 100644
index 0000000..3cfa2ef
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@sequences.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache
new file mode 100644
index 0000000..ecca197
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta
new file mode 100644
index 0000000..e8cada3
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_community_maths/_gleam_artefacts/gleam_community@maths@special.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache
new file mode 100644
index 0000000..9cb4b7e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta
new file mode 100644
index 0000000..d76e6b6
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache
new file mode 100644
index 0000000..ee9e3c5
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta
new file mode 100644
index 0000000..bfd938d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@atom.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache
new file mode 100644
index 0000000..223f016
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta
new file mode 100644
index 0000000..7996afc
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@charlist.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache
new file mode 100644
index 0000000..e935a8b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta
new file mode 100644
index 0000000..e194cad
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@file.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache
new file mode 100644
index 0000000..b0b77f7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta
new file mode 100644
index 0000000..4423143
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@node.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache
new file mode 100644
index 0000000..977e362
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta
new file mode 100644
index 0000000..a5a851f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@os.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache
new file mode 100644
index 0000000..4c47a8f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta
new file mode 100644
index 0000000..90df4b9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_erlang/_gleam_artefacts/gleam@erlang@process.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache
new file mode 100644
index 0000000..6b925a9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta
new file mode 100644
index 0000000..f53edb8
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache
new file mode 100644
index 0000000..ab6b66d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta
new file mode 100644
index 0000000..89d9a4d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@cookie.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache
new file mode 100644
index 0000000..a5cf562
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta
new file mode 100644
index 0000000..91001e2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@request.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache
new file mode 100644
index 0000000..19c78e4
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta
new file mode 100644
index 0000000..37ee645
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@response.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache
new file mode 100644
index 0000000..903ffa4
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta
new file mode 100644
index 0000000..30e0838
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_http/_gleam_artefacts/gleam@http@service.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache
new file mode 100644
index 0000000..ba9ef78
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta
new file mode 100644
index 0000000..d66a2c3
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_httpc/_gleam_artefacts/gleam@httpc.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache
new file mode 100644
index 0000000..739be7d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta
new file mode 100644
index 0000000..01991ea
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@actor.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache
new file mode 100644
index 0000000..24b814e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta
new file mode 100644
index 0000000..ad921d2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@intensity_tracker.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache
new file mode 100644
index 0000000..b35f9fd
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta
new file mode 100644
index 0000000..ac4a4c2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@port.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache
new file mode 100644
index 0000000..30fbb09
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta
new file mode 100644
index 0000000..a58472a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@supervisor.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache
new file mode 100644
index 0000000..9992f8e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta
new file mode 100644
index 0000000..830d435
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@system.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache
new file mode 100644
index 0000000..fb7d4a6
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta
new file mode 100644
index 0000000..26c03cf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam@otp@task.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache
new file mode 100644
index 0000000..c447835
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta
new file mode 100644
index 0000000..6beed5e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_otp/_gleam_artefacts/gleam_otp.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache
new file mode 100644
index 0000000..e295cef
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta
new file mode 100644
index 0000000..d03bd4e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@base.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache
new file mode 100644
index 0000000..6b43913
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta
new file mode 100644
index 0000000..09e2f8a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache
new file mode 100644
index 0000000..122b269
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta
new file mode 100644
index 0000000..b59a80e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_builder.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache
new file mode 100644
index 0000000..7a80622
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta
new file mode 100644
index 0000000..e7f013d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bit_string.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache
new file mode 100644
index 0000000..06a6c96
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta
new file mode 100644
index 0000000..e616ec0
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache
new file mode 100644
index 0000000..01ea426
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta
new file mode 100644
index 0000000..701db1f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@bytes_builder.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache
new file mode 100644
index 0000000..49f4e5c
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta
new file mode 100644
index 0000000..fd97a7e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache
new file mode 100644
index 0000000..cbc0f1c
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta
new file mode 100644
index 0000000..e0ebbda
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache
new file mode 100644
index 0000000..189b9ad
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta
new file mode 100644
index 0000000..8778fab
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache
new file mode 100644
index 0000000..726a070
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta
new file mode 100644
index 0000000..8bfae6d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache
new file mode 100644
index 0000000..83be3b0
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta
new file mode 100644
index 0000000..7c99d5d
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache
new file mode 100644
index 0000000..b20af0e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta
new file mode 100644
index 0000000..48ca73e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache
new file mode 100644
index 0000000..c3d8348
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta
new file mode 100644
index 0000000..fb52d57
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@iterator.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache
new file mode 100644
index 0000000..752dab0
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta
new file mode 100644
index 0000000..6587875
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache
new file mode 100644
index 0000000..ba87194
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta
new file mode 100644
index 0000000..0b52486
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@map.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache
new file mode 100644
index 0000000..100fb62
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta
new file mode 100644
index 0000000..8b36f47
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache
new file mode 100644
index 0000000..cf6532f
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta
new file mode 100644
index 0000000..2395015
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache
new file mode 100644
index 0000000..8b90bd7
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta
new file mode 100644
index 0000000..a2089a5
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache
new file mode 100644
index 0000000..cbb4139
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta
new file mode 100644
index 0000000..6ec02d2
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@queue.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache
new file mode 100644
index 0000000..04900e9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta
new file mode 100644
index 0000000..d6129ae
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@regex.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache
new file mode 100644
index 0000000..fa35d18
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta
new file mode 100644
index 0000000..f4e8874
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache
new file mode 100644
index 0000000..d33ebc9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta
new file mode 100644
index 0000000..e4e832b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache
new file mode 100644
index 0000000..64e10ec
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta
new file mode 100644
index 0000000..0f375fd
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache
new file mode 100644
index 0000000..2130157
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta
new file mode 100644
index 0000000..b367bfd
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@string_builder.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache
new file mode 100644
index 0000000..0e387bb
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta
new file mode 100644
index 0000000..2ae412b
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/gleam_version b/aoc2023/build/lsp/erlang/gleam_version
new file mode 100644
index 0000000..048acbd
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/gleam_version
@@ -0,0 +1 @@
+0.33.0-rc2 \ No newline at end of file
diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache
new file mode 100644
index 0000000..eb7ff68
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_meta b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_meta
new file mode 100644
index 0000000..961512a
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache
new file mode 100644
index 0000000..80596e9
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_meta b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_meta
new file mode 100644
index 0000000..1c9f1af
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache
new file mode 100644
index 0000000..cc6fd56
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta
new file mode 100644
index 0000000..9339182
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/glint/_gleam_artefacts/glint@flag@constraint.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache
new file mode 100644
index 0000000..6012ccd
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta
new file mode 100644
index 0000000..2120b13
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/simplifile/_gleam_artefacts/simplifile.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache
new file mode 100644
index 0000000..72355df
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_meta b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_meta
new file mode 100644
index 0000000..181b01e
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/snag/_gleam_artefacts/snag.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache
new file mode 100644
index 0000000..c632faf
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache
Binary files differ
diff --git a/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_meta b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_meta
new file mode 100644
index 0000000..3371771
--- /dev/null
+++ b/aoc2023/build/lsp/erlang/tom/_gleam_artefacts/tom.cache_meta
Binary files differ
diff --git a/aoc2023/build/lsp/javascript/gleam.lock b/aoc2023/build/lsp/javascript/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/lsp/javascript/gleam.lock
diff --git a/aoc2023/build/packages/adglent/LICENSE b/aoc2023/build/packages/adglent/LICENSE
new file mode 100644
index 0000000..c7c82cc
--- /dev/null
+++ b/aoc2023/build/packages/adglent/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright 2023 John Björk
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/aoc2023/build/packages/adglent/README.md b/aoc2023/build/packages/adglent/README.md
new file mode 100644
index 0000000..fcd81eb
--- /dev/null
+++ b/aoc2023/build/packages/adglent/README.md
@@ -0,0 +1,115 @@
+# adglent
+
+[![Package Version](https://img.shields.io/hexpm/v/adglent)](https://hex.pm/packages/adglent)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/adglent/)
+
+## About
+
+`adglent` is a Gleam library which can be used to setup testing code and a template for implementing solution to [Advent of code](https://adventofcode.com/) problems.
+
+> NOTE: `adglent` **only** supports `erlang` target (default) for Gleam.
+
+## Prerequisites
+
+`adglent` is written in `gleam` and runs and tests solutions written in Gleam. Read more about `gleam` at [gleam.run](https://gleam.run).
+
+The easiest way to install `gleam` is to use `asdf`:
+
+1. Install `asdf` according to the instructions at the [asdf website](https://asdf-vm.com/)
+2. Install the gleam asdf plugin: `asdf plugin-add gleam`
+3. Install the latest `asdf install gleam latest`
+4. Use the latest gleam version globally: `asdf global gleam latest`
+
+> HINT: `asdf` can manage multiple versions of gleam and the version can be set globally and also locally (`asdf local gleam <VERSION>`) to use a specific gleam version in a project.
+
+## Installation
+
+Start a new gleam project for your AOC soluctions with `gleam new`. In the project folder run:
+
+```sh
+gleam add --dev adglent
+```
+
+## Usage
+
+### Initializing
+
+First log in to [Advent of code](https://adventofcode.com/) and copy your personal `session-cookie`. The value can be found using developer tools in the browser (in Chrome: "Application->Cookies->https://adventofcode.com->session" and copy the Cookie-value)
+
+```sh
+gleam run -m adglent/init
+```
+
+Input the AOC year, you personal AOC session cookie and select if `showtime` should be used for tests (otherwise it will assume the project uses `gleeunit` as is default for `gleam new <project>`)
+
+> NOTE: `showtime` is an alternate gleam test-runner. It is still quite new and havn't been tested in as many project as `gleeunit`. It has a different way of formatting the test-results and also supports the possibility to run specific test-modules (which can be useful in AOC). `showtime` is a standalone project but have been embedded into `adglent`.
+
+### Add day
+
+To start working on the solution for a specific day run:
+
+```sh
+gleam run -m adglent/day <NUM>
+```
+
+Where `<NUM>` is the day number of the day you want to solve a problem for.
+
+> Example (start solving 1st of December):
+>
+> ```sh
+> gleam run -m adglent/day 1
+> ```
+
+Adding a day will add tests in `test/day<NUM>/day<NUM>_test.gleam`and a `src/day<NUM>/solve.gleam` file where the solution can be implemented.
+
+Furthermore it will also download the input for the problem to `src/day<NUM>/input.txt`
+
+Before running the tests you need to provide one or more example. These can be found in the problem description for that day at the AOC website.
+
+Add an example to a part of the problem by adding examples to the `part1_examples` or `part2_examples` lists.
+
+> Example (input "Hello Joe!" should give answer 613411):
+>
+> ```gleam
+> const part1_examples: List(Example(Problem1AnswerType)) = [
+> Example("Hello Joe!", "613411"),
+> ]
+> ```
+
+The type of the answer for a part can be adjusted if needed by changing the type aliases `Problem1AnswerType` / `Problem2AnswerType`. Note that this will change the type that the `part1` / `part2` functions in `solve.gleam` expect to return.
+
+### Testing
+
+To test all days in the project use:
+
+```sh
+gleam test
+```
+
+If you are using `showtime` you can test a single day by running:
+
+```sh
+gleam test -- --modules=day<NUM>/day<NUM>_test
+```
+
+> Example (test solution for 1st of December):
+>
+> ```sh
+> gleam test -- modules=day1/day1_test
+> ```
+
+### Get the answer
+
+To get the (hopefully correct) answer after the tests are ok run:
+
+```sh
+gleam run -m day<NUM>/solve <PART>
+```
+
+where `<NUM>` is the day to solve and `<PART>` is the part of the problem (1 or 2) to solve.
+
+This will run the solver and print the answer to stdout.
+
+### Module documentation
+
+Module documentation can be found at <https://hexdocs.pm/adglent>.
diff --git a/aoc2023/build/packages/adglent/gleam.toml b/aoc2023/build/packages/adglent/gleam.toml
new file mode 100644
index 0000000..e1d81b8
--- /dev/null
+++ b/aoc2023/build/packages/adglent/gleam.toml
@@ -0,0 +1,29 @@
+name = "adglent"
+version = "1.2.0"
+
+description = "Advent of code helper - automating setup of tests, solution template and problem input"
+licences = ["Apache-2.0"]
+repository = { type = "github", user = "JohnBjrk", repo = "adglent" }
+
+internal_modules = [
+ "adglent/priv",
+ "adglent/priv/*",
+ "showtime/internal/*",
+]
+gleam = ">= 0.32.0"
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+simplifile = "~> 1.0"
+gleam_http = "~> 3.5"
+gleam_erlang = "~> 0.23.0"
+gleam_otp = "~> 0.8.0"
+gleam_community_ansi = "~> 1.2"
+glint = "~> 0.13.0"
+gap = "~> 1.0"
+snag = "~> 0.2.0"
+tom = "~> 0.2.0"
+gleam_httpc = "~> 2.1"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/adglent/include/adglent_Example.hrl b/aoc2023/build/packages/adglent/include/adglent_Example.hrl
new file mode 100644
index 0000000..615e473
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/adglent_Example.hrl
@@ -0,0 +1 @@
+-record(example, {input :: binary(), answer :: any()}).
diff --git a/aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl b/aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl
new file mode 100644
index 0000000..4cd5ddd
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/priv@toml_TomGetError.hrl
@@ -0,0 +1 @@
+-record(tom_get_error, {error :: tom:get_error()}).
diff --git a/aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl b/aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl
new file mode 100644
index 0000000..7306934
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/priv@toml_TomParseError.hrl
@@ -0,0 +1 @@
+-record(tom_parse_error, {error :: tom:parse_error()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl
new file mode 100644
index 0000000..7d24e52
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_Finished.hrl
@@ -0,0 +1 @@
+-record(finished, {num_modules :: integer()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl
new file mode 100644
index 0000000..2eceb23
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@common_event_handler_HandlerState.hrl
@@ -0,0 +1,5 @@
+-record(handler_state, {
+ test_state :: showtime@internal@common@common_event_handler:test_state(),
+ num_done :: integer(),
+ events :: gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run()))
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl
new file mode 100644
index 0000000..79f34f8
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ArgList.hrl
@@ -0,0 +1 @@
+-record(arg_list, {arg_list :: list(gleam@dynamic:dynamic_())}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl
new file mode 100644
index 0000000..c6458ba
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertEqual.hrl
@@ -0,0 +1,3 @@
+-record(assert_equal, {
+ details :: list(showtime@internal@common@test_result:reason_detail())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl
new file mode 100644
index 0000000..4920304
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertMatch.hrl
@@ -0,0 +1,3 @@
+-record(assert_match, {
+ details :: list(showtime@internal@common@test_result:reason_detail())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl
new file mode 100644
index 0000000..221c15f
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_AssertNotEqual.hrl
@@ -0,0 +1,3 @@
+-record(assert_not_equal, {
+ details :: list(showtime@internal@common@test_result:reason_detail())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl
new file mode 100644
index 0000000..9a31ba8
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErlangException.hrl
@@ -0,0 +1,6 @@
+-record(erlang_exception, {
+ class :: showtime@internal@common@test_result:class(),
+ reason :: showtime@internal@common@test_result:reason(),
+ stacktrace :: showtime@internal@common@test_result:trace_list(),
+ output_buffer :: list(binary())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl
new file mode 100644
index 0000000..97d0802
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ErrorInfo.hrl
@@ -0,0 +1,3 @@
+-record(error_info, {
+ error_info :: gleam@map:map_(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl
new file mode 100644
index 0000000..5e40ad3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expected.hrl
@@ -0,0 +1 @@
+-record(expected, {value :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl
new file mode 100644
index 0000000..7aa0c35
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Expression.hrl
@@ -0,0 +1 @@
+-record(expression, {expression :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl
new file mode 100644
index 0000000..1274b74
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_File.hrl
@@ -0,0 +1 @@
+-record(file, {filename :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl
new file mode 100644
index 0000000..7c33d0d
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GenericException.hrl
@@ -0,0 +1 @@
+-record(generic_exception, {value :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl
new file mode 100644
index 0000000..095748c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamAssert.hrl
@@ -0,0 +1 @@
+-record(gleam_assert, {value :: gleam@dynamic:dynamic_(), line_no :: integer()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl
new file mode 100644
index 0000000..68e6645
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_GleamError.hrl
@@ -0,0 +1,3 @@
+-record(gleam_error, {
+ details :: showtime@internal@common@test_result:gleam_error_detail()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl
new file mode 100644
index 0000000..87b7e2f
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Ignored.hrl
@@ -0,0 +1 @@
+-record(ignored, {reason :: showtime@internal@common@test_result:ignore_reason()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl
new file mode 100644
index 0000000..5f3f60d
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_LetAssert.hrl
@@ -0,0 +1,7 @@
+-record(let_assert, {
+ module :: binary(),
+ function :: binary(),
+ line_no :: integer(),
+ message :: binary(),
+ value :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl
new file mode 100644
index 0000000..9807df6
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Line.hrl
@@ -0,0 +1 @@
+-record(line, {line_no :: integer()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl
new file mode 100644
index 0000000..8002c0c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Module.hrl
@@ -0,0 +1 @@
+-record(module, {name :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl
new file mode 100644
index 0000000..c36efa3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Num.hrl
@@ -0,0 +1 @@
+-record(num, {arity :: integer()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl
new file mode 100644
index 0000000..6aa9c84
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Pattern.hrl
@@ -0,0 +1 @@
+-record(pattern, {pattern :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl
new file mode 100644
index 0000000..b7ad1ab
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_ReasonLine.hrl
@@ -0,0 +1 @@
+-record(reason_line, {line_no :: integer()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl
new file mode 100644
index 0000000..b0bc294
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TestFunctionReturn.hrl
@@ -0,0 +1,4 @@
+-record(test_function_return, {
+ value :: gleam@dynamic:dynamic_(),
+ output_buffer :: list(binary())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl
new file mode 100644
index 0000000..4cb007c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Trace.hrl
@@ -0,0 +1,5 @@
+-record(trace, {
+ function :: binary(),
+ arity :: showtime@internal@common@test_result:arity_(),
+ extra_info :: list(showtime@internal@common@test_result:extra_info())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl
new file mode 100644
index 0000000..c1aa9c5
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceList.hrl
@@ -0,0 +1,3 @@
+-record(trace_list, {
+ traces :: list(showtime@internal@common@test_result:trace())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl
new file mode 100644
index 0000000..595362f
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_TraceModule.hrl
@@ -0,0 +1,6 @@
+-record(trace_module, {
+ module :: binary(),
+ function :: binary(),
+ arity :: showtime@internal@common@test_result:arity_(),
+ extra_info :: list(showtime@internal@common@test_result:extra_info())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl
new file mode 100644
index 0000000..3a4b0dd
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_result_Value.hrl
@@ -0,0 +1 @@
+-record(value, {value :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl
new file mode 100644
index 0000000..927a0cf
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_CompletedTestRun.hrl
@@ -0,0 +1,6 @@
+-record(completed_test_run, {
+ test_function :: showtime@internal@common@test_suite:test_function(),
+ total_time :: integer(),
+ result :: {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl
new file mode 100644
index 0000000..13df1bf
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTest.hrl
@@ -0,0 +1,6 @@
+-record(end_test, {
+ test_module :: showtime@internal@common@test_suite:test_module(),
+ test_function :: showtime@internal@common@test_suite:test_function(),
+ result :: {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl
new file mode 100644
index 0000000..3f78991
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestRun.hrl
@@ -0,0 +1 @@
+-record(end_test_run, {num_modules :: integer()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl
new file mode 100644
index 0000000..a7f37b3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_EndTestSuite.hrl
@@ -0,0 +1,3 @@
+-record(end_test_suite, {
+ test_module :: showtime@internal@common@test_suite:test_module()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl
new file mode 100644
index 0000000..f52e5cc
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_OngoingTestRun.hrl
@@ -0,0 +1,4 @@
+-record(ongoing_test_run, {
+ test_function :: showtime@internal@common@test_suite:test_function(),
+ started_at :: integer()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl
new file mode 100644
index 0000000..d532609
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTest.hrl
@@ -0,0 +1,4 @@
+-record(start_test, {
+ test_module :: showtime@internal@common@test_suite:test_module(),
+ test_function :: showtime@internal@common@test_suite:test_function()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl
new file mode 100644
index 0000000..d5a03d3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_StartTestSuite.hrl
@@ -0,0 +1,3 @@
+-record(start_test_suite, {
+ test_module :: showtime@internal@common@test_suite:test_module()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl
new file mode 100644
index 0000000..a783ba4
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestFunction.hrl
@@ -0,0 +1 @@
+-record(test_function, {name :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl
new file mode 100644
index 0000000..ee9baaf
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestModule.hrl
@@ -0,0 +1 @@
+-record(test_module, {name :: binary(), path :: gleam@option:option(binary())}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl
new file mode 100644
index 0000000..253a946
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@common@test_suite_TestSuite.hrl
@@ -0,0 +1,4 @@
+-record(test_suite, {
+ module :: showtime@internal@common@test_suite:test_module(),
+ tests :: list(showtime@internal@common@test_suite:test_function())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl
new file mode 100644
index 0000000..ca52968
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeft.hrl
@@ -0,0 +1,4 @@
+-record(align_left, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl
new file mode 100644
index 0000000..8d5a673
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignLeftOverflow.hrl
@@ -0,0 +1,4 @@
+-record(align_left_overflow, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl
new file mode 100644
index 0000000..7f7a3f0
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRight.hrl
@@ -0,0 +1,4 @@
+-record(align_right, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl
new file mode 100644
index 0000000..4fc4536
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_AlignRightOverflow.hrl
@@ -0,0 +1,4 @@
+-record(align_right_overflow, {
+ content :: showtime@internal@reports@table:content(),
+ margin :: integer()
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl
new file mode 100644
index 0000000..2343dfd
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Aligned.hrl
@@ -0,0 +1 @@
+-record(aligned, {content :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl
new file mode 100644
index 0000000..044891b
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Content.hrl
@@ -0,0 +1 @@
+-record(content, {unstyled_text :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl
new file mode 100644
index 0000000..db3f822
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Separator.hrl
@@ -0,0 +1 @@
+-record(separator, {char :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl
new file mode 100644
index 0000000..ed500df
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_StyledContent.hrl
@@ -0,0 +1 @@
+-record(styled_content, {styled_text :: binary()}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl
new file mode 100644
index 0000000..5b41bb1
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@internal@reports@table_Table.hrl
@@ -0,0 +1,4 @@
+-record(table, {
+ header :: gleam@option:option(binary()),
+ rows :: list(list(showtime@internal@reports@table:col()))
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl
new file mode 100644
index 0000000..14184fb
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@meta_Meta.hrl
@@ -0,0 +1 @@
+-record(meta, {description :: binary(), tags :: list(binary())}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl
new file mode 100644
index 0000000..6ebea34
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_Eq.hrl
@@ -0,0 +1,5 @@
+-record(eq, {
+ a :: any(),
+ b :: any(),
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl
new file mode 100644
index 0000000..cf06a3c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_Fail.hrl
@@ -0,0 +1 @@
+-record(fail, {meta :: gleam@option:option(showtime@tests@meta:meta())}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl
new file mode 100644
index 0000000..e9cabf3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsError.hrl
@@ -0,0 +1,4 @@
+-record(is_error, {
+ a :: {ok, any()} | {error, any()},
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl
new file mode 100644
index 0000000..37c24ca
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_IsOk.hrl
@@ -0,0 +1,4 @@
+-record(is_ok, {
+ a :: {ok, any()} | {error, any()},
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl
new file mode 100644
index 0000000..2a6bf48
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@should_NotEq.hrl
@@ -0,0 +1,5 @@
+-record(not_eq, {
+ a :: any(),
+ b :: any(),
+ meta :: gleam@option:option(showtime@tests@meta:meta())
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl
new file mode 100644
index 0000000..a814a93
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@test_MetaShould.hrl
@@ -0,0 +1,4 @@
+-record(meta_should, {
+ equal :: fun((any(), any()) -> nil),
+ not_equal :: fun((any(), any()) -> nil)
+}).
diff --git a/aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl b/aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl
new file mode 100644
index 0000000..e75a0b7
--- /dev/null
+++ b/aoc2023/build/packages/adglent/include/showtime@tests@test_Test.hrl
@@ -0,0 +1,4 @@
+-record(test, {
+ meta :: showtime@tests@meta:meta(),
+ test_function :: fun(() -> nil)
+}).
diff --git a/aoc2023/build/packages/adglent/src/adglent.app.src b/aoc2023/build/packages/adglent/src/adglent.app.src
new file mode 100644
index 0000000..aa44f8b
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent.app.src
@@ -0,0 +1,45 @@
+{application, adglent, [
+ {vsn, "1.2.0"},
+ {applications, [gap,
+ gleam_community_ansi,
+ gleam_erlang,
+ gleam_http,
+ gleam_httpc,
+ gleam_otp,
+ gleam_stdlib,
+ gleeunit,
+ glint,
+ simplifile,
+ snag,
+ tom]},
+ {description, "Advent of code helper - automating setup of tests, solution template and problem input"},
+ {modules, [adglent,
+ adglent@day,
+ adglent@init,
+ priv@aoc_client,
+ priv@errors,
+ priv@prompt,
+ priv@template,
+ priv@templates@solution,
+ priv@templates@test_main,
+ priv@templates@testfile_gleeunit,
+ priv@templates@testfile_showtime,
+ priv@toml,
+ showtime,
+ showtime@internal@common@cli,
+ showtime@internal@common@common_event_handler,
+ showtime@internal@common@test_result,
+ showtime@internal@common@test_suite,
+ showtime@internal@erlang@discover,
+ showtime@internal@erlang@event_handler,
+ showtime@internal@erlang@module_handler,
+ showtime@internal@erlang@runner,
+ showtime@internal@reports@compare,
+ showtime@internal@reports@formatter,
+ showtime@internal@reports@styles,
+ showtime@internal@reports@table,
+ showtime@tests@meta,
+ showtime@tests@should,
+ showtime@tests@test]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/adglent/src/adglent.erl b/aoc2023/build/packages/adglent/src/adglent.erl
new file mode 100644
index 0000000..e9df2b7
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent.erl
@@ -0,0 +1,55 @@
+-module(adglent).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([inspect/1, get_input/1, get_test_folder/1, start_arguments/0, get_part/0]).
+-export_type([example/1, problem/0, charlist/0]).
+
+-type example(OFF) :: {example, binary(), OFF}.
+
+-type problem() :: first | second.
+
+-type charlist() :: any().
+
+-spec inspect(any()) -> binary().
+inspect(Value) ->
+ Inspected_value = gleam@string:inspect(Value),
+ case begin
+ _pipe = Inspected_value,
+ gleam@string:starts_with(_pipe, <<"\""/utf8>>)
+ end of
+ true ->
+ _pipe@1 = Inspected_value,
+ _pipe@2 = gleam@string:drop_left(_pipe@1, 1),
+ gleam@string:drop_right(_pipe@2, 1);
+
+ false ->
+ Inspected_value
+ end.
+
+-spec get_input(binary()) -> {ok, binary()} | {error, simplifile:file_error()}.
+get_input(Day) ->
+ simplifile:read(
+ <<<<"src/day"/utf8, Day/binary>>/binary, "/input.txt"/utf8>>
+ ).
+
+-spec get_test_folder(binary()) -> binary().
+get_test_folder(Day) ->
+ <<"test/day"/utf8, Day/binary>>.
+
+-spec start_arguments() -> list(binary()).
+start_arguments() ->
+ _pipe = init:get_plain_arguments(),
+ gleam@list:map(_pipe, fun unicode:characters_to_binary/1).
+
+-spec get_part() -> {ok, problem()} | {error, nil}.
+get_part() ->
+ case start_arguments() of
+ [<<"1"/utf8>>] ->
+ {ok, first};
+
+ [<<"2"/utf8>>] ->
+ {ok, second};
+
+ _ ->
+ {error, nil}
+ end.
diff --git a/aoc2023/build/packages/adglent/src/adglent.gleam b/aoc2023/build/packages/adglent/src/adglent.gleam
new file mode 100644
index 0000000..077d49d
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent.gleam
@@ -0,0 +1,56 @@
+import simplifile.{type FileError}
+import gleam/list
+import gleam/string
+
+pub type Example(a) {
+ Example(input: String, answer: a)
+}
+
+pub fn inspect(value: a) -> String {
+ let inspected_value = string.inspect(value)
+ case
+ inspected_value
+ |> string.starts_with("\"")
+ {
+ True ->
+ inspected_value
+ |> string.drop_left(1)
+ |> string.drop_right(1)
+ False -> inspected_value
+ }
+}
+
+pub fn get_input(day: String) -> Result(String, FileError) {
+ simplifile.read("src/day" <> day <> "/input.txt")
+}
+
+pub fn get_test_folder(day: String) -> String {
+ "test/day" <> day
+}
+
+pub type Problem {
+ First
+ Second
+}
+
+pub fn get_part() -> Result(Problem, Nil) {
+ case start_arguments() {
+ ["1"] -> Ok(First)
+ ["2"] -> Ok(Second)
+ _ -> Error(Nil)
+ }
+}
+
+pub fn start_arguments() -> List(String) {
+ get_start_arguments()
+ |> list.map(to_string)
+}
+
+type Charlist
+
+/// Transform a charlist to a string
+@external(erlang, "unicode", "characters_to_binary")
+fn to_string(a: Charlist) -> String
+
+@external(erlang, "init", "get_plain_arguments")
+fn get_start_arguments() -> List(Charlist)
diff --git a/aoc2023/build/packages/adglent/src/adglent/day.gleam b/aoc2023/build/packages/adglent/src/adglent/day.gleam
new file mode 100644
index 0000000..69e4ccc
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent/day.gleam
@@ -0,0 +1,126 @@
+import adglent
+import gleam/string
+import gleam/result
+import priv/template
+import priv/templates/testfile_gleeunit
+import priv/templates/testfile_showtime
+import priv/templates/solution
+import priv/toml
+import priv/aoc_client
+import priv/errors
+import simplifile
+
+pub fn main() {
+ let day =
+ case adglent.start_arguments() {
+ [day] -> Ok(day)
+ args -> Error("Expected day - found: " <> string.join(args, ", "))
+ }
+ |> errors.map_error("Error when parsing command args")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ let aoc_toml =
+ simplifile.read("aoc.toml")
+ |> errors.map_error("Could not read aoc.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ let aoc_toml_version = toml.get_int(aoc_toml, ["version"])
+ let year =
+ toml.get_string(aoc_toml, ["year"])
+ |> errors.map_error("Could not read \"year\" from aoc.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+ let session =
+ toml.get_string(aoc_toml, ["session"])
+ |> errors.map_error("Could not read \"session\" from aoc.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ let showtime = case aoc_toml_version {
+ Ok(2) -> {
+ toml.get_bool(aoc_toml, ["showtime"])
+ |> errors.map_error("Could not read \"showtime\" from aoc.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+ }
+ _ ->
+ toml.get_string(aoc_toml, ["showtime"])
+ |> result.map(fn(bool_string) {
+ case bool_string {
+ "True" -> True
+ _ -> False
+ }
+ })
+ |> errors.map_error("Could not read \"showtime\" from aoc.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+ }
+
+ let test_folder = adglent.get_test_folder(day)
+ let test_file = test_folder <> "/day" <> day <> "_test.gleam"
+
+ simplifile.create_directory_all(test_folder)
+ |> errors.map_error("Could not create folder \"" <> test_folder <> "\"")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ let testfile_template = case showtime {
+ True -> testfile_showtime.template
+ False -> testfile_gleeunit.template
+ }
+
+ template.render(testfile_template, [#("day", day)])
+ |> create_file_if_not_present(test_file)
+ |> errors.print_result
+ |> errors.assert_ok
+
+ let solutions_folder = "src/day" <> day
+ let solution_file = solutions_folder <> "/solve.gleam"
+
+ simplifile.create_directory_all(solutions_folder)
+ |> errors.map_error("Could not create folder \"" <> solutions_folder <> "\"")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ template.render(solution.template, [#("day", day)])
+ |> create_file_if_not_present(solution_file)
+ |> errors.print_result
+ |> errors.assert_ok
+
+ create_file_if_not_present("input.txt", solutions_folder <> "/.gitignore")
+ |> errors.print_result
+ |> errors.assert_ok
+
+ let input =
+ aoc_client.get_input(year, day, session)
+ |> errors.map_error("Error when fetching input")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ input
+ |> string.trim
+ |> create_file_if_not_present(solutions_folder <> "/input.txt")
+ |> errors.print_result
+ |> errors.assert_ok
+}
+
+fn create_file_if_not_present(
+ content: String,
+ path: String,
+) -> Result(String, String) {
+ case simplifile.is_file(path) {
+ True -> {
+ Ok(path <> " already exists - skipped")
+ }
+ False -> {
+ use _ <- result.try(
+ simplifile.create_file(path)
+ |> errors.map_messages("Created " <> path, "Could not create " <> path),
+ )
+ simplifile.write(content, to: path)
+ |> errors.map_messages("Wrote " <> path, "Could not write to " <> path)
+ }
+ }
+}
diff --git a/aoc2023/build/packages/adglent/src/adglent/init.gleam b/aoc2023/build/packages/adglent/src/adglent/init.gleam
new file mode 100644
index 0000000..42eb833
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent/init.gleam
@@ -0,0 +1,110 @@
+import priv/prompt
+import priv/template
+import priv/templates/test_main
+import priv/errors
+import priv/toml
+import simplifile
+import gleam/string
+import gleam/list
+import gleam/result
+import gleam/bool
+
+const aoc_toml_template = "
+version = {{ version }}
+year = \"{{ year }}\"
+session = \"{{ session }}\"
+showtime = {{ showtime }}
+"
+
+pub fn main() {
+ let year = prompt.value("Year", "2023", False)
+ let session = prompt.value("Session Cookie", "", False)
+ let use_showtime = prompt.confirm("Use showtime", False)
+
+ let aoc_toml_file = "aoc.toml"
+ let overwrite = case simplifile.create_file(aoc_toml_file) {
+ Ok(_) -> True
+ Error(simplifile.Eexist) ->
+ prompt.confirm("aoc.toml exits - overwrite", False)
+ _ -> panic as "Could not create aoc.toml"
+ }
+ case overwrite {
+ True -> {
+ template.render(
+ aoc_toml_template,
+ [
+ #("version", "2"),
+ #("year", year),
+ #("session", session),
+ #(
+ "showtime",
+ bool.to_string(use_showtime)
+ |> string.lowercase,
+ ),
+ ],
+ )
+ |> simplifile.write(to: aoc_toml_file)
+ |> errors.map_messages(
+ "aoc.toml - written",
+ "Error when writing aoc.toml",
+ )
+ }
+
+ False -> Ok("aoc.toml - skipped")
+ }
+ |> errors.print_result
+
+ let gleam_toml =
+ simplifile.read("gleam.toml")
+ |> errors.map_error("Could not read gleam.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ let name =
+ toml.get_string(gleam_toml, ["name"])
+ |> errors.map_error("Could not read \"name\" from gleam.toml")
+ |> errors.print_error
+ |> errors.assert_ok
+
+ let test_main_file = "test/" <> name <> "_test.gleam"
+
+ case use_showtime {
+ True -> {
+ template.render(test_main.template, [])
+ |> simplifile.write(to: test_main_file)
+ |> errors.map_messages(
+ "Wrote " <> test_main_file,
+ "Could not write to " <> test_main_file,
+ )
+ }
+ False -> Ok("Using existing (gleeunit) " <> test_main_file)
+ }
+ |> errors.print_result
+ |> errors.assert_ok
+
+ case simplifile.is_file(".gitignore") {
+ True -> {
+ use gitignore <- result.try(
+ simplifile.read(".gitignore")
+ |> result.map_error(fn(err) {
+ "Could not read .gitignore: " <> string.inspect(err)
+ }),
+ )
+ let aoc_toml_ignored =
+ string.split(gitignore, "\n")
+ |> list.find(fn(line) { line == "aoc.toml" })
+ case aoc_toml_ignored {
+ Error(_) -> {
+ simplifile.append("\naoc.toml", to: ".gitignore")
+ |> errors.map_messages(
+ ".gitignore written",
+ "Error when writing .gitignore",
+ )
+ }
+ Ok(_) -> Ok(".gitignore - skipped (already configured)")
+ }
+ }
+ False -> Error("Could not find .gitignore")
+ }
+ |> errors.print_result
+}
diff --git a/aoc2023/build/packages/adglent/src/adglent@day.erl b/aoc2023/build/packages/adglent/src/adglent@day.erl
new file mode 100644
index 0000000..b80368f
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent@day.erl
@@ -0,0 +1,278 @@
+-module(adglent@day).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec create_file_if_not_present(binary(), binary()) -> {ok, binary()} |
+ {error, binary()}.
+create_file_if_not_present(Content, Path) ->
+ case simplifile:is_file(Path) of
+ true ->
+ {ok, <<Path/binary, " already exists - skipped"/utf8>>};
+
+ false ->
+ gleam@result:'try'(
+ begin
+ _pipe = simplifile:create_file(Path),
+ priv@errors:map_messages(
+ _pipe,
+ <<"Created "/utf8, Path/binary>>,
+ <<"Could not create "/utf8, Path/binary>>
+ )
+ end,
+ fun(_) -> _pipe@1 = simplifile:write(Path, Content),
+ priv@errors:map_messages(
+ _pipe@1,
+ <<"Wrote "/utf8, Path/binary>>,
+ <<"Could not write to "/utf8, Path/binary>>
+ ) end
+ )
+ end.
+
+-spec main() -> binary().
+main() ->
+ Day@1 = begin
+ _pipe = case adglent:start_arguments() of
+ [Day] ->
+ {ok, Day};
+
+ Args ->
+ {error,
+ <<"Expected day - found: "/utf8,
+ (gleam@string:join(Args, <<", "/utf8>>))/binary>>}
+ end,
+ _pipe@1 = priv@errors:map_error(
+ _pipe,
+ <<"Error when parsing command args"/utf8>>
+ ),
+ _pipe@2 = priv@errors:print_error(_pipe@1),
+ priv@errors:assert_ok(_pipe@2)
+ end,
+ Aoc_toml = begin
+ _pipe@3 = simplifile:read(<<"aoc.toml"/utf8>>),
+ _pipe@4 = priv@errors:map_error(
+ _pipe@3,
+ <<"Could not read aoc.toml"/utf8>>
+ ),
+ _pipe@5 = priv@errors:print_error(_pipe@4),
+ priv@errors:assert_ok(_pipe@5)
+ end,
+ Aoc_toml_version = priv@toml:get_int(Aoc_toml, [<<"version"/utf8>>]),
+ Year = begin
+ _pipe@6 = priv@toml:get_string(Aoc_toml, [<<"year"/utf8>>]),
+ _pipe@7 = priv@errors:map_error(
+ _pipe@6,
+ <<"Could not read \"year\" from aoc.toml"/utf8>>
+ ),
+ _pipe@8 = priv@errors:print_error(_pipe@7),
+ priv@errors:assert_ok(_pipe@8)
+ end,
+ Session = begin
+ _pipe@9 = priv@toml:get_string(Aoc_toml, [<<"session"/utf8>>]),
+ _pipe@10 = priv@errors:map_error(
+ _pipe@9,
+ <<"Could not read \"session\" from aoc.toml"/utf8>>
+ ),
+ _pipe@11 = priv@errors:print_error(_pipe@10),
+ priv@errors:assert_ok(_pipe@11)
+ end,
+ Showtime = case Aoc_toml_version of
+ {ok, 2} ->
+ _pipe@12 = priv@toml:get_bool(Aoc_toml, [<<"showtime"/utf8>>]),
+ _pipe@13 = priv@errors:map_error(
+ _pipe@12,
+ <<"Could not read \"showtime\" from aoc.toml"/utf8>>
+ ),
+ _pipe@14 = priv@errors:print_error(_pipe@13),
+ priv@errors:assert_ok(_pipe@14);
+
+ _ ->
+ _pipe@15 = priv@toml:get_string(Aoc_toml, [<<"showtime"/utf8>>]),
+ _pipe@16 = gleam@result:map(
+ _pipe@15,
+ fun(Bool_string) -> case Bool_string of
+ <<"True"/utf8>> ->
+ true;
+
+ _ ->
+ false
+ end end
+ ),
+ _pipe@17 = priv@errors:map_error(
+ _pipe@16,
+ <<"Could not read \"showtime\" from aoc.toml"/utf8>>
+ ),
+ _pipe@18 = priv@errors:print_error(_pipe@17),
+ priv@errors:assert_ok(_pipe@18)
+ end,
+ Test_folder = adglent:get_test_folder(Day@1),
+ Test_file = <<<<<<Test_folder/binary, "/day"/utf8>>/binary, Day@1/binary>>/binary,
+ "_test.gleam"/utf8>>,
+ _pipe@19 = simplifile:create_directory_all(Test_folder),
+ _pipe@20 = priv@errors:map_error(
+ _pipe@19,
+ <<<<"Could not create folder \""/utf8, Test_folder/binary>>/binary,
+ "\""/utf8>>
+ ),
+ _pipe@21 = priv@errors:print_error(_pipe@20),
+ priv@errors:assert_ok(_pipe@21),
+ Testfile_template = case Showtime of
+ true ->
+ <<"
+import gleam/list
+import showtime/tests/should
+import adglent.{type Example, Example}
+import day{{ day }}/solve
+
+type Problem1AnswerType =
+ String
+
+type Problem2AnswerType =
+ String
+
+/// Add examples for part 1 here:
+/// ```gleam
+///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part1_examples: List(Example(Problem1AnswerType)) = []
+
+/// Add examples for part 2 here:
+/// ```gleam
+///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part2_examples: List(Example(Problem2AnswerType)) = []
+
+pub fn part1_test() {
+ part1_examples
+ |> should.not_equal([])
+ use example <- list.map(part1_examples)
+ solve.part1(example.input)
+ |> should.equal(example.answer)
+}
+
+pub fn part2_test() {
+ part2_examples
+ |> should.not_equal([])
+ use example <- list.map(part2_examples)
+ solve.part2(example.input)
+ |> should.equal(example.answer)
+}
+
+"/utf8>>;
+
+ false ->
+ <<"
+import gleam/list
+import gleeunit/should
+import adglent.{type Example, Example}
+import day{{ day }}/solve
+
+type Problem1AnswerType =
+ String
+
+type Problem2AnswerType =
+ String
+
+/// Add examples for part 1 here:
+/// ```gleam
+///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part1_examples: List(Example(Problem1AnswerType)) = []
+
+/// Add examples for part 2 here:
+/// ```gleam
+///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part2_examples: List(Example(Problem2AnswerType)) = []
+
+pub fn part1_test() {
+ part1_examples
+ |> should.not_equal([])
+ use example <- list.map(part1_examples)
+ solve.part1(example.input)
+ |> should.equal(example.answer)
+}
+
+pub fn part2_test() {
+ part2_examples
+ |> should.not_equal([])
+ use example <- list.map(part2_examples)
+ solve.part2(example.input)
+ |> should.equal(example.answer)
+}
+
+"/utf8>>
+ end,
+ _pipe@22 = priv@template:render(
+ Testfile_template,
+ [{<<"day"/utf8>>, Day@1}]
+ ),
+ _pipe@23 = create_file_if_not_present(_pipe@22, Test_file),
+ _pipe@24 = priv@errors:print_result(_pipe@23),
+ priv@errors:assert_ok(_pipe@24),
+ Solutions_folder = <<"src/day"/utf8, Day@1/binary>>,
+ Solution_file = <<Solutions_folder/binary, "/solve.gleam"/utf8>>,
+ _pipe@25 = simplifile:create_directory_all(Solutions_folder),
+ _pipe@26 = priv@errors:map_error(
+ _pipe@25,
+ <<<<"Could not create folder \""/utf8, Solutions_folder/binary>>/binary,
+ "\""/utf8>>
+ ),
+ _pipe@27 = priv@errors:print_error(_pipe@26),
+ priv@errors:assert_ok(_pipe@27),
+ _pipe@28 = priv@template:render(
+ <<"
+import adglent.{First, Second}
+import gleam/io
+
+pub fn part1(input: String) {
+ todo as \"Implement solution to part 1\"
+}
+
+pub fn part2(input: String) {
+ todo as \"Implement solution to part 2\"
+}
+
+pub fn main() {
+ let assert Ok(part) = adglent.get_part()
+ let assert Ok(input) = adglent.get_input(\"{{ day }}\")
+ case part {
+ First ->
+ part1(input)
+ |> adglent.inspect
+ |> io.println
+ Second ->
+ part2(input)
+ |> adglent.inspect
+ |> io.println
+ }
+}
+"/utf8>>,
+ [{<<"day"/utf8>>, Day@1}]
+ ),
+ _pipe@29 = create_file_if_not_present(_pipe@28, Solution_file),
+ _pipe@30 = priv@errors:print_result(_pipe@29),
+ priv@errors:assert_ok(_pipe@30),
+ _pipe@31 = create_file_if_not_present(
+ <<"input.txt"/utf8>>,
+ <<Solutions_folder/binary, "/.gitignore"/utf8>>
+ ),
+ _pipe@32 = priv@errors:print_result(_pipe@31),
+ priv@errors:assert_ok(_pipe@32),
+ Input = begin
+ _pipe@33 = priv@aoc_client:get_input(Year, Day@1, Session),
+ _pipe@34 = priv@errors:map_error(
+ _pipe@33,
+ <<"Error when fetching input"/utf8>>
+ ),
+ _pipe@35 = priv@errors:print_error(_pipe@34),
+ priv@errors:assert_ok(_pipe@35)
+ end,
+ _pipe@36 = Input,
+ _pipe@37 = gleam@string:trim(_pipe@36),
+ _pipe@38 = create_file_if_not_present(
+ _pipe@37,
+ <<Solutions_folder/binary, "/input.txt"/utf8>>
+ ),
+ _pipe@39 = priv@errors:print_result(_pipe@38),
+ priv@errors:assert_ok(_pipe@39).
diff --git a/aoc2023/build/packages/adglent/src/adglent@init.erl b/aoc2023/build/packages/adglent/src/adglent@init.erl
new file mode 100644
index 0000000..fb28101
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent@init.erl
@@ -0,0 +1,142 @@
+-module(adglent@init).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec main() -> {ok, binary()} | {error, binary()}.
+main() ->
+ Year = priv@prompt:value(<<"Year"/utf8>>, <<"2023"/utf8>>, false),
+ Session = priv@prompt:value(<<"Session Cookie"/utf8>>, <<""/utf8>>, false),
+ Use_showtime = priv@prompt:confirm(<<"Use showtime"/utf8>>, false),
+ Aoc_toml_file = <<"aoc.toml"/utf8>>,
+ Overwrite = case simplifile:create_file(Aoc_toml_file) of
+ {ok, _} ->
+ true;
+
+ {error, eexist} ->
+ priv@prompt:confirm(<<"aoc.toml exits - overwrite"/utf8>>, false);
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"Could not create aoc.toml"/utf8>>,
+ module => <<"adglent/init"/utf8>>,
+ function => <<"main"/utf8>>,
+ line => 29})
+ end,
+ _pipe@3 = case Overwrite of
+ true ->
+ _pipe@1 = priv@template:render(
+ <<"
+version = {{ version }}
+year = \"{{ year }}\"
+session = \"{{ session }}\"
+showtime = {{ showtime }}
+"/utf8>>,
+ [{<<"version"/utf8>>, <<"2"/utf8>>},
+ {<<"year"/utf8>>, Year},
+ {<<"session"/utf8>>, Session},
+ {<<"showtime"/utf8>>,
+ begin
+ _pipe = gleam@bool:to_string(Use_showtime),
+ gleam@string:lowercase(_pipe)
+ end}]
+ ),
+ _pipe@2 = simplifile:write(Aoc_toml_file, _pipe@1),
+ priv@errors:map_messages(
+ _pipe@2,
+ <<"aoc.toml - written"/utf8>>,
+ <<"Error when writing aoc.toml"/utf8>>
+ );
+
+ false ->
+ {ok, <<"aoc.toml - skipped"/utf8>>}
+ end,
+ priv@errors:print_result(_pipe@3),
+ Gleam_toml = begin
+ _pipe@4 = simplifile:read(<<"gleam.toml"/utf8>>),
+ _pipe@5 = priv@errors:map_error(
+ _pipe@4,
+ <<"Could not read gleam.toml"/utf8>>
+ ),
+ _pipe@6 = priv@errors:print_error(_pipe@5),
+ priv@errors:assert_ok(_pipe@6)
+ end,
+ Name = begin
+ _pipe@7 = priv@toml:get_string(Gleam_toml, [<<"name"/utf8>>]),
+ _pipe@8 = priv@errors:map_error(
+ _pipe@7,
+ <<"Could not read \"name\" from gleam.toml"/utf8>>
+ ),
+ _pipe@9 = priv@errors:print_error(_pipe@8),
+ priv@errors:assert_ok(_pipe@9)
+ end,
+ Test_main_file = <<<<"test/"/utf8, Name/binary>>/binary,
+ "_test.gleam"/utf8>>,
+ _pipe@12 = case Use_showtime of
+ true ->
+ _pipe@10 = priv@template:render(
+ <<"
+import showtime
+
+pub fn main() {
+ showtime.main()
+}
+"/utf8>>,
+ []
+ ),
+ _pipe@11 = simplifile:write(Test_main_file, _pipe@10),
+ priv@errors:map_messages(
+ _pipe@11,
+ <<"Wrote "/utf8, Test_main_file/binary>>,
+ <<"Could not write to "/utf8, Test_main_file/binary>>
+ );
+
+ false ->
+ {ok, <<"Using existing (gleeunit) "/utf8, Test_main_file/binary>>}
+ end,
+ _pipe@13 = priv@errors:print_result(_pipe@12),
+ priv@errors:assert_ok(_pipe@13),
+ _pipe@17 = case simplifile:is_file(<<".gitignore"/utf8>>) of
+ true ->
+ gleam@result:'try'(
+ begin
+ _pipe@14 = simplifile:read(<<".gitignore"/utf8>>),
+ gleam@result:map_error(
+ _pipe@14,
+ fun(Err) ->
+ <<"Could not read .gitignore: "/utf8,
+ (gleam@string:inspect(Err))/binary>>
+ end
+ )
+ end,
+ fun(Gitignore) ->
+ Aoc_toml_ignored = begin
+ _pipe@15 = gleam@string:split(Gitignore, <<"\n"/utf8>>),
+ gleam@list:find(
+ _pipe@15,
+ fun(Line) -> Line =:= <<"aoc.toml"/utf8>> end
+ )
+ end,
+ case Aoc_toml_ignored of
+ {error, _} ->
+ _pipe@16 = simplifile:append(
+ <<".gitignore"/utf8>>,
+ <<"\naoc.toml"/utf8>>
+ ),
+ priv@errors:map_messages(
+ _pipe@16,
+ <<".gitignore written"/utf8>>,
+ <<"Error when writing .gitignore"/utf8>>
+ );
+
+ {ok, _} ->
+ {ok,
+ <<".gitignore - skipped (already configured)"/utf8>>}
+ end
+ end
+ );
+
+ false ->
+ {error, <<"Could not find .gitignore"/utf8>>}
+ end,
+ priv@errors:print_result(_pipe@17).
diff --git a/aoc2023/build/packages/adglent/src/adglent_ffi.erl b/aoc2023/build/packages/adglent/src/adglent_ffi.erl
new file mode 100644
index 0000000..a6a92e6
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/adglent_ffi.erl
@@ -0,0 +1,12 @@
+-module(adglent_ffi).
+
+-export([get_line/1]).
+
+-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}.
+get_line(Prompt) ->
+ case io:get_line(Prompt) of
+ eof -> {error, eof};
+ {error, _} -> {error, no_data};
+ Data when is_binary(Data) -> {ok, Data};
+ Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)}
+ end.
diff --git a/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam
new file mode 100644
index 0000000..e18bafa
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/aoc_client.gleam
@@ -0,0 +1,37 @@
+import gleam/result.{try}
+import gleam/httpc
+import gleam/http/request
+import gleam/int
+import gleam/string
+
+pub fn get_input(
+ year: String,
+ day: String,
+ session: String,
+) -> Result(String, String) {
+ let url = "https://adventofcode.com/" <> year <> "/day/" <> day <> "/input"
+ use request <- try(
+ request.to(url)
+ |> result.map_error(fn(error) {
+ "Could not create request for \"" <> url <> "\": " <> string.inspect(
+ error,
+ )
+ }),
+ )
+
+ // Send the HTTP request to the server
+ use response <- try(
+ request
+ |> request.prepend_header("Accept", "application/json")
+ |> request.prepend_header("Cookie", "session=" <> session <> ";")
+ |> httpc.send
+ |> result.map_error(fn(error) {
+ "Error when requesting \"" <> url <> "\": " <> string.inspect(error)
+ }),
+ )
+
+ case response.status {
+ status if status >= 200 && status < 300 -> Ok(response.body)
+ status -> Error(int.to_string(status) <> " - " <> response.body)
+ }
+}
diff --git a/aoc2023/build/packages/adglent/src/priv/errors.gleam b/aoc2023/build/packages/adglent/src/priv/errors.gleam
new file mode 100644
index 0000000..14c35ca
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/errors.gleam
@@ -0,0 +1,54 @@
+import gleam/result
+import gleam/string
+import gleam/io
+
+pub fn map_messages(
+ result: Result(a, b),
+ success_message: String,
+ error_message: String,
+) -> Result(String, String) {
+ result
+ |> result.map_error(fn(error) {
+ "Error - " <> error_message <> ": " <> string.inspect(error)
+ })
+ |> result.replace(success_message)
+}
+
+pub fn map_error(
+ result: Result(a, b),
+ error_message: String,
+) -> Result(a, String) {
+ result
+ |> result.map_error(fn(error) {
+ error_message <> ": " <> string.inspect(error)
+ })
+}
+
+pub fn print_result(result: Result(String, String)) {
+ result
+ |> result.unwrap_both
+ |> io.println
+ result
+}
+
+pub fn print_error(result: Result(a, String)) {
+ result
+ |> result.map_error(fn(err) {
+ io.println(err)
+ err
+ })
+}
+
+pub fn assert_ok(result: Result(a, String)) {
+ let assert Ok(value) =
+ result
+ |> result.map_error(fn(err) {
+ halt(1)
+ err
+ })
+ value
+}
+
+@target(erlang)
+@external(erlang, "erlang", "halt")
+fn halt(a: Int) -> Nil
diff --git a/aoc2023/build/packages/adglent/src/priv/prompt.gleam b/aoc2023/build/packages/adglent/src/priv/prompt.gleam
new file mode 100644
index 0000000..6cee35a
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/prompt.gleam
@@ -0,0 +1,38 @@
+import gleam/result
+import gleam/string
+
+pub fn confirm(message: String, auto_accept: Bool) -> Bool {
+ auto_accept || case
+ get_line(message <> "? (Y/N): ")
+ |> result.unwrap("n")
+ |> string.trim()
+ {
+ "Y" | "y" -> True
+ _ -> False
+ }
+}
+
+pub fn value(message: String, default: String, auto_accept: Bool) -> String {
+ case get_value_of_default(message, default, auto_accept) {
+ "" -> default
+ value -> value
+ }
+}
+
+fn get_value_of_default(message: String, default: String, auto_accept: Bool) {
+ case auto_accept {
+ True -> default
+ False ->
+ get_line(message <> "? (" <> default <> "): ")
+ |> result.unwrap("")
+ |> string.trim()
+ }
+}
+
+pub type GetLineError {
+ Eof
+ NoData
+}
+
+@external(erlang, "adglent_ffi", "get_line")
+pub fn get_line(prompt prompt: String) -> Result(String, GetLineError)
diff --git a/aoc2023/build/packages/adglent/src/priv/template.gleam b/aoc2023/build/packages/adglent/src/priv/template.gleam
new file mode 100644
index 0000000..e946888
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/template.gleam
@@ -0,0 +1,18 @@
+import gleam/list
+import gleam/string
+
+pub fn render(
+ template: String,
+ substitutions: List(#(String, String)),
+) -> String {
+ substitutions
+ |> list.fold(
+ template,
+ fn(template, substitution) {
+ let #(name, value) = substitution
+ template
+ |> string.replace("{{ " <> name <> " }}", value)
+ },
+ )
+ |> string.trim <> "\n"
+}
diff --git a/aoc2023/build/packages/adglent/src/priv/templates/solution.gleam b/aoc2023/build/packages/adglent/src/priv/templates/solution.gleam
new file mode 100644
index 0000000..96085c3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/templates/solution.gleam
@@ -0,0 +1,27 @@
+pub const template = "
+import adglent.{First, Second}
+import gleam/io
+
+pub fn part1(input: String) {
+ todo as \"Implement solution to part 1\"
+}
+
+pub fn part2(input: String) {
+ todo as \"Implement solution to part 2\"
+}
+
+pub fn main() {
+ let assert Ok(part) = adglent.get_part()
+ let assert Ok(input) = adglent.get_input(\"{{ day }}\")
+ case part {
+ First ->
+ part1(input)
+ |> adglent.inspect
+ |> io.println
+ Second ->
+ part2(input)
+ |> adglent.inspect
+ |> io.println
+ }
+}
+"
diff --git a/aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam b/aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam
new file mode 100644
index 0000000..27548d3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/templates/test_main.gleam
@@ -0,0 +1,7 @@
+pub const template = "
+import showtime
+
+pub fn main() {
+ showtime.main()
+}
+"
diff --git a/aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam b/aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam
new file mode 100644
index 0000000..a1d56f6
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/templates/testfile_gleeunit.gleam
@@ -0,0 +1,41 @@
+pub const template = "
+import gleam/list
+import gleeunit/should
+import adglent.{type Example, Example}
+import day{{ day }}/solve
+
+type Problem1AnswerType =
+ String
+
+type Problem2AnswerType =
+ String
+
+/// Add examples for part 1 here:
+/// ```gleam
+///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part1_examples: List(Example(Problem1AnswerType)) = []
+
+/// Add examples for part 2 here:
+/// ```gleam
+///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part2_examples: List(Example(Problem2AnswerType)) = []
+
+pub fn part1_test() {
+ part1_examples
+ |> should.not_equal([])
+ use example <- list.map(part1_examples)
+ solve.part1(example.input)
+ |> should.equal(example.answer)
+}
+
+pub fn part2_test() {
+ part2_examples
+ |> should.not_equal([])
+ use example <- list.map(part2_examples)
+ solve.part2(example.input)
+ |> should.equal(example.answer)
+}
+
+"
diff --git a/aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam b/aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam
new file mode 100644
index 0000000..699feb2
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/templates/testfile_showtime.gleam
@@ -0,0 +1,41 @@
+pub const template = "
+import gleam/list
+import showtime/tests/should
+import adglent.{type Example, Example}
+import day{{ day }}/solve
+
+type Problem1AnswerType =
+ String
+
+type Problem2AnswerType =
+ String
+
+/// Add examples for part 1 here:
+/// ```gleam
+///const part1_examples: List(Example(Problem1AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part1_examples: List(Example(Problem1AnswerType)) = []
+
+/// Add examples for part 2 here:
+/// ```gleam
+///const part2_examples: List(Example(Problem2AnswerType)) = [Example(\"some input\", \"\")]
+/// ```
+const part2_examples: List(Example(Problem2AnswerType)) = []
+
+pub fn part1_test() {
+ part1_examples
+ |> should.not_equal([])
+ use example <- list.map(part1_examples)
+ solve.part1(example.input)
+ |> should.equal(example.answer)
+}
+
+pub fn part2_test() {
+ part2_examples
+ |> should.not_equal([])
+ use example <- list.map(part2_examples)
+ solve.part2(example.input)
+ |> should.equal(example.answer)
+}
+
+"
diff --git a/aoc2023/build/packages/adglent/src/priv/toml.gleam b/aoc2023/build/packages/adglent/src/priv/toml.gleam
new file mode 100644
index 0000000..7042833
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv/toml.gleam
@@ -0,0 +1,52 @@
+import tom
+import gleam/result
+
+pub type TomError {
+ TomParseError(error: tom.ParseError)
+ TomGetError(error: tom.GetError)
+}
+
+pub fn get_string(
+ toml_content: String,
+ key_path: List(String),
+) -> Result(String, TomError) {
+ use toml <- result.try(
+ tom.parse(toml_content <> "\n")
+ |> result.map_error(TomParseError),
+ )
+ use value <- result.try(
+ tom.get_string(toml, key_path)
+ |> result.map_error(TomGetError),
+ )
+ Ok(value)
+}
+
+pub fn get_bool(
+ toml_content: String,
+ key_path: List(String),
+) -> Result(Bool, TomError) {
+ use toml <- result.try(
+ tom.parse(toml_content <> "\n")
+ |> result.map_error(TomParseError),
+ )
+ use value <- result.try(
+ tom.get_bool(toml, key_path)
+ |> result.map_error(TomGetError),
+ )
+ Ok(value)
+}
+
+pub fn get_int(
+ toml_content: String,
+ key_path: List(String),
+) -> Result(Int, TomError) {
+ use toml <- result.try(
+ tom.parse(toml_content <> "\n")
+ |> result.map_error(TomParseError),
+ )
+ use value <- result.try(
+ tom.get_int(toml, key_path)
+ |> result.map_error(TomGetError),
+ )
+ Ok(value)
+}
diff --git a/aoc2023/build/packages/adglent/src/priv@aoc_client.erl b/aoc2023/build/packages/adglent/src/priv@aoc_client.erl
new file mode 100644
index 0000000..1acb9b5
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@aoc_client.erl
@@ -0,0 +1,61 @@
+-module(priv@aoc_client).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_input/3]).
+
+-spec get_input(binary(), binary(), binary()) -> {ok, binary()} |
+ {error, binary()}.
+get_input(Year, Day, Session) ->
+ Url = <<<<<<<<"https://adventofcode.com/"/utf8, Year/binary>>/binary,
+ "/day/"/utf8>>/binary,
+ Day/binary>>/binary,
+ "/input"/utf8>>,
+ gleam@result:'try'(
+ begin
+ _pipe = gleam@http@request:to(Url),
+ gleam@result:map_error(
+ _pipe,
+ fun(Error) ->
+ <<<<<<"Could not create request for \""/utf8, Url/binary>>/binary,
+ "\": "/utf8>>/binary,
+ (gleam@string:inspect(Error))/binary>>
+ end
+ )
+ end,
+ fun(Request) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = Request,
+ _pipe@2 = gleam@http@request:prepend_header(
+ _pipe@1,
+ <<"Accept"/utf8>>,
+ <<"application/json"/utf8>>
+ ),
+ _pipe@3 = gleam@http@request:prepend_header(
+ _pipe@2,
+ <<"Cookie"/utf8>>,
+ <<<<"session="/utf8, Session/binary>>/binary, ";"/utf8>>
+ ),
+ _pipe@4 = gleam@httpc:send(_pipe@3),
+ gleam@result:map_error(
+ _pipe@4,
+ fun(Error@1) ->
+ <<<<<<"Error when requesting \""/utf8, Url/binary>>/binary,
+ "\": "/utf8>>/binary,
+ (gleam@string:inspect(Error@1))/binary>>
+ end
+ )
+ end,
+ fun(Response) -> case erlang:element(2, Response) of
+ Status when (Status >= 200) andalso (Status < 300) ->
+ {ok, erlang:element(4, Response)};
+
+ Status@1 ->
+ {error,
+ <<<<(gleam@int:to_string(Status@1))/binary,
+ " - "/utf8>>/binary,
+ (erlang:element(4, Response))/binary>>}
+ end end
+ )
+ end
+ ).
diff --git a/aoc2023/build/packages/adglent/src/priv@errors.erl b/aoc2023/build/packages/adglent/src/priv@errors.erl
new file mode 100644
index 0000000..978c675
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@errors.erl
@@ -0,0 +1,74 @@
+-module(priv@errors).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([map_messages/3, map_error/2, print_result/1, print_error/1, assert_ok/1]).
+
+-spec map_messages({ok, any()} | {error, any()}, binary(), binary()) -> {ok,
+ binary()} |
+ {error, binary()}.
+map_messages(Result, Success_message, Error_message) ->
+ _pipe = Result,
+ _pipe@1 = gleam@result:map_error(
+ _pipe,
+ fun(Error) ->
+ <<<<<<"Error - "/utf8, Error_message/binary>>/binary, ": "/utf8>>/binary,
+ (gleam@string:inspect(Error))/binary>>
+ end
+ ),
+ gleam@result:replace(_pipe@1, Success_message).
+
+-spec map_error({ok, NIB} | {error, any()}, binary()) -> {ok, NIB} |
+ {error, binary()}.
+map_error(Result, Error_message) ->
+ _pipe = Result,
+ gleam@result:map_error(
+ _pipe,
+ fun(Error) ->
+ <<<<Error_message/binary, ": "/utf8>>/binary,
+ (gleam@string:inspect(Error))/binary>>
+ end
+ ).
+
+-spec print_result({ok, binary()} | {error, binary()}) -> {ok, binary()} |
+ {error, binary()}.
+print_result(Result) ->
+ _pipe = Result,
+ _pipe@1 = gleam@result:unwrap_both(_pipe),
+ gleam@io:println(_pipe@1),
+ Result.
+
+-spec print_error({ok, NIK} | {error, binary()}) -> {ok, NIK} |
+ {error, binary()}.
+print_error(Result) ->
+ _pipe = Result,
+ gleam@result:map_error(
+ _pipe,
+ fun(Err) ->
+ gleam@io:println(Err),
+ Err
+ end
+ ).
+
+-spec assert_ok({ok, NIO} | {error, binary()}) -> NIO.
+assert_ok(Result) ->
+ _assert_subject = begin
+ _pipe = Result,
+ gleam@result:map_error(
+ _pipe,
+ fun(Err) ->
+ erlang:halt(1),
+ Err
+ end
+ )
+ end,
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"priv/errors"/utf8>>,
+ function => <<"assert_ok"/utf8>>,
+ line => 43})
+ end,
+ Value.
diff --git a/aoc2023/build/packages/adglent/src/priv@prompt.erl b/aoc2023/build/packages/adglent/src/priv@prompt.erl
new file mode 100644
index 0000000..0277f14
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@prompt.erl
@@ -0,0 +1,53 @@
+-module(priv@prompt).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_line/1, confirm/2, value/3]).
+-export_type([get_line_error/0]).
+
+-type get_line_error() :: eof | no_data.
+
+-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}.
+get_line(Prompt) ->
+ adglent_ffi:get_line(Prompt).
+
+-spec confirm(binary(), boolean()) -> boolean().
+confirm(Message, Auto_accept) ->
+ Auto_accept orelse case begin
+ _pipe = adglent_ffi:get_line(<<Message/binary, "? (Y/N): "/utf8>>),
+ _pipe@1 = gleam@result:unwrap(_pipe, <<"n"/utf8>>),
+ gleam@string:trim(_pipe@1)
+ end of
+ <<"Y"/utf8>> ->
+ true;
+
+ <<"y"/utf8>> ->
+ true;
+
+ _ ->
+ false
+ end.
+
+-spec get_value_of_default(binary(), binary(), boolean()) -> binary().
+get_value_of_default(Message, Default, Auto_accept) ->
+ case Auto_accept of
+ true ->
+ Default;
+
+ false ->
+ _pipe = adglent_ffi:get_line(
+ <<<<<<Message/binary, "? ("/utf8>>/binary, Default/binary>>/binary,
+ "): "/utf8>>
+ ),
+ _pipe@1 = gleam@result:unwrap(_pipe, <<""/utf8>>),
+ gleam@string:trim(_pipe@1)
+ end.
+
+-spec value(binary(), binary(), boolean()) -> binary().
+value(Message, Default, Auto_accept) ->
+ case get_value_of_default(Message, Default, Auto_accept) of
+ <<""/utf8>> ->
+ Default;
+
+ Value ->
+ Value
+ end.
diff --git a/aoc2023/build/packages/adglent/src/priv@template.erl b/aoc2023/build/packages/adglent/src/priv@template.erl
new file mode 100644
index 0000000..6a5d0bf
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@template.erl
@@ -0,0 +1,25 @@
+-module(priv@template).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([render/2]).
+
+-spec render(binary(), list({binary(), binary()})) -> binary().
+render(Template, Substitutions) ->
+ <<(begin
+ _pipe = Substitutions,
+ _pipe@2 = gleam@list:fold(
+ _pipe,
+ Template,
+ fun(Template@1, Substitution) ->
+ {Name, Value} = Substitution,
+ _pipe@1 = Template@1,
+ gleam@string:replace(
+ _pipe@1,
+ <<<<"{{ "/utf8, Name/binary>>/binary, " }}"/utf8>>,
+ Value
+ )
+ end
+ ),
+ gleam@string:trim(_pipe@2)
+ end)/binary,
+ "\n"/utf8>>.
diff --git a/aoc2023/build/packages/adglent/src/priv@templates@solution.erl b/aoc2023/build/packages/adglent/src/priv@templates@solution.erl
new file mode 100644
index 0000000..7e36387
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@templates@solution.erl
@@ -0,0 +1 @@
+-module(priv@templates@solution).
diff --git a/aoc2023/build/packages/adglent/src/priv@templates@test_main.erl b/aoc2023/build/packages/adglent/src/priv@templates@test_main.erl
new file mode 100644
index 0000000..ca6b127
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@templates@test_main.erl
@@ -0,0 +1 @@
+-module(priv@templates@test_main).
diff --git a/aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl b/aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl
new file mode 100644
index 0000000..2f5a41e
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@templates@testfile_gleeunit.erl
@@ -0,0 +1 @@
+-module(priv@templates@testfile_gleeunit).
diff --git a/aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl b/aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl
new file mode 100644
index 0000000..bbbc8b2
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@templates@testfile_showtime.erl
@@ -0,0 +1 @@
+-module(priv@templates@testfile_showtime).
diff --git a/aoc2023/build/packages/adglent/src/priv@toml.erl b/aoc2023/build/packages/adglent/src/priv@toml.erl
new file mode 100644
index 0000000..6c41fbf
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/priv@toml.erl
@@ -0,0 +1,83 @@
+-module(priv@toml).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_string/2, get_bool/2, get_int/2]).
+-export_type([tom_error/0]).
+
+-type tom_error() :: {tom_parse_error, tom:parse_error()} |
+ {tom_get_error, tom:get_error()}.
+
+-spec get_string(binary(), list(binary())) -> {ok, binary()} |
+ {error, tom_error()}.
+get_string(Toml_content, Key_path) ->
+ gleam@result:'try'(
+ begin
+ _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>),
+ gleam@result:map_error(
+ _pipe,
+ fun(Field@0) -> {tom_parse_error, Field@0} end
+ )
+ end,
+ fun(Toml) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = tom:get_string(Toml, Key_path),
+ gleam@result:map_error(
+ _pipe@1,
+ fun(Field@0) -> {tom_get_error, Field@0} end
+ )
+ end,
+ fun(Value) -> {ok, Value} end
+ )
+ end
+ ).
+
+-spec get_bool(binary(), list(binary())) -> {ok, boolean()} |
+ {error, tom_error()}.
+get_bool(Toml_content, Key_path) ->
+ gleam@result:'try'(
+ begin
+ _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>),
+ gleam@result:map_error(
+ _pipe,
+ fun(Field@0) -> {tom_parse_error, Field@0} end
+ )
+ end,
+ fun(Toml) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = tom:get_bool(Toml, Key_path),
+ gleam@result:map_error(
+ _pipe@1,
+ fun(Field@0) -> {tom_get_error, Field@0} end
+ )
+ end,
+ fun(Value) -> {ok, Value} end
+ )
+ end
+ ).
+
+-spec get_int(binary(), list(binary())) -> {ok, integer()} |
+ {error, tom_error()}.
+get_int(Toml_content, Key_path) ->
+ gleam@result:'try'(
+ begin
+ _pipe = tom:parse(<<Toml_content/binary, "\n"/utf8>>),
+ gleam@result:map_error(
+ _pipe,
+ fun(Field@0) -> {tom_parse_error, Field@0} end
+ )
+ end,
+ fun(Toml) ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = tom:get_int(Toml, Key_path),
+ gleam@result:map_error(
+ _pipe@1,
+ fun(Field@0) -> {tom_get_error, Field@0} end
+ )
+ end,
+ fun(Value) -> {ok, Value} end
+ )
+ end
+ ).
diff --git a/aoc2023/build/packages/adglent/src/showtime.erl b/aoc2023/build/packages/adglent/src/showtime.erl
new file mode 100644
index 0000000..721bad4
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime.erl
@@ -0,0 +1,155 @@
+-module(showtime).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec mk_runner(
+ fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> OBY),
+ glint:command_input()
+) -> OBY.
+mk_runner(Func, Command) ->
+ _assert_subject = begin
+ _pipe = erlang:element(3, Command),
+ _pipe@1 = glint@flag:get_strings(_pipe, <<"modules"/utf8>>),
+ gleam@result:map(_pipe@1, fun(Modules) -> case Modules of
+ [] ->
+ none;
+
+ Modules@1 ->
+ {some, Modules@1}
+ end end)
+ end,
+ {ok, Module_list} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime"/utf8>>,
+ function => <<"mk_runner"/utf8>>,
+ line => 91})
+ end,
+ _assert_subject@1 = begin
+ _pipe@2 = erlang:element(3, Command),
+ glint@flag:get_strings(_pipe@2, <<"ignore"/utf8>>)
+ end,
+ {ok, Ignore_tags} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"showtime"/utf8>>,
+ function => <<"mk_runner"/utf8>>,
+ line => 100})
+ end,
+ _assert_subject@2 = begin
+ _pipe@3 = erlang:element(3, Command),
+ _pipe@4 = glint@flag:get_string(_pipe@3, <<"capture"/utf8>>),
+ _pipe@5 = gleam@result:map(
+ _pipe@4,
+ fun(Arg) -> gleam@string:lowercase(Arg) end
+ ),
+ gleam@result:map(_pipe@5, fun(Arg@1) -> case Arg@1 of
+ <<"no"/utf8>> ->
+ no;
+
+ <<"yes"/utf8>> ->
+ yes;
+
+ <<"mixed"/utf8>> ->
+ mixed
+ end end)
+ end,
+ {ok, Capture_output} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"showtime"/utf8>>,
+ function => <<"mk_runner"/utf8>>,
+ line => 104})
+ end,
+ Func(Module_list, Ignore_tags, Capture_output).
+
+-spec start_with_args(
+ list(binary()),
+ fun((gleam@option:option(list(binary())), list(binary()), showtime@internal@common@cli:capture()) -> any())
+) -> nil.
+start_with_args(Args, Func) ->
+ Modules_flag = begin
+ _pipe = glint@flag:string_list(),
+ _pipe@1 = glint@flag:default(_pipe, []),
+ glint@flag:description(
+ _pipe@1,
+ <<"Run only tests in the modules in this list"/utf8>>
+ )
+ end,
+ Ignore_flag = begin
+ _pipe@2 = glint@flag:string_list(),
+ _pipe@3 = glint@flag:default(_pipe@2, []),
+ glint@flag:description(
+ _pipe@3,
+ <<"Ignore tests that are have tags matching a tag in this list"/utf8>>
+ )
+ end,
+ Capture_flag = begin
+ _pipe@4 = glint@flag:string(),
+ _pipe@5 = glint@flag:default(_pipe@4, <<"no"/utf8>>),
+ _pipe@6 = glint@flag:constraint(
+ _pipe@5,
+ glint@flag@constraint:one_of(
+ [<<"yes"/utf8>>, <<"no"/utf8>>, <<"mixed"/utf8>>]
+ )
+ ),
+ glint@flag:description(
+ _pipe@6,
+ <<"Capture output: no (default) - output when tests are run, yes - output is captured and shown in report, mixed - output when run and in report"/utf8>>
+ )
+ end,
+ _pipe@7 = glint:new(),
+ _pipe@12 = glint:add(
+ _pipe@7,
+ [],
+ begin
+ _pipe@8 = glint:command(
+ fun(_capture) -> mk_runner(Func, _capture) end
+ ),
+ _pipe@9 = glint:flag(_pipe@8, <<"modules"/utf8>>, Modules_flag),
+ _pipe@10 = glint:flag(_pipe@9, <<"ignore"/utf8>>, Ignore_flag),
+ _pipe@11 = glint:flag(_pipe@10, <<"capture"/utf8>>, Capture_flag),
+ glint:description(_pipe@11, <<"Runs test"/utf8>>)
+ end
+ ),
+ _pipe@13 = glint:with_pretty_help(_pipe@12, glint:default_pretty_help()),
+ glint:run(_pipe@13, Args).
+
+-spec main() -> nil.
+main() ->
+ start_with_args(
+ gleam@erlang:start_arguments(),
+ fun(Module_list, Ignore_tags, Capture) ->
+ Test_event_handler = showtime@internal@erlang@event_handler:start(),
+ Test_module_handler = showtime@internal@erlang@module_handler:start(
+ Test_event_handler,
+ fun showtime@internal@erlang@discover:collect_test_functions/1,
+ fun showtime@internal@erlang@runner:run_test_suite/4,
+ Ignore_tags,
+ Capture
+ ),
+ Test_event_handler(start_test_run),
+ Modules = showtime@internal@erlang@discover:collect_modules(
+ Test_module_handler,
+ Module_list
+ ),
+ Test_event_handler(
+ {end_test_run,
+ begin
+ _pipe = Modules,
+ gleam@list:length(_pipe)
+ end}
+ ),
+ nil
+ end
+ ).
diff --git a/aoc2023/build/packages/adglent/src/showtime.gleam b/aoc2023/build/packages/adglent/src/showtime.gleam
new file mode 100644
index 0000000..f0401c9
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime.gleam
@@ -0,0 +1,116 @@
+import glint.{type CommandInput, flag}
+import glint/flag
+import glint/flag/constraint.{one_of}
+import gleam/result
+import gleam/string
+import showtime/internal/common/cli.{Mixed, No, Yes}
+@target(erlang)
+import gleam/list
+@target(erlang)
+import gleam/option.{None, Some}
+@target(erlang)
+import gleam/erlang.{start_arguments}
+@target(erlang)
+import showtime/internal/common/test_suite.{EndTestRun, StartTestRun}
+@target(erlang)
+import showtime/internal/erlang/event_handler
+@target(erlang)
+import showtime/internal/erlang/module_handler
+@target(erlang)
+import showtime/internal/erlang/runner
+@target(erlang)
+import showtime/internal/erlang/discover.{
+ collect_modules, collect_test_functions,
+}
+
+// @target(javascript)
+// import gleam/io
+
+@target(erlang)
+pub fn main() {
+ use module_list, ignore_tags, capture <- start_with_args(start_arguments())
+ // Start event handler which will collect test-results and eventually
+ // print test report
+ let test_event_handler = event_handler.start()
+ // Start module handler which receives msg about modules to test and
+ // runs the test-suite for the module
+ let test_module_handler =
+ module_handler.start(
+ test_event_handler,
+ collect_test_functions,
+ runner.run_test_suite,
+ ignore_tags,
+ capture,
+ )
+
+ test_event_handler(StartTestRun)
+ // Collect modules and notify the module handler to start the test-suites
+ let modules = collect_modules(test_module_handler, module_list)
+ test_event_handler(EndTestRun(
+ modules
+ |> list.length(),
+ ))
+ Nil
+}
+
+fn start_with_args(args, func) {
+ let modules_flag =
+ flag.string_list()
+ |> flag.default([])
+ |> flag.description("Run only tests in the modules in this list")
+
+ let ignore_flag =
+ flag.string_list()
+ |> flag.default([])
+ |> flag.description(
+ "Ignore tests that are have tags matching a tag in this list",
+ )
+
+ let capture_flag =
+ flag.string()
+ |> flag.default("no")
+ |> flag.constraint(one_of(["yes", "no", "mixed"]))
+ |> flag.description(
+ "Capture output: no (default) - output when tests are run, yes - output is captured and shown in report, mixed - output when run and in report",
+ )
+
+ glint.new()
+ |> glint.add(
+ at: [],
+ do: glint.command(mk_runner(func, _))
+ |> glint.flag("modules", modules_flag)
+ |> glint.flag("ignore", ignore_flag)
+ |> glint.flag("capture", capture_flag)
+ |> glint.description("Runs test"),
+ )
+ |> glint.with_pretty_help(glint.default_pretty_help())
+ |> glint.run(args)
+}
+
+fn mk_runner(func, command: CommandInput) {
+ let assert Ok(module_list) =
+ command.flags
+ |> flag.get_strings("modules")
+ |> result.map(fn(modules) {
+ case modules {
+ [] -> None
+ modules -> Some(modules)
+ }
+ })
+ let assert Ok(ignore_tags) =
+ command.flags
+ |> flag.get_strings("ignore")
+
+ let assert Ok(capture_output) =
+ command.flags
+ |> flag.get_string("capture")
+ |> result.map(fn(arg) { string.lowercase(arg) })
+ |> result.map(fn(arg) {
+ case arg {
+ "no" -> No
+ "yes" -> Yes
+ "mixed" -> Mixed
+ }
+ })
+ func(module_list, ignore_tags, capture_output)
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam
new file mode 100644
index 0000000..1c03211
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/cli.gleam
@@ -0,0 +1,5 @@
+pub type Capture {
+ Yes
+ No
+ Mixed
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam
new file mode 100644
index 0000000..b90af14
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/common_event_handler.gleam
@@ -0,0 +1,101 @@
+import gleam/map.{type Map}
+import showtime/internal/common/test_suite.{
+ type TestEvent, type TestRun, CompletedTestRun, EndTest, EndTestRun,
+ EndTestSuite, OngoingTestRun, StartTest, StartTestRun, StartTestSuite,
+}
+
+pub type TestState {
+ NotStarted
+ Running
+ Finished(num_modules: Int)
+}
+
+pub type HandlerState {
+ HandlerState(
+ test_state: TestState,
+ num_done: Int,
+ events: Map(String, Map(String, TestRun)),
+ )
+}
+
+// This is the common event-handler (shared between erlang/JS targets)
+// The main strategy is to collect the test-results in a map of maps:
+// module_name ->
+// test_name -> test_result
+// It will also keep track of if it is running (i.e. did it receive the EndTestRun)
+// so that the caller can determine when to print test-results
+pub fn handle_event(
+ msg: TestEvent,
+ system_time: fn() -> Int,
+ state: HandlerState,
+) {
+ let test_state = state.test_state
+ let num_done = state.num_done
+ let events = state.events
+ let #(updated_test_state, updated_num_done, updated_events) = case msg {
+ StartTestRun -> #(Running, num_done, events)
+ StartTestSuite(module) -> {
+ let maybe_module_events = map.get(events, module.name)
+ let new_events = case maybe_module_events {
+ Ok(_) -> events
+ Error(_) ->
+ events
+ |> map.insert(module.name, map.new())
+ }
+ #(test_state, num_done, new_events)
+ }
+ StartTest(module, test) -> {
+ let current_time = system_time()
+ let maybe_module_events = map.get(events, module.name)
+ let new_events = case maybe_module_events {
+ Ok(module_events) -> {
+ let maybe_test_event = map.get(module_events, test.name)
+ case maybe_test_event {
+ Error(_) ->
+ events
+ |> map.insert(
+ module.name,
+ module_events
+ |> map.insert(test.name, OngoingTestRun(test, current_time)),
+ )
+ Ok(_) -> events
+ }
+ }
+ Error(_) -> events
+ }
+ #(test_state, num_done, new_events)
+ }
+ EndTest(module, test, result) -> {
+ let current_time = system_time()
+ let maybe_module_events = map.get(events, module.name)
+ let new_events = case maybe_module_events {
+ Ok(module_events) -> {
+ let maybe_test_run =
+ module_events
+ |> map.get(test.name)
+ let updated_module_events = case maybe_test_run {
+ Ok(OngoingTestRun(test_function, started_at)) ->
+ module_events
+ |> map.insert(
+ test.name,
+ CompletedTestRun(
+ test_function,
+ current_time - started_at,
+ result,
+ ),
+ )
+ Error(_) -> module_events
+ }
+ events
+ |> map.insert(module.name, updated_module_events)
+ }
+ Error(_) -> events
+ }
+ #(test_state, num_done, new_events)
+ }
+ EndTestSuite(_) -> #(test_state, num_done + 1, events)
+ EndTestRun(num_modules) -> #(Finished(num_modules), num_done, events)
+ _ -> #(Running, num_done, events)
+ }
+ HandlerState(updated_test_state, updated_num_done, updated_events)
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam
new file mode 100644
index 0000000..a1d6bd9
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_result.gleam
@@ -0,0 +1,119 @@
+import gleam/dynamic.{type Dynamic}
+import gleam/map.{type Map}
+
+// These are all the types used for test-results
+// NOTE: These are heavily used in the erlang/js ffi:s
+// so any changes here are likely to break the ffi:s unless
+// the corresponding change is introduced there
+//
+// Futhermore this has some erlang related names that should
+// probably be cleaned up, but it is used by both the ffi:s
+
+// Currently only one reason, but could be possible to support
+// more reasons in the future
+pub type IgnoreReason {
+ Ignore
+}
+
+// This is the return value from running the test-function
+// or ignored if the test was ignored
+pub type TestReturn {
+ TestFunctionReturn(value: Dynamic, output_buffer: List(String))
+ Ignored(reason: IgnoreReason)
+}
+
+// All data about an exception in the test function is captured
+// in this type.
+// This is also where the data about the assertions will end up (in reason)
+pub type Exception {
+ ErlangException(
+ class: Class,
+ reason: Reason,
+ stacktrace: TraceList,
+ output_buffer: List(String),
+ )
+}
+
+// Alias for the test-result which is either a TestResult (passed test, ignored or a test-definition)
+// or an Exception (failed test)
+pub type TestResult =
+ Result(TestReturn, Exception)
+
+// Reason is either an assert equal (which is if the error was produced by gleeunit should)
+// TODO: Add other asserts
+// or it is a gleam error meaning that is was produced by showtime should
+// TODO: Rename GleamError to ShowtimeError
+pub type Reason {
+ AssertEqual(details: List(ReasonDetail))
+ AssertNotEqual(details: List(ReasonDetail))
+ AssertMatch(details: List(ReasonDetail))
+ GleamError(details: GleamErrorDetail)
+ GleamAssert(value: Dynamic, line_no: Int)
+ GenericException(value: Dynamic)
+}
+
+// ReasonDetail is the union-type used in erlang-exceptions where the reason
+// is a list of such details
+pub type ReasonDetail {
+ Module(name: String)
+ ReasonLine(line_no: Int)
+ Expression(expression: String)
+ Expected(value: Dynamic)
+ Value(value: Dynamic)
+ Pattern(pattern: String)
+}
+
+// Gleam error detail is produced by showtime should and will hold all the information
+// about the assertion (both expected and got)
+pub type GleamErrorDetail {
+ LetAssert(
+ module: String,
+ function: String,
+ line_no: Int,
+ message: String,
+ value: Dynamic,
+ )
+}
+
+// Class is a part of standard erlang exceptions, but also used on js-side
+// TODO: Extend to include a JS specific constructor
+pub type Class {
+ ErlangError
+ Exit
+ Throw
+}
+
+// The trace list is part of the standard erlang exception, but is also
+// emulated on js-side.
+// TODO: Maybe we need a js-version that contain some js-specific trace-elements
+pub type TraceList {
+ TraceList(traces: List(Trace))
+}
+
+// Trace are the elements in the trace list in an erlang exception
+// TODO: Maybe add a js-specific trace (since arity is not really a js attribute)
+pub type Trace {
+ Trace(function: String, arity: Arity, extra_info: List(ExtraInfo))
+ TraceModule(
+ module: String,
+ function: String,
+ arity: Arity,
+ extra_info: List(ExtraInfo),
+ )
+}
+
+// Extra info holds information about the file and line
+// as well as some dynamic data in a map
+// This is currently not used in the reporter
+pub type ExtraInfo {
+ ErrorInfo(error_info: Map(Dynamic, Dynamic))
+ File(filename: String)
+ Line(line_no: Int)
+}
+
+// Arity is the erlang type for arity
+// Can be either a number, or a list of arguments
+pub type Arity {
+ Num(arity: Int)
+ ArgList(arg_list: List(Dynamic))
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam
new file mode 100644
index 0000000..eb58d64
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/common/test_suite.gleam
@@ -0,0 +1,63 @@
+import gleam/option.{type Option}
+import showtime/internal/common/test_result.{type TestResult}
+import showtime/internal/common/cli.{type Capture}
+
+// The state (and result) of a test function
+pub type TestRun {
+ OngoingTestRun(test_function: TestFunction, started_at: Int)
+ CompletedTestRun(
+ test_function: TestFunction,
+ total_time: Int,
+ result: TestResult,
+ )
+}
+
+// A test module (found by discovery)
+pub type TestModule {
+ TestModule(name: String, path: Option(String))
+}
+
+// A test function
+pub type TestFunction {
+ TestFunction(name: String)
+}
+
+// A test suite is a test module together with the test functions
+// that were collected from that module
+pub type TestSuite {
+ TestSuite(module: TestModule, tests: List(TestFunction))
+}
+
+// Test event for the event handler
+pub type TestEvent {
+ StartTestRun
+ StartTestSuite(test_module: TestModule)
+ StartTest(test_module: TestModule, test_function: TestFunction)
+ EndTest(
+ test_module: TestModule,
+ test_function: TestFunction,
+ result: TestResult,
+ )
+ EndTestSuite(test_module: TestModule)
+ EndTestRun(num_modules: Int)
+}
+
+// Interface for the module handler
+pub type TestModuleHandler =
+ fn(TestModule) -> Nil
+
+// Interface for the event handler
+pub type TestEventHandler =
+ fn(TestEvent) -> Nil
+
+// Interface for the module collector
+pub type ModuleCollector =
+ fn(TestModuleHandler) -> List(TestModule)
+
+// Interface for the function collector
+pub type TestFunctionCollector =
+ fn(TestModule) -> TestSuite
+
+// Interface for the test runner
+pub type TestRunner =
+ fn(TestSuite, TestEventHandler, List(String), Capture) -> Nil
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam
new file mode 100644
index 0000000..ecb752d
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/discover.gleam
@@ -0,0 +1,167 @@
+@target(erlang)
+import gleam/io
+@target(erlang)
+import gleam/dynamic.{type Dynamic}
+@target(erlang)
+import gleam/list
+@target(erlang)
+import gleam/string
+@target(erlang)
+import gleam/int
+@target(erlang)
+import gleam/option.{type Option, None, Some}
+@target(erlang)
+import gleam/erlang/atom.{type Atom}
+@target(erlang)
+import showtime/internal/common/test_suite.{
+ type TestModule, type TestModuleHandler, type TestSuite, TestFunction,
+ TestModule, TestSuite,
+}
+import simplifile
+
+// Module collector for erlang
+// Will search the test folder for files ending with _test and notify
+// the module handler about each module it finds
+@target(erlang)
+pub fn collect_modules(
+ test_module_handler: TestModuleHandler,
+ only_modules: Option(List(String)),
+) -> List(TestModule) {
+ collect_modules_in_folder("./test", test_module_handler, only_modules)
+}
+
+@target(erlang)
+fn collect_modules_in_folder(
+ path: String,
+ test_module_handler: TestModuleHandler,
+ only_modules: Option(List(String)),
+) {
+ let module_prefix = get_module_prefix(path)
+ let assert Ok(files) = simplifile.read_directory(path)
+ let test_modules_in_folder =
+ files
+ |> list.filter(string.ends_with(_, "_test.gleam"))
+ |> list.filter_map(fn(test_module_file) {
+ let module_name =
+ module_prefix <> {
+ test_module_file
+ |> string.replace(".gleam", "")
+ }
+ case only_modules {
+ Some(only_modules_list) -> {
+ let module_in_list =
+ only_modules_list
+ |> list.any(fn(only_module_name) {
+ only_module_name == module_name
+ |> string.replace("@", "/")
+ })
+ case module_in_list {
+ True -> {
+ let test_module = TestModule(module_name, Some(test_module_file))
+ test_module_handler(test_module)
+ Ok(test_module)
+ }
+
+ False -> Error(Nil)
+ }
+ }
+ None -> {
+ let test_module = TestModule(module_name, Some(test_module_file))
+ test_module_handler(test_module)
+ Ok(test_module)
+ }
+ }
+ })
+ let test_modules_in_subfolders =
+ files
+ |> list.map(fn(filename) { path <> "/" <> filename })
+ |> list.filter(fn(file) { simplifile.is_directory(file) })
+ |> list.fold(
+ [],
+ fn(modules, subfolder) {
+ modules
+ |> list.append(collect_modules_in_folder(
+ subfolder,
+ test_module_handler,
+ only_modules,
+ ))
+ },
+ )
+ test_modules_in_folder
+ |> list.append(test_modules_in_subfolders)
+}
+
+@target(erlang)
+fn get_module_prefix(path) {
+ let path_without_test =
+ path
+ |> string.replace("./test", "")
+
+ let path_without_leading_slash = case
+ string.starts_with(path_without_test, "/")
+ {
+ True -> string.drop_left(path_without_test, 1)
+ False -> path_without_test
+ }
+ let module_prefix =
+ path_without_leading_slash
+ |> string.replace("/", "@")
+ case string.length(module_prefix) {
+ 0 -> module_prefix
+ _ -> module_prefix <> "@"
+ }
+}
+
+// Test function collector for erlang
+// Uses erlang `apply` to run `module_info` for the test module
+// and collects all the exports ending with _test into a `TestSuite`
+@target(erlang)
+pub fn collect_test_functions(module: TestModule) -> TestSuite {
+ let test_functions: List(#(Atom, Int)) =
+ apply(
+ atom.create_from_string(module.name),
+ atom.create_from_string("module_info"),
+ [dynamic.from(atom.create_from_string("exports"))],
+ )
+ |> dynamic.unsafe_coerce()
+
+ let test_functions_filtered =
+ test_functions
+ |> list.map(fn(entry) {
+ let assert #(name, arity) = entry
+ #(
+ name
+ |> atom.to_string(),
+ arity,
+ )
+ })
+ |> list.filter_map(fn(entry) {
+ let assert #(name, arity) = entry
+ case string.ends_with(name, "_test") {
+ True ->
+ case arity {
+ 0 -> Ok(name)
+ _ -> {
+ io.println(
+ "WARNING: function \"" <> name <> "\" has arity: " <> int.to_string(
+ arity,
+ ) <> " - cannot be used as test (needs to be 0)",
+ )
+ Error("Wrong arity")
+ }
+ }
+ False -> Error("Non matching name")
+ }
+ })
+ |> list.filter(string.ends_with(_, "_test"))
+ |> list.map(fn(function_name) { TestFunction(function_name) })
+ TestSuite(module, test_functions_filtered)
+}
+
+@target(erlang)
+@external(erlang, "erlang", "apply")
+fn apply(
+ module module: Atom,
+ function function: Atom,
+ args args: List(Dynamic),
+) -> Dynamic
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam
new file mode 100644
index 0000000..62a9caf
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/event_handler.gleam
@@ -0,0 +1,91 @@
+@target(erlang)
+import gleam/io
+@target(erlang)
+import gleam/otp/actor.{Continue, Stop}
+@target(erlang)
+import gleam/erlang/process.{type Subject, Normal}
+@target(erlang)
+import gleam/map
+@target(erlang)
+import showtime/internal/common/test_suite.{type TestEvent, EndTestRun}
+@target(erlang)
+import showtime/internal/common/common_event_handler.{
+ Finished, HandlerState, NotStarted, handle_event,
+}
+@target(erlang)
+import showtime/internal/reports/formatter.{create_test_report}
+@target(erlang)
+import gleam/erlang.{Millisecond}
+@target(erlang)
+import gleam/option.{None}
+
+@target(erlang)
+type EventHandlerMessage {
+ EventHandlerMessage(test_event: TestEvent, reply_to: Subject(Int))
+}
+
+// Starts an actor that receives test events and forwards the to the event handler
+// When handler updates the state to `Finished` the actor will wait until handler
+// reports that all modules are done and the stop
+@target(erlang)
+pub fn start() {
+ let assert Ok(subject) =
+ actor.start(
+ #(NotStarted, 0, map.new()),
+ fn(msg: EventHandlerMessage, state) {
+ let EventHandlerMessage(test_event, reply_to) = msg
+ let #(test_state, num_done, events) = state
+ let updated_state =
+ handle_event(
+ test_event,
+ system_time,
+ HandlerState(test_state, num_done, events),
+ )
+ case updated_state {
+ HandlerState(Finished(num_modules), num_done, events) if num_done == num_modules -> {
+ let #(test_report, num_failed) = create_test_report(events)
+ io.println(test_report)
+ process.send(reply_to, num_failed)
+ Stop(Normal)
+ }
+ HandlerState(test_state, num_done, events) ->
+ Continue(#(test_state, num_done, events), None)
+ }
+ },
+ )
+ let parent_subject = process.new_subject()
+
+ let selector =
+ process.new_selector()
+ |> process.selecting(parent_subject, fn(x) { x })
+
+ // Returns a callback that can receive test events
+ fn(test_event: TestEvent) {
+ case test_event {
+ EndTestRun(..) -> {
+ // When EndTestRun has been received the callback will wait until the
+ // actor has stopped
+ // TODO: Use a timeout?
+ process.send(subject, EventHandlerMessage(test_event, parent_subject))
+ let num_failed = process.select_forever(selector)
+ case num_failed > 0 {
+ True -> halt(1)
+ False -> halt(0)
+ }
+ }
+
+ // Normally just send the test event to the actor
+ _ ->
+ process.send(subject, EventHandlerMessage(test_event, parent_subject))
+ }
+ }
+}
+
+@target(erlang)
+@external(erlang, "erlang", "halt")
+fn halt(a: Int) -> Nil
+
+@target(erlang)
+fn system_time() {
+ erlang.system_time(Millisecond)
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam
new file mode 100644
index 0000000..88cc251
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/module_handler.gleam
@@ -0,0 +1,43 @@
+@target(erlang)
+import gleam/otp/actor.{Continue}
+@target(erlang)
+import gleam/erlang/process
+@target(erlang)
+import showtime/internal/common/test_suite.{
+ type TestEventHandler, type TestFunctionCollector, type TestModule,
+ type TestRunner, EndTestSuite, StartTestSuite,
+}
+@target(erlang)
+import showtime/internal/common/cli.{type Capture}
+@target(erlang)
+import gleam/option.{None}
+
+@target(erlang)
+pub fn start(
+ test_event_handler: TestEventHandler,
+ test_function_collector: TestFunctionCollector,
+ run_test_suite: TestRunner,
+ ignore_tags: List(String),
+ capture: Capture,
+) {
+ let assert Ok(subject) =
+ actor.start(
+ Nil,
+ fn(module: TestModule, state) {
+ process.start(
+ fn() {
+ let test_suite = test_function_collector(module)
+ test_event_handler(StartTestSuite(module))
+ run_test_suite(test_suite, test_event_handler, ignore_tags, capture)
+ test_event_handler(EndTestSuite(module))
+ },
+ False,
+ )
+ Continue(state, None)
+ },
+ )
+ fn(test_module: TestModule) {
+ process.send(subject, test_module)
+ Nil
+ }
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam
new file mode 100644
index 0000000..ebbf426
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/erlang/runner.gleam
@@ -0,0 +1,59 @@
+@target(erlang)
+import gleam/list
+@target(erlang)
+import gleam/erlang/atom.{type Atom}
+@target(erlang)
+import showtime/internal/common/test_suite.{
+ type TestEventHandler, type TestSuite, EndTest, StartTest,
+}
+@target(erlang)
+import showtime/internal/common/test_result.{type TestResult}
+@target(erlang)
+import showtime/internal/common/cli.{type Capture}
+
+// Runs all tests in a test suite
+@target(erlang)
+pub fn run_test_suite(
+ test_suite: TestSuite,
+ test_event_handler: TestEventHandler,
+ ignore_tags: List(String),
+ capture: Capture,
+) {
+ test_suite.tests
+ |> list.each(fn(test) {
+ test_event_handler(StartTest(test_suite.module, test))
+ let result =
+ run_test(test_suite.module.name, test.name, ignore_tags, capture)
+ test_event_handler(EndTest(test_suite.module, test, result))
+ })
+}
+
+// Wrapper around the ffi function that converts names to atoms
+@target(erlang)
+pub fn run_test(
+ module_name: String,
+ test_name: String,
+ ignore_tags: List(String),
+ capture: Capture,
+) -> TestResult {
+ let result =
+ run_test_ffi(
+ atom.create_from_string(module_name),
+ atom.create_from_string(test_name),
+ ignore_tags,
+ capture,
+ )
+ result
+}
+
+// Calls ffi for running a test function
+// The ffi will take care of mapping the result and exception to the data-types
+// used in gleam
+@target(erlang)
+@external(erlang, "showtime_ffi", "run_test")
+fn run_test_ffi(
+ module module: Atom,
+ function function: Atom,
+ ignore_tags ignore_tags: List(String),
+ capture capture: Capture,
+) -> TestResult
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam
new file mode 100644
index 0000000..5ccddee
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/compare.gleam
@@ -0,0 +1,42 @@
+import gleam/dynamic.{type Dynamic}
+import gleam/string
+import showtime/internal/reports/styles.{expected_highlight, got_highlight}
+import gap.{compare_lists, compare_strings}
+import gap/styling.{from_comparison, highlight, to_styled_comparison}
+
+pub fn compare(expected: Dynamic, got: Dynamic) -> #(String, String) {
+ let expected_as_list =
+ expected
+ |> dynamic.list(dynamic.dynamic)
+ let got_as_list =
+ got
+ |> dynamic.list(dynamic.dynamic)
+ let expected_as_string =
+ expected
+ |> dynamic.string()
+ let got_as_string =
+ got
+ |> dynamic.string()
+ case expected_as_list, got_as_list, expected_as_string, got_as_string {
+ Ok(expected_list), Ok(got_list), _, _ -> {
+ let comparison =
+ compare_lists(expected_list, got_list)
+ |> from_comparison()
+ |> highlight(expected_highlight, got_highlight, fn(item) { item })
+ |> to_styled_comparison()
+ #(comparison.first, comparison.second)
+ }
+ _, _, Ok(expected_string), Ok(got_string) -> {
+ let comparison =
+ compare_strings(expected_string, got_string)
+ |> from_comparison()
+ |> highlight(expected_highlight, got_highlight, fn(item) { item })
+ |> to_styled_comparison()
+ #(comparison.first, comparison.second)
+ }
+ _, _, _, _ -> #(
+ expected_highlight(string.inspect(expected)),
+ got_highlight(string.inspect(got)),
+ )
+ }
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam
new file mode 100644
index 0000000..8c1a6ac
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/formatter.gleam
@@ -0,0 +1,480 @@
+import gleam/io
+import gleam/int
+import gleam/list
+import gleam/string
+import gleam/option.{type Option, None, Some}
+import gleam/map.{type Map}
+import gleam/dynamic.{type Dynamic}
+import showtime/internal/common/test_result.{
+ type GleamErrorDetail, type ReasonDetail, type Trace, AssertEqual, AssertMatch,
+ AssertNotEqual, Expected, Expression, GenericException, GleamAssert,
+ GleamError, Ignored, LetAssert, Pattern, Trace, TraceModule, Value,
+}
+import showtime/internal/common/test_suite.{type TestRun, CompletedTestRun}
+import showtime/tests/should.{type Assertion, Eq, Fail, IsError, IsOk, NotEq}
+import showtime/internal/reports/styles.{
+ error_style, expected_highlight, failed_style, function_style, got_highlight,
+ heading_style, ignored_style, not_style, passed_style, stacktrace_style,
+}
+import showtime/internal/reports/compare.{compare}
+import showtime/internal/reports/table.{
+ AlignLeft, AlignLeftOverflow, AlignRight, Content, Separator, StyledContent,
+ Table, align_table, to_string,
+}
+import showtime/tests/meta.{type Meta}
+
+type GleeUnitAssertionType {
+ GleeUnitAssertEqual(message: String)
+ GleeUnitAssertNotEqual(message: String)
+ GleeUnitAssertMatch(message: String)
+}
+
+type ModuleAndTest {
+ ModuleAndTestRun(module_name: String, test_run: TestRun)
+}
+
+type UnifiedError {
+ UnifiedError(
+ meta: Option(Meta),
+ reason: String,
+ message: String,
+ expected: String,
+ got: String,
+ line: Option(Int),
+ stacktrace: List(Trace),
+ )
+}
+
+pub fn create_test_report(test_results: Map(String, Map(String, TestRun))) {
+ let all_test_runs =
+ test_results
+ |> map.values()
+ |> list.flat_map(map.values)
+ let failed_test_runs =
+ test_results
+ |> map.to_list()
+ |> list.flat_map(fn(entry) {
+ let #(module_name, test_module_results) = entry
+ test_module_results
+ |> map.values()
+ |> list.filter_map(fn(test_run) {
+ case test_run {
+ CompletedTestRun(_test_function, _, result) ->
+ case result {
+ Error(_) -> Ok(ModuleAndTestRun(module_name, test_run))
+ Ok(Ignored(_)) -> Error(Nil)
+ Ok(_) -> Error(Nil)
+ }
+ _ -> {
+ test_run
+ |> io.debug()
+ Error(Nil)
+ }
+ }
+ })
+ })
+
+ let ignored_test_runs =
+ test_results
+ |> map.to_list()
+ |> list.flat_map(fn(entry) {
+ let #(module_name, test_module_results) = entry
+ test_module_results
+ |> map.values()
+ |> list.filter_map(fn(test_run) {
+ case test_run {
+ CompletedTestRun(test_function, _, result) ->
+ case result {
+ Ok(Ignored(reason)) ->
+ Ok(#(module_name <> "." <> test_function.name, reason))
+ _ -> Error(Nil)
+ }
+ _ -> Error(Nil)
+ }
+ })
+ })
+
+ let failed_tests_report =
+ failed_test_runs
+ |> list.filter_map(fn(module_and_test_run) {
+ case module_and_test_run.test_run {
+ CompletedTestRun(test_function, _total_time, result) ->
+ case result {
+ Error(exception) ->
+ case exception.reason {
+ AssertEqual(reason_details) ->
+ Ok(format_reason(
+ erlang_error_to_unified(
+ reason_details,
+ GleeUnitAssertEqual("Assert equal"),
+ exception.stacktrace.traces,
+ ),
+ module_and_test_run.module_name,
+ test_function.name,
+ exception.output_buffer,
+ ))
+ AssertNotEqual(reason_details) ->
+ Ok(format_reason(
+ erlang_error_to_unified(
+ reason_details,
+ GleeUnitAssertNotEqual("Assert not equal"),
+ exception.stacktrace.traces,
+ ),
+ module_and_test_run.module_name,
+ test_function.name,
+ exception.output_buffer,
+ ))
+ AssertMatch(reason_details) ->
+ Ok(format_reason(
+ erlang_error_to_unified(
+ reason_details,
+ GleeUnitAssertMatch("Assert match"),
+ exception.stacktrace.traces,
+ ),
+ module_and_test_run.module_name,
+ test_function.name,
+ exception.output_buffer,
+ ))
+ GleamError(reason) ->
+ Ok(format_reason(
+ gleam_error_to_unified(reason, exception.stacktrace.traces),
+ module_and_test_run.module_name,
+ test_function.name,
+ exception.output_buffer,
+ ))
+ // GleamAssert(value) -> Error(Nil)
+ GleamAssert(value, line_no) ->
+ Ok(format_reason(
+ UnifiedError(
+ None,
+ "gleam assert",
+ "Assert failed",
+ "Patterns should match",
+ error_style(string.inspect(value)),
+ Some(line_no),
+ exception.stacktrace.traces,
+ ),
+ module_and_test_run.module_name,
+ test_function.name,
+ exception.output_buffer,
+ ))
+ GenericException(value) ->
+ Ok(format_reason(
+ UnifiedError(
+ None,
+ "generic exception",
+ "Test function threw an exception",
+ "Exception in test function",
+ error_style(string.inspect(value)),
+ None,
+ exception.stacktrace.traces,
+ ),
+ module_and_test_run.module_name,
+ test_function.name,
+ exception.output_buffer,
+ ))
+ other -> {
+ io.println("Other: " <> string.inspect(other))
+ panic
+ Error(Nil)
+ }
+ }
+ _ -> Error(Nil)
+ }
+ _ -> Error(Nil)
+ }
+ })
+ |> list.fold([], fn(rows, test_rows) { list.append(rows, test_rows) })
+
+ let all_test_execution_time_reports =
+ all_test_runs
+ |> list.filter_map(fn(test_run) {
+ case test_run {
+ CompletedTestRun(test_function, total_time, _) ->
+ Ok(test_function.name <> ": " <> int.to_string(total_time) <> " ms")
+ _ -> Error(Nil)
+ }
+ })
+ let _execution_times_report =
+ all_test_execution_time_reports
+ |> string.join("\n")
+
+ let all_tests_count =
+ all_test_runs
+ |> list.length()
+ let ignored_tests_count =
+ ignored_test_runs
+ |> list.length()
+ let failed_tests_count =
+ failed_test_runs
+ |> list.length()
+
+ let passed =
+ passed_style(
+ int.to_string(all_tests_count - failed_tests_count - ignored_tests_count) <> " passed",
+ )
+ let failed = failed_style(int.to_string(failed_tests_count) <> " failed")
+ let ignored = case ignored_tests_count {
+ 0 -> ""
+ _ -> ", " <> ignored_style(int.to_string(ignored_tests_count) <> " ignored")
+ }
+
+ let failed_tests_table =
+ Table(None, failed_tests_report)
+ |> align_table()
+ |> to_string()
+
+ let test_report =
+ "\n" <> failed_tests_table <> "\n" <> passed <> ", " <> failed <> ignored
+ #(test_report, failed_tests_count)
+}
+
+fn erlang_error_to_unified(
+ error_details: List(ReasonDetail),
+ assertion_type: GleeUnitAssertionType,
+ stacktrace: List(Trace),
+) {
+ error_details
+ |> list.fold(
+ UnifiedError(
+ None,
+ "not_set",
+ assertion_type.message,
+ "",
+ "",
+ None,
+ stacktrace,
+ ),
+ fn(unified, reason) {
+ case reason {
+ Expression(expression) -> UnifiedError(..unified, reason: expression)
+ Expected(value) ->
+ case assertion_type {
+ GleeUnitAssertEqual(_messaged) ->
+ UnifiedError(
+ ..unified,
+ expected: expected_highlight(string.inspect(value)),
+ )
+ _ -> unified
+ }
+ Value(value) ->
+ case assertion_type {
+ GleeUnitAssertNotEqual(_message) ->
+ UnifiedError(
+ ..unified,
+ expected: not_style("not ") <> string.inspect(value),
+ got: got_highlight(string.inspect(value)),
+ )
+ _ ->
+ UnifiedError(..unified, got: got_highlight(string.inspect(value)))
+ }
+ Pattern(pattern) ->
+ case pattern {
+ "{ ok , _ }" ->
+ UnifiedError(..unified, expected: expected_highlight("Ok(_)"))
+ "{ error , _ }" ->
+ UnifiedError(..unified, expected: expected_highlight("Error(_)"))
+ _ -> unified
+ }
+ _ -> unified
+ }
+ },
+ )
+}
+
+fn gleam_error_to_unified(
+ gleam_error: GleamErrorDetail,
+ stacktrace: List(Trace),
+) -> UnifiedError {
+ case gleam_error {
+ LetAssert(_module, _function, _line_no, _message, value) -> {
+ let result: Result(Dynamic, Assertion(Dynamic, Dynamic)) =
+ dynamic.unsafe_coerce(value)
+ let assert Error(assertion) = result
+ case assertion {
+ Eq(got, expected, meta) -> {
+ let #(expected, got) = compare(expected, got)
+ UnifiedError(
+ meta,
+ "assert",
+ "Assert equal",
+ expected,
+ got,
+ None,
+ stacktrace,
+ )
+ }
+ NotEq(got, expected, meta) ->
+ UnifiedError(
+ meta,
+ "assert",
+ "Assert not equal",
+ not_style("not ") <> string.inspect(expected),
+ string.inspect(got),
+ None,
+ stacktrace,
+ )
+ IsOk(got, meta) ->
+ UnifiedError(
+ meta,
+ "assert",
+ "Assert is Ok",
+ expected_highlight("Ok(_)"),
+ got_highlight(string.inspect(got)),
+ None,
+ stacktrace,
+ )
+ IsError(got, meta) ->
+ UnifiedError(
+ meta,
+ "assert",
+ "Assert is Ok",
+ expected_highlight("Error(_)"),
+ got_highlight(string.inspect(got)),
+ None,
+ stacktrace,
+ )
+ Fail(meta) ->
+ UnifiedError(
+ meta,
+ "assert",
+ "Assert is Ok",
+ got_highlight("should.fail()"),
+ got_highlight("N/A - test always expected to fail"),
+ None,
+ stacktrace,
+ )
+ }
+ }
+ }
+}
+
+fn format_reason(
+ error: UnifiedError,
+ module: String,
+ function: String,
+ output_buffer: List(String),
+) {
+ let meta = case error.meta {
+ Some(meta) ->
+ Some([
+ AlignRight(StyledContent(heading_style("Description")), 2),
+ Separator(": "),
+ AlignLeft(Content(meta.description), 0),
+ ])
+
+ None -> None
+ }
+
+ let stacktrace =
+ error.stacktrace
+ |> list.map(fn(trace) {
+ case trace {
+ Trace(function, _, _) if function == "" -> "(anonymous)"
+ TraceModule(module, function, _, _) if function == "" ->
+ module <> "." <> "(anonymous)"
+ Trace(function, _, _) -> function
+ TraceModule(module, function, _, _) -> module <> "." <> function
+ }
+ })
+ let stacktrace_rows = case stacktrace {
+ [] -> []
+ [first, ..rest] -> {
+ let first_row =
+ Some([
+ AlignRight(StyledContent(heading_style("Stacktrace")), 2),
+ Separator(": "),
+ AlignLeft(StyledContent(stacktrace_style(first)), 0),
+ ])
+ let rest_rows =
+ rest
+ |> list.map(fn(row) {
+ Some([
+ AlignRight(Content(""), 2),
+ Separator(" "),
+ AlignLeft(StyledContent(stacktrace_style(row)), 0),
+ ])
+ })
+ [first_row, ..rest_rows]
+ }
+ }
+
+ let output_rows = case
+ output_buffer
+ |> list.reverse()
+ |> list.map(fn(row) { string.trim_right(row) })
+ {
+ [] -> []
+ [first, ..rest] -> {
+ let first_row =
+ Some([
+ AlignRight(StyledContent(heading_style("Output")), 2),
+ Separator(": "),
+ AlignLeftOverflow(StyledContent(stacktrace_style(first)), 0),
+ ])
+ let rest_rows =
+ rest
+ |> list.map(fn(row) {
+ Some([
+ AlignRight(Content(""), 2),
+ Separator(" "),
+ AlignLeftOverflow(StyledContent(stacktrace_style(row)), 0),
+ ])
+ })
+ [first_row, ..rest_rows]
+ }
+ }
+
+ let line =
+ error.line
+ |> option.map(fn(line) { ":" <> int.to_string(line) })
+ |> option.unwrap("")
+
+ let arrow =
+ string.join(
+ list.repeat(
+ "-",
+ string.length(module) + 1 + {
+ string.length(function) + string.length(line)
+ } / 2,
+ ),
+ "",
+ ) <> "⌄"
+ let standard_table_rows = [
+ Some([
+ AlignRight(StyledContent(error_style("Failed")), 2),
+ Separator(": "),
+ AlignLeft(Content(arrow), 0),
+ ]),
+ Some([
+ AlignRight(StyledContent(heading_style("Test")), 2),
+ Separator(": "),
+ AlignLeft(
+ StyledContent(module <> "." <> function_style(function <> line)),
+ 0,
+ ),
+ ]),
+ meta,
+ Some([
+ AlignRight(StyledContent(heading_style("Expected")), 2),
+ Separator(": "),
+ AlignLeftOverflow(StyledContent(error.expected), 0),
+ ]),
+ Some([
+ AlignRight(StyledContent(heading_style("Got")), 2),
+ Separator(": "),
+ AlignLeftOverflow(StyledContent(error.got), 0),
+ ]),
+ ]
+ standard_table_rows
+ |> list.append(stacktrace_rows)
+ |> list.append(output_rows)
+ |> list.append([
+ Some([
+ AlignRight(Content(""), 0),
+ AlignRight(Content(""), 0),
+ AlignRight(Content(""), 0),
+ ]),
+ ])
+ |> list.filter_map(fn(row) { option.to_result(row, Nil) })
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam
new file mode 100644
index 0000000..b051dd3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/styles.gleam
@@ -0,0 +1,84 @@
+import gleam_community/ansi
+import gleam/list
+import gleam/string
+import gleam/bit_array
+
+pub fn passed_style(text) {
+ bold_green(text)
+}
+
+pub fn failed_style(text) {
+ bold_red(text)
+}
+
+pub fn ignored_style(text) {
+ bold_yellow(text)
+}
+
+pub fn error_style(text) {
+ bold_red(text)
+}
+
+pub fn expected_highlight(text) {
+ bold_green(text)
+}
+
+pub fn got_highlight(text) {
+ bold_red(text)
+}
+
+pub fn not_style(text) {
+ ansi.bold(text)
+}
+
+pub fn module_style(text: String) {
+ ansi.cyan(text)
+}
+
+pub fn heading_style(text: String) {
+ ansi.cyan(text)
+}
+
+pub fn function_style(text: String) {
+ bold_cyan(text)
+}
+
+pub fn stacktrace_style(text: String) {
+ text
+}
+
+fn bold_red(text: String) {
+ ansi.bold(ansi.red(text))
+}
+
+fn bold_green(text) {
+ ansi.bold(ansi.green(text))
+}
+
+fn bold_yellow(text) {
+ ansi.bold(ansi.yellow(text))
+}
+
+fn bold_cyan(text) {
+ ansi.bold(ansi.cyan(text))
+}
+
+pub fn strip_style(text) {
+ let #(new_text, _) =
+ text
+ |> string.to_graphemes()
+ |> list.fold(
+ #("", False),
+ fn(acc, char) {
+ let #(str, removing) = acc
+ let bit_char = bit_array.from_string(char)
+ case bit_char, removing {
+ <<0x1b>>, _ -> #(str, True)
+ <<0x6d>>, True -> #(str, False)
+ _, True -> #(str, True)
+ _, False -> #(str <> char, False)
+ }
+ },
+ )
+ new_text
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam b/aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam
new file mode 100644
index 0000000..f8bc00c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/internal/reports/table.gleam
@@ -0,0 +1,148 @@
+import gleam/list
+import gleam/string
+import gleam/int
+import gleam/option.{type Option}
+import showtime/internal/reports/styles.{strip_style}
+
+pub type Content {
+ Content(unstyled_text: String)
+ StyledContent(styled_text: String)
+}
+
+pub type Col {
+ AlignRight(content: Content, margin: Int)
+ AlignLeft(content: Content, margin: Int)
+ AlignRightOverflow(content: Content, margin: Int)
+ AlignLeftOverflow(content: Content, margin: Int)
+ Separator(char: String)
+ Aligned(content: String)
+}
+
+pub type Table {
+ Table(header: Option(String), rows: List(List(Col)))
+}
+
+pub fn to_string(table: Table) -> String {
+ let rows =
+ table.rows
+ |> list.map(fn(row) {
+ row
+ |> list.filter_map(fn(col) {
+ case col {
+ Separator(char) -> Ok(char)
+ Aligned(content) -> Ok(content)
+ _ -> Error(Nil)
+ }
+ })
+ |> string.join("")
+ })
+ |> string.join("\n")
+ let header =
+ table.header
+ |> option.map(fn(header) { header <> "\n" })
+ |> option.unwrap("")
+ header <> rows
+}
+
+pub fn align_table(table: Table) -> Table {
+ let cols =
+ table.rows
+ |> list.transpose()
+ let col_width =
+ cols
+ |> list.map(fn(col) {
+ col
+ |> list.map(fn(content) {
+ case content {
+ AlignRight(Content(unstyled), _) -> unstyled
+ AlignRight(StyledContent(styled), _) -> strip_style(styled)
+ AlignLeft(Content(unstyled), _) -> unstyled
+ AlignLeft(StyledContent(styled), _) -> strip_style(styled)
+ AlignLeftOverflow(_, _) -> ""
+ AlignRightOverflow(_, _) -> ""
+ Separator(char) -> char
+ Aligned(content) -> content
+ }
+ })
+ |> list.fold(0, fn(max, str) { int.max(max, string.length(str)) })
+ })
+ let aligned_col =
+ cols
+ |> list.zip(col_width)
+ |> list.map(fn(col_and_width) {
+ let #(col, width) = col_and_width
+ col
+ |> list.map(fn(content) {
+ case content {
+ AlignRight(Content(unstyled), margin) ->
+ Aligned(pad_left(
+ unstyled,
+ width + margin - string.length(unstyled),
+ " ",
+ ))
+ AlignRight(StyledContent(styled), margin) ->
+ Aligned(pad_left(
+ styled,
+ width + margin - string.length(strip_style(styled)),
+ " ",
+ ))
+ AlignRightOverflow(Content(unstyled), margin) ->
+ Aligned(pad_left(
+ unstyled,
+ width + margin - string.length(unstyled),
+ " ",
+ ))
+ AlignRightOverflow(StyledContent(styled), margin) ->
+ Aligned(pad_left(
+ styled,
+ width + margin - string.length(strip_style(styled)),
+ " ",
+ ))
+ AlignLeft(Content(unstyled), margin) ->
+ Aligned(pad_right(
+ unstyled,
+ width + margin - string.length(unstyled),
+ " ",
+ ))
+ AlignLeft(StyledContent(styled), margin) ->
+ Aligned(pad_right(
+ styled,
+ width + margin - string.length(strip_style(styled)),
+ " ",
+ ))
+ AlignLeftOverflow(Content(unstyled), margin) ->
+ Aligned(pad_right(
+ unstyled,
+ width + margin - string.length(unstyled),
+ " ",
+ ))
+ AlignLeftOverflow(StyledContent(styled), margin) ->
+ Aligned(pad_right(
+ styled,
+ width + margin - string.length(strip_style(styled)),
+ " ",
+ ))
+ Separator(char) -> Separator(char)
+ Aligned(content) -> Aligned(content)
+ }
+ })
+ })
+ let aligned_rows =
+ aligned_col
+ |> list.transpose()
+ Table(..table, rows: aligned_rows)
+}
+
+fn pad_left(str: String, num: Int, char: String) {
+ let padding =
+ list.repeat(char, num)
+ |> string.join("")
+ padding <> str
+}
+
+fn pad_right(str: String, num: Int, char: String) {
+ let padding =
+ list.repeat(char, num)
+ |> string.join("")
+ str <> padding
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam b/aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam
new file mode 100644
index 0000000..cbba414
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/tests/meta.gleam
@@ -0,0 +1,3 @@
+pub type Meta {
+ Meta(description: String, tags: List(String))
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/tests/should.gleam b/aoc2023/build/packages/adglent/src/showtime/tests/should.gleam
new file mode 100644
index 0000000..71578c7
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/tests/should.gleam
@@ -0,0 +1,113 @@
+import gleam/option.{type Option, None, Some}
+import showtime/tests/meta.{type Meta}
+
+pub type Assertion(t, e) {
+ Eq(a: t, b: t, meta: Option(Meta))
+ NotEq(a: t, b: t, meta: Option(Meta))
+ IsOk(a: Result(t, e), meta: Option(Meta))
+ IsError(a: Result(t, e), meta: Option(Meta))
+ Fail(meta: Option(Meta))
+}
+
+pub fn equal(a: t, b: t) {
+ evaluate(Eq(a, b, None))
+}
+
+pub fn equal_meta(a: t, b: t, meta: Meta) {
+ evaluate(Eq(a, b, Some(meta)))
+}
+
+pub fn not_equal(a: t, b: t) {
+ evaluate(NotEq(a, b, None))
+}
+
+pub fn not_equal_meta(a: t, b: t, meta: Meta) {
+ evaluate(NotEq(a, b, Some(meta)))
+}
+
+pub fn be_ok(a: Result(o, e)) {
+ evaluate(IsOk(a, None))
+ let assert Ok(value) = a
+ value
+}
+
+pub fn be_ok_meta(a: Result(o, e), meta: Meta) {
+ evaluate(IsOk(a, Some(meta)))
+}
+
+pub fn be_error(a: Result(o, e)) {
+ evaluate(IsError(a, None))
+ let assert Error(value) = a
+ value
+}
+
+pub fn be_error_meta(a: Result(o, e), meta: Meta) {
+ evaluate(IsError(a, Some(meta)))
+}
+
+pub fn fail() {
+ evaluate(Fail(None))
+}
+
+pub fn fail_meta(meta: Meta) {
+ evaluate(Fail(Some(meta)))
+}
+
+pub fn be_true(a: Bool) {
+ a
+ |> equal(True)
+}
+
+pub fn be_true_meta(a: Bool, meta: Meta) {
+ a
+ |> equal_meta(True, meta)
+}
+
+pub fn be_false(a: Bool) {
+ a
+ |> equal(False)
+}
+
+pub fn be_false_meta(a: Bool, meta: Meta) {
+ a
+ |> equal_meta(False, meta)
+}
+
+@external(erlang, "showtime_ffi", "gleam_error")
+fn gleam_error(value: Result(Nil, Assertion(a, b))) -> Nil
+
+pub fn evaluate(assertion) -> Nil {
+ case assertion {
+ Eq(a, b, _meta) ->
+ case a == b {
+ True -> Nil
+ False -> {
+ gleam_error(Error(assertion))
+ }
+ }
+ NotEq(a, b, _meta) ->
+ case a != b {
+ True -> Nil
+ False -> {
+ gleam_error(Error(assertion))
+ }
+ }
+ IsOk(a, _meta) ->
+ case a {
+ Ok(_) -> Nil
+ Error(_) -> {
+ gleam_error(Error(assertion))
+ }
+ }
+ IsError(a, _meta) ->
+ case a {
+ Error(_) -> Nil
+ Ok(_) -> {
+ gleam_error(Error(assertion))
+ }
+ }
+ Fail(_meta) -> {
+ gleam_error(Error(assertion))
+ }
+ }
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime/tests/test.gleam b/aoc2023/build/packages/adglent/src/showtime/tests/test.gleam
new file mode 100644
index 0000000..730f943
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime/tests/test.gleam
@@ -0,0 +1,57 @@
+import showtime/tests/should
+import showtime/tests/meta.{type Meta}
+import gleam/io
+
+pub type Test {
+ Test(meta: Meta, test_function: fn() -> Nil)
+}
+
+pub type MetaShould(t) {
+ MetaShould(equal: fn(t, t) -> Nil, not_equal: fn(t, t) -> Nil)
+}
+
+pub fn test(meta: Meta, test_function: fn(Meta) -> Nil) {
+ Test(meta, fn() { test_function(meta) })
+}
+
+pub fn with_meta(meta: Meta, test_function: fn(MetaShould(a)) -> Nil) {
+ Test(
+ meta,
+ fn() {
+ test_function(MetaShould(
+ fn(a, b) { equal(a, b, meta) },
+ fn(a, b) { not_equal(a, b, meta) },
+ ))
+ },
+ )
+}
+
+pub fn equal(a: t, b: t, meta: Meta) {
+ io.debug(a)
+ io.debug(b)
+ should.equal_meta(a, b, meta)
+}
+
+pub fn not_equal(a: t, b: t, meta: Meta) {
+ should.equal_meta(a, b, meta)
+}
+
+pub fn be_ok(a: Result(o, e), meta: Meta) {
+ should.be_ok_meta(a, meta)
+}
+
+pub fn be_error(a: Result(o, e), meta: Meta) {
+ should.be_error_meta(a, meta)
+}
+
+pub fn fail(meta: Meta) {
+ should.fail_meta(meta)
+}
+
+pub fn be_true(a: Bool, meta: Meta) {
+ should.be_true_meta(a, meta)
+}
+
+pub fn be_false(a: Bool, meta: Meta) {
+ should.be_false_meta(a, meta)
+}
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl
new file mode 100644
index 0000000..f2d2396
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@cli.erl
@@ -0,0 +1,8 @@
+-module(showtime@internal@common@cli).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([capture/0]).
+
+-type capture() :: yes | no | mixed.
+
+
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl
new file mode 100644
index 0000000..b0a6d7a
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl
@@ -0,0 +1,131 @@
+-module(showtime@internal@common@common_event_handler).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([handle_event/3]).
+-export_type([test_state/0, handler_state/0]).
+
+-type test_state() :: not_started | running | {finished, integer()}.
+
+-type handler_state() :: {handler_state,
+ test_state(),
+ integer(),
+ gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run()))}.
+
+-spec handle_event(
+ showtime@internal@common@test_suite:test_event(),
+ fun(() -> integer()),
+ handler_state()
+) -> handler_state().
+handle_event(Msg, System_time, State) ->
+ Test_state = erlang:element(2, State),
+ Num_done = erlang:element(3, State),
+ Events = erlang:element(4, State),
+ {Updated_test_state, Updated_num_done, Updated_events} = case Msg of
+ start_test_run ->
+ {running, Num_done, Events};
+
+ {start_test_suite, Module} ->
+ Maybe_module_events = gleam@map:get(
+ Events,
+ erlang:element(2, Module)
+ ),
+ New_events = case Maybe_module_events of
+ {ok, _} ->
+ Events;
+
+ {error, _} ->
+ _pipe = Events,
+ gleam@map:insert(
+ _pipe,
+ erlang:element(2, Module),
+ gleam@map:new()
+ )
+ end,
+ {Test_state, Num_done, New_events};
+
+ {start_test, Module@1, Test} ->
+ Current_time = System_time(),
+ Maybe_module_events@1 = gleam@map:get(
+ Events,
+ erlang:element(2, Module@1)
+ ),
+ New_events@1 = case Maybe_module_events@1 of
+ {ok, Module_events} ->
+ Maybe_test_event = gleam@map:get(
+ Module_events,
+ erlang:element(2, Test)
+ ),
+ case Maybe_test_event of
+ {error, _} ->
+ _pipe@1 = Events,
+ gleam@map:insert(
+ _pipe@1,
+ erlang:element(2, Module@1),
+ begin
+ _pipe@2 = Module_events,
+ gleam@map:insert(
+ _pipe@2,
+ erlang:element(2, Test),
+ {ongoing_test_run, Test, Current_time}
+ )
+ end
+ );
+
+ {ok, _} ->
+ Events
+ end;
+
+ {error, _} ->
+ Events
+ end,
+ {Test_state, Num_done, New_events@1};
+
+ {end_test, Module@2, Test@1, Result} ->
+ Current_time@1 = System_time(),
+ Maybe_module_events@2 = gleam@map:get(
+ Events,
+ erlang:element(2, Module@2)
+ ),
+ New_events@2 = case Maybe_module_events@2 of
+ {ok, Module_events@1} ->
+ Maybe_test_run = begin
+ _pipe@3 = Module_events@1,
+ gleam@map:get(_pipe@3, erlang:element(2, Test@1))
+ end,
+ Updated_module_events = case Maybe_test_run of
+ {ok, {ongoing_test_run, Test_function, Started_at}} ->
+ _pipe@4 = Module_events@1,
+ gleam@map:insert(
+ _pipe@4,
+ erlang:element(2, Test@1),
+ {completed_test_run,
+ Test_function,
+ Current_time@1 - Started_at,
+ Result}
+ );
+
+ {error, _} ->
+ Module_events@1
+ end,
+ _pipe@5 = Events,
+ gleam@map:insert(
+ _pipe@5,
+ erlang:element(2, Module@2),
+ Updated_module_events
+ );
+
+ {error, _} ->
+ Events
+ end,
+ {Test_state, Num_done, New_events@2};
+
+ {end_test_suite, _} ->
+ {Test_state, Num_done + 1, Events};
+
+ {end_test_run, Num_modules} ->
+ {{finished, Num_modules}, Num_done, Events};
+
+ _ ->
+ {running, Num_done, Events}
+ end,
+ {handler_state, Updated_test_state, Updated_num_done, Updated_events}.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl
new file mode 100644
index 0000000..b7b73be
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_result.erl
@@ -0,0 +1,54 @@
+-module(showtime@internal@common@test_result).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([ignore_reason/0, test_return/0, exception/0, reason/0, reason_detail/0, gleam_error_detail/0, class/0, trace_list/0, trace/0, extra_info/0, arity_/0]).
+
+-type ignore_reason() :: ignore.
+
+-type test_return() :: {test_function_return,
+ gleam@dynamic:dynamic_(),
+ list(binary())} |
+ {ignored, ignore_reason()}.
+
+-type exception() :: {erlang_exception,
+ class(),
+ reason(),
+ trace_list(),
+ list(binary())}.
+
+-type reason() :: {assert_equal, list(reason_detail())} |
+ {assert_not_equal, list(reason_detail())} |
+ {assert_match, list(reason_detail())} |
+ {gleam_error, gleam_error_detail()} |
+ {gleam_assert, gleam@dynamic:dynamic_(), integer()} |
+ {generic_exception, gleam@dynamic:dynamic_()}.
+
+-type reason_detail() :: {module, binary()} |
+ {reason_line, integer()} |
+ {expression, binary()} |
+ {expected, gleam@dynamic:dynamic_()} |
+ {value, gleam@dynamic:dynamic_()} |
+ {pattern, binary()}.
+
+-type gleam_error_detail() :: {let_assert,
+ binary(),
+ binary(),
+ integer(),
+ binary(),
+ gleam@dynamic:dynamic_()}.
+
+-type class() :: erlang_error | exit | throw.
+
+-type trace_list() :: {trace_list, list(trace())}.
+
+-type trace() :: {trace, binary(), arity_(), list(extra_info())} |
+ {trace_module, binary(), binary(), arity_(), list(extra_info())}.
+
+-type extra_info() :: {error_info,
+ gleam@map:map_(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_())} |
+ {file, binary()} |
+ {line, integer()}.
+
+-type arity_() :: {num, integer()} | {arg_list, list(gleam@dynamic:dynamic_())}.
+
+
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl
new file mode 100644
index 0000000..6a56de8
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@test_suite.erl
@@ -0,0 +1,30 @@
+-module(showtime@internal@common@test_suite).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([test_run/0, test_module/0, test_function/0, test_suite/0, test_event/0]).
+
+-type test_run() :: {ongoing_test_run, test_function(), integer()} |
+ {completed_test_run,
+ test_function(),
+ integer(),
+ {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}}.
+
+-type test_module() :: {test_module, binary(), gleam@option:option(binary())}.
+
+-type test_function() :: {test_function, binary()}.
+
+-type test_suite() :: {test_suite, test_module(), list(test_function())}.
+
+-type test_event() :: start_test_run |
+ {start_test_suite, test_module()} |
+ {start_test, test_module(), test_function()} |
+ {end_test,
+ test_module(),
+ test_function(),
+ {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}} |
+ {end_test_suite, test_module()} |
+ {end_test_run, integer()}.
+
+
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl
new file mode 100644
index 0000000..f0548aa
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@discover.erl
@@ -0,0 +1,230 @@
+-module(showtime@internal@erlang@discover).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([collect_modules/2, collect_test_functions/1]).
+
+-spec get_module_prefix(binary()) -> binary().
+get_module_prefix(Path) ->
+ Path_without_test = begin
+ _pipe = Path,
+ gleam@string:replace(_pipe, <<"./test"/utf8>>, <<""/utf8>>)
+ end,
+ Path_without_leading_slash = case gleam@string:starts_with(
+ Path_without_test,
+ <<"/"/utf8>>
+ ) of
+ true ->
+ gleam@string:drop_left(Path_without_test, 1);
+
+ false ->
+ Path_without_test
+ end,
+ Module_prefix = begin
+ _pipe@1 = Path_without_leading_slash,
+ gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"@"/utf8>>)
+ end,
+ case gleam@string:length(Module_prefix) of
+ 0 ->
+ Module_prefix;
+
+ _ ->
+ <<Module_prefix/binary, "@"/utf8>>
+ end.
+
+-spec collect_modules_in_folder(
+ binary(),
+ fun((showtime@internal@common@test_suite:test_module()) -> nil),
+ gleam@option:option(list(binary()))
+) -> list(showtime@internal@common@test_suite:test_module()).
+collect_modules_in_folder(Path, Test_module_handler, Only_modules) ->
+ Module_prefix = get_module_prefix(Path),
+ _assert_subject = simplifile:read_directory(Path),
+ {ok, Files} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/discover"/utf8>>,
+ function => <<"collect_modules_in_folder"/utf8>>,
+ line => 40})
+ end,
+ Test_modules_in_folder = begin
+ _pipe = Files,
+ _pipe@1 = gleam@list:filter(
+ _pipe,
+ fun(_capture) ->
+ gleam@string:ends_with(_capture, <<"_test.gleam"/utf8>>)
+ end
+ ),
+ gleam@list:filter_map(
+ _pipe@1,
+ fun(Test_module_file) ->
+ Module_name = <<Module_prefix/binary,
+ (begin
+ _pipe@2 = Test_module_file,
+ gleam@string:replace(
+ _pipe@2,
+ <<".gleam"/utf8>>,
+ <<""/utf8>>
+ )
+ end)/binary>>,
+ case Only_modules of
+ {some, Only_modules_list} ->
+ Module_in_list = begin
+ _pipe@3 = Only_modules_list,
+ gleam@list:any(
+ _pipe@3,
+ fun(Only_module_name) ->
+ Only_module_name =:= begin
+ _pipe@4 = Module_name,
+ gleam@string:replace(
+ _pipe@4,
+ <<"@"/utf8>>,
+ <<"/"/utf8>>
+ )
+ end
+ end
+ )
+ end,
+ case Module_in_list of
+ true ->
+ Test_module = {test_module,
+ Module_name,
+ {some, Test_module_file}},
+ Test_module_handler(Test_module),
+ {ok, Test_module};
+
+ false ->
+ {error, nil}
+ end;
+
+ none ->
+ Test_module@1 = {test_module,
+ Module_name,
+ {some, Test_module_file}},
+ Test_module_handler(Test_module@1),
+ {ok, Test_module@1}
+ end
+ end
+ )
+ end,
+ Test_modules_in_subfolders = begin
+ _pipe@5 = Files,
+ _pipe@6 = gleam@list:map(
+ _pipe@5,
+ fun(Filename) ->
+ <<<<Path/binary, "/"/utf8>>/binary, Filename/binary>>
+ end
+ ),
+ _pipe@7 = gleam@list:filter(
+ _pipe@6,
+ fun(File) -> simplifile:is_directory(File) end
+ ),
+ gleam@list:fold(
+ _pipe@7,
+ [],
+ fun(Modules, Subfolder) -> _pipe@8 = Modules,
+ gleam@list:append(
+ _pipe@8,
+ collect_modules_in_folder(
+ Subfolder,
+ Test_module_handler,
+ Only_modules
+ )
+ ) end
+ )
+ end,
+ _pipe@9 = Test_modules_in_folder,
+ gleam@list:append(_pipe@9, Test_modules_in_subfolders).
+
+-spec collect_modules(
+ fun((showtime@internal@common@test_suite:test_module()) -> nil),
+ gleam@option:option(list(binary()))
+) -> list(showtime@internal@common@test_suite:test_module()).
+collect_modules(Test_module_handler, Only_modules) ->
+ collect_modules_in_folder(
+ <<"./test"/utf8>>,
+ Test_module_handler,
+ Only_modules
+ ).
+
+-spec collect_test_functions(showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite().
+collect_test_functions(Module) ->
+ Test_functions = begin
+ _pipe = erlang:apply(
+ erlang:binary_to_atom(erlang:element(2, Module)),
+ erlang:binary_to_atom(<<"module_info"/utf8>>),
+ [gleam@dynamic:from(erlang:binary_to_atom(<<"exports"/utf8>>))]
+ ),
+ gleam@dynamic:unsafe_coerce(_pipe)
+ end,
+ Test_functions_filtered = begin
+ _pipe@1 = Test_functions,
+ _pipe@3 = gleam@list:map(
+ _pipe@1,
+ fun(Entry) ->
+ {Name, Arity} = case Entry of
+ {_, _} -> Entry;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/discover"/utf8>>,
+ function => <<"collect_test_functions"/utf8>>,
+ line => 131})
+ end,
+ {begin
+ _pipe@2 = Name,
+ erlang:atom_to_binary(_pipe@2)
+ end,
+ Arity}
+ end
+ ),
+ _pipe@4 = gleam@list:filter_map(
+ _pipe@3,
+ fun(Entry@1) ->
+ {Name@1, Arity@1} = case Entry@1 of
+ {_, _} -> Entry@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"showtime/internal/erlang/discover"/utf8>>,
+ function => <<"collect_test_functions"/utf8>>,
+ line => 139})
+ end,
+ case gleam@string:ends_with(Name@1, <<"_test"/utf8>>) of
+ true ->
+ case Arity@1 of
+ 0 ->
+ {ok, Name@1};
+
+ _ ->
+ gleam@io:println(
+ <<<<<<<<"WARNING: function \""/utf8,
+ Name@1/binary>>/binary,
+ "\" has arity: "/utf8>>/binary,
+ (gleam@int:to_string(Arity@1))/binary>>/binary,
+ " - cannot be used as test (needs to be 0)"/utf8>>
+ ),
+ {error, <<"Wrong arity"/utf8>>}
+ end;
+
+ false ->
+ {error, <<"Non matching name"/utf8>>}
+ end
+ end
+ ),
+ _pipe@5 = gleam@list:filter(
+ _pipe@4,
+ fun(_capture) ->
+ gleam@string:ends_with(_capture, <<"_test"/utf8>>)
+ end
+ ),
+ gleam@list:map(
+ _pipe@5,
+ fun(Function_name) -> {test_function, Function_name} end
+ )
+ end,
+ {test_suite, Module, Test_functions_filtered}.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl
new file mode 100644
index 0000000..d72ce2c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@event_handler.erl
@@ -0,0 +1,76 @@
+-module(showtime@internal@erlang@event_handler).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([start/0]).
+-export_type([event_handler_message/0]).
+
+-type event_handler_message() :: {event_handler_message,
+ showtime@internal@common@test_suite:test_event(),
+ gleam@erlang@process:subject(integer())}.
+
+-spec system_time() -> integer().
+system_time() ->
+ os:system_time(millisecond).
+
+-spec start() -> fun((showtime@internal@common@test_suite:test_event()) -> nil).
+start() ->
+ _assert_subject = gleam@otp@actor:start(
+ {not_started, 0, gleam@map:new()},
+ fun(Msg, State) ->
+ {event_handler_message, Test_event, Reply_to} = Msg,
+ {Test_state, Num_done, Events} = State,
+ Updated_state = showtime@internal@common@common_event_handler:handle_event(
+ Test_event,
+ fun system_time/0,
+ {handler_state, Test_state, Num_done, Events}
+ ),
+ case Updated_state of
+ {handler_state, {finished, Num_modules}, Num_done@1, Events@1} when Num_done@1 =:= Num_modules ->
+ {Test_report, Num_failed} = showtime@internal@reports@formatter:create_test_report(
+ Events@1
+ ),
+ gleam@io:println(Test_report),
+ gleam@erlang@process:send(Reply_to, Num_failed),
+ {stop, normal};
+
+ {handler_state, Test_state@1, Num_done@2, Events@2} ->
+ {continue, {Test_state@1, Num_done@2, Events@2}, none}
+ end
+ end
+ ),
+ {ok, Subject} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/event_handler"/utf8>>,
+ function => <<"start"/utf8>>,
+ line => 32})
+ end,
+ Parent_subject = gleam@erlang@process:new_subject(),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ gleam@erlang@process:selecting(_pipe, Parent_subject, fun(X) -> X end)
+ end,
+ fun(Test_event@1) -> case Test_event@1 of
+ {end_test_run, _} ->
+ gleam@erlang@process:send(
+ Subject,
+ {event_handler_message, Test_event@1, Parent_subject}
+ ),
+ Num_failed@1 = gleam_erlang_ffi:select(Selector),
+ case Num_failed@1 > 0 of
+ true ->
+ erlang:halt(1);
+
+ false ->
+ erlang:halt(0)
+ end;
+
+ _ ->
+ gleam@erlang@process:send(
+ Subject,
+ {event_handler_message, Test_event@1, Parent_subject}
+ )
+ end end.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl
new file mode 100644
index 0000000..a6959f5
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@module_handler.erl
@@ -0,0 +1,53 @@
+-module(showtime@internal@erlang@module_handler).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([start/5]).
+
+-spec start(
+ fun((showtime@internal@common@test_suite:test_event()) -> nil),
+ fun((showtime@internal@common@test_suite:test_module()) -> showtime@internal@common@test_suite:test_suite()),
+ fun((showtime@internal@common@test_suite:test_suite(), fun((showtime@internal@common@test_suite:test_event()) -> nil), list(binary()), showtime@internal@common@cli:capture()) -> nil),
+ list(binary()),
+ showtime@internal@common@cli:capture()
+) -> fun((showtime@internal@common@test_suite:test_module()) -> nil).
+start(
+ Test_event_handler,
+ Test_function_collector,
+ Run_test_suite,
+ Ignore_tags,
+ Capture
+) ->
+ _assert_subject = gleam@otp@actor:start(
+ nil,
+ fun(Module, State) ->
+ gleam@erlang@process:start(
+ fun() ->
+ Test_suite = Test_function_collector(Module),
+ Test_event_handler({start_test_suite, Module}),
+ Run_test_suite(
+ Test_suite,
+ Test_event_handler,
+ Ignore_tags,
+ Capture
+ ),
+ Test_event_handler({end_test_suite, Module})
+ end,
+ false
+ ),
+ {continue, State, none}
+ end
+ ),
+ {ok, Subject} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/erlang/module_handler"/utf8>>,
+ function => <<"start"/utf8>>,
+ line => 23})
+ end,
+ fun(Test_module) ->
+ gleam@erlang@process:send(Subject, Test_module),
+ nil
+ end.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl
new file mode 100644
index 0000000..702fb75
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@erlang@runner.erl
@@ -0,0 +1,46 @@
+-module(showtime@internal@erlang@runner).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([run_test/4, run_test_suite/4]).
+
+-spec run_test(
+ binary(),
+ binary(),
+ list(binary()),
+ showtime@internal@common@cli:capture()
+) -> {ok, showtime@internal@common@test_result:test_return()} |
+ {error, showtime@internal@common@test_result:exception()}.
+run_test(Module_name, Test_name, Ignore_tags, Capture) ->
+ Result = showtime_ffi:run_test(
+ erlang:binary_to_atom(Module_name),
+ erlang:binary_to_atom(Test_name),
+ Ignore_tags,
+ Capture
+ ),
+ Result.
+
+-spec run_test_suite(
+ showtime@internal@common@test_suite:test_suite(),
+ fun((showtime@internal@common@test_suite:test_event()) -> nil),
+ list(binary()),
+ showtime@internal@common@cli:capture()
+) -> nil.
+run_test_suite(Test_suite, Test_event_handler, Ignore_tags, Capture) ->
+ _pipe = erlang:element(3, Test_suite),
+ gleam@list:each(
+ _pipe,
+ fun(Test) ->
+ Test_event_handler(
+ {start_test, erlang:element(2, Test_suite), Test}
+ ),
+ Result = run_test(
+ erlang:element(2, erlang:element(2, Test_suite)),
+ erlang:element(2, Test),
+ Ignore_tags,
+ Capture
+ ),
+ Test_event_handler(
+ {end_test, erlang:element(2, Test_suite), Test, Result}
+ )
+ end
+ ).
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl
new file mode 100644
index 0000000..d2969b2
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@compare.erl
@@ -0,0 +1,61 @@
+-module(showtime@internal@reports@compare).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([compare/2]).
+
+-spec compare(gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> {binary(),
+ binary()}.
+compare(Expected, Got) ->
+ Expected_as_list = begin
+ _pipe = Expected,
+ (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe)
+ end,
+ Got_as_list = begin
+ _pipe@1 = Got,
+ (gleam@dynamic:list(fun gleam@dynamic:dynamic/1))(_pipe@1)
+ end,
+ Expected_as_string = begin
+ _pipe@2 = Expected,
+ gleam@dynamic:string(_pipe@2)
+ end,
+ Got_as_string = begin
+ _pipe@3 = Got,
+ gleam@dynamic:string(_pipe@3)
+ end,
+ case {Expected_as_list, Got_as_list, Expected_as_string, Got_as_string} of
+ {{ok, Expected_list}, {ok, Got_list}, _, _} ->
+ Comparison = begin
+ _pipe@4 = gap:compare_lists(Expected_list, Got_list),
+ _pipe@5 = gap@styling:from_comparison(_pipe@4),
+ _pipe@6 = gap@styling:highlight(
+ _pipe@5,
+ fun showtime@internal@reports@styles:expected_highlight/1,
+ fun showtime@internal@reports@styles:got_highlight/1,
+ fun(Item) -> Item end
+ ),
+ gap@styling:to_styled_comparison(_pipe@6)
+ end,
+ {erlang:element(2, Comparison), erlang:element(3, Comparison)};
+
+ {_, _, {ok, Expected_string}, {ok, Got_string}} ->
+ Comparison@1 = begin
+ _pipe@7 = gap:compare_strings(Expected_string, Got_string),
+ _pipe@8 = gap@styling:from_comparison(_pipe@7),
+ _pipe@9 = gap@styling:highlight(
+ _pipe@8,
+ fun showtime@internal@reports@styles:expected_highlight/1,
+ fun showtime@internal@reports@styles:got_highlight/1,
+ fun(Item@1) -> Item@1 end
+ ),
+ gap@styling:to_styled_comparison(_pipe@9)
+ end,
+ {erlang:element(2, Comparison@1), erlang:element(3, Comparison@1)};
+
+ {_, _, _, _} ->
+ {showtime@internal@reports@styles:expected_highlight(
+ gleam@string:inspect(Expected)
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Got)
+ )}
+ end.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl
new file mode 100644
index 0000000..faea091
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@formatter.erl
@@ -0,0 +1,749 @@
+-module(showtime@internal@reports@formatter).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([create_test_report/1]).
+-export_type([glee_unit_assertion_type/0, module_and_test/0, unified_error/0]).
+
+-type glee_unit_assertion_type() :: {glee_unit_assert_equal, binary()} |
+ {glee_unit_assert_not_equal, binary()} |
+ {glee_unit_assert_match, binary()}.
+
+-type module_and_test() :: {module_and_test_run,
+ binary(),
+ showtime@internal@common@test_suite:test_run()}.
+
+-type unified_error() :: {unified_error,
+ gleam@option:option(showtime@tests@meta:meta()),
+ binary(),
+ binary(),
+ binary(),
+ binary(),
+ gleam@option:option(integer()),
+ list(showtime@internal@common@test_result:trace())}.
+
+-spec erlang_error_to_unified(
+ list(showtime@internal@common@test_result:reason_detail()),
+ glee_unit_assertion_type(),
+ list(showtime@internal@common@test_result:trace())
+) -> unified_error().
+erlang_error_to_unified(Error_details, Assertion_type, Stacktrace) ->
+ _pipe = Error_details,
+ gleam@list:fold(
+ _pipe,
+ {unified_error,
+ none,
+ <<"not_set"/utf8>>,
+ erlang:element(2, Assertion_type),
+ <<""/utf8>>,
+ <<""/utf8>>,
+ none,
+ Stacktrace},
+ fun(Unified, Reason) -> case Reason of
+ {expression, Expression} ->
+ erlang:setelement(3, Unified, Expression);
+
+ {expected, Value} ->
+ case Assertion_type of
+ {glee_unit_assert_equal, _} ->
+ erlang:setelement(
+ 5,
+ Unified,
+ showtime@internal@reports@styles:expected_highlight(
+ gleam@string:inspect(Value)
+ )
+ );
+
+ _ ->
+ Unified
+ end;
+
+ {value, Value@1} ->
+ case Assertion_type of
+ {glee_unit_assert_not_equal, _} ->
+ erlang:setelement(
+ 6,
+ erlang:setelement(
+ 5,
+ Unified,
+ <<(showtime@internal@reports@styles:not_style(
+ <<"not "/utf8>>
+ ))/binary,
+ (gleam@string:inspect(Value@1))/binary>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Value@1)
+ )
+ );
+
+ _ ->
+ erlang:setelement(
+ 6,
+ Unified,
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Value@1)
+ )
+ )
+ end;
+
+ {pattern, Pattern} ->
+ case Pattern of
+ <<"{ ok , _ }"/utf8>> ->
+ erlang:setelement(
+ 5,
+ Unified,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Ok(_)"/utf8>>
+ )
+ );
+
+ <<"{ error , _ }"/utf8>> ->
+ erlang:setelement(
+ 5,
+ Unified,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Error(_)"/utf8>>
+ )
+ );
+
+ _ ->
+ Unified
+ end;
+
+ _ ->
+ Unified
+ end end
+ ).
+
+-spec gleam_error_to_unified(
+ showtime@internal@common@test_result:gleam_error_detail(),
+ list(showtime@internal@common@test_result:trace())
+) -> unified_error().
+gleam_error_to_unified(Gleam_error, Stacktrace) ->
+ case Gleam_error of
+ {let_assert, _, _, _, _, Value} ->
+ Result = gleam@dynamic:unsafe_coerce(Value),
+ {error, Assertion} = case Result of
+ {error, _} -> Result;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/internal/reports/formatter"/utf8>>,
+ function => <<"gleam_error_to_unified"/utf8>>,
+ line => 293})
+ end,
+ case Assertion of
+ {eq, Got, Expected, Meta} ->
+ {Expected@1, Got@1} = showtime@internal@reports@compare:compare(
+ Expected,
+ Got
+ ),
+ {unified_error,
+ Meta,
+ <<"assert"/utf8>>,
+ <<"Assert equal"/utf8>>,
+ Expected@1,
+ Got@1,
+ none,
+ Stacktrace};
+
+ {not_eq, Got@2, Expected@2, Meta@1} ->
+ {unified_error,
+ Meta@1,
+ <<"assert"/utf8>>,
+ <<"Assert not equal"/utf8>>,
+ <<(showtime@internal@reports@styles:not_style(
+ <<"not "/utf8>>
+ ))/binary,
+ (gleam@string:inspect(Expected@2))/binary>>,
+ gleam@string:inspect(Got@2),
+ none,
+ Stacktrace};
+
+ {is_ok, Got@3, Meta@2} ->
+ {unified_error,
+ Meta@2,
+ <<"assert"/utf8>>,
+ <<"Assert is Ok"/utf8>>,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Ok(_)"/utf8>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Got@3)
+ ),
+ none,
+ Stacktrace};
+
+ {is_error, Got@4, Meta@3} ->
+ {unified_error,
+ Meta@3,
+ <<"assert"/utf8>>,
+ <<"Assert is Ok"/utf8>>,
+ showtime@internal@reports@styles:expected_highlight(
+ <<"Error(_)"/utf8>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ gleam@string:inspect(Got@4)
+ ),
+ none,
+ Stacktrace};
+
+ {fail, Meta@4} ->
+ {unified_error,
+ Meta@4,
+ <<"assert"/utf8>>,
+ <<"Assert is Ok"/utf8>>,
+ showtime@internal@reports@styles:got_highlight(
+ <<"should.fail()"/utf8>>
+ ),
+ showtime@internal@reports@styles:got_highlight(
+ <<"N/A - test always expected to fail"/utf8>>
+ ),
+ none,
+ Stacktrace}
+ end
+ end.
+
+-spec format_reason(unified_error(), binary(), binary(), list(binary())) -> list(list(showtime@internal@reports@table:col())).
+format_reason(Error, Module, Function, Output_buffer) ->
+ Meta@1 = case erlang:element(2, Error) of
+ {some, Meta} ->
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Description"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left, {content, erlang:element(2, Meta)}, 0}]};
+
+ none ->
+ none
+ end,
+ Stacktrace = begin
+ _pipe = erlang:element(8, Error),
+ gleam@list:map(_pipe, fun(Trace) -> case Trace of
+ {trace, Function@1, _, _} when Function@1 =:= <<""/utf8>> ->
+ <<"(anonymous)"/utf8>>;
+
+ {trace_module, Module@1, Function@2, _, _} when Function@2 =:= <<""/utf8>> ->
+ <<<<Module@1/binary, "."/utf8>>/binary,
+ "(anonymous)"/utf8>>;
+
+ {trace, Function@3, _, _} ->
+ Function@3;
+
+ {trace_module, Module@2, Function@4, _, _} ->
+ <<<<Module@2/binary, "."/utf8>>/binary,
+ Function@4/binary>>
+ end end)
+ end,
+ Stacktrace_rows = case Stacktrace of
+ [] ->
+ [];
+
+ [First | Rest] ->
+ First_row = {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Stacktrace"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ First
+ )},
+ 0}]},
+ Rest_rows = begin
+ _pipe@1 = Rest,
+ gleam@list:map(
+ _pipe@1,
+ fun(Row) ->
+ {some,
+ [{align_right, {content, <<""/utf8>>}, 2},
+ {separator, <<" "/utf8>>},
+ {align_left,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ Row
+ )},
+ 0}]}
+ end
+ )
+ end,
+ [First_row | Rest_rows]
+ end,
+ Output_rows = case begin
+ _pipe@2 = Output_buffer,
+ _pipe@3 = gleam@list:reverse(_pipe@2),
+ gleam@list:map(
+ _pipe@3,
+ fun(Row@1) -> gleam@string:trim_right(Row@1) end
+ )
+ end of
+ [] ->
+ [];
+
+ [First@1 | Rest@1] ->
+ First_row@1 = {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Output"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left_overflow,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ First@1
+ )},
+ 0}]},
+ Rest_rows@1 = begin
+ _pipe@4 = Rest@1,
+ gleam@list:map(
+ _pipe@4,
+ fun(Row@2) ->
+ {some,
+ [{align_right, {content, <<""/utf8>>}, 2},
+ {separator, <<" "/utf8>>},
+ {align_left_overflow,
+ {styled_content,
+ showtime@internal@reports@styles:stacktrace_style(
+ Row@2
+ )},
+ 0}]}
+ end
+ )
+ end,
+ [First_row@1 | Rest_rows@1]
+ end,
+ Line@1 = begin
+ _pipe@5 = erlang:element(7, Error),
+ _pipe@6 = gleam@option:map(
+ _pipe@5,
+ fun(Line) -> <<":"/utf8, (gleam@int:to_string(Line))/binary>> end
+ ),
+ gleam@option:unwrap(_pipe@6, <<""/utf8>>)
+ end,
+ Arrow = <<(gleam@string:join(
+ gleam@list:repeat(
+ <<"-"/utf8>>,
+ (gleam@string:length(Module) + 1) + ((gleam@string:length(
+ Function
+ )
+ + gleam@string:length(Line@1))
+ div 2)
+ ),
+ <<""/utf8>>
+ ))/binary,
+ "⌄"/utf8>>,
+ Standard_table_rows = [{some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:error_style(
+ <<"Failed"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left, {content, Arrow}, 0}]},
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Test"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left,
+ {styled_content,
+ <<<<Module/binary, "."/utf8>>/binary,
+ (showtime@internal@reports@styles:function_style(
+ <<Function/binary, Line@1/binary>>
+ ))/binary>>},
+ 0}]},
+ Meta@1,
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Expected"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left_overflow,
+ {styled_content, erlang:element(5, Error)},
+ 0}]},
+ {some,
+ [{align_right,
+ {styled_content,
+ showtime@internal@reports@styles:heading_style(
+ <<"Got"/utf8>>
+ )},
+ 2},
+ {separator, <<": "/utf8>>},
+ {align_left_overflow,
+ {styled_content, erlang:element(6, Error)},
+ 0}]}],
+ _pipe@7 = Standard_table_rows,
+ _pipe@8 = gleam@list:append(_pipe@7, Stacktrace_rows),
+ _pipe@9 = gleam@list:append(_pipe@8, Output_rows),
+ _pipe@10 = gleam@list:append(
+ _pipe@9,
+ [{some,
+ [{align_right, {content, <<""/utf8>>}, 0},
+ {align_right, {content, <<""/utf8>>}, 0},
+ {align_right, {content, <<""/utf8>>}, 0}]}]
+ ),
+ gleam@list:filter_map(
+ _pipe@10,
+ fun(Row@3) -> gleam@option:to_result(Row@3, nil) end
+ ).
+
+-spec create_test_report(
+ gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run()))
+) -> {binary(), integer()}.
+create_test_report(Test_results) ->
+ All_test_runs = begin
+ _pipe = Test_results,
+ _pipe@1 = gleam@map:values(_pipe),
+ gleam@list:flat_map(_pipe@1, fun gleam@map:values/1)
+ end,
+ Failed_test_runs = begin
+ _pipe@2 = Test_results,
+ _pipe@3 = gleam@map:to_list(_pipe@2),
+ gleam@list:flat_map(
+ _pipe@3,
+ fun(Entry) ->
+ {Module_name, Test_module_results} = Entry,
+ _pipe@4 = Test_module_results,
+ _pipe@5 = gleam@map:values(_pipe@4),
+ gleam@list:filter_map(_pipe@5, fun(Test_run) -> case Test_run of
+ {completed_test_run, _, _, Result} ->
+ case Result of
+ {error, _} ->
+ {ok,
+ {module_and_test_run,
+ Module_name,
+ Test_run}};
+
+ {ok, {ignored, _}} ->
+ {error, nil};
+
+ {ok, _} ->
+ {error, nil}
+ end;
+
+ _ ->
+ _pipe@6 = Test_run,
+ gleam@io:debug(_pipe@6),
+ {error, nil}
+ end end)
+ end
+ )
+ end,
+ Ignored_test_runs = begin
+ _pipe@7 = Test_results,
+ _pipe@8 = gleam@map:to_list(_pipe@7),
+ gleam@list:flat_map(
+ _pipe@8,
+ fun(Entry@1) ->
+ {Module_name@1, Test_module_results@1} = Entry@1,
+ _pipe@9 = Test_module_results@1,
+ _pipe@10 = gleam@map:values(_pipe@9),
+ gleam@list:filter_map(
+ _pipe@10,
+ fun(Test_run@1) -> case Test_run@1 of
+ {completed_test_run, Test_function, _, Result@1} ->
+ case Result@1 of
+ {ok, {ignored, Reason}} ->
+ {ok,
+ {<<<<Module_name@1/binary,
+ "."/utf8>>/binary,
+ (erlang:element(
+ 2,
+ Test_function
+ ))/binary>>,
+ Reason}};
+
+ _ ->
+ {error, nil}
+ end;
+
+ _ ->
+ {error, nil}
+ end end
+ )
+ end
+ )
+ end,
+ Failed_tests_report = begin
+ _pipe@11 = Failed_test_runs,
+ _pipe@12 = gleam@list:filter_map(
+ _pipe@11,
+ fun(Module_and_test_run) ->
+ case erlang:element(3, Module_and_test_run) of
+ {completed_test_run, Test_function@1, _, Result@2} ->
+ case Result@2 of
+ {error, Exception} ->
+ case erlang:element(3, Exception) of
+ {assert_equal, Reason_details} ->
+ {ok,
+ format_reason(
+ erlang_error_to_unified(
+ Reason_details,
+ {glee_unit_assert_equal,
+ <<"Assert equal"/utf8>>},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {assert_not_equal, Reason_details@1} ->
+ {ok,
+ format_reason(
+ erlang_error_to_unified(
+ Reason_details@1,
+ {glee_unit_assert_not_equal,
+ <<"Assert not equal"/utf8>>},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {assert_match, Reason_details@2} ->
+ {ok,
+ format_reason(
+ erlang_error_to_unified(
+ Reason_details@2,
+ {glee_unit_assert_match,
+ <<"Assert match"/utf8>>},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {gleam_error, Reason@1} ->
+ {ok,
+ format_reason(
+ gleam_error_to_unified(
+ Reason@1,
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )
+ ),
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {gleam_assert, Value, Line_no} ->
+ {ok,
+ format_reason(
+ {unified_error,
+ none,
+ <<"gleam assert"/utf8>>,
+ <<"Assert failed"/utf8>>,
+ <<"Patterns should match"/utf8>>,
+ showtime@internal@reports@styles:error_style(
+ gleam@string:inspect(
+ Value
+ )
+ ),
+ {some, Line_no},
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )},
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ {generic_exception, Value@1} ->
+ {ok,
+ format_reason(
+ {unified_error,
+ none,
+ <<"generic exception"/utf8>>,
+ <<"Test function threw an exception"/utf8>>,
+ <<"Exception in test function"/utf8>>,
+ showtime@internal@reports@styles:error_style(
+ gleam@string:inspect(
+ Value@1
+ )
+ ),
+ none,
+ erlang:element(
+ 2,
+ erlang:element(
+ 4,
+ Exception
+ )
+ )},
+ erlang:element(
+ 2,
+ Module_and_test_run
+ ),
+ erlang:element(
+ 2,
+ Test_function@1
+ ),
+ erlang:element(5, Exception)
+ )};
+
+ Other ->
+ gleam@io:println(
+ <<"Other: "/utf8,
+ (gleam@string:inspect(Other))/binary>>
+ ),
+ erlang:error(#{gleam_error => panic,
+ message => <<"panic expression evaluated"/utf8>>,
+ module => <<"showtime/internal/reports/formatter"/utf8>>,
+ function => <<"create_test_report"/utf8>>,
+ line => 178}),
+ {error, nil}
+ end;
+
+ _ ->
+ {error, nil}
+ end;
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ),
+ gleam@list:fold(
+ _pipe@12,
+ [],
+ fun(Rows, Test_rows) -> gleam@list:append(Rows, Test_rows) end
+ )
+ end,
+ All_test_execution_time_reports = begin
+ _pipe@13 = All_test_runs,
+ gleam@list:filter_map(_pipe@13, fun(Test_run@2) -> case Test_run@2 of
+ {completed_test_run, Test_function@2, Total_time, _} ->
+ {ok,
+ <<<<<<(erlang:element(2, Test_function@2))/binary,
+ ": "/utf8>>/binary,
+ (gleam@int:to_string(Total_time))/binary>>/binary,
+ " ms"/utf8>>};
+
+ _ ->
+ {error, nil}
+ end end)
+ end,
+ _ = begin
+ _pipe@14 = All_test_execution_time_reports,
+ gleam@string:join(_pipe@14, <<"\n"/utf8>>)
+ end,
+ All_tests_count = begin
+ _pipe@15 = All_test_runs,
+ gleam@list:length(_pipe@15)
+ end,
+ Ignored_tests_count = begin
+ _pipe@16 = Ignored_test_runs,
+ gleam@list:length(_pipe@16)
+ end,
+ Failed_tests_count = begin
+ _pipe@17 = Failed_test_runs,
+ gleam@list:length(_pipe@17)
+ end,
+ Passed = showtime@internal@reports@styles:passed_style(
+ <<(gleam@int:to_string(
+ (All_tests_count - Failed_tests_count) - Ignored_tests_count
+ ))/binary,
+ " passed"/utf8>>
+ ),
+ Failed = showtime@internal@reports@styles:failed_style(
+ <<(gleam@int:to_string(Failed_tests_count))/binary, " failed"/utf8>>
+ ),
+ Ignored = case Ignored_tests_count of
+ 0 ->
+ <<""/utf8>>;
+
+ _ ->
+ <<", "/utf8,
+ (showtime@internal@reports@styles:ignored_style(
+ <<(gleam@int:to_string(Ignored_tests_count))/binary,
+ " ignored"/utf8>>
+ ))/binary>>
+ end,
+ Failed_tests_table = begin
+ _pipe@18 = {table, none, Failed_tests_report},
+ _pipe@19 = showtime@internal@reports@table:align_table(_pipe@18),
+ showtime@internal@reports@table:to_string(_pipe@19)
+ end,
+ Test_report = <<<<<<<<<<<<"\n"/utf8, Failed_tests_table/binary>>/binary,
+ "\n"/utf8>>/binary,
+ Passed/binary>>/binary,
+ ", "/utf8>>/binary,
+ Failed/binary>>/binary,
+ Ignored/binary>>,
+ {Test_report, Failed_tests_count}.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl
new file mode 100644
index 0000000..ec6230c
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@styles.erl
@@ -0,0 +1,93 @@
+-module(showtime@internal@reports@styles).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([not_style/1, module_style/1, heading_style/1, stacktrace_style/1, failed_style/1, error_style/1, got_highlight/1, passed_style/1, expected_highlight/1, ignored_style/1, function_style/1, strip_style/1]).
+
+-spec not_style(binary()) -> binary().
+not_style(Text) ->
+ gleam_community@ansi:bold(Text).
+
+-spec module_style(binary()) -> binary().
+module_style(Text) ->
+ gleam_community@ansi:cyan(Text).
+
+-spec heading_style(binary()) -> binary().
+heading_style(Text) ->
+ gleam_community@ansi:cyan(Text).
+
+-spec stacktrace_style(binary()) -> binary().
+stacktrace_style(Text) ->
+ Text.
+
+-spec bold_red(binary()) -> binary().
+bold_red(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:red(Text)).
+
+-spec failed_style(binary()) -> binary().
+failed_style(Text) ->
+ bold_red(Text).
+
+-spec error_style(binary()) -> binary().
+error_style(Text) ->
+ bold_red(Text).
+
+-spec got_highlight(binary()) -> binary().
+got_highlight(Text) ->
+ bold_red(Text).
+
+-spec bold_green(binary()) -> binary().
+bold_green(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:green(Text)).
+
+-spec passed_style(binary()) -> binary().
+passed_style(Text) ->
+ bold_green(Text).
+
+-spec expected_highlight(binary()) -> binary().
+expected_highlight(Text) ->
+ bold_green(Text).
+
+-spec bold_yellow(binary()) -> binary().
+bold_yellow(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:yellow(Text)).
+
+-spec ignored_style(binary()) -> binary().
+ignored_style(Text) ->
+ bold_yellow(Text).
+
+-spec bold_cyan(binary()) -> binary().
+bold_cyan(Text) ->
+ gleam_community@ansi:bold(gleam_community@ansi:cyan(Text)).
+
+-spec function_style(binary()) -> binary().
+function_style(Text) ->
+ bold_cyan(Text).
+
+-spec strip_style(binary()) -> binary().
+strip_style(Text) ->
+ {New_text, _} = begin
+ _pipe = Text,
+ _pipe@1 = gleam@string:to_graphemes(_pipe),
+ gleam@list:fold(
+ _pipe@1,
+ {<<""/utf8>>, false},
+ fun(Acc, Char) ->
+ {Str, Removing} = Acc,
+ Bit_char = gleam_stdlib:identity(Char),
+ case {Bit_char, Removing} of
+ {<<16#1b>>, _} ->
+ {Str, true};
+
+ {<<16#6d>>, true} ->
+ {Str, false};
+
+ {_, true} ->
+ {Str, true};
+
+ {_, false} ->
+ {<<Str/binary, Char/binary>>, false}
+ end
+ end
+ )
+ end,
+ New_text.
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl b/aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl
new file mode 100644
index 0000000..35dbba3
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@internal@reports@table.erl
@@ -0,0 +1,229 @@
+-module(showtime@internal@reports@table).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_string/1, align_table/1]).
+-export_type([content/0, col/0, table/0]).
+
+-type content() :: {content, binary()} | {styled_content, binary()}.
+
+-type col() :: {align_right, content(), integer()} |
+ {align_left, content(), integer()} |
+ {align_right_overflow, content(), integer()} |
+ {align_left_overflow, content(), integer()} |
+ {separator, binary()} |
+ {aligned, binary()}.
+
+-type table() :: {table, gleam@option:option(binary()), list(list(col()))}.
+
+-spec to_string(table()) -> binary().
+to_string(Table) ->
+ Rows = begin
+ _pipe = erlang:element(3, Table),
+ _pipe@3 = gleam@list:map(_pipe, fun(Row) -> _pipe@1 = Row,
+ _pipe@2 = gleam@list:filter_map(_pipe@1, fun(Col) -> case Col of
+ {separator, Char} ->
+ {ok, Char};
+
+ {aligned, Content} ->
+ {ok, Content};
+
+ _ ->
+ {error, nil}
+ end end),
+ gleam@string:join(_pipe@2, <<""/utf8>>) end),
+ gleam@string:join(_pipe@3, <<"\n"/utf8>>)
+ end,
+ Header@1 = begin
+ _pipe@4 = erlang:element(2, Table),
+ _pipe@5 = gleam@option:map(
+ _pipe@4,
+ fun(Header) -> <<Header/binary, "\n"/utf8>> end
+ ),
+ gleam@option:unwrap(_pipe@5, <<""/utf8>>)
+ end,
+ <<Header@1/binary, Rows/binary>>.
+
+-spec pad_left(binary(), integer(), binary()) -> binary().
+pad_left(Str, Num, Char) ->
+ Padding = begin
+ _pipe = gleam@list:repeat(Char, Num),
+ gleam@string:join(_pipe, <<""/utf8>>)
+ end,
+ <<Padding/binary, Str/binary>>.
+
+-spec pad_right(binary(), integer(), binary()) -> binary().
+pad_right(Str, Num, Char) ->
+ Padding = begin
+ _pipe = gleam@list:repeat(Char, Num),
+ gleam@string:join(_pipe, <<""/utf8>>)
+ end,
+ <<Str/binary, Padding/binary>>.
+
+-spec align_table(table()) -> table().
+align_table(Table) ->
+ Cols = begin
+ _pipe = erlang:element(3, Table),
+ gleam@list:transpose(_pipe)
+ end,
+ Col_width = begin
+ _pipe@1 = Cols,
+ gleam@list:map(_pipe@1, fun(Col) -> _pipe@2 = Col,
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(Content) -> case Content of
+ {align_right, {content, Unstyled}, _} ->
+ Unstyled;
+
+ {align_right, {styled_content, Styled}, _} ->
+ showtime@internal@reports@styles:strip_style(
+ Styled
+ );
+
+ {align_left, {content, Unstyled@1}, _} ->
+ Unstyled@1;
+
+ {align_left, {styled_content, Styled@1}, _} ->
+ showtime@internal@reports@styles:strip_style(
+ Styled@1
+ );
+
+ {align_left_overflow, _, _} ->
+ <<""/utf8>>;
+
+ {align_right_overflow, _, _} ->
+ <<""/utf8>>;
+
+ {separator, Char} ->
+ Char;
+
+ {aligned, Content@1} ->
+ Content@1
+ end end
+ ),
+ gleam@list:fold(
+ _pipe@3,
+ 0,
+ fun(Max, Str) ->
+ gleam@int:max(Max, gleam@string:length(Str))
+ end
+ ) end)
+ end,
+ Aligned_col = begin
+ _pipe@4 = Cols,
+ _pipe@5 = gleam@list:zip(_pipe@4, Col_width),
+ gleam@list:map(
+ _pipe@5,
+ fun(Col_and_width) ->
+ {Col@1, Width} = Col_and_width,
+ _pipe@6 = Col@1,
+ gleam@list:map(_pipe@6, fun(Content@2) -> case Content@2 of
+ {align_right, {content, Unstyled@2}, Margin} ->
+ {aligned,
+ pad_left(
+ Unstyled@2,
+ (Width + Margin) - gleam@string:length(
+ Unstyled@2
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_right, {styled_content, Styled@2}, Margin@1} ->
+ {aligned,
+ pad_left(
+ Styled@2,
+ (Width + Margin@1) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@2
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_right_overflow,
+ {content, Unstyled@3},
+ Margin@2} ->
+ {aligned,
+ pad_left(
+ Unstyled@3,
+ (Width + Margin@2) - gleam@string:length(
+ Unstyled@3
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_right_overflow,
+ {styled_content, Styled@3},
+ Margin@3} ->
+ {aligned,
+ pad_left(
+ Styled@3,
+ (Width + Margin@3) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@3
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left, {content, Unstyled@4}, Margin@4} ->
+ {aligned,
+ pad_right(
+ Unstyled@4,
+ (Width + Margin@4) - gleam@string:length(
+ Unstyled@4
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left, {styled_content, Styled@4}, Margin@5} ->
+ {aligned,
+ pad_right(
+ Styled@4,
+ (Width + Margin@5) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@4
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left_overflow,
+ {content, Unstyled@5},
+ Margin@6} ->
+ {aligned,
+ pad_right(
+ Unstyled@5,
+ (Width + Margin@6) - gleam@string:length(
+ Unstyled@5
+ ),
+ <<" "/utf8>>
+ )};
+
+ {align_left_overflow,
+ {styled_content, Styled@5},
+ Margin@7} ->
+ {aligned,
+ pad_right(
+ Styled@5,
+ (Width + Margin@7) - gleam@string:length(
+ showtime@internal@reports@styles:strip_style(
+ Styled@5
+ )
+ ),
+ <<" "/utf8>>
+ )};
+
+ {separator, Char@1} ->
+ {separator, Char@1};
+
+ {aligned, Content@3} ->
+ {aligned, Content@3}
+ end end)
+ end
+ )
+ end,
+ Aligned_rows = begin
+ _pipe@7 = Aligned_col,
+ gleam@list:transpose(_pipe@7)
+ end,
+ erlang:setelement(3, Table, Aligned_rows).
diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@meta.erl b/aoc2023/build/packages/adglent/src/showtime@tests@meta.erl
new file mode 100644
index 0000000..c975467
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@tests@meta.erl
@@ -0,0 +1,8 @@
+-module(showtime@tests@meta).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([meta/0]).
+
+-type meta() :: {meta, binary(), list(binary())}.
+
+
diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@should.erl b/aoc2023/build/packages/adglent/src/showtime@tests@should.erl
new file mode 100644
index 0000000..29906b4
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@tests@should.erl
@@ -0,0 +1,143 @@
+-module(showtime@tests@should).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([evaluate/1, equal/2, equal_meta/3, not_equal/2, not_equal_meta/3, be_ok/1, be_ok_meta/2, be_error/1, be_error_meta/2, fail/0, fail_meta/1, be_true/1, be_true_meta/2, be_false/1, be_false_meta/2]).
+-export_type([assertion/2]).
+
+-type assertion(MXP, MXQ) :: {eq,
+ MXP,
+ MXP,
+ gleam@option:option(showtime@tests@meta:meta())} |
+ {not_eq, MXP, MXP, gleam@option:option(showtime@tests@meta:meta())} |
+ {is_ok,
+ {ok, MXP} | {error, MXQ},
+ gleam@option:option(showtime@tests@meta:meta())} |
+ {is_error,
+ {ok, MXP} | {error, MXQ},
+ gleam@option:option(showtime@tests@meta:meta())} |
+ {fail, gleam@option:option(showtime@tests@meta:meta())}.
+
+-spec evaluate(assertion(any(), any())) -> nil.
+evaluate(Assertion) ->
+ case Assertion of
+ {eq, A, B, _} ->
+ case A =:= B of
+ true ->
+ nil;
+
+ false ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {not_eq, A@1, B@1, _} ->
+ case A@1 /= B@1 of
+ true ->
+ nil;
+
+ false ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {is_ok, A@2, _} ->
+ case A@2 of
+ {ok, _} ->
+ nil;
+
+ {error, _} ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {is_error, A@3, _} ->
+ case A@3 of
+ {error, _} ->
+ nil;
+
+ {ok, _} ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end;
+
+ {fail, _} ->
+ showtime_ffi:gleam_error({error, Assertion})
+ end.
+
+-spec equal(MXR, MXR) -> nil.
+equal(A, B) ->
+ evaluate({eq, A, B, none}).
+
+-spec equal_meta(MXT, MXT, showtime@tests@meta:meta()) -> nil.
+equal_meta(A, B, Meta) ->
+ evaluate({eq, A, B, {some, Meta}}).
+
+-spec not_equal(MXV, MXV) -> nil.
+not_equal(A, B) ->
+ evaluate({not_eq, A, B, none}).
+
+-spec not_equal_meta(MXX, MXX, showtime@tests@meta:meta()) -> nil.
+not_equal_meta(A, B, Meta) ->
+ evaluate({not_eq, A, B, {some, Meta}}).
+
+-spec be_ok({ok, MXZ} | {error, any()}) -> MXZ.
+be_ok(A) ->
+ evaluate({is_ok, A, none}),
+ {ok, Value} = case A of
+ {ok, _} -> A;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/tests/should"/utf8>>,
+ function => <<"be_ok"/utf8>>,
+ line => 30})
+ end,
+ Value.
+
+-spec be_ok_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_ok_meta(A, Meta) ->
+ evaluate({is_ok, A, {some, Meta}}).
+
+-spec be_error({ok, any()} | {error, MYK}) -> MYK.
+be_error(A) ->
+ evaluate({is_error, A, none}),
+ {error, Value} = case A of
+ {error, _} -> A;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"showtime/tests/should"/utf8>>,
+ function => <<"be_error"/utf8>>,
+ line => 40})
+ end,
+ Value.
+
+-spec be_error_meta({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_error_meta(A, Meta) ->
+ evaluate({is_error, A, {some, Meta}}).
+
+-spec fail() -> nil.
+fail() ->
+ evaluate({fail, none}).
+
+-spec fail_meta(showtime@tests@meta:meta()) -> nil.
+fail_meta(Meta) ->
+ evaluate({fail, {some, Meta}}).
+
+-spec be_true(boolean()) -> nil.
+be_true(A) ->
+ _pipe = A,
+ equal(_pipe, true).
+
+-spec be_true_meta(boolean(), showtime@tests@meta:meta()) -> nil.
+be_true_meta(A, Meta) ->
+ _pipe = A,
+ equal_meta(_pipe, true, Meta).
+
+-spec be_false(boolean()) -> nil.
+be_false(A) ->
+ _pipe = A,
+ equal(_pipe, false).
+
+-spec be_false_meta(boolean(), showtime@tests@meta:meta()) -> nil.
+be_false_meta(A, Meta) ->
+ _pipe = A,
+ equal_meta(_pipe, false, Meta).
diff --git a/aoc2023/build/packages/adglent/src/showtime@tests@test.erl b/aoc2023/build/packages/adglent/src/showtime@tests@test.erl
new file mode 100644
index 0000000..2f23b9f
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime@tests@test.erl
@@ -0,0 +1,57 @@
+-module(showtime@tests@test).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([test/2, equal/3, not_equal/3, with_meta/2, be_ok/2, be_error/2, fail/1, be_true/2, be_false/2]).
+-export_type([test/0, meta_should/1]).
+
+-type test() :: {test, showtime@tests@meta:meta(), fun(() -> nil)}.
+
+-type meta_should(NDO) :: {meta_should,
+ fun((NDO, NDO) -> nil),
+ fun((NDO, NDO) -> nil)}.
+
+-spec test(showtime@tests@meta:meta(), fun((showtime@tests@meta:meta()) -> nil)) -> test().
+test(Meta, Test_function) ->
+ {test, Meta, fun() -> Test_function(Meta) end}.
+
+-spec equal(NDT, NDT, showtime@tests@meta:meta()) -> nil.
+equal(A, B, Meta) ->
+ gleam@io:debug(A),
+ gleam@io:debug(B),
+ showtime@tests@should:equal_meta(A, B, Meta).
+
+-spec not_equal(NDV, NDV, showtime@tests@meta:meta()) -> nil.
+not_equal(A, B, Meta) ->
+ showtime@tests@should:equal_meta(A, B, Meta).
+
+-spec with_meta(showtime@tests@meta:meta(), fun((meta_should(any())) -> nil)) -> test().
+with_meta(Meta, Test_function) ->
+ {test,
+ Meta,
+ fun() ->
+ Test_function(
+ {meta_should,
+ fun(A, B) -> equal(A, B, Meta) end,
+ fun(A@1, B@1) -> not_equal(A@1, B@1, Meta) end}
+ )
+ end}.
+
+-spec be_ok({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_ok(A, Meta) ->
+ showtime@tests@should:be_ok_meta(A, Meta).
+
+-spec be_error({ok, any()} | {error, any()}, showtime@tests@meta:meta()) -> nil.
+be_error(A, Meta) ->
+ showtime@tests@should:be_error_meta(A, Meta).
+
+-spec fail(showtime@tests@meta:meta()) -> nil.
+fail(Meta) ->
+ showtime@tests@should:fail_meta(Meta).
+
+-spec be_true(boolean(), showtime@tests@meta:meta()) -> nil.
+be_true(A, Meta) ->
+ showtime@tests@should:be_true_meta(A, Meta).
+
+-spec be_false(boolean(), showtime@tests@meta:meta()) -> nil.
+be_false(A, Meta) ->
+ showtime@tests@should:be_false_meta(A, Meta).
diff --git a/aoc2023/build/packages/adglent/src/showtime_ffi.erl b/aoc2023/build/packages/adglent/src/showtime_ffi.erl
new file mode 100644
index 0000000..3259623
--- /dev/null
+++ b/aoc2023/build/packages/adglent/src/showtime_ffi.erl
@@ -0,0 +1,187 @@
+-module(showtime_ffi).
+
+-export([run_test/4, functions/0, capture_output/1, gleam_error/1]).
+
+gleam_error(Value) ->
+ erlang:error(#{
+ gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => Value,
+ module => <<"this/is/not/used"/utf8>>,
+ function => <<"gleam_error"/utf8>>,
+ % Not used
+ line => 0
+ }).
+
+start_output_capture(Capture) ->
+ OldGroupLeader = group_leader(),
+ CapturePid = spawn(showtime_ffi, capture_output, [{[], {OldGroupLeader, Capture}}]),
+ group_leader(CapturePid, self()),
+ {CapturePid, OldGroupLeader}.
+
+stop_output_capture({CapturePid, OldGroupLeader}) ->
+ group_leader(OldGroupLeader, self()),
+ CapturePid ! {capture_done, self()},
+ receive
+ Buffer ->
+ Buffer
+ end.
+
+capture_output({Buffer, {OldGroupLeader, Capture}}) ->
+ receive
+ {io_request, From, ReplyAs, {put_chars, unicode, BitString}} ->
+ case Capture of
+ yes ->
+ From ! {io_reply, ReplyAs, ok},
+ capture_output({[BitString | Buffer], {OldGroupLeader, Capture}});
+ mixed ->
+ OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}},
+ capture_output({[BitString | Buffer], {OldGroupLeader, Capture}});
+ no ->
+ OldGroupLeader ! {io_request, From, ReplyAs, {put_chars, unicode, BitString}},
+ capture_output({Buffer, {OldGroupLeader, Capture}})
+ end;
+ {capture_done, SenderPid} ->
+ SenderPid ! Buffer;
+ OtherMessage ->
+ OldGroupLeader ! OtherMessage,
+ capture_output({Buffer, {OldGroupLeader, Capture}})
+ end.
+
+run_test(Module, Function, IgnoreTags, Capture) ->
+ OutputCapture = start_output_capture(Capture),
+ try
+ Result = apply(Module, Function, []),
+ {ResultType, FinalResult} =
+ case Result of
+ {test, {meta, _Description, Tags}, TestFun} ->
+ case
+ lists:any(
+ fun(Tag) ->
+ lists:any(fun(IgnoreTag) -> IgnoreTag == Tag end, IgnoreTags)
+ end,
+ Tags
+ )
+ of
+ true ->
+ {ignored, ignore};
+ false ->
+ {test_function_return, TestFun()}
+ end;
+ DirectResult ->
+ {test_function_return, DirectResult}
+ end,
+ OutputCaptureBuffer = stop_output_capture(OutputCapture),
+ case ResultType of
+ ignored -> {ok, {ResultType, FinalResult}};
+ _ -> {ok, {ResultType, FinalResult, OutputCaptureBuffer}}
+ end
+ catch
+ Class:Reason:Stacktrace ->
+ GleamReason =
+ case Reason of
+ {Assertion, ReasonList} ->
+ ErlangReasonList =
+ lists:map(
+ fun(ReasonDetail) ->
+ case ReasonDetail of
+ {line, LineNo} ->
+ {reason_line, LineNo};
+ {expression, List} ->
+ {expression, list_to_binary(List)};
+ {module, ModuleAtom} ->
+ {module, atom_to_binary(ModuleAtom)};
+ {pattern, Pattern} ->
+ {pattern, list_to_binary(Pattern)};
+ Other ->
+ Other
+ end
+ end,
+ ReasonList
+ ),
+ GleamAssertionType =
+ case Assertion of
+ assertEqual ->
+ assert_equal;
+ assertNotEqual ->
+ assert_not_equal;
+ assertMatch ->
+ assert_match;
+ OtherAssertionType ->
+ OtherAssertionType
+ end,
+ {GleamAssertionType, ErlangReasonList};
+ #{
+ function := GleamFunction,
+ gleam_error := GleamError,
+ line := Line,
+ message := Message,
+ module := GleamModule,
+ value := Value
+ } ->
+ case Value of
+ {error, {OkValue, _, _, _}} when OkValue == not_eq; OkValue == eq ->
+ {gleam_error,
+ {GleamError, GleamModule, GleamFunction, Line, Message, Value}};
+ {error, {OkValue, _, _}} when OkValue == is_ok; OkValue == is_error ->
+ {gleam_error,
+ {GleamError, GleamModule, GleamFunction, Line, Message, Value}};
+ {error, {OkValue, _}} when OkValue == fail ->
+ {gleam_error,
+ {GleamError, GleamModule, GleamFunction, Line, Message, Value}};
+ _ ->
+ {gleam_assert, Value, Line}
+ end;
+ OtherReason ->
+ {generic_exception, OtherReason}
+ end,
+ GleamClass =
+ case Class of
+ error ->
+ erlang_error;
+ Other ->
+ Other
+ end,
+ GleamTraceList =
+ lists:map(
+ fun(Trace) ->
+ case Trace of
+ {ModuleName, FunctionName, Arity, ExtraInfoList} ->
+ {trace_module, atom_to_binary(ModuleName),
+ atom_to_binary(FunctionName), map_arity(Arity),
+ map_extra_info_list(ExtraInfoList)};
+ {FunctionName, Arity, ExtraInfoList} ->
+ {trace, atom_to_binary(FunctionName), map_arity(Arity),
+ map_extra_info_list(ExtraInfoList)}
+ end
+ end,
+ Stacktrace
+ ),
+ OutputCaptureBufferCatch = stop_output_capture(OutputCapture),
+ {error,
+ {erlang_exception, GleamClass, GleamReason, {trace_list, GleamTraceList},
+ OutputCaptureBufferCatch}}
+ end.
+
+map_extra_info_list(ExtraInfoList) ->
+ lists:map(
+ fun(ExtraInfo) ->
+ case ExtraInfo of
+ {file, FileNameList} -> {file, list_to_binary(FileNameList)};
+ Other -> Other
+ end
+ end,
+ ExtraInfoList
+ ).
+
+map_arity(Arity) ->
+ if
+ is_list(Arity) ->
+ {arg_list, Arity};
+ is_integer(Arity) ->
+ {num, Arity}
+ end.
+
+functions() ->
+ Funs = module_info(exports),
+ Funs.
diff --git a/aoc2023/build/packages/gap/LICENSE b/aoc2023/build/packages/gap/LICENSE
new file mode 100644
index 0000000..d1cec9b
--- /dev/null
+++ b/aoc2023/build/packages/gap/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2023 John Björk
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. \ No newline at end of file
diff --git a/aoc2023/build/packages/gap/README.md b/aoc2023/build/packages/gap/README.md
new file mode 100644
index 0000000..3e02686
--- /dev/null
+++ b/aoc2023/build/packages/gap/README.md
@@ -0,0 +1,202 @@
+# gap
+
+[![Package Version](https://img.shields.io/hexpm/v/gap)](https://hex.pm/packages/gap)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gap/)
+
+A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences.
+
+A typical styled output from the comparison can look like this:
+
+<img src="https://github.com/JohnBjrk/gap/blob/main/static/example_diff_lucy.png?raw=true" alt="Image of two strings with highlighted differences" width="400vw">
+
+## Installation
+
+If available on Hex this package can be added to your Gleam project:
+
+```sh
+gleam add gap
+```
+
+Documentation can be found at <https://hexdocs.pm/gap>.
+
+## Usage
+
+# Introduction
+
+Gap implements string/list comparison by finding the longest common subsequence. The result of the comparison are two sequences
+(one for each of the compared strings/lists) consisting of subsequences that are annotated as matching or non-matching.
+
+For example comparing the strings in the example above will look as follows:
+
+```gleam
+let comparison =
+compare_strings(
+ "lucy in the sky with diamonds",
+ "lucy is the shy with diagrams",
+)
+|> io.debug()
+// StringComparison(
+// [
+// Match(["l", "u", "c", "y", " ", "i"]),
+// NoMatch(["n"]),
+// Match([" ", "t", "h", "e", " ", "s"]),
+// NoMatch(["k"]),
+// Match(["y", " ", "w", "i", "t", "h", " ", "d", "i", "a", "m"]),
+// NoMatch(["o", "n", "d"]),
+// Match(["s"]),
+// ],
+// [
+// Match(["l", "u", "c", "y", " ", "i"]),
+// NoMatch(["s", " "]),
+// Match([" ", "t", "h", "e", " ", "s"]),
+// NoMatch(["h"]),
+// Match(["y", " ", "w", "i", "t", "h", " ", "d", "i"]),
+// NoMatch(["a", "g", "r"]),
+// Match(["a", "m", "s"]),
+// ],
+// )
+```
+
+## Styling
+
+This is useful information but a bit overwhelming to look at (specially for longer string) so the library
+has some built in functions to display the differences using colors instead.
+
+Using the same example again we can style the result and print it to the console
+
+```gleam
+let comparison =
+compare_strings(
+ "lucy in the sky with diamonds",
+ "lucy is the shy with diagrams",
+)
+|> to_styled()
+io.println(comparison.first)
+io.println(comparison.second)
+```
+
+This will give us something similar to the output above.
+
+## Comparing list
+
+It is also possible to compare lists with elements of arbitrary types.
+
+```gleam
+pub type Warning {
+ Please
+ Mind
+ The(what: String)
+}
+
+compare_lists([Mind, The("Gap")], [Please, Mind, The("What")])
+|> io.debug()
+// ListComparison(
+// [Match([Mind]), NoMatch([The("Gap")])],
+// [NoMatch([Please]), Match([Mind]), NoMatch([The("What")])],
+// )
+```
+
+## Customize styling
+
+The visual representation of the comparison can be customized. To do this use a `Styling` created from
+the comparison that should be styled. This example uses [gleam_community/ansi](https://hexdocs.pm/gleam_community_ansi/index.html)
+to highlight the non-matches in different colors.
+
+```gleam
+let comparison =
+compare_strings(
+ "Strings are made of smaller things",
+ "Things are maybe smaller string",
+)
+|> from_comparison()
+|> highlight(
+ fn(first) { ansi.cyan(first) },
+ fn(second) { ansi.magenta(second) },
+ fn(matching) { matching },
+)
+|> to_styled_comparison()
+io.println(comparison.first)
+io.println(comparison.second)
+```
+
+This will output something similar to this
+
+<img src="https://github.com/JohnBjrk/gap/blob/main/static/example_diff_things.png?raw=true" alt="Image of two strings with highlighted differences" width="400vw">
+
+### Serialization
+
+Furthermore it is also possible to customize the styling by changing the way that the comparison is serialized. An easy way to do
+this is to use the utility function `mk_generic_serializer` which creates a serializer which some specific separator and a hook
+for surrounding the result with some content. Here is a somewhat contrived example
+
+```gleam
+let comparison =
+compare_lists(["one", "two", "three"], ["two", "two", "tree"])
+|> from_comparison()
+|> highlight(
+ fn(first) { first <> " was not found in other" },
+ fn(second) { second <> " was not found in other" },
+)
+|> serialize(mk_generic_serializer(
+ ", and ",
+ fn(result) { "Comparing the lists gave the following result: " <> result },
+))
+|> to_styled_comparison()
+io.println(comparison.first)
+io.println(comparison.second)
+// Comparing the lists gave the following result: "one" was not found in other, and "two" was found in other, and "three" was not found in other
+// Comparing the lists gave the following result: "two" was not found in other, and "two" was found in other, and "tree" was not found in other
+```
+
+### Custom serialization
+
+Serializers can of course have a custom implementation. The following example utilizes this together with custom highlighters,
+creating a patch-like output (this is not exactly the same as patch-format since that shows the changes in relation to the original - to do
+that both lists of matching/non-matching lines would need to be processed together)
+
+```gleam
+let comparison =
+compare_lists(
+ [
+ "pub type Gap = List(EmptyString)", "", "pub type Traveler {",
+ " OnTrain", " OverGap(gap: Gap)", " OnPlatform", "}",
+ ],
+ [
+ "pub type Traveler {", " OnTrain", " OverGap(gap: String)",
+ " OnPlatform", "}",
+ ],
+)
+|> from_comparison()
+|> highlight(
+ fn(first) { "+" <> first },
+ fn(second) { "-" <> second },
+ fn(matching) { " " <> matching },
+)
+|> serialize(fn(part) {
+ case part {
+ Part(acc, lines, highlight) ->
+ acc <> {
+ lines
+ |> list.map(fn(line) { highlight(line) })
+ |> string.join("\n")
+ } <> "\n"
+ All(result) -> result
+ }
+})
+|> to_styled_comparison()
+io.println(comparison.first)
+io.println(comparison.second)
+// +pub type Gap = List(EmptyString)
+// +
+// pub type Traveler {
+// OnTrain
+// + OverGap(gap: Gap)
+// OnPlatform
+// }
+//
+// pub type Traveler {
+// OnTrain
+// - OverGap(gap: String)
+// OnPlatform
+// }
+```
diff --git a/aoc2023/build/packages/gap/gleam.toml b/aoc2023/build/packages/gap/gleam.toml
new file mode 100644
index 0000000..ec35329
--- /dev/null
+++ b/aoc2023/build/packages/gap/gleam.toml
@@ -0,0 +1,18 @@
+name = "gap"
+gleam = ">= 0.32.2"
+version = "1.0.1"
+description = "A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences."
+
+# Fill out these fields if you intend to generate HTML documentation or publish
+# your project to the Hex package manager.
+#
+licences = ["Apache-2.0"]
+repository = { type = "github", user = "JohnBjrk", repo = "gap" }
+# links = [{ title = "Website", href = "https://gleam.run" }]
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+gleam_community_ansi = "~> 1.2"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl b/aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl
new file mode 100644
index 0000000..5e4b20d
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@comparison_ListComparison.hrl
@@ -0,0 +1,4 @@
+-record(list_comparison, {
+ first :: list(gap@comparison:match(list(any()))),
+ second :: list(gap@comparison:match(list(any())))
+}).
diff --git a/aoc2023/build/packages/gap/include/gap@comparison_Match.hrl b/aoc2023/build/packages/gap/include/gap@comparison_Match.hrl
new file mode 100644
index 0000000..f1225dd
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@comparison_Match.hrl
@@ -0,0 +1 @@
+-record(match, {item :: any()}).
diff --git a/aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl b/aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl
new file mode 100644
index 0000000..742783b
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@comparison_NoMatch.hrl
@@ -0,0 +1 @@
+-record(no_match, {item :: any()}).
diff --git a/aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl b/aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl
new file mode 100644
index 0000000..c0b1a75
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@comparison_StringComparison.hrl
@@ -0,0 +1,4 @@
+-record(string_comparison, {
+ first :: list(gap@comparison:match(list(binary()))),
+ second :: list(gap@comparison:match(list(binary())))
+}).
diff --git a/aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl b/aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl
new file mode 100644
index 0000000..0e7c64a
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@styled_comparison_StyledComparison.hrl
@@ -0,0 +1 @@
+-record(styled_comparison, {first :: binary(), second :: binary()}).
diff --git a/aoc2023/build/packages/gap/include/gap@styling_All.hrl b/aoc2023/build/packages/gap/include/gap@styling_All.hrl
new file mode 100644
index 0000000..c11a9a6
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@styling_All.hrl
@@ -0,0 +1 @@
+-record(all, {all :: binary()}).
diff --git a/aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl b/aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl
new file mode 100644
index 0000000..6e073b3
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@styling_Highlighters.hrl
@@ -0,0 +1,5 @@
+-record(highlighters, {
+ first :: fun((binary()) -> binary()),
+ second :: fun((binary()) -> binary()),
+ matching :: fun((binary()) -> binary())
+}).
diff --git a/aoc2023/build/packages/gap/include/gap@styling_Part.hrl b/aoc2023/build/packages/gap/include/gap@styling_Part.hrl
new file mode 100644
index 0000000..db45796
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@styling_Part.hrl
@@ -0,0 +1,5 @@
+-record(part, {
+ acc :: binary(),
+ part :: list(any()),
+ highlight :: fun((binary()) -> binary())
+}).
diff --git a/aoc2023/build/packages/gap/include/gap@styling_Styling.hrl b/aoc2023/build/packages/gap/include/gap@styling_Styling.hrl
new file mode 100644
index 0000000..a7341c6
--- /dev/null
+++ b/aoc2023/build/packages/gap/include/gap@styling_Styling.hrl
@@ -0,0 +1,5 @@
+-record(styling, {
+ comparison :: gap@comparison:comparison(any()),
+ serializer :: gleam@option:option(fun((gap@styling:part(any())) -> binary())),
+ highlight :: gleam@option:option(gap@styling:highlighters())
+}).
diff --git a/aoc2023/build/packages/gap/src/gap.app.src b/aoc2023/build/packages/gap/src/gap.app.src
new file mode 100644
index 0000000..1abc7df
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap.app.src
@@ -0,0 +1,13 @@
+{application, gap, [
+ {vsn, "1.0.1"},
+ {applications, [gleam_community_ansi,
+ gleam_stdlib,
+ gleeunit]},
+ {description, "A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences."},
+ {modules, [gap,
+ gap@comparison,
+ gap@myers,
+ gap@styled_comparison,
+ gap@styling]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gap/src/gap.erl b/aoc2023/build/packages/gap/src/gap.erl
new file mode 100644
index 0000000..827e5ce
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap.erl
@@ -0,0 +1,538 @@
+-module(gap).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_styled/1, compare_strings_with_algorithm/3, compare_lists_with_algorithm/3, myers/2, compare_lists/2, compare_strings/2, lcs/2]).
+-export_type([score/1]).
+
+-type score(GAM) :: {score, integer(), gleam@option:option(GAM)}.
+
+-spec to_styled(gap@comparison:comparison(any())) -> gap@styled_comparison:styled_comparison().
+to_styled(Comparison) ->
+ _pipe = Comparison,
+ _pipe@1 = gap@styling:from_comparison(_pipe),
+ _pipe@2 = gap@styling:highlight(
+ _pipe@1,
+ fun gap@styling:first_highlight_default/1,
+ fun gap@styling:second_highlight_default/1,
+ fun gap@styling:no_highlight/1
+ ),
+ gap@styling:to_styled_comparison(_pipe@2).
+
+-spec compare_strings_with_algorithm(
+ binary(),
+ binary(),
+ fun((list(binary()), list(binary())) -> gap@comparison:comparison(binary()))
+) -> gap@comparison:comparison(binary()).
+compare_strings_with_algorithm(First, Second, Algorithm) ->
+ Comparison = Algorithm(
+ gleam@string:to_graphemes(First),
+ gleam@string:to_graphemes(Second)
+ ),
+ case Comparison of
+ {list_comparison, First@1, Second@1} ->
+ {string_comparison, First@1, Second@1};
+
+ {string_comparison, First@2, Second@2} ->
+ {string_comparison, First@2, Second@2}
+ end.
+
+-spec compare_lists_with_algorithm(
+ list(GBB),
+ list(GBB),
+ fun((list(GBB), list(GBB)) -> gap@comparison:comparison(GBB))
+) -> gap@comparison:comparison(GBB).
+compare_lists_with_algorithm(First_sequence, Second_sequence, Algorithm) ->
+ Algorithm(First_sequence, Second_sequence).
+
+-spec myers(list(GBG), list(GBG)) -> gap@comparison:comparison(GBG).
+myers(First_sequence, Second_sequence) ->
+ Edits = gap@myers:difference(First_sequence, Second_sequence),
+ _pipe = Edits,
+ _pipe@1 = gleam@list:reverse(_pipe),
+ gleam@list:fold(
+ _pipe@1,
+ {list_comparison, [], []},
+ fun(Comparison, Edit) -> case Comparison of
+ {list_comparison, First, Second} ->
+ case Edit of
+ {eq, Segment} ->
+ {list_comparison,
+ [{match, Segment} | First],
+ [{match, Segment} | Second]};
+
+ {ins, Segment@1} ->
+ {list_comparison,
+ First,
+ [{no_match, Segment@1} | Second]};
+
+ {del, Segment@2} ->
+ {list_comparison,
+ [{no_match, Segment@2} | First],
+ Second}
+ end;
+
+ {string_comparison, _, _} ->
+ Comparison
+ end end
+ ).
+
+-spec compare_lists(list(GAX), list(GAX)) -> gap@comparison:comparison(GAX).
+compare_lists(First_sequence, Second_sequence) ->
+ myers(First_sequence, Second_sequence).
+
+-spec compare_strings(binary(), binary()) -> gap@comparison:comparison(binary()).
+compare_strings(First, Second) ->
+ Comparison = compare_lists(
+ gleam@string:to_graphemes(First),
+ gleam@string:to_graphemes(Second)
+ ),
+ case Comparison of
+ {list_comparison, First@1, Second@1} ->
+ {string_comparison, First@1, Second@1};
+
+ {string_comparison, First@2, Second@2} ->
+ {string_comparison, First@2, Second@2}
+ end.
+
+-spec prepend_and_merge(
+ list(gap@comparison:match(list(GBO))),
+ gap@comparison:match(list(GBO))
+) -> list(gap@comparison:match(list(GBO))).
+prepend_and_merge(Matches, Match) ->
+ case {Matches, Match} of
+ {[], _} ->
+ [Match];
+
+ {[{match, First_match} | Rest], {match, _}} ->
+ [{match,
+ begin
+ _pipe = erlang:element(2, Match),
+ gleam@list:append(_pipe, First_match)
+ end} |
+ Rest];
+
+ {[{no_match, First_match@1} | Rest@1], {no_match, _}} ->
+ [{no_match,
+ begin
+ _pipe@1 = erlang:element(2, Match),
+ gleam@list:append(_pipe@1, First_match@1)
+ end} |
+ Rest@1];
+
+ {Matches@1, Match@1} ->
+ [Match@1 | Matches@1]
+ end.
+
+-spec append_and_merge(
+ list(gap@comparison:match(list(GBX))),
+ gap@comparison:match(list(GBX))
+) -> list(gap@comparison:match(list(GBX))).
+append_and_merge(Matches, Match) ->
+ _pipe@3 = case {begin
+ _pipe = Matches,
+ gleam@list:reverse(_pipe)
+ end,
+ Match} of
+ {[], _} ->
+ [Match];
+
+ {[{match, First_match} | Rest], {match, _}} ->
+ [{match,
+ begin
+ _pipe@1 = First_match,
+ gleam@list:append(_pipe@1, erlang:element(2, Match))
+ end} |
+ Rest];
+
+ {[{no_match, First_match@1} | Rest@1], {no_match, _}} ->
+ [{no_match,
+ begin
+ _pipe@2 = First_match@1,
+ gleam@list:append(_pipe@2, erlang:element(2, Match))
+ end} |
+ Rest@1];
+
+ {Matches@1, Match@1} ->
+ [Match@1 | Matches@1]
+ end,
+ gleam@list:reverse(_pipe@3).
+
+-spec collect_matches(
+ gleam@map:map_(GFY, any()),
+ list(GCH),
+ fun((GFY) -> integer())
+) -> list(gap@comparison:match(list(GCH))).
+collect_matches(Tracking, Str, Extract_fun) ->
+ Matching_indexes = begin
+ _pipe = gleam@map:keys(Tracking),
+ _pipe@1 = gleam@list:map(_pipe, Extract_fun),
+ gleam@set:from_list(_pipe@1)
+ end,
+ Matches = begin
+ _pipe@2 = Str,
+ gleam@list:index_map(
+ _pipe@2,
+ fun(Index, Item) ->
+ case gleam@set:contains(Matching_indexes, Index) of
+ true ->
+ {match, Item};
+
+ false ->
+ {no_match, Item}
+ end
+ end
+ )
+ end,
+ _pipe@3 = Matches,
+ _pipe@4 = gleam@list:chunk(_pipe@3, fun(Match) -> case Match of
+ {match, _} ->
+ true;
+
+ {no_match, _} ->
+ false
+ end end),
+ gleam@list:map(_pipe@4, fun(Match_list) -> case Match_list of
+ [{match, _} | _] ->
+ {match,
+ gleam@list:filter_map(
+ Match_list,
+ fun(Match@1) -> case Match@1 of
+ {match, Item@1} ->
+ {ok, Item@1};
+
+ {no_match, _} ->
+ {error, nil}
+ end end
+ )};
+
+ [{no_match, _} | _] ->
+ {no_match,
+ gleam@list:filter_map(
+ Match_list,
+ fun(Match@2) -> case Match@2 of
+ {no_match, Item@2} ->
+ {ok, Item@2};
+
+ {match, _} ->
+ {error, nil}
+ end end
+ )}
+ end end).
+
+-spec back_track(
+ gleam@map:map_({integer(), integer()}, score(GCL)),
+ integer(),
+ integer(),
+ list({{integer(), integer()}, GCL})
+) -> list({{integer(), integer()}, GCL}).
+back_track(Diff_map, First_index, Second_index, Stack) ->
+ case (First_index =:= 0) orelse (Second_index =:= 0) of
+ true ->
+ This_score = begin
+ _pipe = gleam@map:get(Diff_map, {First_index, Second_index}),
+ gleam@result:unwrap(_pipe, {score, 0, none})
+ end,
+ case This_score of
+ {score, _, {some, Item}} ->
+ [{{First_index, Second_index}, Item} | Stack];
+
+ _ ->
+ case {First_index, Second_index} of
+ {0, A} when A > 0 ->
+ back_track(
+ Diff_map,
+ First_index,
+ Second_index - 1,
+ Stack
+ );
+
+ {A@1, 0} when A@1 > 0 ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ );
+
+ {0, 0} ->
+ Stack;
+
+ {_, _} ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ )
+ end
+ end;
+
+ false ->
+ This_score@1 = begin
+ _pipe@1 = gleam@map:get(Diff_map, {First_index, Second_index}),
+ gleam@result:unwrap(_pipe@1, {score, 0, none})
+ end,
+ case This_score@1 of
+ {score, _, {some, Item@1}} ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index - 1,
+ [{{First_index, Second_index}, Item@1} | Stack]
+ );
+
+ {score, _, none} ->
+ Up = begin
+ _pipe@2 = gleam@map:get(
+ Diff_map,
+ {First_index, Second_index - 1}
+ ),
+ gleam@result:unwrap(_pipe@2, {score, 0, none})
+ end,
+ Back = begin
+ _pipe@3 = gleam@map:get(
+ Diff_map,
+ {First_index - 1, Second_index}
+ ),
+ gleam@result:unwrap(_pipe@3, {score, 0, none})
+ end,
+ case gleam@int:compare(
+ erlang:element(2, Up),
+ erlang:element(2, Back)
+ ) of
+ gt ->
+ back_track(
+ Diff_map,
+ First_index,
+ Second_index - 1,
+ Stack
+ );
+
+ lt ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ );
+
+ eq ->
+ case {First_index, Second_index} of
+ {0, A@2} when A@2 > 0 ->
+ back_track(
+ Diff_map,
+ First_index,
+ Second_index - 1,
+ Stack
+ );
+
+ {A@3, 0} when A@3 > 0 ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ );
+
+ {0, 0} ->
+ Stack;
+
+ {_, _} ->
+ back_track(
+ Diff_map,
+ First_index - 1,
+ Second_index,
+ Stack
+ )
+ end
+ end
+ end
+ end.
+
+-spec build_diff_map(
+ GCR,
+ integer(),
+ GCR,
+ integer(),
+ gleam@map:map_({integer(), integer()}, score(GCR))
+) -> gleam@map:map_({integer(), integer()}, score(GCR)).
+build_diff_map(First_item, First_index, Second_item, Second_index, Diff_map) ->
+ Prev_score = begin
+ _pipe = gleam@map:get(Diff_map, {First_index - 1, Second_index - 1}),
+ gleam@result:unwrap(_pipe, {score, 0, none})
+ end,
+ Derived_score_up = begin
+ _pipe@1 = Diff_map,
+ _pipe@2 = gleam@map:get(_pipe@1, {First_index, Second_index - 1}),
+ gleam@result:unwrap(_pipe@2, {score, 0, none})
+ end,
+ Derived_score_back = begin
+ _pipe@3 = Diff_map,
+ _pipe@4 = gleam@map:get(_pipe@3, {First_index - 1, Second_index}),
+ gleam@result:unwrap(_pipe@4, {score, 0, none})
+ end,
+ Derived_score = gleam@int:max(
+ erlang:element(2, Derived_score_up),
+ erlang:element(2, Derived_score_back)
+ ),
+ This_score = case First_item =:= Second_item of
+ true ->
+ {score, erlang:element(2, Prev_score) + 1, {some, First_item}};
+
+ false ->
+ {score, Derived_score, none}
+ end,
+ _pipe@5 = Diff_map,
+ gleam@map:insert(_pipe@5, {First_index, Second_index}, This_score).
+
+-spec lcs(list(GBK), list(GBK)) -> gap@comparison:comparison(GBK).
+lcs(First_sequence, Second_sequence) ->
+ Leading_matches = begin
+ _pipe = gleam@list:zip(First_sequence, Second_sequence),
+ _pipe@1 = gleam@list:take_while(
+ _pipe,
+ fun(Pair) -> erlang:element(1, Pair) =:= erlang:element(2, Pair) end
+ ),
+ gleam@list:map(_pipe@1, fun gleam@pair:first/1)
+ end,
+ Num_leading_matches = gleam@list:length(Leading_matches),
+ Trailing_matches = begin
+ _pipe@2 = gleam@list:zip(
+ gleam@list:reverse(First_sequence),
+ gleam@list:reverse(Second_sequence)
+ ),
+ _pipe@3 = gleam@list:take_while(
+ _pipe@2,
+ fun(Pair@1) ->
+ erlang:element(1, Pair@1) =:= erlang:element(2, Pair@1)
+ end
+ ),
+ _pipe@4 = gleam@list:map(_pipe@3, fun gleam@pair:first/1),
+ gleam@list:reverse(_pipe@4)
+ end,
+ Num_trailing_matches = gleam@list:length(Trailing_matches),
+ First_sequence_to_diff = begin
+ _pipe@5 = First_sequence,
+ _pipe@6 = gleam@list:drop(_pipe@5, Num_leading_matches),
+ gleam@list:take(
+ _pipe@6,
+ (gleam@list:length(First_sequence) - Num_leading_matches) - Num_trailing_matches
+ )
+ end,
+ Second_sequence_to_diff = begin
+ _pipe@7 = Second_sequence,
+ _pipe@8 = gleam@list:drop(_pipe@7, Num_leading_matches),
+ gleam@list:take(
+ _pipe@8,
+ (gleam@list:length(Second_sequence) - Num_leading_matches) - Num_trailing_matches
+ )
+ end,
+ Diff_map@2 = begin
+ _pipe@9 = Second_sequence_to_diff,
+ gleam@list:index_fold(
+ _pipe@9,
+ gleam@map:new(),
+ fun(Diff_map, Item_second, Index_second) ->
+ _pipe@10 = First_sequence_to_diff,
+ gleam@list:index_fold(
+ _pipe@10,
+ Diff_map,
+ fun(Diff_map@1, Item_first, Index_first) ->
+ build_diff_map(
+ Item_first,
+ Index_first,
+ Item_second,
+ Index_second,
+ Diff_map@1
+ )
+ end
+ )
+ end
+ )
+ end,
+ {First_segments@1, Second_segments@1} = case {First_sequence_to_diff,
+ Second_sequence_to_diff} of
+ {[], []} ->
+ {[], []};
+
+ {First_matching, []} ->
+ {[{no_match, First_matching}], []};
+
+ {[], Second_matching} ->
+ {[], [{no_match, Second_matching}]};
+
+ {First_sequence_to_diff@1, Second_sequence_to_diff@1} ->
+ Tracking = begin
+ _pipe@11 = back_track(
+ Diff_map@2,
+ gleam@list:length(First_sequence_to_diff@1) - 1,
+ gleam@list:length(Second_sequence_to_diff@1) - 1,
+ []
+ ),
+ gleam@map:from_list(_pipe@11)
+ end,
+ First_segments = collect_matches(
+ Tracking,
+ First_sequence_to_diff@1,
+ fun(Key) ->
+ {First, _} = Key,
+ First
+ end
+ ),
+ Second_segments = collect_matches(
+ Tracking,
+ Second_sequence_to_diff@1,
+ fun(Key@1) ->
+ {_, Second} = Key@1,
+ Second
+ end
+ ),
+ {First_segments, Second_segments}
+ end,
+ {First_segments_with_leading_trailing,
+ Second_segments_with_leading_trailing} = case {Leading_matches,
+ Trailing_matches} of
+ {[], []} ->
+ {First_segments@1, Second_segments@1};
+
+ {[], Trailing_matches@1} ->
+ {begin
+ _pipe@12 = First_segments@1,
+ append_and_merge(_pipe@12, {match, Trailing_matches@1})
+ end,
+ begin
+ _pipe@13 = Second_segments@1,
+ append_and_merge(_pipe@13, {match, Trailing_matches@1})
+ end};
+
+ {Leading_matches@1, []} ->
+ {begin
+ _pipe@14 = First_segments@1,
+ prepend_and_merge(_pipe@14, {match, Leading_matches@1})
+ end,
+ begin
+ _pipe@15 = Second_segments@1,
+ prepend_and_merge(_pipe@15, {match, Leading_matches@1})
+ end};
+
+ {Leading_matches@2, Trailing_matches@2} ->
+ {begin
+ _pipe@16 = First_segments@1,
+ _pipe@17 = prepend_and_merge(
+ _pipe@16,
+ {match, Leading_matches@2}
+ ),
+ append_and_merge(_pipe@17, {match, Trailing_matches@2})
+ end,
+ begin
+ _pipe@18 = Second_segments@1,
+ _pipe@19 = prepend_and_merge(
+ _pipe@18,
+ {match, Leading_matches@2}
+ ),
+ append_and_merge(_pipe@19, {match, Trailing_matches@2})
+ end}
+ end,
+ {list_comparison,
+ First_segments_with_leading_trailing,
+ Second_segments_with_leading_trailing}.
diff --git a/aoc2023/build/packages/gap/src/gap.gleam b/aoc2023/build/packages/gap/src/gap.gleam
new file mode 100644
index 0000000..7eb0e7f
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap.gleam
@@ -0,0 +1,438 @@
+import gleam/string
+import gleam/list
+import gleam/pair
+import gleam/map.{type Map}
+import gleam/result
+import gleam/option.{type Option, None, Some}
+import gleam/int
+import gleam/order.{Eq, Gt, Lt}
+import gleam/set
+import gap/comparison.{
+ type Comparison, type Match, type Segments, ListComparison, Match, NoMatch,
+ StringComparison,
+}
+import gap/styled_comparison.{type StyledComparison}
+import gap/styling.{
+ first_highlight_default, from_comparison, highlight, no_highlight,
+ second_highlight_default, to_styled_comparison,
+}
+import gap/myers.{type Edit, Del, Eq as MyerEq, Ins}
+
+type MatchedItem(a) =
+ #(#(Int, Int), a)
+
+type Score(a) {
+ Score(value: Int, item: Option(a))
+}
+
+type DiffMap(a) =
+ Map(#(Int, Int), Score(a))
+
+/// Creates a `StyledComparison` from `Comparison` using default values for
+/// highting and serialization.
+///
+/// ## Example
+///
+/// ```gleam
+/// > compare_strings("abc", "abe") |> to_styled()
+/// ```
+/// This will return a `StyledComparison(first, second)` where "c" in `first` is green
+/// and "e" in `second` is red.
+pub fn to_styled(comparison: Comparison(a)) -> StyledComparison {
+ comparison
+ |> from_comparison()
+ |> highlight(first_highlight_default, second_highlight_default, no_highlight)
+ |> to_styled_comparison()
+}
+
+/// Compare two string and return a `StringComparison` which will be styled as string
+/// when passed to `to_styled`
+///
+/// Will use the default `myers` algorithm
+pub fn compare_strings(first: String, second: String) -> Comparison(String) {
+ let comparison =
+ compare_lists(string.to_graphemes(first), string.to_graphemes(second))
+ case comparison {
+ ListComparison(first, second) -> StringComparison(first, second)
+ StringComparison(first, second) -> StringComparison(first, second)
+ }
+}
+
+/// Compare two string and return a `StringComparison` which will be styled as string
+/// when passed to `to_styled`
+///
+/// Algorithm can be used to select either `myers` or the legacy `lcs` algorithm
+pub fn compare_strings_with_algorithm(
+ first: String,
+ second: String,
+ algorithm,
+) -> Comparison(String) {
+ let comparison =
+ algorithm(string.to_graphemes(first), string.to_graphemes(second))
+ case comparison {
+ ListComparison(first, second) -> StringComparison(first, second)
+ StringComparison(first, second) -> StringComparison(first, second)
+ }
+}
+
+/// Compare two lists and return a `ListComparison` which will be styled as list
+/// when passed to `to_styled`
+///
+/// Will use the default `myers` algorithm
+pub fn compare_lists(
+ first_sequence: List(a),
+ second_sequence: List(a),
+) -> Comparison(a) {
+ myers(first_sequence, second_sequence)
+}
+
+/// Compare two lists and return a `ListComparison` which will be styled as list
+/// when passed to `to_styled`
+///
+/// Algorithm can be used to select either `myers` or the legacy `lcs` algorithm
+pub fn compare_lists_with_algorithm(
+ first_sequence: List(a),
+ second_sequence: List(a),
+ algorithm,
+) -> Comparison(a) {
+ algorithm(first_sequence, second_sequence)
+}
+
+/// An adapter for the the `myers` algorithm.
+/// Intended to be use as an argument to `compare_strings_with_algorithm` or
+/// `compare_lists_with_algorithm`
+pub fn myers(first_sequence: List(a), second_sequence: List(a)) -> Comparison(a) {
+ let edits = myers.difference(first_sequence, second_sequence)
+ edits
+ |> list.reverse()
+ |> list.fold(
+ ListComparison([], []),
+ fn(comparison: Comparison(a), edit: Edit(a)) {
+ case comparison {
+ ListComparison(first, second) -> {
+ case edit {
+ MyerEq(segment) ->
+ ListComparison(
+ [Match(segment), ..first],
+ [Match(segment), ..second],
+ )
+ Ins(segment) -> ListComparison(first, [NoMatch(segment), ..second])
+ Del(segment) -> ListComparison([NoMatch(segment), ..first], second)
+ }
+ }
+ StringComparison(..) -> comparison
+ }
+ },
+ )
+}
+
+/// An adapter for the the `lcs` (longest common subsequence) algorithm.
+/// Intended to be use as an argument to `compare_strings_with_algorithm` or
+/// `compare_lists_with_algorithm`
+pub fn lcs(first_sequence: List(a), second_sequence: List(a)) -> Comparison(a) {
+ let leading_matches =
+ list.zip(first_sequence, second_sequence)
+ |> list.take_while(fn(pair) { pair.0 == pair.1 })
+ |> list.map(pair.first)
+ let num_leading_matches = list.length(leading_matches)
+ let trailing_matches =
+ list.zip(list.reverse(first_sequence), list.reverse(second_sequence))
+ |> list.take_while(fn(pair) { pair.0 == pair.1 })
+ |> list.map(pair.first)
+ |> list.reverse()
+ let num_trailing_matches = list.length(trailing_matches)
+ let first_sequence_to_diff =
+ first_sequence
+ |> list.drop(num_leading_matches)
+ |> list.take(
+ list.length(first_sequence) - num_leading_matches - num_trailing_matches,
+ )
+ let second_sequence_to_diff =
+ second_sequence
+ |> list.drop(num_leading_matches)
+ |> list.take(
+ list.length(second_sequence) - num_leading_matches - num_trailing_matches,
+ )
+
+ let diff_map =
+ second_sequence_to_diff
+ |> list.index_fold(
+ map.new(),
+ fn(diff_map, item_second, index_second) {
+ first_sequence_to_diff
+ |> list.index_fold(
+ diff_map,
+ fn(diff_map, item_first, index_first) {
+ build_diff_map(
+ item_first,
+ index_first,
+ item_second,
+ index_second,
+ diff_map,
+ )
+ },
+ )
+ },
+ )
+ let #(first_segments, second_segments) = case
+ first_sequence_to_diff,
+ second_sequence_to_diff
+ {
+ [], [] -> #([], [])
+ first_matching, [] -> #([NoMatch(first_matching)], [])
+ [], second_matching -> #([], [NoMatch(second_matching)])
+ first_sequence_to_diff, second_sequence_to_diff -> {
+ let tracking =
+ back_track(
+ diff_map,
+ list.length(first_sequence_to_diff) - 1,
+ list.length(second_sequence_to_diff) - 1,
+ [],
+ )
+ |> map.from_list()
+
+ let first_segments =
+ collect_matches(
+ tracking,
+ first_sequence_to_diff,
+ fn(key) {
+ let #(first, _) = key
+ first
+ },
+ )
+ let second_segments =
+ collect_matches(
+ tracking,
+ second_sequence_to_diff,
+ fn(key) {
+ let #(_, second) = key
+ second
+ },
+ )
+ #(first_segments, second_segments)
+ }
+ }
+
+ let #(
+ first_segments_with_leading_trailing,
+ second_segments_with_leading_trailing,
+ ) = case leading_matches, trailing_matches {
+ [], [] -> #(first_segments, second_segments)
+ [], trailing_matches -> #(
+ first_segments
+ |> append_and_merge(Match(trailing_matches)),
+ second_segments
+ |> append_and_merge(Match(trailing_matches)),
+ )
+ leading_matches, [] -> #(
+ first_segments
+ |> prepend_and_merge(Match(leading_matches)),
+ second_segments
+ |> prepend_and_merge(Match(leading_matches)),
+ )
+ leading_matches, trailing_matches -> #(
+ first_segments
+ |> prepend_and_merge(Match(leading_matches))
+ |> append_and_merge(Match(trailing_matches)),
+ second_segments
+ |> prepend_and_merge(Match(leading_matches))
+ |> append_and_merge(Match(trailing_matches)),
+ )
+ }
+
+ ListComparison(
+ first_segments_with_leading_trailing,
+ second_segments_with_leading_trailing,
+ )
+}
+
+fn prepend_and_merge(
+ matches: List(Match(List(a))),
+ match: Match(List(a)),
+) -> List(Match(List(a))) {
+ case matches, match {
+ [], _ -> [match]
+ [Match(first_match), ..rest], Match(_) -> [
+ Match(
+ match.item
+ |> list.append(first_match),
+ ),
+ ..rest
+ ]
+ [NoMatch(first_match), ..rest], NoMatch(_) -> [
+ NoMatch(
+ match.item
+ |> list.append(first_match),
+ ),
+ ..rest
+ ]
+ matches, match -> [match, ..matches]
+ }
+}
+
+fn append_and_merge(
+ matches: List(Match(List(a))),
+ match: Match(List(a)),
+) -> List(Match(List(a))) {
+ case
+ matches
+ |> list.reverse(),
+ match
+ {
+ [], _ -> [match]
+ [Match(first_match), ..rest], Match(_) -> [
+ Match(
+ first_match
+ |> list.append(match.item),
+ ),
+ ..rest
+ ]
+ [NoMatch(first_match), ..rest], NoMatch(_) -> [
+ NoMatch(
+ first_match
+ |> list.append(match.item),
+ ),
+ ..rest
+ ]
+ matches, match -> [match, ..matches]
+ }
+ |> list.reverse()
+}
+
+fn collect_matches(tracking, str: List(a), extract_fun) -> Segments(a) {
+ let matching_indexes =
+ map.keys(tracking)
+ |> list.map(extract_fun)
+ |> set.from_list()
+
+ let matches =
+ str
+ |> list.index_map(fn(index, item) {
+ case set.contains(matching_indexes, index) {
+ True -> Match(item)
+ False -> NoMatch(item)
+ }
+ })
+
+ matches
+ |> list.chunk(fn(match) {
+ case match {
+ Match(_) -> True
+ NoMatch(_) -> False
+ }
+ })
+ |> list.map(fn(match_list) {
+ case match_list {
+ [Match(_), ..] ->
+ Match(list.filter_map(
+ match_list,
+ fn(match) {
+ case match {
+ Match(item) -> Ok(item)
+ NoMatch(_) -> Error(Nil)
+ }
+ },
+ ))
+ [NoMatch(_), ..] ->
+ NoMatch(list.filter_map(
+ match_list,
+ fn(match) {
+ case match {
+ NoMatch(item) -> Ok(item)
+ Match(_) -> Error(Nil)
+ }
+ },
+ ))
+ }
+ })
+}
+
+fn back_track(
+ diff_map: DiffMap(a),
+ first_index: Int,
+ second_index: Int,
+ stack: List(MatchedItem(a)),
+) -> List(MatchedItem(a)) {
+ case first_index == 0 || second_index == 0 {
+ True -> {
+ let this_score =
+ map.get(diff_map, #(first_index, second_index))
+ |> result.unwrap(Score(0, None))
+ case this_score {
+ Score(_, Some(item)) -> [#(#(first_index, second_index), item), ..stack]
+ _ ->
+ case first_index, second_index {
+ 0, a if a > 0 ->
+ back_track(diff_map, first_index, second_index - 1, stack)
+ a, 0 if a > 0 ->
+ back_track(diff_map, first_index - 1, second_index, stack)
+ 0, 0 -> stack
+ _, _ -> back_track(diff_map, first_index - 1, second_index, stack)
+ }
+ }
+ }
+ False -> {
+ let this_score =
+ map.get(diff_map, #(first_index, second_index))
+ |> result.unwrap(Score(0, None))
+ case this_score {
+ Score(_, Some(item)) ->
+ back_track(
+ diff_map,
+ first_index - 1,
+ second_index - 1,
+ [#(#(first_index, second_index), item), ..stack],
+ )
+ Score(_, None) -> {
+ let up =
+ map.get(diff_map, #(first_index, second_index - 1))
+ |> result.unwrap(Score(0, None))
+ let back =
+ map.get(diff_map, #(first_index - 1, second_index))
+ |> result.unwrap(Score(0, None))
+ case int.compare(up.value, back.value) {
+ Gt -> back_track(diff_map, first_index, second_index - 1, stack)
+ Lt -> back_track(diff_map, first_index - 1, second_index, stack)
+ Eq ->
+ case first_index, second_index {
+ 0, a if a > 0 ->
+ back_track(diff_map, first_index, second_index - 1, stack)
+ a, 0 if a > 0 ->
+ back_track(diff_map, first_index - 1, second_index, stack)
+ 0, 0 -> stack
+ _, _ ->
+ back_track(diff_map, first_index - 1, second_index, stack)
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+fn build_diff_map(
+ first_item: a,
+ first_index: Int,
+ second_item: a,
+ second_index: Int,
+ diff_map: DiffMap(a),
+) -> DiffMap(a) {
+ let prev_score =
+ map.get(diff_map, #(first_index - 1, second_index - 1))
+ |> result.unwrap(Score(0, None))
+ let derived_score_up =
+ diff_map
+ |> map.get(#(first_index, second_index - 1))
+ |> result.unwrap(Score(0, None))
+ let derived_score_back =
+ diff_map
+ |> map.get(#(first_index - 1, second_index))
+ |> result.unwrap(Score(0, None))
+ let derived_score = int.max(derived_score_up.value, derived_score_back.value)
+ let this_score = case first_item == second_item {
+ True -> Score(prev_score.value + 1, Some(first_item))
+ False -> Score(derived_score, None)
+ }
+ diff_map
+ |> map.insert(#(first_index, second_index), this_score)
+}
diff --git a/aoc2023/build/packages/gap/src/gap/comparison.gleam b/aoc2023/build/packages/gap/src/gap/comparison.gleam
new file mode 100644
index 0000000..da30c29
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap/comparison.gleam
@@ -0,0 +1,22 @@
+/// Comparison of two strings or lists
+///
+/// The comparison consists of two lists of matched segments. The segments represent
+/// a sequence of succeeding matches or non-matches (up until the next match/non-match)
+///
+/// For lists the elements in the segment will be same as the elements in the list, and
+/// for strings the elements will be the graphemes of the string
+pub type Comparison(a) {
+ ListComparison(first: Segments(a), second: Segments(a))
+ StringComparison(first: Segments(String), second: Segments(String))
+}
+
+/// Indicating that the item has a matching (`Match`) or no matching (`NoMatch`) item in the
+/// other string/list
+pub type Match(a) {
+ Match(item: a)
+ NoMatch(item: a)
+}
+
+/// List of segments of succeeding matches / non-matches
+pub type Segments(a) =
+ List(Match(List(a)))
diff --git a/aoc2023/build/packages/gap/src/gap/myers.gleam b/aoc2023/build/packages/gap/src/gap/myers.gleam
new file mode 100644
index 0000000..f0b8ddc
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap/myers.gleam
@@ -0,0 +1,122 @@
+import gleam/list
+
+pub type Edit(a) {
+ Eq(List(a))
+ Del(List(a))
+ Ins(List(a))
+}
+
+type Path(a) {
+ Path(x: Int, y: Int, list1: List(a), list2: List(a), edits: List(Edit(a)))
+}
+
+type Status(a) {
+ Done(edits: List(Edit(a)))
+ Next(paths: List(Path(a)))
+ Cont(path: Path(a))
+}
+
+/// The algorithm is outlined in the
+/// "An O(ND) Difference Algorithm and Its Variations" paper by E. Myers.
+///
+/// Adapted from the implementation of "myers_difference" in Elixirs List module
+pub fn difference(list1: List(a), list2: List(a)) -> List(Edit(a)) {
+ let path = Path(0, 0, list1, list2, [])
+ find_script(0, list.length(list1) + list.length(list2), [path])
+}
+
+fn find_script(envelope: Int, max: Int, paths: List(Path(a))) {
+ case envelope > max {
+ True -> []
+ False -> {
+ case each_diagonal(-envelope, envelope, paths, []) {
+ Done(edits) -> compact_reverse(edits, [])
+ Next(paths) -> find_script(envelope + 1, max, paths)
+ _ -> panic as "Didn't expect a Cont here"
+ }
+ }
+ }
+}
+
+fn compact_reverse(edits: List(Edit(a)), acc: List(Edit(a))) -> List(Edit(a)) {
+ case edits, acc {
+ [], acc -> acc
+ [Eq(elem), ..rest], [Eq(result), ..acc_rest] ->
+ compact_reverse(rest, [Eq(list.flatten([elem, result])), ..acc_rest])
+ [Del(elem), ..rest], [Del(result), ..acc_rest] ->
+ compact_reverse(rest, [Del(list.flatten([elem, result])), ..acc_rest])
+ [Ins(elem), ..rest], [Ins(result), ..acc_rest] ->
+ compact_reverse(rest, [Ins(list.flatten([elem, result])), ..acc_rest])
+ [Eq(elem), ..rest], acc -> compact_reverse(rest, [Eq(elem), ..acc])
+ [Del(elem), ..rest], acc -> compact_reverse(rest, [Del(elem), ..acc])
+ [Ins(elem), ..rest], acc -> compact_reverse(rest, [Ins(elem), ..acc])
+ }
+}
+
+fn each_diagonal(
+ diag: Int,
+ limit: Int,
+ paths: List(Path(a)),
+ next_paths: List(Path(a)),
+) -> Status(a) {
+ case diag > limit {
+ True -> Next(list.reverse(next_paths))
+ False -> {
+ let #(path, rest) = proceed_path(diag, limit, paths)
+ case follow_snake(path) {
+ Cont(path) -> each_diagonal(diag + 2, limit, rest, [path, ..next_paths])
+ other -> other
+ }
+ }
+ }
+}
+
+fn proceed_path(
+ diag: Int,
+ limit: Int,
+ paths: List(Path(a)),
+) -> #(Path(a), List(Path(a))) {
+ let neg_limit = -limit
+ case diag, limit, paths {
+ 0, 0, [path] -> #(path, [])
+ diag, _limit, [path, ..] as paths if diag == neg_limit -> #(
+ move_down(path),
+ paths,
+ )
+ diag, limit, [path, ..] as paths if diag == limit -> #(
+ move_right(path),
+ paths,
+ )
+ _diag, _limit, [path1, path2, ..rest] -> {
+ case path1.y > path2.y {
+ True -> #(move_right(path1), [path2, ..rest])
+ False -> #(move_down(path2), [path2, ..rest])
+ }
+ }
+ }
+}
+
+fn move_right(path: Path(a)) -> Path(a) {
+ case path {
+ Path(x, y, list1, [elem, ..rest], edits) ->
+ Path(x + 1, y, list1, rest, [Ins([elem]), ..edits])
+ Path(x, y, list1, [], edits) -> Path(x + 1, y, list1, [], edits)
+ }
+}
+
+fn move_down(path: Path(a)) -> Path(a) {
+ case path {
+ Path(x, y, [elem, ..rest], list2, edits) ->
+ Path(x, y + 1, rest, list2, [Del([elem]), ..edits])
+ Path(x, y, [], list2, edits) -> Path(x, y + 1, [], list2, edits)
+ }
+}
+
+fn follow_snake(path: Path(a)) -> Status(a) {
+ case path {
+ Path(x, y, [elem1, ..rest1], [elem2, ..rest2], edits) if elem1 == elem2 ->
+ follow_snake(Path(x + 1, y + 1, rest1, rest2, [Eq([elem1]), ..edits]))
+ Path(_x, _y, [], [], edits) -> Done(edits)
+ _ -> Cont(path)
+ }
+}
diff --git a/aoc2023/build/packages/gap/src/gap/styled_comparison.gleam b/aoc2023/build/packages/gap/src/gap/styled_comparison.gleam
new file mode 100644
index 0000000..7103c2e
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap/styled_comparison.gleam
@@ -0,0 +1,4 @@
+/// A comparison where the parts have been styled (serialized and highlighted)
+pub type StyledComparison {
+ StyledComparison(first: String, second: String)
+}
diff --git a/aoc2023/build/packages/gap/src/gap/styling.gleam b/aoc2023/build/packages/gap/src/gap/styling.gleam
new file mode 100644
index 0000000..623ae8a
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap/styling.gleam
@@ -0,0 +1,233 @@
+import gleam/option.{type Option, None, Some}
+import gleam/list
+import gleam/string
+import gleam_community/ansi
+import gap/comparison.{
+ type Comparison, type Segments, ListComparison, Match, NoMatch,
+ StringComparison,
+}
+import gap/styled_comparison.{type StyledComparison, StyledComparison}
+
+/// The `Highlighter`takes a string representation of the item that was not matching
+/// and should return a string representation that can be used to visually indicate that
+/// it is a non-matching item.
+///
+/// The default implementation of the highlighters uses the
+/// [gleam_community/ansi](https://hexdocs.pm/gleam_community_ansi/index.html) library
+/// to set a different color for the item, but any type if indication can be used as long
+/// as it returns a valid string
+pub type Highlighter =
+ fn(String) -> String
+
+/// `Part` is used to indicate to a custom serializer if it should produce a serialization
+/// based on a segment with items or the final string that contains already serialized segments
+pub type Part(a) {
+ /// `acc` the already serialized part of the result, `part` is the current segment that should be serialized and appended and `highlighter` is the `Highlighter` that can be used to indicate non-matching items
+ Part(acc: String, part: List(a), highlight: Highlighter)
+ /// `all` is a string representing all serialized segments. This can be useful if some string should be prepended/appended to the final result
+ All(all: String)
+}
+
+/// A `Serializer`can be used to create string representation of the comparison results
+///
+/// See [serialize](#serialize) for adding custom serializers and [mk_generic_serializer](#mk_generic_serializer)
+pub type Serializer(a) =
+ fn(Part(a)) -> String
+
+/// Highlighters to use for indicating matches / non-matches
+///
+/// `first` is used to highlight non-matches in the first string/list
+/// `second` is used to highlight non-matches in the second string/list
+/// `matching` is used to highlight matches in the both strings/lists
+pub type Highlighters {
+ Highlighters(first: Highlighter, second: Highlighter, matching: Highlighter)
+}
+
+/// Styling of a `Comparison`
+///
+/// See [from_comparison](#from_comparison)
+pub opaque type Styling(a) {
+ Styling(
+ comparison: Comparison(a),
+ serializer: Option(Serializer(a)),
+ highlight: Option(Highlighters),
+ )
+}
+
+/// Create a new `Styling` from a `Comparison`
+///
+/// The `Styling` can be customized by adding highlighters and a serializer
+/// See [highlight](#highlight) and [serialize](#serialize)
+pub fn from_comparison(comparison: Comparison(a)) -> Styling(a) {
+ Styling(comparison, None, None)
+}
+
+/// Add highlighters to the `Styling`
+///
+/// The highlighters are used to mark the matching/non-matching items in the
+/// first/second list/string
+pub fn highlight(
+ styling: Styling(a),
+ first: Highlighter,
+ second: Highlighter,
+ matching: Highlighter,
+) -> Styling(a) {
+ Styling(..styling, highlight: Some(Highlighters(first, second, matching)))
+}
+
+/// Add a serializer to the `Styling`
+///
+/// The serializer is used to create string representation of the items in the segments of the `Comparison`
+/// See [Part](#part) for details
+///
+/// > **NOTE:** `StringComparison` will always use the default string serializer (concatenating the graphemes).
+/// > If there is a need for custom serialization of `StringComparison` convert the string to a list of
+/// > graphemes and treat it as a `ListComparison`
+pub fn serialize(styling: Styling(a), serializer: Serializer(a)) -> Styling(a) {
+ Styling(..styling, serializer: Some(serializer))
+}
+
+/// Creates a styled comparison using either custom highlighters/serializer if they where added or default
+/// highlighters and/or serializer
+pub fn to_styled_comparison(styling: Styling(a)) -> StyledComparison {
+ let highlight =
+ styling.highlight
+ |> option.unwrap(Highlighters(
+ first_highlight_default,
+ second_highlight_default,
+ no_highlight,
+ ))
+ case styling.comparison {
+ StringComparison(first, second) ->
+ to_strings(
+ first,
+ second,
+ // NOTE: Using string serializer here because otherwise we need to have a specific string serializer on the styling
+ string_serializer,
+ highlight.first,
+ highlight.second,
+ highlight.matching,
+ )
+ ListComparison(first, second) ->
+ to_strings(
+ first,
+ second,
+ option.unwrap(styling.serializer, generic_serializer),
+ highlight.first,
+ highlight.second,
+ highlight.matching,
+ )
+ }
+}
+
+/// Default highlighter for the first string/list in the comparison
+pub fn first_highlight_default(string: String) -> String {
+ case string {
+ " " ->
+ string
+ |> ansi.underline()
+ |> ansi.bold()
+ |> ansi.green()
+
+ _ ->
+ string
+ |> ansi.green()
+ |> ansi.bold()
+ }
+}
+
+/// Default highlighter for the second string/list in the comparison
+pub fn second_highlight_default(string: String) -> String {
+ case string {
+ " " ->
+ string
+ |> ansi.underline()
+ |> ansi.bold()
+ |> ansi.red()
+
+ _ ->
+ string
+ |> ansi.red()
+ |> ansi.bold()
+ }
+}
+
+/// Default highlighter used for matching items
+pub fn no_highlight(string: String) -> String {
+ string
+}
+
+fn string_serializer(part: Part(String)) -> String {
+ case part {
+ Part(acc, sequence, highlight) ->
+ acc <> {
+ sequence
+ |> list.map(highlight)
+ |> string.join("")
+ }
+ All(string) -> string
+ }
+}
+
+fn generic_serializer(part: Part(a)) -> String {
+ mk_generic_serializer(", ", fn(all) { "[" <> all <> "]" })(part)
+}
+
+/// Creates a generic serializer that uses `separator` between all items and calls
+/// `around` for possibility to prepend/append strings to the final result
+pub fn mk_generic_serializer(separator: String, around: fn(String) -> String) {
+ fn(part) {
+ case part {
+ Part(acc, sequence, highlight) -> {
+ let segment_separator = case acc {
+ "" -> ""
+ _ -> separator
+ }
+ acc <> segment_separator <> {
+ sequence
+ |> list.map(string.inspect)
+ |> list.map(highlight)
+ |> string.join(separator)
+ }
+ }
+ All(string) -> around(string)
+ }
+ }
+}
+
+fn to_strings(
+ first: Segments(a),
+ second: Segments(a),
+ serializer: Serializer(a),
+ first_highlight: Highlighter,
+ second_highlight: Highlighter,
+ no_highlight: Highlighter,
+) -> StyledComparison {
+ let first_styled =
+ first
+ |> list.fold(
+ "",
+ fn(str, match) {
+ case match {
+ Match(item) -> serializer(Part(str, item, no_highlight))
+ NoMatch(item) -> serializer(Part(str, item, first_highlight))
+ }
+ },
+ )
+ let second_styled =
+ second
+ |> list.fold(
+ "",
+ fn(str, match) {
+ case match {
+ Match(item) -> serializer(Part(str, item, no_highlight))
+ NoMatch(item) -> serializer(Part(str, item, second_highlight))
+ }
+ },
+ )
+
+ StyledComparison(
+ serializer(All(first_styled)),
+ serializer(All(second_styled)),
+ )
+}
diff --git a/aoc2023/build/packages/gap/src/gap@comparison.erl b/aoc2023/build/packages/gap/src/gap@comparison.erl
new file mode 100644
index 0000000..36bd1c3
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap@comparison.erl
@@ -0,0 +1,15 @@
+-module(gap@comparison).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([comparison/1, match/1]).
+
+-type comparison(FQT) :: {list_comparison,
+ list(match(list(FQT))),
+ list(match(list(FQT)))} |
+ {string_comparison,
+ list(match(list(binary()))),
+ list(match(list(binary())))}.
+
+-type match(FQU) :: {match, FQU} | {no_match, FQU}.
+
+
diff --git a/aoc2023/build/packages/gap/src/gap@myers.erl b/aoc2023/build/packages/gap/src/gap@myers.erl
new file mode 100644
index 0000000..6a8ad35
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap@myers.erl
@@ -0,0 +1,156 @@
+-module(gap@myers).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([difference/2]).
+-export_type([edit/1, path/1, status/1]).
+
+-type edit(FUV) :: {eq, list(FUV)} | {del, list(FUV)} | {ins, list(FUV)}.
+
+-type path(FUW) :: {path,
+ integer(),
+ integer(),
+ list(FUW),
+ list(FUW),
+ list(edit(FUW))}.
+
+-type status(FUX) :: {done, list(edit(FUX))} |
+ {next, list(path(FUX))} |
+ {cont, path(FUX)}.
+
+-spec compact_reverse(list(edit(FVH)), list(edit(FVH))) -> list(edit(FVH)).
+compact_reverse(Edits, Acc) ->
+ case {Edits, Acc} of
+ {[], Acc@1} ->
+ Acc@1;
+
+ {[{eq, Elem} | Rest], [{eq, Result} | Acc_rest]} ->
+ compact_reverse(
+ Rest,
+ [{eq, gleam@list:flatten([Elem, Result])} | Acc_rest]
+ );
+
+ {[{del, Elem@1} | Rest@1], [{del, Result@1} | Acc_rest@1]} ->
+ compact_reverse(
+ Rest@1,
+ [{del, gleam@list:flatten([Elem@1, Result@1])} | Acc_rest@1]
+ );
+
+ {[{ins, Elem@2} | Rest@2], [{ins, Result@2} | Acc_rest@2]} ->
+ compact_reverse(
+ Rest@2,
+ [{ins, gleam@list:flatten([Elem@2, Result@2])} | Acc_rest@2]
+ );
+
+ {[{eq, Elem@3} | Rest@3], Acc@2} ->
+ compact_reverse(Rest@3, [{eq, Elem@3} | Acc@2]);
+
+ {[{del, Elem@4} | Rest@4], Acc@3} ->
+ compact_reverse(Rest@4, [{del, Elem@4} | Acc@3]);
+
+ {[{ins, Elem@5} | Rest@5], Acc@4} ->
+ compact_reverse(Rest@5, [{ins, Elem@5} | Acc@4])
+ end.
+
+-spec move_right(path(FWA)) -> path(FWA).
+move_right(Path) ->
+ case Path of
+ {path, X, Y, List1, [Elem | Rest], Edits} ->
+ {path, X + 1, Y, List1, Rest, [{ins, [Elem]} | Edits]};
+
+ {path, X@1, Y@1, List1@1, [], Edits@1} ->
+ {path, X@1 + 1, Y@1, List1@1, [], Edits@1}
+ end.
+
+-spec move_down(path(FWD)) -> path(FWD).
+move_down(Path) ->
+ case Path of
+ {path, X, Y, [Elem | Rest], List2, Edits} ->
+ {path, X, Y + 1, Rest, List2, [{del, [Elem]} | Edits]};
+
+ {path, X@1, Y@1, [], List2@1, Edits@1} ->
+ {path, X@1, Y@1 + 1, [], List2@1, Edits@1}
+ end.
+
+-spec proceed_path(integer(), integer(), list(path(FVU))) -> {path(FVU),
+ list(path(FVU))}.
+proceed_path(Diag, Limit, Paths) ->
+ Neg_limit = - Limit,
+ case {Diag, Limit, Paths} of
+ {0, 0, [Path]} ->
+ {Path, []};
+
+ {Diag@1, _, [Path@1 | _] = Paths@1} when Diag@1 =:= Neg_limit ->
+ {move_down(Path@1), Paths@1};
+
+ {Diag@2, Limit@1, [Path@2 | _] = Paths@2} when Diag@2 =:= Limit@1 ->
+ {move_right(Path@2), Paths@2};
+
+ {_, _, [Path1, Path2 | Rest]} ->
+ case erlang:element(3, Path1) > erlang:element(3, Path2) of
+ true ->
+ {move_right(Path1), [Path2 | Rest]};
+
+ false ->
+ {move_down(Path2), [Path2 | Rest]}
+ end
+ end.
+
+-spec follow_snake(path(FWG)) -> status(FWG).
+follow_snake(Path) ->
+ case Path of
+ {path, X, Y, [Elem1 | Rest1], [Elem2 | Rest2], Edits} when Elem1 =:= Elem2 ->
+ follow_snake(
+ {path, X + 1, Y + 1, Rest1, Rest2, [{eq, [Elem1]} | Edits]}
+ );
+
+ {path, _, _, [], [], Edits@1} ->
+ {done, Edits@1};
+
+ _ ->
+ {cont, Path}
+ end.
+
+-spec each_diagonal(integer(), integer(), list(path(FVO)), list(path(FVO))) -> status(FVO).
+each_diagonal(Diag, Limit, Paths, Next_paths) ->
+ case Diag > Limit of
+ true ->
+ {next, gleam@list:reverse(Next_paths)};
+
+ false ->
+ {Path, Rest} = proceed_path(Diag, Limit, Paths),
+ case follow_snake(Path) of
+ {cont, Path@1} ->
+ each_diagonal(Diag + 2, Limit, Rest, [Path@1 | Next_paths]);
+
+ Other ->
+ Other
+ end
+ end.
+
+-spec find_script(integer(), integer(), list(path(FVD))) -> list(edit(FVD)).
+find_script(Envelope, Max, Paths) ->
+ case Envelope > Max of
+ true ->
+ [];
+
+ false ->
+ case each_diagonal(- Envelope, Envelope, Paths, []) of
+ {done, Edits} ->
+ compact_reverse(Edits, []);
+
+ {next, Paths@1} ->
+ find_script(Envelope + 1, Max, Paths@1);
+
+ _ ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"Didn't expect a Cont here"/utf8>>,
+ module => <<"gap/myers"/utf8>>,
+ function => <<"find_script"/utf8>>,
+ line => 35})
+ end
+ end.
+
+-spec difference(list(FUY), list(FUY)) -> list(edit(FUY)).
+difference(List1, List2) ->
+ Path = {path, 0, 0, List1, List2, []},
+ find_script(0, gleam@list:length(List1) + gleam@list:length(List2), [Path]).
diff --git a/aoc2023/build/packages/gap/src/gap@styled_comparison.erl b/aoc2023/build/packages/gap/src/gap@styled_comparison.erl
new file mode 100644
index 0000000..14cc390
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap@styled_comparison.erl
@@ -0,0 +1,8 @@
+-module(gap@styled_comparison).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([styled_comparison/0]).
+
+-type styled_comparison() :: {styled_comparison, binary(), binary()}.
+
+
diff --git a/aoc2023/build/packages/gap/src/gap@styling.erl b/aoc2023/build/packages/gap/src/gap@styling.erl
new file mode 100644
index 0000000..ba226c3
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap@styling.erl
@@ -0,0 +1,202 @@
+-module(gap@styling).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_comparison/1, highlight/4, serialize/2, first_highlight_default/1, second_highlight_default/1, no_highlight/1, mk_generic_serializer/2, to_styled_comparison/1]).
+-export_type([part/1, highlighters/0, styling/1]).
+
+-type part(FRE) :: {part, binary(), list(FRE), fun((binary()) -> binary())} |
+ {all, binary()}.
+
+-type highlighters() :: {highlighters,
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary())}.
+
+-opaque styling(FRF) :: {styling,
+ gap@comparison:comparison(FRF),
+ gleam@option:option(fun((part(FRF)) -> binary())),
+ gleam@option:option(highlighters())}.
+
+-spec from_comparison(gap@comparison:comparison(FRI)) -> styling(FRI).
+from_comparison(Comparison) ->
+ {styling, Comparison, none, none}.
+
+-spec highlight(
+ styling(FRL),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary())
+) -> styling(FRL).
+highlight(Styling, First, Second, Matching) ->
+ erlang:setelement(
+ 4,
+ Styling,
+ {some, {highlighters, First, Second, Matching}}
+ ).
+
+-spec serialize(styling(FRO), fun((part(FRO)) -> binary())) -> styling(FRO).
+serialize(Styling, Serializer) ->
+ erlang:setelement(3, Styling, {some, Serializer}).
+
+-spec first_highlight_default(binary()) -> binary().
+first_highlight_default(String) ->
+ case String of
+ <<" "/utf8>> ->
+ _pipe = String,
+ _pipe@1 = gleam_community@ansi:underline(_pipe),
+ _pipe@2 = gleam_community@ansi:bold(_pipe@1),
+ gleam_community@ansi:green(_pipe@2);
+
+ _ ->
+ _pipe@3 = String,
+ _pipe@4 = gleam_community@ansi:green(_pipe@3),
+ gleam_community@ansi:bold(_pipe@4)
+ end.
+
+-spec second_highlight_default(binary()) -> binary().
+second_highlight_default(String) ->
+ case String of
+ <<" "/utf8>> ->
+ _pipe = String,
+ _pipe@1 = gleam_community@ansi:underline(_pipe),
+ _pipe@2 = gleam_community@ansi:bold(_pipe@1),
+ gleam_community@ansi:red(_pipe@2);
+
+ _ ->
+ _pipe@3 = String,
+ _pipe@4 = gleam_community@ansi:red(_pipe@3),
+ gleam_community@ansi:bold(_pipe@4)
+ end.
+
+-spec no_highlight(binary()) -> binary().
+no_highlight(String) ->
+ String.
+
+-spec string_serializer(part(binary())) -> binary().
+string_serializer(Part) ->
+ case Part of
+ {part, Acc, Sequence, Highlight} ->
+ <<Acc/binary,
+ (begin
+ _pipe = Sequence,
+ _pipe@1 = gleam@list:map(_pipe, Highlight),
+ gleam@string:join(_pipe@1, <<""/utf8>>)
+ end)/binary>>;
+
+ {all, String} ->
+ String
+ end.
+
+-spec mk_generic_serializer(binary(), fun((binary()) -> binary())) -> fun((part(any())) -> binary()).
+mk_generic_serializer(Separator, Around) ->
+ fun(Part) -> case Part of
+ {part, Acc, Sequence, Highlight} ->
+ Segment_separator = case Acc of
+ <<""/utf8>> ->
+ <<""/utf8>>;
+
+ _ ->
+ Separator
+ end,
+ <<<<Acc/binary, Segment_separator/binary>>/binary,
+ (begin
+ _pipe = Sequence,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun gleam@string:inspect/1
+ ),
+ _pipe@2 = gleam@list:map(_pipe@1, Highlight),
+ gleam@string:join(_pipe@2, Separator)
+ end)/binary>>;
+
+ {all, String} ->
+ Around(String)
+ end end.
+
+-spec generic_serializer(part(any())) -> binary().
+generic_serializer(Part) ->
+ (mk_generic_serializer(
+ <<", "/utf8>>,
+ fun(All) -> <<<<"["/utf8, All/binary>>/binary, "]"/utf8>> end
+ ))(Part).
+
+-spec to_strings(
+ list(gap@comparison:match(list(FRY))),
+ list(gap@comparison:match(list(FRY))),
+ fun((part(FRY)) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary()),
+ fun((binary()) -> binary())
+) -> gap@styled_comparison:styled_comparison().
+to_strings(
+ First,
+ Second,
+ Serializer,
+ First_highlight,
+ Second_highlight,
+ No_highlight
+) ->
+ First_styled = begin
+ _pipe = First,
+ gleam@list:fold(_pipe, <<""/utf8>>, fun(Str, Match) -> case Match of
+ {match, Item} ->
+ Serializer({part, Str, Item, No_highlight});
+
+ {no_match, Item@1} ->
+ Serializer({part, Str, Item@1, First_highlight})
+ end end)
+ end,
+ Second_styled = begin
+ _pipe@1 = Second,
+ gleam@list:fold(
+ _pipe@1,
+ <<""/utf8>>,
+ fun(Str@1, Match@1) -> case Match@1 of
+ {match, Item@2} ->
+ Serializer({part, Str@1, Item@2, No_highlight});
+
+ {no_match, Item@3} ->
+ Serializer({part, Str@1, Item@3, Second_highlight})
+ end end
+ )
+ end,
+ {styled_comparison,
+ Serializer({all, First_styled}),
+ Serializer({all, Second_styled})}.
+
+-spec to_styled_comparison(styling(any())) -> gap@styled_comparison:styled_comparison().
+to_styled_comparison(Styling) ->
+ Highlight = begin
+ _pipe = erlang:element(4, Styling),
+ gleam@option:unwrap(
+ _pipe,
+ {highlighters,
+ fun first_highlight_default/1,
+ fun second_highlight_default/1,
+ fun no_highlight/1}
+ )
+ end,
+ case erlang:element(2, Styling) of
+ {string_comparison, First, Second} ->
+ to_strings(
+ First,
+ Second,
+ fun string_serializer/1,
+ erlang:element(2, Highlight),
+ erlang:element(3, Highlight),
+ erlang:element(4, Highlight)
+ );
+
+ {list_comparison, First@1, Second@1} ->
+ to_strings(
+ First@1,
+ Second@1,
+ gleam@option:unwrap(
+ erlang:element(3, Styling),
+ fun generic_serializer/1
+ ),
+ erlang:element(2, Highlight),
+ erlang:element(3, Highlight),
+ erlang:element(4, Highlight)
+ )
+ end.
diff --git a/aoc2023/build/packages/gap/src/gap_ffi.mjs b/aoc2023/build/packages/gap/src/gap_ffi.mjs
new file mode 100644
index 0000000..235c80b
--- /dev/null
+++ b/aoc2023/build/packages/gap/src/gap_ffi.mjs
@@ -0,0 +1,431 @@
+import {
+ Error,
+ List,
+ Ok,
+ inspect,
+ toList,
+ makeError,
+ isEqual,
+} from "./gleam.mjs";
+import * as $option from "../gleam_stdlib/gleam/option.mjs";
+
+const HASHCODE_CACHE = new WeakMap();
+const Nil = undefined;
+
+class MutableMap {
+ static #hashcode_cache = new WeakMap();
+
+ static hash(value) {
+ let existing = this.#hashcode_cache.get(value);
+ if (existing) {
+ return existing;
+ } else if (value instanceof Object) {
+ let hashcode = inspect(value);
+ HASHCODE_CACHE.set(value, hashcode);
+ return hashcode;
+ } else {
+ return value.toString();
+ }
+ }
+
+ constructor() {
+ this.entries = new globalThis.Map();
+ }
+
+ get size() {
+ return this.entries.size;
+ }
+
+ inspect() {
+ let entries = [...this.entries.values()]
+ .map((pair) => inspect(pair))
+ .join(", ");
+ return `map.from_list([${entries}])`;
+ }
+
+ toList() {
+ return List.fromArray([...this.entries.values()]);
+ }
+
+ insert(k, v) {
+ this.entries.set(MutableMap.hash(k), [k, v]);
+ return this;
+ }
+
+ delete(k) {
+ this.entries.delete(MutableMap.hash(k));
+ return this;
+ }
+
+ get(key) {
+ let code = MutableMap.hash(key);
+ if (this.entries.has(code)) {
+ return new Ok(this.entries.get(code)[1]);
+ } else {
+ return new Error(Nil);
+ }
+ }
+}
+
+export function new_mutable_map() {
+ return new MutableMap();
+}
+
+export function mutable_map_size(map) {
+ return map.size;
+}
+
+export function mutable_map_to_list(map) {
+ return map.toList();
+}
+
+export function mutable_map_remove(k, map) {
+ return map.delete(k);
+}
+
+export function mutable_map_get(map, key) {
+ return map.get(key);
+}
+
+export function mutable_map_insert(key, value, map) {
+ return map.insert(key, value);
+}
+
+// From map.mjs
+
+export function size(map) {
+ return mutable_map_size(map);
+}
+
+export function to_list(map) {
+ return mutable_map_to_list(map);
+}
+
+export function new$() {
+ return new_mutable_map();
+}
+
+export function get(from, get) {
+ return mutable_map_get(from, get);
+}
+
+function do_has_key(key, map) {
+ return !isEqual(get(map, key), new Error(undefined));
+}
+
+export function has_key(map, key) {
+ return do_has_key(key, map);
+}
+
+export function insert(map, key, value) {
+ return mutable_map_insert(key, value, map);
+}
+
+function insert_pair(map, pair) {
+ return insert(map, pair[0], pair[1]);
+}
+
+export function update(map, key, fun) {
+ let _pipe = map;
+ let _pipe$1 = get(_pipe, key);
+ let _pipe$2 = $option.from_result(_pipe$1);
+ let _pipe$3 = fun(_pipe$2);
+ return ((_capture) => {
+ return insert(map, key, _capture);
+ })(_pipe$3);
+}
+
+export function delete$(map, key) {
+ return mutable_map_remove(key, map);
+}
+
+function fold_list_of_pair(loop$list, loop$initial) {
+ while (true) {
+ let list = loop$list;
+ let initial = loop$initial;
+ if (list.hasLength(0)) {
+ return initial;
+ } else if (list.atLeastLength(1)) {
+ let x = list.head;
+ let rest = list.tail;
+ loop$list = rest;
+ loop$initial = insert(initial, x[0], x[1]);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 98,
+ "fold_list_of_pair",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+function do_from_list(list) {
+ return fold_list_of_pair(list, new$());
+}
+
+export function from_list(list) {
+ return do_from_list(list);
+}
+
+function do_fold(loop$list, loop$initial, loop$fun) {
+ while (true) {
+ let list = loop$list;
+ let initial = loop$initial;
+ let fun = loop$fun;
+ if (list.hasLength(0)) {
+ return initial;
+ } else if (list.atLeastLength(1)) {
+ let k = list.head[0];
+ let v = list.head[1];
+ let tail = list.tail;
+ loop$list = tail;
+ loop$initial = fun(initial, k, v);
+ loop$fun = fun;
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 558,
+ "do_fold",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+export function fold(map, initial, fun) {
+ let _pipe = map;
+ let _pipe$1 = to_list(_pipe);
+ return do_fold(_pipe$1, initial, fun);
+}
+
+function do_map_values(f, map) {
+ let f$1 = (map, k, v) => {
+ return insert(map, k, f(k, v));
+ };
+ let _pipe = map;
+ return fold(_pipe, new$(), f$1);
+}
+
+export function map_values(map, fun) {
+ return do_map_values(fun, map);
+}
+
+function do_filter(f, map) {
+ let insert$1 = (map, k, v) => {
+ let $ = f(k, v);
+ if ($) {
+ return insert(map, k, v);
+ } else {
+ return map;
+ }
+ };
+ let _pipe = map;
+ return fold(_pipe, new$(), insert$1);
+}
+
+export function filter(map, property) {
+ return do_filter(property, map);
+}
+
+function do_keys_acc(loop$list, loop$acc) {
+ while (true) {
+ let list = loop$list;
+ let acc = loop$acc;
+ if (list.hasLength(0)) {
+ return reverse_and_concat(acc, toList([]));
+ } else if (list.atLeastLength(1)) {
+ let x = list.head;
+ let xs = list.tail;
+ loop$list = xs;
+ loop$acc = toList([x[0]], acc);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 276,
+ "do_keys_acc",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+function do_keys(map) {
+ let list_of_pairs = (() => {
+ let _pipe = map;
+ return to_list(_pipe);
+ })();
+ return do_keys_acc(list_of_pairs, toList([]));
+}
+
+export function keys(map) {
+ return do_keys(map);
+}
+
+function reverse_and_concat(loop$remaining, loop$accumulator) {
+ while (true) {
+ let remaining = loop$remaining;
+ let accumulator = loop$accumulator;
+ if (remaining.hasLength(0)) {
+ return accumulator;
+ } else if (remaining.atLeastLength(1)) {
+ let item = remaining.head;
+ let rest = remaining.tail;
+ loop$remaining = rest;
+ loop$accumulator = toList([item], accumulator);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 269,
+ "reverse_and_concat",
+ "No case clause matched",
+ { values: [remaining] }
+ );
+ }
+ }
+}
+
+function do_values_acc(loop$list, loop$acc) {
+ while (true) {
+ let list = loop$list;
+ let acc = loop$acc;
+ if (list.hasLength(0)) {
+ return reverse_and_concat(acc, toList([]));
+ } else if (list.atLeastLength(1)) {
+ let x = list.head;
+ let xs = list.tail;
+ loop$list = xs;
+ loop$acc = toList([x[1]], acc);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 314,
+ "do_values_acc",
+ "No case clause matched",
+ { values: [list] }
+ );
+ }
+ }
+}
+
+function do_values(map) {
+ let list_of_pairs = (() => {
+ let _pipe = map;
+ return to_list(_pipe);
+ })();
+ return do_values_acc(list_of_pairs, toList([]));
+}
+
+export function values(map) {
+ return do_values(map);
+}
+
+function insert_taken(loop$map, loop$desired_keys, loop$acc) {
+ while (true) {
+ let map = loop$map;
+ let desired_keys = loop$desired_keys;
+ let acc = loop$acc;
+ let insert$1 = (taken, key) => {
+ let $ = get(map, key);
+ if ($.isOk()) {
+ let value = $[0];
+ return insert(taken, key, value);
+ } else {
+ return taken;
+ }
+ };
+ if (desired_keys.hasLength(0)) {
+ return acc;
+ } else if (desired_keys.atLeastLength(1)) {
+ let x = desired_keys.head;
+ let xs = desired_keys.tail;
+ loop$map = map;
+ loop$desired_keys = xs;
+ loop$acc = insert$1(acc, x);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 411,
+ "insert_taken",
+ "No case clause matched",
+ { values: [desired_keys] }
+ );
+ }
+ }
+}
+
+function do_take(desired_keys, map) {
+ return insert_taken(map, desired_keys, new$());
+}
+
+export function take(map, desired_keys) {
+ return do_take(desired_keys, map);
+}
+
+function fold_inserts(loop$new_entries, loop$map) {
+ while (true) {
+ let new_entries = loop$new_entries;
+ let map = loop$map;
+ if (new_entries.hasLength(0)) {
+ return map;
+ } else if (new_entries.atLeastLength(1)) {
+ let x = new_entries.head;
+ let xs = new_entries.tail;
+ loop$new_entries = xs;
+ loop$map = insert_pair(map, x);
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 451,
+ "fold_inserts",
+ "No case clause matched",
+ { values: [new_entries] }
+ );
+ }
+ }
+}
+
+function do_merge(map, new_entries) {
+ let _pipe = new_entries;
+ let _pipe$1 = to_list(_pipe);
+ return fold_inserts(_pipe$1, map);
+}
+
+export function merge(map, new_entries) {
+ return do_merge(map, new_entries);
+}
+
+export function drop(loop$map, loop$disallowed_keys) {
+ while (true) {
+ let map = loop$map;
+ let disallowed_keys = loop$disallowed_keys;
+ if (disallowed_keys.hasLength(0)) {
+ return map;
+ } else if (disallowed_keys.atLeastLength(1)) {
+ let x = disallowed_keys.head;
+ let xs = disallowed_keys.tail;
+ loop$map = delete$(map, x);
+ loop$disallowed_keys = xs;
+ } else {
+ throw makeError(
+ "case_no_match",
+ "gleam/map",
+ 514,
+ "drop",
+ "No case clause matched",
+ { values: [disallowed_keys] }
+ );
+ }
+ }
+}
diff --git a/aoc2023/build/packages/gleam.lock b/aoc2023/build/packages/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/packages/gleam.lock
diff --git a/aoc2023/build/packages/gleam_community_ansi/LICENCE b/aoc2023/build/packages/gleam_community_ansi/LICENCE
new file mode 100644
index 0000000..a84f0ec
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_ansi/LICENCE
@@ -0,0 +1,190 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2023 Gleam Community Contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. \ No newline at end of file
diff --git a/aoc2023/build/packages/gleam_community_ansi/README.md b/aoc2023/build/packages/gleam_community_ansi/README.md
new file mode 100644
index 0000000..90ab0d5
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_ansi/README.md
@@ -0,0 +1,72 @@
+# gleam-community/ansi
+
+Format text with ANSI escape sequences.
+
+[![Package Version](https://img.shields.io/hexpm/v/gleam_community_ansi)](https://hex.pm/packages/gleam_community_ansi)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gleam_community_ansi/)
+
+✨ This project is written in _pure Gleam_ so you can use it anywhere Gleam runs:
+Erlang, Elixir, Node, Deno, even [some browsers](https://bit.ly/devtools-console-ansi-support)!
+
+---
+
+## Quickstart
+
+```gleam
+import gleam/io
+import gleam_community/ansi
+
+pub fn main() {
+ let greeting = "Hello, " <> ansi.pink("world") <> "!"
+
+ greeting
+ |> ansi.bg_white
+ |> io.println
+}
+
+```
+
+## Installation
+
+`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_ansi)
+with the prefix `gleam_community_`. You can add them to your Gleam projects directly:
+
+```sh
+gleam add gleam_community_ansi
+```
+
+The docs can be found over at [hexdocs.pm](https://hexdocs.pm/gleam_community_ansi).
+
+## ANSI-what?
+
+ANSI escape sequences date back to the 70s as a standard way to format text on
+various video text terminals. Since then they have been adopted by many software
+terminal emulators and platforms, including some Web browsers, and are a simple
+way to format text without platform-specific APIs.
+
+The point of this package is to abstract the specific codes away and give you an
+easy-to-understand API for formatting and colouring terminal text. Still, here is
+a quick couple of examples of what's happening under the hood.
+
+You can copy these examples straight into your terminal to see them in action!
+
+- Colour text yellow:
+
+ ```shell
+ $ echo "\e[33mhello"
+ ```
+
+- Colour the background pink:
+
+ ```shell
+ $ echo "\e[45mhello"
+ ```
+
+- Render text italic:
+
+ ```shell
+ $ echo "\e[3mhello\e[23m"
+ ```
+
+As you can see, the escape sequences are a bit obscure. Sure, you could hard code
+them, or you could use this package!
diff --git a/aoc2023/build/packages/gleam_community_ansi/gleam.toml b/aoc2023/build/packages/gleam_community_ansi/gleam.toml
new file mode 100644
index 0000000..5da1f7e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_ansi/gleam.toml
@@ -0,0 +1,13 @@
+name = "gleam_community_ansi"
+version = "1.2.0"
+licences = ["Apache-2.0"]
+description = "ANSI colours, formatting, and control codes"
+repository = { type = "github", user = "gleam-community", repo = "ansi" }
+gleam = ">= 0.32.0"
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+gleam_community_colour = "~> 1.2"
+
+[dev-dependencies]
+gleeunit = "~> 0.11"
diff --git a/aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam
new file mode 100644
index 0000000..a542dda
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community/ansi.gleam
@@ -0,0 +1,2317 @@
+////
+//// - **Text style**
+//// - [`bold`](#bold)
+//// - [`italic`](#italic)
+//// - [`underline`](#underline)
+//// - [`strikethrough`](#strikethrough)
+//// - [`inverse`](#inverse)
+//// - [`dim`](#dim)
+//// - [`hidden`](#hidden)
+//// - [`reset`](#reset)
+//// - **Text colour**
+//// - [`black`](#black)
+//// - [`red`](#red)
+//// - [`green`](#green)
+//// - [`yellow`](#yellow)
+//// - [`blue`](#blue)
+//// - [`magenta`](#magenta)
+//// - [`cyan`](#cyan)
+//// - [`white`](#white)
+//// - [`pink`](#pink)
+//// - [`grey`](#grey)
+//// - [`gray`](#gray)
+//// - [`bright_black`](#bright_black)
+//// - [`bright_red`](#bright_red)
+//// - [`bright_green`](#bright_green)
+//// - [`bright_yellow`](#bright_yellow)
+//// - [`bright_blue`](#bright_blue)
+//// - [`bright_magenta`](#bright_magenta)
+//// - [`bright_cyan`](#bright_cyan)
+//// - [`bright_white`](#bright_white)
+//// - [`hex`](#hex)
+//// - [`colour`](#colour)
+//// - [`color`](#color)
+//// - **Background colour**
+//// - [`bg_black`](#bg_black)
+//// - [`bg_red`](#bg_red)
+//// - [`bg_green`](#bg_green)
+//// - [`bg_yellow`](#bg_yellow)
+//// - [`bg_blue`](#bg_blue)
+//// - [`bg_magenta`](#bg_magenta)
+//// - [`bg_cyan`](#bg_cyan)
+//// - [`bg_white`](#bg_white)
+//// - [`bg_pink`](#bg_pink)
+//// - [`bg_bright_black`](#bg_bright_black)
+//// - [`bg_bright_red`](#bg_bright_red)
+//// - [`bg_bright_green`](#bg_bright_green)
+//// - [`bg_bright_yellow`](#bg_bright_yellow)
+//// - [`bg_bright_blue`](#bg_bright_blue)
+//// - [`bg_bright_magenta`](#bg_bright_magenta)
+//// - [`bg_bright_cyan`](#bg_bright_cyan)
+//// - [`bg_bright_white`](#bg_bright_white)
+//// - [`bg_hex`](#bg_hex)
+//// - [`bg_colour`](#bg_colour)
+//// - [`bg_color`](#bg_color)
+////
+//// ---
+////
+//// This package was heavily inspired by the `colours` module in the Deno standard
+//// library. The original source code can be found
+//// <a href="https://deno.land/std@0.167.0/fmt/colours.ts">here</a>.
+////
+//// <details>
+//// <summary>The license of that package is produced below:</summary>
+////
+////
+//// > MIT License
+////
+//// > Copyright 2018-2022 the Deno authors.
+////
+//// > Permission is hereby granted, free of charge, to any person obtaining a copy
+//// of this software and associated documentation files (the "Software"), to deal
+//// in the Software without restriction, including without limitation the rights
+//// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//// copies of the Software, and to permit persons to whom the Software is
+//// furnished to do so, subject to the following conditions:
+////
+//// > The above copyright notice and this permission notice shall be included in all
+//// copies or substantial portions of the Software.
+//// </details>
+////
+
+// Just in case we decide in the future to no longer include the above reference
+// and license, this package was initially a port of the Deno `colours` module:
+//
+// https://deno.land/std@0.167.0/fmt/colours.ts
+//
+
+// This seems like a really handy reference if/when we want to expand this beyond
+// formatting escape sequences:
+//
+// https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
+//
+
+// IMPORTS --------------------------------------------------------------------
+
+import gleam/int
+import gleam/list
+import gleam/string
+import gleam_community/colour.{type Colour} as gc_colour
+
+// CONSTS ---------------------------------------------------------------------
+
+const asci_escape_character = ""
+
+// TYPES ----------------------------------------------------------------------
+
+type Code {
+ Code(open: String, close: String, regexp: String)
+}
+
+// UTILITY --------------------------------------------------------------------
+
+/// Builds colour code
+fn code(open: List(Int), close: Int) -> Code {
+ let close_str = int.to_string(close)
+ let open_strs = list.map(open, int.to_string)
+
+ Code(
+ open: asci_escape_character <> "[" <> string.join(open_strs, ";") <> "m",
+ close: asci_escape_character <> "[" <> close_str <> "m",
+ regexp: asci_escape_character <> "[" <> close_str <> "m",
+ )
+}
+
+/// Applies colour and background based on colour code and its associated text
+fn run(text: String, code: Code) -> String {
+ code.open <> string.replace(text, code.regexp, code.open) <> code.close
+}
+
+// STYLES ---------------------------------------------------------------------
+
+/// Reset the text modified
+pub fn reset(text: String) -> String {
+ run(text, code([0], 0))
+}
+
+/// Style the given text bold.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bold("lucy")
+/// // => "\x1B[1mlucy\x1B[22m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[22m"` added to the string. This is the escape code
+/// for the "default" bold/dim style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be dim but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bold(text: String) -> String {
+ run(text, code([1], 22))
+}
+
+/// Style the given text's colour to be dimmer.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("lucy")
+/// // => "\x1B[2mlucy\x1B[22m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[22m"` added to the string. This is the escape code
+/// for the "default" bold/dim style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be dim but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn dim(text: String) -> String {
+ run(text, code([2], 22))
+}
+
+/// Style the given text italic.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.italic("lucy")
+/// // => "\x1B[3mlucy\x1B[23m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[23m"` added to the string. This is the escape code
+/// for the "default" italic style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.underline("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be underlined but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn italic(text: String) -> String {
+ run(text, code([3], 23))
+}
+
+/// Style the given text's colour to be dimmer.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.underline("lucy")
+/// // => "\x1B[4mlucy\x1B[24m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[24m"` added to the string. This is the escape code
+/// for the "default" underline style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be dim but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn underline(text: String) -> String {
+ run(text, code([4], 24))
+}
+
+/// Inverse the given text's colour, and background colour.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.inverse("lucy")
+/// // => "\x1B[7mlucy\x1B[27m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[27m"` added to the string. This is the escape code
+/// for the "default" inverse style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be dim but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn inverse(text: String) -> String {
+ run(text, code([7], 27))
+}
+
+/// Style the given text to be hidden.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.hidden("lucy")
+/// // => "\x1B[8mlucy\x1B[28m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[28m"` added to the string. This is the escape code
+/// for the "default" hidden style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be dim but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn hidden(text: String) -> String {
+ run(text, code([8], 28))
+}
+
+/// Style the given text to be striked through.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.strikethrough("lucy")
+/// // => "\x1B[9mlucy\x1B[29m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[29m"` added to the string. This is the escape code
+/// for the "default" strikethrough style of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// style, it will use both the outter style and the inner style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.dim("Isn't " <> ansi.bold("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be dim but the text "fun?" will be
+/// both underlined, *and* bold!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn strikethrough(text: String) -> String {
+ run(text, code([9], 29))
+}
+
+// FOREGROUND -----------------------------------------------------------------
+
+/// Colour the given text black.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.black("lucy")
+/// // => "\x1B[30mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn black(text: String) -> String {
+ run(text, code([30], 39))
+}
+
+/// Colour the given text red.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.red("lucy")
+/// // => "\x1B[31mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn red(text: String) -> String {
+ run(text, code([31], 39))
+}
+
+/// Colour the given text green.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.green("lucy")
+/// // => "\x1B[32mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn green(text: String) -> String {
+ run(text, code([32], 39))
+}
+
+/// Colour the given text yellow.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("lucy")
+/// // => "\x1B[33mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn yellow(text: String) -> String {
+ run(text, code([33], 39))
+}
+
+/// Colour the given text blue.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.blue("lucy")
+/// // => "\x1B[34mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn blue(text: String) -> String {
+ run(text, code([34], 39))
+}
+
+/// Colour the given text magenta.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.magenta("lucy")
+/// // => "\x1B[35mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn magenta(text: String) -> String {
+ run(text, code([35], 39))
+}
+
+/// Colour the given text cyan.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.cyan("lucy")
+/// // => "\x1B[36mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn cyan(text: String) -> String {
+ run(text, code([36], 39))
+}
+
+/// Colour the given text white.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.white("lucy")
+/// // => "\x1B[37mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn white(text: String) -> String {
+ run(text, code([37], 39))
+}
+
+/// Colour the given text gray.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.gray("lucy")
+/// // => "\x1B[90mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn grey(text: String) -> String {
+ bright_black(text)
+}
+
+/// This is an alias for [`grey`](#grey) for those who prefer the American English
+/// spelling.
+///
+pub fn gray(text: String) -> String {
+ bright_black(text)
+}
+
+/// Colour the given text bright black. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bright_black("lucy")
+/// // => "\x1B[90mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_black(text: String) -> String {
+ run(text, code([90], 39))
+}
+
+/// Colour the given text bright red. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bright_red("lucy")
+/// // => "\x1B[91mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_red(text: String) -> String {
+ run(text, code([91], 39))
+}
+
+/// Colour the given text bright green. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// ansi.bright_green("lucy")
+/// // => "\x1B[92mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_green(text: String) -> String {
+ run(text, code([92], 39))
+}
+
+/// Colour the given text bright yellow. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// ansi.bright_yellow("lucy")
+/// // => "\x1B[93mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_yellow(text: String) -> String {
+ run(text, code([93], 39))
+}
+
+/// Colour the given text bright blue. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// ansi.bright_blue("lucy")
+/// // => "\x1B[94mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_blue(text: String) -> String {
+ run(text, code([94], 39))
+}
+
+/// Colour the given text bright gremagentaen. This should increase the luminosity
+/// of the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// ansi.bright_magenta("lucy")
+/// // => "\x1B[95mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_magenta(text: String) -> String {
+ run(text, code([95], 39))
+}
+
+/// Colour the given text bright cyan. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// ansi.bright_cyan("lucy")
+/// // => "\x1B[96mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_cyan(text: String) -> String {
+ run(text, code([96], 39))
+}
+
+/// Colour the given text bright white. This should increase the luminosity of
+/// the base colour, but some terminals will interpret this as bold instead.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// ansi.bright_white("lucy")
+/// // => "\x1B[97mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bright_white(text: String) -> String {
+ run(text, code([97], 39))
+}
+
+/// Colour the given text pink.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.pink("lucy")
+/// // => "\x1B[38;2;255;175;243mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[39m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn pink(text: String) -> String {
+ hex(text, 0xffaff3)
+}
+
+/// Colour the given text the given colour represented by a hex `Int`.
+///
+/// The given hex Int can be any valid [shorthand hexadecimal form](https://en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form).
+///
+/// ❗️ Note that if supplied hex Int is less than 0 or larger than 0xfffff the
+/// colour will be set to black and white respectively.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.hex("lucy", 0xffaff3)
+/// // => "\x1B[38;2;255;175;243mlucy\x1B[39m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn hex(text: String, colour: Int) -> String {
+ let colour = int.clamp(colour, max: 0xffffff, min: 0x0)
+ run(
+ text,
+ code(
+ [
+ 38,
+ 2,
+ int.bitwise_shift_right(colour, 16)
+ |> int.bitwise_and(0xff),
+ int.bitwise_shift_right(colour, 8)
+ |> int.bitwise_and(0xff),
+ int.bitwise_and(colour, 0xff),
+ ],
+ 39,
+ ),
+ )
+}
+
+/// Colour the given text the given colour represented by a `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+/// import gleam_community/colour.{Colour}
+///
+/// fn example() {
+/// let pink = colour.from_hsl(0.8583, 1.0, 0,84)
+/// ansi.colour("lucy", pink)
+/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn colour(text: String, colour: Colour) -> String {
+ let hex_colour = gc_colour.to_rgb_hex(colour)
+ hex(text, hex_colour)
+}
+
+/// This is an alias for [`colour`](#colour) for those who prefer the American English
+/// spelling.
+///
+pub fn color(text: String, color: Colour) -> String {
+ colour(text, color)
+}
+
+// BACKGROUND -----------------------------------------------------------------
+
+/// Colour the given text's background black.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_black("lucy")
+/// // => "\x1B[40mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_black(text: String) -> String {
+ run(text, code([40], 49))
+}
+
+/// Colour the given text's background red.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_red("lucy")
+/// // => "\x1B[41mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_red(text: String) -> String {
+ run(text, code([41], 49))
+}
+
+/// Colour the given text's background green.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_green("lucy")
+/// // => "\x1B[42mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_green(text: String) -> String {
+ run(text, code([42], 49))
+}
+
+/// Colour the given text's background yellow.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_yellow("lucy")
+/// // => "\x1B[43mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_yellow(text: String) -> String {
+ run(text, code([43], 49))
+}
+
+/// Colour the given text's background blue.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_blue("lucy")
+/// // => "\x1B[44mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_blue(text: String) -> String {
+ run(text, code([44], 49))
+}
+
+/// Colour the given text's background magenta.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_magenta("lucy")
+/// // => "\x1B[45mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_magenta(text: String) -> String {
+ run(text, code([45], 49))
+}
+
+/// Colour the given text's background cyan.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_cyan("lucy")
+/// // => "\x1B[46mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_cyan(text: String) -> String {
+ run(text, code([46], 49))
+}
+
+/// Colour the given text's background white.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_white("lucy")
+/// // => "\x1B[47mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_white(text: String) -> String {
+ run(text, code([47], 49))
+}
+
+/// Colour the given text's background bright black.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_black("lucy")
+/// // => "\x1B[100mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_black(text: String) -> String {
+ run(text, code([100], 49))
+}
+
+/// Colour the given text's background bright red.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_red("lucy")
+/// // => "\x1B[101mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_red(text: String) -> String {
+ run(text, code([101], 49))
+}
+
+/// Colour the given text's background bright green.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_green("lucy")
+/// // => "\x1B[102mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_green(text: String) -> String {
+ run(text, code([102], 49))
+}
+
+/// Colour the given text's background bright yellow.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_yellow("lucy")
+/// // => "\x1B[103mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_yellow(text: String) -> String {
+ run(text, code([103], 49))
+}
+
+/// Colour the given text's background bright blue.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_blue("lucy")
+/// // => "\x1B[104mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_blue(text: String) -> String {
+ run(text, code([104], 49))
+}
+
+/// Colour the given text's background bright magenta.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_magenta("lucy")
+/// // => "\x1B[105mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_magenta(text: String) -> String {
+ run(text, code([105], 49))
+}
+
+/// Colour the given text's background bright cyan.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_cyan("lucy")
+/// // => "\x1B[106mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_cyan(text: String) -> String {
+ run(text, code([106], 49))
+}
+
+/// Colour the given text's background bright white.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_bright_white("lucy")
+/// // => "\x1B[107mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_bright_white(text: String) -> String {
+ run(text, code([107], 49))
+}
+
+/// Colour the given text's background pink.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.bg_pink("lucy")
+/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_pink(text: String) -> String {
+ bg_hex(text, 0xffaff3)
+}
+
+/// Colour the given text's background the given colour represented by a hex `Int`.
+///
+/// The given hex Int can be any valid [shorthand hexadecimal form](https://en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form).
+///
+/// ❗️ Note that if supplied hex Int is less than 0 or larger than 0xfffff the
+/// colour will be set to black and white respectively.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.hex("lucy", 0xffaff3)
+/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_hex(text: String, colour: Int) -> String {
+ run(
+ text,
+ code(
+ [
+ 48,
+ 2,
+ int.bitwise_shift_right(colour, 16)
+ |> int.bitwise_and(0xff),
+ int.bitwise_shift_right(colour, 8)
+ |> int.bitwise_and(0xff),
+ int.bitwise_and(colour, 0xff),
+ ],
+ 49,
+ ),
+ )
+}
+
+/// Colour the given text's background with the given colour represented by a `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// import gleam_community/ansi
+/// import gleam_community/colour.{Colour}
+///
+/// fn example() {
+/// let pink = colour.from_hsl(0.8583, 1.0, 0,84)
+/// ansi.bg_colour("lucy", pink)
+/// // => "\x1B[48;2;255;175;243mlucy\x1B[49m"
+/// }
+/// ```
+///
+/// ❗️ Note the trailing `"\x1B[49m"` added to the string. This is the escape code
+/// for the "default" colour of the terminal. This means text you write after
+/// this will revert back to default.
+///
+/// ✨ `gleam_community/ansi` is smart about nested styles; instead of using the default
+/// colour, it will use the colour of the outter style.
+///
+/// ```gleam
+/// import gleam_community/ansi
+///
+/// fn example() {
+/// ansi.yellow("Isn't " <> ansi.pink("Gleam") <> " fun?")
+/// }
+/// ```
+///
+/// In this example, the text "Gleam" will be pink but the text "fun?" will be
+/// yellow, *not* the default colour!
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/ansi/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn bg_colour(text: String, colour: Colour) -> String {
+ let hex_colour = gc_colour.to_rgb_hex(colour)
+ bg_hex(text, hex_colour)
+}
+
+/// This is an alias for [`bg_colour`](#bg_colour) for those who prefer the American English
+/// spelling.
+///
+pub fn bg_color(text: String, colour: Colour) -> String {
+ bg_colour(text, colour)
+}
diff --git a/aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl
new file mode 100644
index 0000000..8b7a4c9
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community@ansi.erl
@@ -0,0 +1,263 @@
+-module(gleam_community@ansi).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([reset/1, bold/1, dim/1, italic/1, underline/1, inverse/1, hidden/1, strikethrough/1, black/1, red/1, green/1, yellow/1, blue/1, magenta/1, cyan/1, white/1, bright_black/1, grey/1, gray/1, bright_red/1, bright_green/1, bright_yellow/1, bright_blue/1, bright_magenta/1, bright_cyan/1, bright_white/1, hex/2, pink/1, colour/2, color/2, bg_black/1, bg_red/1, bg_green/1, bg_yellow/1, bg_blue/1, bg_magenta/1, bg_cyan/1, bg_white/1, bg_bright_black/1, bg_bright_red/1, bg_bright_green/1, bg_bright_yellow/1, bg_bright_blue/1, bg_bright_magenta/1, bg_bright_cyan/1, bg_bright_white/1, bg_hex/2, bg_pink/1, bg_colour/2, bg_color/2]).
+-export_type([code/0]).
+
+-type code() :: {code, binary(), binary(), binary()}.
+
+-spec code(list(integer()), integer()) -> code().
+code(Open, Close) ->
+ Close_str = gleam@int:to_string(Close),
+ Open_strs = gleam@list:map(Open, fun gleam@int:to_string/1),
+ {code,
+ <<<<<<""/utf8, "["/utf8>>/binary,
+ (gleam@string:join(Open_strs, <<";"/utf8>>))/binary>>/binary,
+ "m"/utf8>>,
+ <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>,
+ <<<<<<""/utf8, "["/utf8>>/binary, Close_str/binary>>/binary, "m"/utf8>>}.
+
+-spec run(binary(), code()) -> binary().
+run(Text, Code) ->
+ <<<<(erlang:element(2, Code))/binary,
+ (gleam@string:replace(
+ Text,
+ erlang:element(4, Code),
+ erlang:element(2, Code)
+ ))/binary>>/binary,
+ (erlang:element(3, Code))/binary>>.
+
+-spec reset(binary()) -> binary().
+reset(Text) ->
+ run(Text, code([0], 0)).
+
+-spec bold(binary()) -> binary().
+bold(Text) ->
+ run(Text, code([1], 22)).
+
+-spec dim(binary()) -> binary().
+dim(Text) ->
+ run(Text, code([2], 22)).
+
+-spec italic(binary()) -> binary().
+italic(Text) ->
+ run(Text, code([3], 23)).
+
+-spec underline(binary()) -> binary().
+underline(Text) ->
+ run(Text, code([4], 24)).
+
+-spec inverse(binary()) -> binary().
+inverse(Text) ->
+ run(Text, code([7], 27)).
+
+-spec hidden(binary()) -> binary().
+hidden(Text) ->
+ run(Text, code([8], 28)).
+
+-spec strikethrough(binary()) -> binary().
+strikethrough(Text) ->
+ run(Text, code([9], 29)).
+
+-spec black(binary()) -> binary().
+black(Text) ->
+ run(Text, code([30], 39)).
+
+-spec red(binary()) -> binary().
+red(Text) ->
+ run(Text, code([31], 39)).
+
+-spec green(binary()) -> binary().
+green(Text) ->
+ run(Text, code([32], 39)).
+
+-spec yellow(binary()) -> binary().
+yellow(Text) ->
+ run(Text, code([33], 39)).
+
+-spec blue(binary()) -> binary().
+blue(Text) ->
+ run(Text, code([34], 39)).
+
+-spec magenta(binary()) -> binary().
+magenta(Text) ->
+ run(Text, code([35], 39)).
+
+-spec cyan(binary()) -> binary().
+cyan(Text) ->
+ run(Text, code([36], 39)).
+
+-spec white(binary()) -> binary().
+white(Text) ->
+ run(Text, code([37], 39)).
+
+-spec bright_black(binary()) -> binary().
+bright_black(Text) ->
+ run(Text, code([90], 39)).
+
+-spec grey(binary()) -> binary().
+grey(Text) ->
+ bright_black(Text).
+
+-spec gray(binary()) -> binary().
+gray(Text) ->
+ bright_black(Text).
+
+-spec bright_red(binary()) -> binary().
+bright_red(Text) ->
+ run(Text, code([91], 39)).
+
+-spec bright_green(binary()) -> binary().
+bright_green(Text) ->
+ run(Text, code([92], 39)).
+
+-spec bright_yellow(binary()) -> binary().
+bright_yellow(Text) ->
+ run(Text, code([93], 39)).
+
+-spec bright_blue(binary()) -> binary().
+bright_blue(Text) ->
+ run(Text, code([94], 39)).
+
+-spec bright_magenta(binary()) -> binary().
+bright_magenta(Text) ->
+ run(Text, code([95], 39)).
+
+-spec bright_cyan(binary()) -> binary().
+bright_cyan(Text) ->
+ run(Text, code([96], 39)).
+
+-spec bright_white(binary()) -> binary().
+bright_white(Text) ->
+ run(Text, code([97], 39)).
+
+-spec hex(binary(), integer()) -> binary().
+hex(Text, Colour) ->
+ Colour@1 = gleam@int:clamp(Colour, 16#0, 16#ffffff),
+ run(
+ Text,
+ code(
+ [38,
+ 2,
+ begin
+ _pipe = erlang:'bsr'(Colour@1, 16),
+ erlang:'band'(_pipe, 16#ff)
+ end,
+ begin
+ _pipe@1 = erlang:'bsr'(Colour@1, 8),
+ erlang:'band'(_pipe@1, 16#ff)
+ end,
+ erlang:'band'(Colour@1, 16#ff)],
+ 39
+ )
+ ).
+
+-spec pink(binary()) -> binary().
+pink(Text) ->
+ hex(Text, 16#ffaff3).
+
+-spec colour(binary(), gleam_community@colour:colour()) -> binary().
+colour(Text, Colour) ->
+ Hex_colour = gleam_community@colour:to_rgb_hex(Colour),
+ hex(Text, Hex_colour).
+
+-spec color(binary(), gleam_community@colour:colour()) -> binary().
+color(Text, Color) ->
+ colour(Text, Color).
+
+-spec bg_black(binary()) -> binary().
+bg_black(Text) ->
+ run(Text, code([40], 49)).
+
+-spec bg_red(binary()) -> binary().
+bg_red(Text) ->
+ run(Text, code([41], 49)).
+
+-spec bg_green(binary()) -> binary().
+bg_green(Text) ->
+ run(Text, code([42], 49)).
+
+-spec bg_yellow(binary()) -> binary().
+bg_yellow(Text) ->
+ run(Text, code([43], 49)).
+
+-spec bg_blue(binary()) -> binary().
+bg_blue(Text) ->
+ run(Text, code([44], 49)).
+
+-spec bg_magenta(binary()) -> binary().
+bg_magenta(Text) ->
+ run(Text, code([45], 49)).
+
+-spec bg_cyan(binary()) -> binary().
+bg_cyan(Text) ->
+ run(Text, code([46], 49)).
+
+-spec bg_white(binary()) -> binary().
+bg_white(Text) ->
+ run(Text, code([47], 49)).
+
+-spec bg_bright_black(binary()) -> binary().
+bg_bright_black(Text) ->
+ run(Text, code([100], 49)).
+
+-spec bg_bright_red(binary()) -> binary().
+bg_bright_red(Text) ->
+ run(Text, code([101], 49)).
+
+-spec bg_bright_green(binary()) -> binary().
+bg_bright_green(Text) ->
+ run(Text, code([102], 49)).
+
+-spec bg_bright_yellow(binary()) -> binary().
+bg_bright_yellow(Text) ->
+ run(Text, code([103], 49)).
+
+-spec bg_bright_blue(binary()) -> binary().
+bg_bright_blue(Text) ->
+ run(Text, code([104], 49)).
+
+-spec bg_bright_magenta(binary()) -> binary().
+bg_bright_magenta(Text) ->
+ run(Text, code([105], 49)).
+
+-spec bg_bright_cyan(binary()) -> binary().
+bg_bright_cyan(Text) ->
+ run(Text, code([106], 49)).
+
+-spec bg_bright_white(binary()) -> binary().
+bg_bright_white(Text) ->
+ run(Text, code([107], 49)).
+
+-spec bg_hex(binary(), integer()) -> binary().
+bg_hex(Text, Colour) ->
+ run(
+ Text,
+ code(
+ [48,
+ 2,
+ begin
+ _pipe = erlang:'bsr'(Colour, 16),
+ erlang:'band'(_pipe, 16#ff)
+ end,
+ begin
+ _pipe@1 = erlang:'bsr'(Colour, 8),
+ erlang:'band'(_pipe@1, 16#ff)
+ end,
+ erlang:'band'(Colour, 16#ff)],
+ 49
+ )
+ ).
+
+-spec bg_pink(binary()) -> binary().
+bg_pink(Text) ->
+ bg_hex(Text, 16#ffaff3).
+
+-spec bg_colour(binary(), gleam_community@colour:colour()) -> binary().
+bg_colour(Text, Colour) ->
+ Hex_colour = gleam_community@colour:to_rgb_hex(Colour),
+ bg_hex(Text, Hex_colour).
+
+-spec bg_color(binary(), gleam_community@colour:colour()) -> binary().
+bg_color(Text, Colour) ->
+ bg_colour(Text, Colour).
diff --git a/aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src
new file mode 100644
index 0000000..dfcfdc3
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_ansi/src/gleam_community_ansi.app.src
@@ -0,0 +1,9 @@
+{application, gleam_community_ansi, [
+ {vsn, "1.2.0"},
+ {applications, [gleam_community_colour,
+ gleam_stdlib,
+ gleeunit]},
+ {description, "ANSI colours, formatting, and control codes"},
+ {modules, [gleam_community@ansi]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_community_colour/LICENCE b/aoc2023/build/packages/gleam_community_colour/LICENCE
new file mode 100644
index 0000000..a84f0ec
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/LICENCE
@@ -0,0 +1,190 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2023 Gleam Community Contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. \ No newline at end of file
diff --git a/aoc2023/build/packages/gleam_community_colour/README.md b/aoc2023/build/packages/gleam_community_colour/README.md
new file mode 100644
index 0000000..0eccdd7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/README.md
@@ -0,0 +1,36 @@
+# gleam-community/colour
+
+A package for a standard Colour type, conversions, and other utilities.
+
+[![Package Version](https://img.shields.io/hexpm/v/gleam_community_colour)](https://hex.pm/packages/gleam_community_colour)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gleam_community_colour/)
+
+✨ This project is written in pure Gleam so you can use it anywhere Gleam runs: Erlang, Elixir, Node, Deno, and the browser!
+
+---
+
+## Quickstart
+
+```gleam
+import gleam_community/colour
+import gleam_community/colour/accessibility
+
+pub fn main() {
+ let foreground = colour.from_hsl(h: 0.858, s: 1.0, l: 0.843)
+
+ let background_options = [colour.light_grey, colour.dark_grey]
+
+ let background = accessibility.maximum_contrast(foreground, background_options)
+}
+```
+
+## Installation
+
+`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_colour)
+with the prefix `gleam_community_`. You can add them to your Gleam projects directly:
+
+```sh
+gleam add gleam_community_colour
+```
+
+The docs can be found over at [hexdocs.pm](https://hexdocs.pm/gleam_community_colour).
diff --git a/aoc2023/build/packages/gleam_community_colour/gleam.toml b/aoc2023/build/packages/gleam_community_colour/gleam.toml
new file mode 100644
index 0000000..07a81bf
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/gleam.toml
@@ -0,0 +1,11 @@
+name = "gleam_community_colour"
+version = "1.2.0"
+licences = ["Apache-2.0"]
+description = "Colour types, conversions, and other utilities"
+repository = { type = "github", user = "gleam-community", repo = "colour" }
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+
+[dev-dependencies]
+gleeunit = "~> 0.11"
diff --git a/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl
new file mode 100644
index 0000000..06116df
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Hsla.hrl
@@ -0,0 +1 @@
+-record(hsla, {h :: float(), s :: float(), l :: float(), a :: float()}).
diff --git a/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl
new file mode 100644
index 0000000..fff139e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/include/gleam_community@colour_Rgba.hrl
@@ -0,0 +1 @@
+-record(rgba, {r :: float(), g :: float(), b :: float(), a :: float()}).
diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam
new file mode 100644
index 0000000..1f5872f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour.gleam
@@ -0,0 +1,1126 @@
+////
+//// - **Types**
+//// - [`Colour`](#Colour)
+//// - [`Color`](#Color)
+//// - **Constructors**
+//// - [`from_rgb255`](#from_rgb255)
+//// - [`from_rgb`](#from_rgb)
+//// - [`from_rgba`](#from_rgba)
+//// - [`from_hsl`](#from_hsl)
+//// - [`from_hsla`](#from_hsla)
+//// - [`from_rgb_hex`](#from_rgb_hex)
+//// - [`from_rgba_hex`](#from_rgba_hex)
+//// - [`from_rgb_hex_string`](#from_rgb_hex_string)
+//// - [`from_rgba_hex_string`](#from_rgba_hex_string)
+//// - **Conversions**
+//// - [`to_rgba`](#to_rgba)
+//// - [`to_hsla`](#hsla)
+//// - [`to_css_rgba_string`](#to_css_rgba_string)
+//// - [`to_rgba_hex_string`](#to_rgba_hex_string)
+//// - [`to_rgb_hex_string`](#to_rgb_hex_string)
+//// - [`to_rgba_hex`](#to_rgba_hex)
+//// - [`to_rgb_hex`](#to_rgb_hex)
+//// - **Colours**
+//// - [`light_red`](#light_red)
+//// - [`red`](#red)
+//// - [`dark_red`](#dark_red)
+//// - [`light_orange`](#light_orange)
+//// - [`orange`](#orange)
+//// - [`dark_orange`](#dark_orange)
+//// - [`light_yellow`](#light_yellow)
+//// - [`yellow`](#yellow)
+//// - [`dark_yellow`](#dark_yellow)
+//// - [`light_green`](#light_green)
+//// - [`green`](#green)
+//// - [`dark_green`](#dark_green)
+//// - [`light_blue`](#light_blue)
+//// - [`blue`](#blue)
+//// - [`dark_blue`](#dark_blue)
+//// - [`light_purple`](#light_purple)
+//// - [`purple`](#purple)
+//// - [`dark_purple`](#dark_purple)
+//// - [`light_brown`](#light_brown)
+//// - [`brown`](#brown)
+//// - [`dark_brown`](#dark_brown)
+//// - [`black`](#black)
+//// - [`white`](#white)
+//// - [`light_grey`](#light_grey)
+//// - [`grey`](#grey)
+//// - [`dark_grey`](#dark_grey)
+//// - [`light_gray`](#light_gray)
+//// - [`gray`](#gray)
+//// - [`dark_gray`](#dark_gray)
+//// - [`light_charcoal`](#light_charcoal)
+//// - [`charcoal`](#charcoal)
+//// - [`dark_charcoal`](#dark_charcoal)
+//// - [`pink`](#pink)
+////
+//// ---
+////
+//// This package was heavily inspired by the `elm-color` module.
+//// The original source code can be found
+//// <a href="https://github.com/avh4/elm-color/">here</a>.
+////
+//// <details>
+//// <summary>The license of that package is produced below:</summary>
+////
+////
+//// > MIT License
+////
+//// > Copyright 2018 Aaron VonderHaar
+////
+//// > Redistribution and use in source and binary forms, with or without modification,
+//// are permitted provided that the following conditions are met:
+////
+//// 1. Redistributions of source code must retain the above copyright notice,
+//// this list of conditions and the following disclaimer.
+////
+//// 2. Redistributions in binary form must reproduce the above copyright notice,
+//// this list of conditions and the following disclaimer in the documentation
+//// and/or other materials provided with the distribution.
+////
+//// 3. Neither the name of the copyright holder nor the names of its contributors
+//// may be used to endorse or promote products derived from this software without
+//// specific prior written permission.
+////
+//// > THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+//// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+//// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+//// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+//// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+//// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+//// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+//// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+////
+//// > The above copyright notice and this permission notice shall be included in all
+//// copies or substantial portions of the Software.
+//// </details>
+////
+
+// Just in case we decide in the future to no longer include the above reference
+// and license, this package was initially a port of the `elm-color` module:
+//
+// https://github.com/avh4/elm-color/
+//
+
+// IMPORTS --------------------------------------------------------------------
+
+import gleam/int
+import gleam/float
+import gleam/result
+import gleam/string
+import gleam/list
+
+// TYPES ----------------------------------------------------------------------
+
+/// A representation of a colour that can be converted to RGBA or HSLA format.
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+/// </br>
+///
+pub opaque type Colour {
+ Rgba(r: Float, g: Float, b: Float, a: Float)
+ Hsla(h: Float, s: Float, l: Float, a: Float)
+}
+
+/// Type alias for `Colour`
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+/// </br>
+///
+pub type Color =
+ Colour
+
+// UTILITY --------------------------------------------------------------------
+
+fn valid_colour_value(c: Float) -> Result(Float, Nil) {
+ case c >. 1.0 || c <. 0.0 {
+ True -> Error(Nil)
+ False -> Ok(c)
+ }
+}
+
+fn hue_to_rgb(hue: Float, m1: Float, m2: Float) -> Float {
+ let h = case hue {
+ _ if hue <. 0.0 -> hue +. 1.0
+ _ if hue >. 1.0 -> hue -. 1.0
+ _ -> hue
+ }
+
+ let h_t_6 = h *. 6.0
+ let h_t_2 = h *. 2.0
+ let h_t_3 = h *. 3.0
+
+ case h {
+ _ if h_t_6 <. 1.0 -> m1 +. { m2 -. m1 } *. h *. 6.0
+ _ if h_t_2 <. 1.0 -> m2
+ _ if h_t_3 <. 2.0 -> m1 +. { m2 -. m1 } *. { 2.0 /. 3.0 -. h } *. 6.0
+ _ -> m1
+ }
+}
+
+fn hex_string_to_int(hex_string: String) -> Result(Int, Nil) {
+ let hex = case hex_string {
+ "#" <> hex_number -> hex_number
+ "0x" <> hex_number -> hex_number
+ _ -> hex_string
+ }
+
+ hex
+ |> string.lowercase()
+ |> string.to_graphemes()
+ |> list.reverse()
+ |> list.index_fold(
+ Ok(0),
+ fn(total, char, index) {
+ case total {
+ Error(Nil) -> Error(Nil)
+ Ok(v) -> {
+ use num <- result.then(case char {
+ "a" -> Ok(10)
+ "b" -> Ok(11)
+ "c" -> Ok(12)
+ "d" -> Ok(13)
+ "e" -> Ok(14)
+ "f" -> Ok(15)
+ _ -> int.parse(char)
+ })
+ use base <- result.then(int.power(16, int.to_float(index)))
+ Ok(v + float.round(int.to_float(num) *. base))
+ }
+ }
+ },
+ )
+}
+
+fn hsla_to_rgba(
+ h: Float,
+ s: Float,
+ l: Float,
+ a: Float,
+) -> #(Float, Float, Float, Float) {
+ let m2 = case l <=. 0.5 {
+ True -> l *. { s +. 1.0 }
+ False -> l +. s -. l *. s
+ }
+
+ let m1 = l *. 2.0 -. m2
+
+ let r = hue_to_rgb(h +. 1.0 /. 3.0, m1, m2)
+ let g = hue_to_rgb(h, m1, m2)
+ let b = hue_to_rgb(h -. 1.0 /. 3.0, m1, m2)
+
+ #(r, g, b, a)
+}
+
+fn rgba_to_hsla(
+ r: Float,
+ g: Float,
+ b: Float,
+ a: Float,
+) -> #(Float, Float, Float, Float) {
+ let min_colour = float.min(r, float.min(g, b))
+
+ let max_colour = float.max(r, float.max(g, b))
+
+ let h1 = case True {
+ _ if max_colour == r -> float.divide(g -. b, max_colour -. min_colour)
+ _ if max_colour == g ->
+ float.divide(b -. r, max_colour -. min_colour)
+ |> result.then(fn(d) { Ok(2.0 +. d) })
+ _ ->
+ float.divide(r -. g, max_colour -. min_colour)
+ |> result.then(fn(d) { Ok(4.0 +. d) })
+ }
+
+ let h2 = case h1 {
+ Ok(v) -> Ok(v *. { 1.0 /. 6.0 })
+ _ -> h1
+ }
+
+ let h3 = case h2 {
+ Ok(v) if v <. 0.0 -> v +. 1.0
+ Ok(v) -> v
+ _ -> 0.0
+ }
+
+ let l = { min_colour +. max_colour } /. 2.0
+
+ let s = case True {
+ _ if min_colour == max_colour -> 0.0
+ _ if l <. 0.5 ->
+ { max_colour -. min_colour } /. { max_colour +. min_colour }
+ _ -> { max_colour -. min_colour } /. { 2.0 -. max_colour -. min_colour }
+ }
+
+ #(h3, s, l, a)
+}
+
+// CONSTRUCTORS ---------------------------------------------------------------
+
+/// Returns a `Result(Colour)` created from the given 8 bit RGB values.
+///
+/// Returns `Error(Nil)` if the supplied RGB values are greater than 255 or less than 0.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb255(255, 0, 0)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgb255(r red: Int, g green: Int, b blue: Int) -> Result(Colour, Nil) {
+ use r <- result.then(
+ red
+ |> int.to_float()
+ |> float.divide(255.0)
+ |> result.then(valid_colour_value),
+ )
+
+ use g <- result.then(
+ green
+ |> int.to_float()
+ |> float.divide(255.0)
+ |> result.then(valid_colour_value),
+ )
+
+ use b <- result.then(
+ blue
+ |> int.to_float()
+ |> float.divide(255.0)
+ |> result.then(valid_colour_value),
+ )
+
+ Ok(Rgba(r: r, g: g, b: b, a: 1.0))
+}
+
+/// Returns `Result(Colour)` created from the given RGB values.
+///
+/// If the supplied RGB values are greater than 1.0 or less than 0.0 returns `Error(Nil)`
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb(1.0, 0.0, 0.0)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgb(
+ r red: Float,
+ g green: Float,
+ b blue: Float,
+) -> Result(Colour, Nil) {
+ use r <- result.then(valid_colour_value(red))
+ use g <- result.then(valid_colour_value(green))
+ use b <- result.then(valid_colour_value(blue))
+
+ Ok(Rgba(r: r, g: g, b: b, a: 1.0))
+}
+
+/// Returns `Result(Colour)` created from the given RGBA values.
+///
+/// Returns `Error(Nil)` if the supplied RGBA values are greater than 1.0 or less than 0.0.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red_half_opacity) = from_rbga(1.0, 0.0, 0.0, 0.5)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgba(
+ r red: Float,
+ g green: Float,
+ b blue: Float,
+ a alpha: Float,
+) -> Result(Colour, Nil) {
+ use r <- result.then(valid_colour_value(red))
+ use g <- result.then(valid_colour_value(green))
+ use b <- result.then(valid_colour_value(blue))
+ use a <- result.then(valid_colour_value(alpha))
+
+ Ok(Rgba(r: r, g: g, b: b, a: a))
+}
+
+/// Returns `Result(Colour)` created from the given HSLA values.
+///
+/// Returns `Error(Nil)`f the supplied HSLA values are greater than 1.0 or less than 0.0.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red_half_opacity) = from_hsla(0.0, 1.0, 0.5, 0.5)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_hsla(
+ h hue: Float,
+ s saturation: Float,
+ l lightness: Float,
+ a alpha: Float,
+) -> Result(Colour, Nil) {
+ use h <- result.then(valid_colour_value(hue))
+ use s <- result.then(valid_colour_value(saturation))
+ use l <- result.then(valid_colour_value(lightness))
+ use a <- result.then(valid_colour_value(alpha))
+
+ Ok(Hsla(h: h, s: s, l: l, a: a))
+}
+
+/// Returns `Result(Colour)` created from the given HSL values.
+///
+/// Returns `Error(Nil)` if the supplied HSL values are greater than 1.0 or less than 0.0.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_hsla(0.0, 1.0, 0.5)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_hsl(
+ h hue: Float,
+ s saturation: Float,
+ l lightness: Float,
+) -> Result(Colour, Nil) {
+ from_hsla(hue, saturation, lightness, 1.0)
+}
+
+/// Returns a `Result(Colour)` created from the given hex `Int`.
+///
+/// Returns `Error(Nil)` if the supplied hex `Int is greater than 0xffffff or less than 0x0.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb_hex(0xff0000)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgb_hex(hex: Int) -> Result(Colour, Nil) {
+ case hex > 0xffffff || hex < 0 {
+ True -> Error(Nil)
+ False -> {
+ let r =
+ int.bitwise_shift_right(hex, 16)
+ |> int.bitwise_and(0xff)
+ let g =
+ int.bitwise_shift_right(hex, 8)
+ |> int.bitwise_and(0xff)
+ let b = int.bitwise_and(hex, 0xff)
+ from_rgb255(r, g, b)
+ }
+ }
+}
+
+/// Returns a `Result(Colour)` created from the given RGB hex `String`.
+///
+/// Returns `Error(Nil)` if the supplied hex `String` is invalid, or greater than `"#ffffff" or less than `"#0"`
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb_hex_string("#ff0000")
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgb_hex_string(hex_string: String) -> Result(Colour, Nil) {
+ use hex_int <- result.then(hex_string_to_int(hex_string))
+
+ from_rgb_hex(hex_int)
+}
+
+/// Returns a `Result(Colour)` created from the given RGBA hex `String`.
+///
+/// Returns `Error(Nil)` if the supplied hex `String` is invalid, or greater than `"#ffffffff" or less than `"#0"`
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red_half_opacity) = from_rgba_hex_string("#ff00007f")
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgba_hex_string(hex_string: String) -> Result(Colour, Nil) {
+ use hex_int <- result.then(hex_string_to_int(hex_string))
+
+ from_rgba_hex(hex_int)
+}
+
+/// Returns a `Result(Colour)` created from the given hex `Int`.
+///
+/// Returns `Error(Nil)` if the supplied hex `Int is greater than 0xffffffff or less than 0x0.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red_half_opacity) = from_rgba_hex(0xff00007f)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn from_rgba_hex(hex: Int) -> Result(Colour, Nil) {
+ case hex > 0xffffffff || hex < 0 {
+ True -> Error(Nil)
+ False -> {
+ // This won't fail because we are always dividing by 255.0
+ let assert Ok(r) =
+ int.bitwise_shift_right(hex, 24)
+ |> int.bitwise_and(0xff)
+ |> int.to_float()
+ |> float.divide(255.0)
+ // This won't fail because we are always dividing by 255.0
+ let assert Ok(g) =
+ int.bitwise_shift_right(hex, 16)
+ |> int.bitwise_and(0xff)
+ |> int.to_float()
+ |> float.divide(255.0)
+ // This won't fail because we are always dividing by 255.0
+ let assert Ok(b) =
+ int.bitwise_shift_right(hex, 8)
+ |> int.bitwise_and(0xff)
+ |> int.to_float()
+ |> float.divide(255.0)
+ // This won't fail because we are always dividing by 255.0
+ let assert Ok(a) =
+ int.bitwise_and(hex, 0xff)
+ |> int.to_float()
+ |> float.divide(255.0)
+ from_rgba(r, g, b, a)
+ }
+ }
+}
+
+// CONVERSIONS ----------------------------------------------------------------
+
+/// Returns `#(Float, Float, Float, Float)` representing the given `Colour`'s
+/// R, G, B, and A values respectively.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb255(255, 0, 0)
+/// let #(r, g, b, a) = to_rgba(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_rgba(colour: Colour) -> #(Float, Float, Float, Float) {
+ case colour {
+ Rgba(r, g, b, a) -> #(r, g, b, a)
+ Hsla(h, s, l, a) -> hsla_to_rgba(h, s, l, a)
+ }
+}
+
+/// Returns `#(Float, Float, Float, Float)` representing the given `Colour`'s
+/// H, S, L, and A values respectively.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb255(255, 0, 0)
+/// let #(h, s, l, a) = to_hsla(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_hsla(colour: Colour) -> #(Float, Float, Float, Float) {
+ case colour {
+ Hsla(h, s, l, a) -> #(h, s, l, a)
+ Rgba(r, g, b, a) -> rgba_to_hsla(r, g, b, a)
+ }
+}
+
+/// Returns an rgba formatted CSS `String` created from the given `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgb255(255, 0, 0)
+/// let css_red = to_css_rgba_string(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_css_rgba_string(colour: Colour) -> String {
+ let #(r, g, b, a) = to_rgba(colour)
+
+ let percent = fn(x: Float) -> Float {
+ // This won't fail because we are always dividing by 100.0
+ let assert Ok(p) =
+ x
+ |> float.multiply(10_000.0)
+ |> float.round()
+ |> int.to_float()
+ |> float.divide(100.0)
+
+ p
+ }
+
+ let round_to = fn(x: Float) -> Float {
+ // This won't fail because we are always dividing by 1000.0
+ let assert Ok(r) =
+ x
+ |> float.multiply(1000.0)
+ |> float.round()
+ |> int.to_float()
+ |> float.divide(1000.0)
+
+ r
+ }
+
+ string.join(
+ [
+ "rgba(",
+ float.to_string(percent(r)) <> "%,",
+ float.to_string(percent(g)) <> "%,",
+ float.to_string(percent(b)) <> "%,",
+ float.to_string(round_to(a)),
+ ")",
+ ],
+ "",
+ )
+}
+
+/// Returns an rgba hex formatted `String` created from the given `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgba(1.0, 0.0, 0.0, 1.0)
+/// let red_hex = to_rgba_hex_string(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_rgba_hex_string(colour: Colour) -> String {
+ to_rgba_hex(colour)
+ |> int.to_base16()
+}
+
+/// Returns an rgb hex formatted `String` created from the given `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgba(255, 0, 0)
+/// let red_hex = to_rgb_hex_string(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_rgb_hex_string(colour: Colour) -> String {
+ to_rgb_hex(colour)
+ |> int.to_base16()
+}
+
+/// Returns an hex `Int` created from the given `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgba(1.0, 0.0, 0.0, 1.0)
+/// let red_hex_int = to_rgba_hex(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_rgba_hex(colour: Colour) -> Int {
+ let #(r, g, b, a) = to_rgba(colour)
+
+ let red =
+ r *. 255.0
+ |> float.round()
+ |> int.bitwise_shift_left(24)
+
+ let green =
+ g *. 255.0
+ |> float.round()
+ |> int.bitwise_shift_left(16)
+
+ let blue =
+ b *. 255.0
+ |> float.round()
+ |> int.bitwise_shift_left(8)
+
+ let alpha =
+ a *. 255.0
+ |> float.round()
+
+ red + green + blue + alpha
+}
+
+/// Returns a rgb hex `Int` created from the given `Colour`.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// assert Ok(red) = from_rgba(255, 0, 0)
+/// let red_hex_int = to_rgb_hex(red)
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn to_rgb_hex(colour: Colour) -> Int {
+ let #(r, g, b, _) = to_rgba(colour)
+
+ let red =
+ r *. 255.0
+ |> float.round()
+ |> int.bitwise_shift_left(16)
+
+ let green =
+ g *. 255.0
+ |> float.round()
+ |> int.bitwise_shift_left(8)
+
+ let blue =
+ b *. 255.0
+ |> float.round()
+
+ red + green + blue
+}
+
+// COLOURS --------------------------------------------------------------------
+
+/// A `Colour` reprsenting the colour RGBA(239, 41, 41, 1.0)
+pub const light_red = Rgba(
+ r: 0.9372549019607843,
+ g: 0.1607843137254902,
+ b: 0.1607843137254902,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(204, 0, 0, 1.0)
+pub const red = Rgba(r: 0.8, g: 0.0, b: 0.0, a: 1.0)
+
+/// A `Colour` reprsenting the colour RGBA(164, 0, 0, 1.0)
+pub const dark_red = Rgba(r: 0.6431372549019608, g: 0.0, b: 0.0, a: 1.0)
+
+/// A `Colour` reprsenting the colour RGBA(252, 175, 62, 1.0)
+pub const light_orange = Rgba(
+ r: 0.9882352941176471,
+ g: 0.6862745098039216,
+ b: 0.24313725490196078,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(245, 121, 0, 1.0)
+pub const orange = Rgba(
+ r: 0.9607843137254902,
+ g: 0.4745098039215686,
+ b: 0.0,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(206, 92, 0, 1.0)
+pub const dark_orange = Rgba(
+ r: 0.807843137254902,
+ g: 0.3607843137254902,
+ b: 0.0,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(255, 233, 79, 1.0)
+pub const light_yellow = Rgba(
+ r: 1.0,
+ g: 0.9137254901960784,
+ b: 0.30980392156862746,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(237, 212, 0, 1.0)
+pub const yellow = Rgba(
+ r: 0.9294117647058824,
+ g: 0.8313725490196079,
+ b: 0.0,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(196, 160, 0, 1.0)
+pub const dark_yellow = Rgba(
+ r: 0.7686274509803922,
+ g: 0.6274509803921569,
+ b: 0.0,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(138, 226, 52, 1.0)
+pub const light_green = Rgba(
+ r: 0.5411764705882353,
+ g: 0.8862745098039215,
+ b: 0.20392156862745098,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(115, 210, 22, 1.0)
+pub const green = Rgba(
+ r: 0.45098039215686275,
+ g: 0.8235294117647058,
+ b: 0.08627450980392157,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(78, 154, 6, 1.0)
+pub const dark_green = Rgba(
+ r: 0.3058823529411765,
+ g: 0.6039215686274509,
+ b: 0.023529411764705882,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(114, 159, 207, 1.0)
+pub const light_blue = Rgba(
+ r: 0.4470588235294118,
+ g: 0.6235294117647059,
+ b: 0.8117647058823529,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(52, 101, 164, 1.0)
+pub const blue = Rgba(
+ r: 0.20392156862745098,
+ g: 0.396078431372549,
+ b: 0.6431372549019608,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(32, 74, 135, 1.0)
+pub const dark_blue = Rgba(
+ r: 0.12549019607843137,
+ g: 0.2901960784313726,
+ b: 0.5294117647058824,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(173, 127, 168, 1.0)
+pub const light_purple = Rgba(
+ r: 0.6784313725490196,
+ g: 0.4980392156862745,
+ b: 0.6588235294117647,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(117, 80, 123, 1.0)
+pub const purple = Rgba(
+ r: 0.4588235294117647,
+ g: 0.3137254901960784,
+ b: 0.4823529411764706,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(92, 53, 102, 1.0)
+pub const dark_purple = Rgba(
+ r: 0.3607843137254902,
+ g: 0.20784313725490197,
+ b: 0.4,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(233, 185, 110, 1.0)
+pub const light_brown = Rgba(
+ r: 0.9137254901960784,
+ g: 0.7254901960784313,
+ b: 0.43137254901960786,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(193, 125, 17, 1.0)
+pub const brown = Rgba(
+ r: 0.7568627450980392,
+ g: 0.49019607843137253,
+ b: 0.06666666666666667,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(143, 89, 2, 1.0)
+pub const dark_brown = Rgba(
+ r: 0.5607843137254902,
+ g: 0.34901960784313724,
+ b: 0.00784313725490196,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(0, 0, 0, 1.0)
+pub const black = Rgba(r: 0.0, g: 0.0, b: 0.0, a: 1.0)
+
+/// A `Colour` reprsenting the colour RGBA(255, 255, 255, 1.0)
+pub const white = Rgba(r: 1.0, g: 1.0, b: 1.0, a: 1.0)
+
+/// A `Colour` reprsenting the colour RGBA(238, 238, 236, 1.0)
+pub const light_grey = Rgba(
+ r: 0.9333333333333333,
+ g: 0.9333333333333333,
+ b: 0.9254901960784314,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(211, 215, 207, 1.0)
+pub const grey = Rgba(
+ r: 0.8274509803921568,
+ g: 0.8431372549019608,
+ b: 0.8117647058823529,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(186, 189, 182, 1.0)
+pub const dark_grey = Rgba(
+ r: 0.7294117647058823,
+ g: 0.7411764705882353,
+ b: 0.7137254901960784,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(238, 238, 236, 1.0)
+pub const light_gray = Rgba(
+ r: 0.9333333333333333,
+ g: 0.9333333333333333,
+ b: 0.9254901960784314,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(211, 215, 207, 1.0)
+pub const gray = Rgba(
+ r: 0.8274509803921568,
+ g: 0.8431372549019608,
+ b: 0.8117647058823529,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(186, 189, 182, 1.0)
+pub const dark_gray = Rgba(
+ r: 0.7294117647058823,
+ g: 0.7411764705882353,
+ b: 0.7137254901960784,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(136, 138, 133, 1.0)
+pub const light_charcoal = Rgba(
+ r: 0.5333333333333333,
+ g: 0.5411764705882353,
+ b: 0.5215686274509804,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(85, 87, 83, 1.0)
+pub const charcoal = Rgba(
+ r: 0.3333333333333333,
+ g: 0.3411764705882353,
+ b: 0.3254901960784314,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(46, 52, 54, 1.0)
+pub const dark_charcoal = Rgba(
+ r: 0.1803921568627451,
+ g: 0.20392156862745098,
+ b: 0.21176470588235294,
+ a: 1.0,
+)
+
+/// A `Colour` reprsenting the colour RGBA(255, 175, 243, 1.0)
+pub const pink = Rgba(
+ r: 1.0,
+ g: 0.6862745098039216,
+ b: 0.9529411764705882,
+ a: 1.0,
+)
diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam
new file mode 100644
index 0000000..54f75e4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community/colour/accessibility.gleam
@@ -0,0 +1,173 @@
+////
+//// - **Accessibility**
+//// - [`luminance`](#luminance)
+//// - [`contrast_ratio`](#contrast_ratio)
+//// - [`maximum_contrast`](#maximum_contrast)
+////
+//// ---
+////
+//// This package was heavily inspired by the `elm-color-extra` module.
+//// The original source code can be found
+//// <a href="https://github.com/noahzgordon/elm-color-extra">here</a>.
+////
+//// <details>
+//// <summary>The license of that package is produced below:</summary>
+////
+////
+//// > MIT License
+////
+//// > Copyright (c) 2016 Andreas Köberle
+////
+//// > Permission is hereby granted, free of charge, to any person obtaining a copy
+//// of this software and associated documentation files (the "Software"), to deal
+//// in the Software without restriction, including without limitation the rights
+//// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//// copies of the Software, and to permit persons to whom the Software is
+//// furnished to do so, subject to the following conditions:
+////
+//// > The above copyright notice and this permission notice shall be included in all
+//// copies or substantial portions of the Software.
+////
+//// > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+//// SOFTWARE.
+////
+//// </details>
+////
+
+// Just in case we decide in the future to no longer include the above reference
+// and license, this package was initially a port of the `elm-color-extra` module:
+//
+// https://github.com/noahzgordon/elm-color-extra
+//
+
+// IMPORTS --------------------------------------------------------------------
+
+import gleam/float
+import gleam/list
+import gleam_community/colour.{type Colour}
+
+// UTILITIES ------------------------------------------------------------------
+
+fn intensity(colour_value: Float) -> Float {
+ // Calculation taken from https://www.w3.org/TR/WCAG20/#relativeluminancedef
+ case True {
+ _ if colour_value <=. 0.03928 -> colour_value /. 12.92
+ _ -> {
+ // Is this guaranteed to be `OK`?
+ let assert Ok(i) = float.power({ colour_value +. 0.055 } /. 1.055, 2.4)
+ i
+ }
+ }
+}
+
+// ACCESSIBILITY --------------------------------------------------------------
+
+/// Returns the relative brightness of the given `Colour` as a `Float` between
+/// 0.0, and 1.0 with 0.0 being the darkest possible colour and 1.0 being the lightest.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// luminance(colour.white) // 1.0
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn luminance(colour: Colour) -> Float {
+ // Calculation taken from https://www.w3.org/TR/WCAG20/#relativeluminancedef
+ let #(r, g, b, _) = colour.to_rgba(colour)
+
+ let r_intensity = intensity(r)
+ let g_intensity = intensity(g)
+ let b_intensity = intensity(b)
+
+ 0.2126 *. r_intensity +. 0.7152 *. g_intensity +. 0.0722 *. b_intensity
+}
+
+/// Returns the contrast between two `Colour` values as a `Float` between 1.0,
+/// and 21.0 with 1.0 being no contrast and, 21.0 being the highest possible contrast.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// contrast_ratio(between: colour.white, and: colour.black) // 21.0
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn contrast_ratio(between colour_a: Colour, and colour_b: Colour) -> Float {
+ // Calculation taken from https://www.w3.org/TR/WCAG20/#contrast-ratiodef
+ let luminance_a = luminance(colour_a) +. 0.05
+ let luminance_b = luminance(colour_b) +. 0.05
+
+ case luminance_a >. luminance_b {
+ True -> luminance_a /. luminance_b
+ False -> luminance_b /. luminance_a
+ }
+}
+
+/// Returns the `Colour` with the highest contrast between the base `Colour`,
+/// and and the other provided `Colour` values.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// ```gleam
+/// fn example() {
+/// maximum_contrast(
+/// colour.yellow,
+/// [colour.white, colour.dark_blue, colour.green],
+/// )
+/// }
+/// ```
+/// </details>
+///
+/// <div style="position: relative;">
+/// <a style="position: absolute; left: 0;" href="https://github.com/gleam-community/colour/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// <a style="position: absolute; right: 0;" href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn maximum_contrast(
+ base: Colour,
+ colours: List(Colour),
+) -> Result(Colour, Nil) {
+ colours
+ |> list.sort(fn(colour_a, colour_b) {
+ let contrast_a = contrast_ratio(base, colour_a)
+ let contrast_b = contrast_ratio(base, colour_b)
+
+ float.compare(contrast_b, contrast_a)
+ })
+ |> list.first()
+}
diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl
new file mode 100644
index 0000000..21e4c81
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour.erl
@@ -0,0 +1,511 @@
+-module(gleam_community@colour).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_rgb255/3, from_rgb/3, from_rgba/4, from_hsla/4, from_hsl/3, from_rgb_hex/1, from_rgb_hex_string/1, from_rgba_hex/1, from_rgba_hex_string/1, to_rgba/1, to_hsla/1, to_css_rgba_string/1, to_rgba_hex/1, to_rgba_hex_string/1, to_rgb_hex/1, to_rgb_hex_string/1]).
+-export_type([colour/0]).
+
+-opaque colour() :: {rgba, float(), float(), float(), float()} |
+ {hsla, float(), float(), float(), float()}.
+
+-spec valid_colour_value(float()) -> {ok, float()} | {error, nil}.
+valid_colour_value(C) ->
+ case (C > 1.0) orelse (C < +0.0) of
+ true ->
+ {error, nil};
+
+ false ->
+ {ok, C}
+ end.
+
+-spec hue_to_rgb(float(), float(), float()) -> float().
+hue_to_rgb(Hue, M1, M2) ->
+ H = case Hue of
+ _ when Hue < +0.0 ->
+ Hue + 1.0;
+
+ _ when Hue > 1.0 ->
+ Hue - 1.0;
+
+ _ ->
+ Hue
+ end,
+ H_t_6 = H * 6.0,
+ H_t_2 = H * 2.0,
+ H_t_3 = H * 3.0,
+ case H of
+ _ when H_t_6 < 1.0 ->
+ M1 + (((M2 - M1) * H) * 6.0);
+
+ _ when H_t_2 < 1.0 ->
+ M2;
+
+ _ when H_t_3 < 2.0 ->
+ M1 + (((M2 - M1) * ((2.0 / 3.0) - H)) * 6.0);
+
+ _ ->
+ M1
+ end.
+
+-spec hex_string_to_int(binary()) -> {ok, integer()} | {error, nil}.
+hex_string_to_int(Hex_string) ->
+ Hex = case Hex_string of
+ <<"#"/utf8, Hex_number/binary>> ->
+ Hex_number;
+
+ <<"0x"/utf8, Hex_number@1/binary>> ->
+ Hex_number@1;
+
+ _ ->
+ Hex_string
+ end,
+ _pipe = Hex,
+ _pipe@1 = gleam@string:lowercase(_pipe),
+ _pipe@2 = gleam@string:to_graphemes(_pipe@1),
+ _pipe@3 = gleam@list:reverse(_pipe@2),
+ gleam@list:index_fold(
+ _pipe@3,
+ {ok, 0},
+ fun(Total, Char, Index) -> case Total of
+ {error, nil} ->
+ {error, nil};
+
+ {ok, V} ->
+ gleam@result:then(case Char of
+ <<"a"/utf8>> ->
+ {ok, 10};
+
+ <<"b"/utf8>> ->
+ {ok, 11};
+
+ <<"c"/utf8>> ->
+ {ok, 12};
+
+ <<"d"/utf8>> ->
+ {ok, 13};
+
+ <<"e"/utf8>> ->
+ {ok, 14};
+
+ <<"f"/utf8>> ->
+ {ok, 15};
+
+ _ ->
+ gleam@int:parse(Char)
+ end, fun(Num) ->
+ gleam@result:then(
+ gleam@int:power(16, gleam@int:to_float(Index)),
+ fun(Base) ->
+ {ok,
+ V + gleam@float:round(
+ gleam@int:to_float(Num) * Base
+ )}
+ end
+ )
+ end)
+ end end
+ ).
+
+-spec hsla_to_rgba(float(), float(), float(), float()) -> {float(),
+ float(),
+ float(),
+ float()}.
+hsla_to_rgba(H, S, L, A) ->
+ M2 = case L =< 0.5 of
+ true ->
+ L * (S + 1.0);
+
+ false ->
+ (L + S) - (L * S)
+ end,
+ M1 = (L * 2.0) - M2,
+ R = hue_to_rgb(H + (1.0 / 3.0), M1, M2),
+ G = hue_to_rgb(H, M1, M2),
+ B = hue_to_rgb(H - (1.0 / 3.0), M1, M2),
+ {R, G, B, A}.
+
+-spec rgba_to_hsla(float(), float(), float(), float()) -> {float(),
+ float(),
+ float(),
+ float()}.
+rgba_to_hsla(R, G, B, A) ->
+ Min_colour = gleam@float:min(R, gleam@float:min(G, B)),
+ Max_colour = gleam@float:max(R, gleam@float:max(G, B)),
+ H1 = case true of
+ _ when Max_colour =:= R ->
+ gleam@float:divide(G - B, Max_colour - Min_colour);
+
+ _ when Max_colour =:= G ->
+ _pipe = gleam@float:divide(B - R, Max_colour - Min_colour),
+ gleam@result:then(_pipe, fun(D) -> {ok, 2.0 + D} end);
+
+ _ ->
+ _pipe@1 = gleam@float:divide(R - G, Max_colour - Min_colour),
+ gleam@result:then(_pipe@1, fun(D@1) -> {ok, 4.0 + D@1} end)
+ end,
+ H2 = case H1 of
+ {ok, V} ->
+ {ok, V * (1.0 / 6.0)};
+
+ _ ->
+ H1
+ end,
+ H3 = case H2 of
+ {ok, V@1} when V@1 < +0.0 ->
+ V@1 + 1.0;
+
+ {ok, V@2} ->
+ V@2;
+
+ _ ->
+ +0.0
+ end,
+ L = (Min_colour + Max_colour) / 2.0,
+ S = case true of
+ _ when Min_colour =:= Max_colour ->
+ +0.0;
+
+ _ when L < 0.5 ->
+ case (Max_colour + Min_colour) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> (Max_colour - Min_colour) / Gleam@denominator
+ end;
+
+ _ ->
+ case ((2.0 - Max_colour) - Min_colour) of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> (Max_colour - Min_colour) / Gleam@denominator@1
+ end
+ end,
+ {H3, S, L, A}.
+
+-spec from_rgb255(integer(), integer(), integer()) -> {ok, colour()} |
+ {error, nil}.
+from_rgb255(Red, Green, Blue) ->
+ gleam@result:then(
+ begin
+ _pipe = Red,
+ _pipe@1 = gleam@int:to_float(_pipe),
+ _pipe@2 = gleam@float:divide(_pipe@1, 255.0),
+ gleam@result:then(_pipe@2, fun valid_colour_value/1)
+ end,
+ fun(R) ->
+ gleam@result:then(
+ begin
+ _pipe@3 = Green,
+ _pipe@4 = gleam@int:to_float(_pipe@3),
+ _pipe@5 = gleam@float:divide(_pipe@4, 255.0),
+ gleam@result:then(_pipe@5, fun valid_colour_value/1)
+ end,
+ fun(G) ->
+ gleam@result:then(
+ begin
+ _pipe@6 = Blue,
+ _pipe@7 = gleam@int:to_float(_pipe@6),
+ _pipe@8 = gleam@float:divide(_pipe@7, 255.0),
+ gleam@result:then(_pipe@8, fun valid_colour_value/1)
+ end,
+ fun(B) -> {ok, {rgba, R, G, B, 1.0}} end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_rgb(float(), float(), float()) -> {ok, colour()} | {error, nil}.
+from_rgb(Red, Green, Blue) ->
+ gleam@result:then(
+ valid_colour_value(Red),
+ fun(R) ->
+ gleam@result:then(
+ valid_colour_value(Green),
+ fun(G) ->
+ gleam@result:then(
+ valid_colour_value(Blue),
+ fun(B) -> {ok, {rgba, R, G, B, 1.0}} end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_rgba(float(), float(), float(), float()) -> {ok, colour()} |
+ {error, nil}.
+from_rgba(Red, Green, Blue, Alpha) ->
+ gleam@result:then(
+ valid_colour_value(Red),
+ fun(R) ->
+ gleam@result:then(
+ valid_colour_value(Green),
+ fun(G) ->
+ gleam@result:then(
+ valid_colour_value(Blue),
+ fun(B) ->
+ gleam@result:then(
+ valid_colour_value(Alpha),
+ fun(A) -> {ok, {rgba, R, G, B, A}} end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_hsla(float(), float(), float(), float()) -> {ok, colour()} |
+ {error, nil}.
+from_hsla(Hue, Saturation, Lightness, Alpha) ->
+ gleam@result:then(
+ valid_colour_value(Hue),
+ fun(H) ->
+ gleam@result:then(
+ valid_colour_value(Saturation),
+ fun(S) ->
+ gleam@result:then(
+ valid_colour_value(Lightness),
+ fun(L) ->
+ gleam@result:then(
+ valid_colour_value(Alpha),
+ fun(A) -> {ok, {hsla, H, S, L, A}} end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec from_hsl(float(), float(), float()) -> {ok, colour()} | {error, nil}.
+from_hsl(Hue, Saturation, Lightness) ->
+ from_hsla(Hue, Saturation, Lightness, 1.0).
+
+-spec from_rgb_hex(integer()) -> {ok, colour()} | {error, nil}.
+from_rgb_hex(Hex) ->
+ case (Hex > 16#ffffff) orelse (Hex < 0) of
+ true ->
+ {error, nil};
+
+ false ->
+ R = begin
+ _pipe = erlang:'bsr'(Hex, 16),
+ erlang:'band'(_pipe, 16#ff)
+ end,
+ G = begin
+ _pipe@1 = erlang:'bsr'(Hex, 8),
+ erlang:'band'(_pipe@1, 16#ff)
+ end,
+ B = erlang:'band'(Hex, 16#ff),
+ from_rgb255(R, G, B)
+ end.
+
+-spec from_rgb_hex_string(binary()) -> {ok, colour()} | {error, nil}.
+from_rgb_hex_string(Hex_string) ->
+ gleam@result:then(
+ hex_string_to_int(Hex_string),
+ fun(Hex_int) -> from_rgb_hex(Hex_int) end
+ ).
+
+-spec from_rgba_hex(integer()) -> {ok, colour()} | {error, nil}.
+from_rgba_hex(Hex) ->
+ case (Hex > 16#ffffffff) orelse (Hex < 0) of
+ true ->
+ {error, nil};
+
+ false ->
+ _assert_subject = begin
+ _pipe = erlang:'bsr'(Hex, 24),
+ _pipe@1 = erlang:'band'(_pipe, 16#ff),
+ _pipe@2 = gleam@int:to_float(_pipe@1),
+ gleam@float:divide(_pipe@2, 255.0)
+ end,
+ {ok, R} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 588})
+ end,
+ _assert_subject@1 = begin
+ _pipe@3 = erlang:'bsr'(Hex, 16),
+ _pipe@4 = erlang:'band'(_pipe@3, 16#ff),
+ _pipe@5 = gleam@int:to_float(_pipe@4),
+ gleam@float:divide(_pipe@5, 255.0)
+ end,
+ {ok, G} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 594})
+ end,
+ _assert_subject@2 = begin
+ _pipe@6 = erlang:'bsr'(Hex, 8),
+ _pipe@7 = erlang:'band'(_pipe@6, 16#ff),
+ _pipe@8 = gleam@int:to_float(_pipe@7),
+ gleam@float:divide(_pipe@8, 255.0)
+ end,
+ {ok, B} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 600})
+ end,
+ _assert_subject@3 = begin
+ _pipe@9 = erlang:'band'(Hex, 16#ff),
+ _pipe@10 = gleam@int:to_float(_pipe@9),
+ gleam@float:divide(_pipe@10, 255.0)
+ end,
+ {ok, A} = case _assert_subject@3 of
+ {ok, _} -> _assert_subject@3;
+ _assert_fail@3 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@3,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"from_rgba_hex"/utf8>>,
+ line => 606})
+ end,
+ from_rgba(R, G, B, A)
+ end.
+
+-spec from_rgba_hex_string(binary()) -> {ok, colour()} | {error, nil}.
+from_rgba_hex_string(Hex_string) ->
+ gleam@result:then(
+ hex_string_to_int(Hex_string),
+ fun(Hex_int) -> from_rgba_hex(Hex_int) end
+ ).
+
+-spec to_rgba(colour()) -> {float(), float(), float(), float()}.
+to_rgba(Colour) ->
+ case Colour of
+ {rgba, R, G, B, A} ->
+ {R, G, B, A};
+
+ {hsla, H, S, L, A@1} ->
+ hsla_to_rgba(H, S, L, A@1)
+ end.
+
+-spec to_hsla(colour()) -> {float(), float(), float(), float()}.
+to_hsla(Colour) ->
+ case Colour of
+ {hsla, H, S, L, A} ->
+ {H, S, L, A};
+
+ {rgba, R, G, B, A@1} ->
+ rgba_to_hsla(R, G, B, A@1)
+ end.
+
+-spec to_css_rgba_string(colour()) -> binary().
+to_css_rgba_string(Colour) ->
+ {R, G, B, A} = to_rgba(Colour),
+ Percent = fun(X) ->
+ _assert_subject = begin
+ _pipe = X,
+ _pipe@1 = gleam@float:multiply(_pipe, 10000.0),
+ _pipe@2 = gleam@float:round(_pipe@1),
+ _pipe@3 = gleam@int:to_float(_pipe@2),
+ gleam@float:divide(_pipe@3, 100.0)
+ end,
+ {ok, P} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"to_css_rgba_string"/utf8>>,
+ line => 704})
+ end,
+ P
+ end,
+ Round_to = fun(X@1) ->
+ _assert_subject@1 = begin
+ _pipe@4 = X@1,
+ _pipe@5 = gleam@float:multiply(_pipe@4, 1000.0),
+ _pipe@6 = gleam@float:round(_pipe@5),
+ _pipe@7 = gleam@int:to_float(_pipe@6),
+ gleam@float:divide(_pipe@7, 1000.0)
+ end,
+ {ok, R@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/colour"/utf8>>,
+ function => <<"to_css_rgba_string"/utf8>>,
+ line => 716})
+ end,
+ R@1
+ end,
+ gleam@string:join(
+ [<<"rgba("/utf8>>,
+ <<(gleam@float:to_string(Percent(R)))/binary, "%,"/utf8>>,
+ <<(gleam@float:to_string(Percent(G)))/binary, "%,"/utf8>>,
+ <<(gleam@float:to_string(Percent(B)))/binary, "%,"/utf8>>,
+ gleam@float:to_string(Round_to(A)),
+ <<")"/utf8>>],
+ <<""/utf8>>
+ ).
+
+-spec to_rgba_hex(colour()) -> integer().
+to_rgba_hex(Colour) ->
+ {R, G, B, A} = to_rgba(Colour),
+ Red = begin
+ _pipe = R * 255.0,
+ _pipe@1 = gleam@float:round(_pipe),
+ erlang:'bsl'(_pipe@1, 24)
+ end,
+ Green = begin
+ _pipe@2 = G * 255.0,
+ _pipe@3 = gleam@float:round(_pipe@2),
+ erlang:'bsl'(_pipe@3, 16)
+ end,
+ Blue = begin
+ _pipe@4 = B * 255.0,
+ _pipe@5 = gleam@float:round(_pipe@4),
+ erlang:'bsl'(_pipe@5, 8)
+ end,
+ Alpha = begin
+ _pipe@6 = A * 255.0,
+ gleam@float:round(_pipe@6)
+ end,
+ ((Red + Green) + Blue) + Alpha.
+
+-spec to_rgba_hex_string(colour()) -> binary().
+to_rgba_hex_string(Colour) ->
+ _pipe = to_rgba_hex(Colour),
+ gleam@int:to_base16(_pipe).
+
+-spec to_rgb_hex(colour()) -> integer().
+to_rgb_hex(Colour) ->
+ {R, G, B, _} = to_rgba(Colour),
+ Red = begin
+ _pipe = R * 255.0,
+ _pipe@1 = gleam@float:round(_pipe),
+ erlang:'bsl'(_pipe@1, 16)
+ end,
+ Green = begin
+ _pipe@2 = G * 255.0,
+ _pipe@3 = gleam@float:round(_pipe@2),
+ erlang:'bsl'(_pipe@3, 8)
+ end,
+ Blue = begin
+ _pipe@4 = B * 255.0,
+ gleam@float:round(_pipe@4)
+ end,
+ (Red + Green) + Blue.
+
+-spec to_rgb_hex_string(colour()) -> binary().
+to_rgb_hex_string(Colour) ->
+ _pipe = to_rgb_hex(Colour),
+ gleam@int:to_base16(_pipe).
diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl
new file mode 100644
index 0000000..64d37bf
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community@colour@accessibility.erl
@@ -0,0 +1,73 @@
+-module(gleam_community@colour@accessibility).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([luminance/1, contrast_ratio/2, maximum_contrast/2]).
+
+-spec intensity(float()) -> float().
+intensity(Colour_value) ->
+ case true of
+ _ when Colour_value =< 0.03928 ->
+ Colour_value / 12.92;
+
+ _ ->
+ _assert_subject = gleam@float:power(
+ (Colour_value + 0.055) / 1.055,
+ 2.4
+ ),
+ {ok, I} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/colour/accessibility"/utf8>>,
+ function => <<"intensity"/utf8>>,
+ line => 62})
+ end,
+ I
+ end.
+
+-spec luminance(gleam_community@colour:colour()) -> float().
+luminance(Colour) ->
+ {R, G, B, _} = gleam_community@colour:to_rgba(Colour),
+ R_intensity = intensity(R),
+ G_intensity = intensity(G),
+ B_intensity = intensity(B),
+ ((0.2126 * R_intensity) + (0.7152 * G_intensity)) + (0.0722 * B_intensity).
+
+-spec contrast_ratio(
+ gleam_community@colour:colour(),
+ gleam_community@colour:colour()
+) -> float().
+contrast_ratio(Colour_a, Colour_b) ->
+ Luminance_a = luminance(Colour_a) + 0.05,
+ Luminance_b = luminance(Colour_b) + 0.05,
+ case Luminance_a > Luminance_b of
+ true ->
+ case Luminance_b of
+ 0.0 -> 0.0;
+ Gleam@denominator -> Luminance_a / Gleam@denominator
+ end;
+
+ false ->
+ case Luminance_a of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> Luminance_b / Gleam@denominator@1
+ end
+ end.
+
+-spec maximum_contrast(
+ gleam_community@colour:colour(),
+ list(gleam_community@colour:colour())
+) -> {ok, gleam_community@colour:colour()} | {error, nil}.
+maximum_contrast(Base, Colours) ->
+ _pipe = Colours,
+ _pipe@1 = gleam@list:sort(
+ _pipe,
+ fun(Colour_a, Colour_b) ->
+ Contrast_a = contrast_ratio(Base, Colour_a),
+ Contrast_b = contrast_ratio(Base, Colour_b),
+ gleam@float:compare(Contrast_b, Contrast_a)
+ end
+ ),
+ gleam@list:first(_pipe@1).
diff --git a/aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src b/aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src
new file mode 100644
index 0000000..a327650
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_colour/src/gleam_community_colour.app.src
@@ -0,0 +1,9 @@
+{application, gleam_community_colour, [
+ {vsn, "1.2.0"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "Colour types, conversions, and other utilities"},
+ {modules, [gleam_community@colour,
+ gleam_community@colour@accessibility]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_community_maths/LICENCE b/aoc2023/build/packages/gleam_community_maths/LICENCE
new file mode 100644
index 0000000..a84f0ec
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/LICENCE
@@ -0,0 +1,190 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2023 Gleam Community Contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. \ No newline at end of file
diff --git a/aoc2023/build/packages/gleam_community_maths/README.md b/aoc2023/build/packages/gleam_community_maths/README.md
new file mode 100644
index 0000000..c912757
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/README.md
@@ -0,0 +1,59 @@
+# gleam-community/maths
+
+[![Package Version](https://img.shields.io/hexpm/v/gleam_community_maths)](https://hex.pm/packages/gleam_community_maths)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gleam_community_maths/)
+
+A basic mathematics library that contains some of the most fundamental mathematics functions and utilities.
+
+The library supports both targets: Erlang and JavaScript.
+
+## Quickstart
+
+```gleam
+import gleam_community/maths/arithmetics
+import gleam_community/maths/combinatorics
+import gleam_community/maths/elementary
+import gleam_community/maths/piecewise
+import gleam_community/maths/predicates
+import gleam/float
+
+pub fn main() {
+ // Evaluate the sine function
+ elementary.sin(elementary.pi())
+ // Returns Float: 0.0
+
+ // Find the greatest common divisor
+ arithmetics.gcd(54, 24)
+ // Returns Int: 6
+
+ // Find the minimum and maximum of a list
+ piecewise.extrema([10.0, 3.0, 50.0, 20.0, 3.0], float.compare)
+ // Returns Tuple: Ok(#(3.0, 50.0))
+
+ // Find the list indices of the smallest value
+ piecewise.arg_minimum([10, 3, 50, 20, 3], float.compare)
+ // Returns List: Ok([1, 4])
+
+ // Determine if a number is fractional
+ predicates.is_fractional(0.3333)
+ // Returns Bool: True
+
+ // Determine if 28 is a power of 3
+ predicates.is_power(28, 3)
+ // Returns Bool: False
+
+ // Generate all k = 1 combinations of [1, 2]
+ combinatorics.list_combination([1, 2], 1)
+ // Returns List: Ok([[1], [2]])
+}
+
+```
+
+## Installation
+
+`gleam_community` packages are published to [hex.pm](https://hex.pm/packages/gleam_community_maths)
+with the prefix `gleam_community_`. You can add them to your Gleam projects directly:
+
+```sh
+gleam add gleam_community_maths
+```
diff --git a/aoc2023/build/packages/gleam_community_maths/gleam.toml b/aoc2023/build/packages/gleam_community_maths/gleam.toml
new file mode 100644
index 0000000..9dc5fd7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/gleam.toml
@@ -0,0 +1,12 @@
+name = "gleam_community_maths"
+version = "1.0.1"
+
+licences = ["Apache-2.0"]
+description = "A basic maths library"
+repository = { type = "github", user = "gleam-community", repo = "maths" }
+
+[dependencies]
+gleam_stdlib = "~> 0.33"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam
new file mode 100644
index 0000000..3e0f63a
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/arithmetics.gleam
@@ -0,0 +1,618 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Arithmetics: A module containing a collection of fundamental mathematical functions relating to simple arithmetics (addition, subtraction, multiplication, etc.), but also number theory.
+////
+//// * **Division functions**
+//// * [`gcd`](#gcd)
+//// * [`lcm`](#lcm)
+//// * [`divisors`](#divisors)
+//// * [`proper_divisors`](#proper_divisors)
+//// * **Sums and products**
+//// * [`float_sum`](#float_sum)
+//// * [`int_sum`](#int_sum)
+//// * [`float_product`](#float_product)
+//// * [`int_product`](#int_product)
+//// * [`float_cumulative_sum`](#float_cumulative_sum)
+//// * [`int_cumulative_sum`](#int_cumulative_sum)
+//// * [`float_cumulative_product`](#float_cumulative_product)
+//// * [`int_cumulative_product`](#int_cumulative_product)
+////
+
+import gleam/int
+import gleam/list
+import gleam_community/maths/conversion
+import gleam_community/maths/elementary
+import gleam_community/maths/piecewise
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function calculates the greatest common multiple of two integers $$x, y \in \mathbb{Z}$$.
+/// The greatest common multiple is the largest positive integer that is divisible by both $$x$$ and $$y$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example() {
+/// arithmetics.lcm(1, 1)
+/// |> should.equal(1)
+///
+/// arithmetics.lcm(100, 10)
+/// |> should.equal(10)
+///
+/// arithmetics.gcd(-36, -17)
+/// |> should.equal(1)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn gcd(x: Int, y: Int) -> Int {
+ let absx: Int = piecewise.int_absolute_value(x)
+ let absy: Int = piecewise.int_absolute_value(y)
+ do_gcd(absx, absy)
+}
+
+fn do_gcd(x: Int, y: Int) -> Int {
+ case x == 0 {
+ True -> y
+ False -> {
+ let assert Ok(z) = int.modulo(y, x)
+ do_gcd(z, x)
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function calculates the least common multiple of two integers $$x, y \in \mathbb{Z}$$.
+/// The least common multiple is the smallest positive integer that has both $$x$$ and $$y$$ as factors.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example() {
+/// arithmetics.lcm(1, 1)
+/// |> should.equal(1)
+///
+/// arithmetics.lcm(100, 10)
+/// |> should.equal(100)
+///
+/// arithmetics.lcm(-36, -17)
+/// |> should.equal(612)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn lcm(x: Int, y: Int) -> Int {
+ let absx: Int = piecewise.int_absolute_value(x)
+ let absy: Int = piecewise.int_absolute_value(y)
+ absx * absy / do_gcd(absx, absy)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function returns all the positive divisors of an integer, including the number iteself.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example() {
+/// arithmetics.divisors(4)
+/// |> should.equal([1, 2, 4])
+///
+/// arithmetics.divisors(6)
+/// |> should.equal([1, 2, 3, 6])
+///
+/// arithmetics.proper_divisors(13)
+/// |> should.equal([1, 13])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn divisors(n: Int) -> List(Int) {
+ find_divisors(n)
+}
+
+fn find_divisors(n: Int) -> List(Int) {
+ let nabs: Float = piecewise.float_absolute_value(conversion.int_to_float(n))
+ let assert Ok(sqrt_result) = elementary.square_root(nabs)
+ let max: Int = conversion.float_to_int(sqrt_result) + 1
+ list.range(2, max)
+ |> list.fold(
+ [1, n],
+ fn(acc: List(Int), i: Int) -> List(Int) {
+ case n % i == 0 {
+ True -> [i, n / i, ..acc]
+ False -> acc
+ }
+ },
+ )
+ |> list.unique()
+ |> list.sort(int.compare)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function returns all the positive divisors of an integer, excluding the number iteself.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example() {
+/// arithmetics.proper_divisors(4)
+/// |> should.equal([1, 2])
+///
+/// arithmetics.proper_divisors(6)
+/// |> should.equal([1, 2, 3])
+///
+/// arithmetics.proper_divisors(13)
+/// |> should.equal([1])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn proper_divisors(n: Int) -> List(Int) {
+ let divisors: List(Int) = find_divisors(n)
+ divisors
+ |> list.take(list.length(divisors) - 1)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the sum of the elements in a list:
+///
+/// \\[
+/// \sum_{i=1}^n x_i
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// // An empty list returns an error
+/// []
+/// |> arithmetics.float_sum()
+/// |> should.equal(0.0)
+///
+/// // Valid input returns a result
+/// [1.0, 2.0, 3.0]
+/// |> arithmetics.float_sum()
+/// |> should.equal(6.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_sum(arr: List(Float)) -> Float {
+ case arr {
+ [] -> 0.0
+ _ ->
+ arr
+ |> list.fold(0.0, fn(acc: Float, a: Float) -> Float { a +. acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the sum of the elements in a list:
+///
+/// \\[
+/// \sum_{i=1}^n x_i
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// // An empty list returns 0
+/// []
+/// |> arithmetics.int_sum()
+/// |> should.equal(0)
+///
+/// // Valid input returns a result
+/// [1, 2, 3]
+/// |> arithmetics.int_sum()
+/// |> should.equal(6)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_sum(arr: List(Int)) -> Int {
+ case arr {
+ [] -> 0
+ _ ->
+ arr
+ |> list.fold(0, fn(acc: Int, a: Int) -> Int { a + acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the product of the elements in a list:
+///
+/// \\[
+/// \prod_{i=1}^n x_i
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// // An empty list returns 0.0
+/// []
+/// |> arithmetics.float_product()
+/// |> should.equal(0.0)
+///
+/// // Valid input returns a result
+/// [1.0, 2.0, 3.0]
+/// |> arithmetics.float_product()
+/// |> should.equal(6.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_product(arr: List(Float)) -> Float {
+ case arr {
+ [] -> 1.0
+ _ ->
+ arr
+ |> list.fold(1.0, fn(acc: Float, a: Float) -> Float { a *. acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the product of the elements in a list:
+///
+/// \\[
+/// \prod_{i=1}^n x_i
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// // An empty list returns 0
+/// []
+/// |> arithmetics.int_product()
+/// |> should.equal(0)
+///
+/// // Valid input returns a result
+/// [1, 2, 3]
+/// |> arithmetics.int_product()
+/// |> should.equal(6)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_product(arr: List(Int)) -> Int {
+ case arr {
+ [] -> 1
+ _ ->
+ arr
+ |> list.fold(1, fn(acc: Int, a: Int) -> Int { a * acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the cumulative sum of the elements in a list:
+///
+/// \\[
+/// v_j = \sum_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n
+/// \\]
+///
+/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative sum of $$n$$ elements.
+/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$.
+/// The value $$v_j$$ is thus the sum of the $$1$$ to $$j$$ first elements in the given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// []
+/// |> arithmetics.float_cumulative_sum()
+/// |> should.equal([])
+///
+/// // Valid input returns a result
+/// [1.0, 2.0, 3.0]
+/// |> arithmetics.float_cumulative_sum()
+/// |> should.equal([1.0, 3.0, 6.0])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_cumulative_sum(arr: List(Float)) -> List(Float) {
+ case arr {
+ [] -> []
+ _ ->
+ arr
+ |> list.scan(0.0, fn(acc: Float, a: Float) -> Float { a +. acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the cumulative sum of the elements in a list:
+///
+/// \\[
+/// v_j = \sum_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n
+/// \\]
+///
+/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative sum of $$n$$ elements.
+/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$.
+/// The value $$v_j$$ is thus the sum of the $$1$$ to $$j$$ first elements in the given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// []
+/// |> arithmetics.int_cumulative_sum()
+/// |> should.equal([])
+///
+/// // Valid input returns a result
+/// [1, 2, 3]
+/// |> arithmetics.int_cumulative_sum()
+/// |> should.equal([1, 3, 6])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_cumulative_sum(arr: List(Int)) -> List(Int) {
+ case arr {
+ [] -> []
+ _ ->
+ arr
+ |> list.scan(0, fn(acc: Int, a: Int) -> Int { a + acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the cumulative product of the elements in a list:
+///
+/// \\[
+/// v_j = \prod_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n
+/// \\]
+///
+/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative product of $$n$$ elements.
+/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{R}$$ is the value in the input list indexed by $$i$$.
+/// The value $$v_j$$ is thus the sum of the $$1$$ to $$j$$ first elements in the given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// // An empty list returns an error
+/// []
+/// |> arithmetics.float_cumulative_product()
+/// |> should.equal([])
+///
+/// // Valid input returns a result
+/// [1.0, 2.0, 3.0]
+/// |> arithmetics.float_cumulative_product()
+/// |> should.equal([1.0, 2.0, 6.0])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_cumumlative_product(arr: List(Float)) -> List(Float) {
+ case arr {
+ [] -> []
+ _ ->
+ arr
+ |> list.scan(1.0, fn(acc: Float, a: Float) -> Float { a *. acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the cumulative product of the elements in a list:
+///
+/// \\[
+/// v_j = \prod_{i=1}^j x_i \\;\\; \forall j = 1,\dots, n
+/// \\]
+///
+/// In the formula, $$v_j$$ is the $$j$$'th element in the cumulative product of $$n$$ elements.
+/// That is, $$n$$ is the length of the list and $$x_i \in \mathbb{Z}$$ is the value in the input list indexed by $$i$$.
+/// The value $$v_j$$ is thus the product of the $$1$$ to $$j$$ first elements in the given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/arithmetics
+///
+/// pub fn example () {
+/// // An empty list returns an error
+/// []
+/// |> arithmetics.int_cumulative_product()
+/// |> should.equal([])
+///
+/// // Valid input returns a result
+/// [1, 2, 3]
+/// |> arithmetics.int_cumulative_product()
+/// |> should.equal([1, 2, 6])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_cumulative_product(arr: List(Int)) -> List(Int) {
+ case arr {
+ [] -> []
+ _ ->
+ arr
+ |> list.scan(1, fn(acc: Int, a: Int) -> Int { a * acc })
+ }
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam
new file mode 100644
index 0000000..ee771a1
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/combinatorics.gleam
@@ -0,0 +1,432 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Combinatorics: A module that offers mathematical functions related to counting, arrangements, and combinations.
+////
+//// * **Combinatorial functions**
+//// * [`combination`](#combination)
+//// * [`factorial`](#factorial)
+//// * [`permutation`](#permutation)
+//// * [`list_combination`](#list_combination)
+//// * [`list_permutation`](#list_permutation)
+//// * [`cartesian_product`](#cartesian_product)
+////
+
+import gleam/list
+import gleam/set
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A combinatorial function for computing the number of a $$k$$-combinations of $$n$$ elements:
+///
+/// \\[
+/// C(n, k) = \binom{n}{k} = \frac{n!}{k! (n-k)!}
+/// \\]
+/// Also known as "$$n$$ choose $$k$$" or the binomial coefficient.
+///
+/// The implementation uses the effecient iterative multiplicative formula for the computation.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/combinatorics
+///
+/// pub fn example() {
+/// // Invalid input gives an error
+/// // Error on: n = -1 < 0
+/// combinatorics.combination(-1, 1)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// combinatorics.combination(4, 0)
+/// |> should.equal(Ok(1))
+///
+/// combinatorics.combination(4, 4)
+/// |> should.equal(Ok(1))
+///
+/// combinatorics.combination(4, 2)
+/// |> should.equal(Ok(6))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn combination(n: Int, k: Int) -> Result(Int, String) {
+ case n < 0 {
+ True ->
+ "Invalid input argument: n < 0. Valid input is n > 0."
+ |> Error
+ False ->
+ case k < 0 || k > n {
+ True ->
+ 0
+ |> Ok
+ False ->
+ case k == 0 || k == n {
+ True ->
+ 1
+ |> Ok
+ False -> {
+ let min = case k < n - k {
+ True -> k
+ False -> n - k
+ }
+ list.range(1, min)
+ |> list.fold(
+ 1,
+ fn(acc: Int, x: Int) -> Int { acc * { n + 1 - x } / x },
+ )
+ |> Ok
+ }
+ }
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A combinatorial function for computing the total number of combinations of $$n$$
+/// elements, that is $$n!$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/combinatorics
+///
+/// pub fn example() {
+/// // Invalid input gives an error
+/// combinatorics.factorial(-1)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// combinatorics.factorial(0)
+/// |> should.equal(Ok(1))
+///
+/// combinatorics.factorial(1)
+/// |> should.equal(Ok(1))
+///
+/// combinatorics.factorial(2)
+/// |> should.equal(Ok(2))
+///
+/// combinatorics.factorial(3)
+/// |> should.equal(Ok(6))
+///
+/// combinatorics.factorial(4)
+/// |> should.equal(Ok(24))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn factorial(n) -> Result(Int, String) {
+ case n < 0 {
+ True ->
+ "Invalid input argument: n < 0. Valid input is n > 0."
+ |> Error
+ False ->
+ case n {
+ 0 ->
+ 1
+ |> Ok
+ 1 ->
+ 1
+ |> Ok
+ _ ->
+ list.range(1, n)
+ |> list.fold(1, fn(acc: Int, x: Int) { acc * x })
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A combinatorial function for computing the number of $$k$$-permuations (without repetitions)
+/// of $$n$$ elements:
+///
+/// \\[
+/// P(n, k) = \frac{n!}{(n - k)!}
+/// \\]
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/combinatorics
+///
+/// pub fn example() {
+/// // Invalid input gives an error
+/// // Error on: n = -1 < 0
+/// combinatorics.permutation(-1, 1)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// combinatorics.permutation(4, 0)
+/// |> should.equal(Ok(1))
+///
+/// combinatorics.permutation(4, 4)
+/// |> should.equal(Ok(1))
+///
+/// combinatorics.permutation(4, 2)
+/// |> should.equal(Ok(12))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn permutation(n: Int, k: Int) -> Result(Int, String) {
+ case n < 0 {
+ True ->
+ "Invalid input argument: n < 0. Valid input is n > 0."
+ |> Error
+ False ->
+ case k < 0 || k > n {
+ True ->
+ 0
+ |> Ok
+ False ->
+ case k == n {
+ True ->
+ 1
+ |> Ok
+ False -> {
+ let assert Ok(v1) = factorial(n)
+ let assert Ok(v2) = factorial(n - k)
+ v1 / v2
+ |> Ok
+ }
+ }
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Generate all $$k$$-combinations based on a given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/set
+/// import gleam_community/maths/combinatorics
+///
+/// pub fn example () {
+/// let assert Ok(result) = combinatorics.list_combination([1, 2, 3, 4], 3)
+/// result
+/// |> set.from_list()
+/// |> should.equal(set.from_list([[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn list_combination(arr: List(a), k: Int) -> Result(List(List(a)), String) {
+ case k < 0 {
+ True ->
+ "Invalid input argument: k < 0. Valid input is k > 0."
+ |> Error
+ False -> {
+ case k > list.length(arr) {
+ True ->
+ "Invalid input argument: k > length(arr). Valid input is 0 < k <= length(arr)."
+ |> Error
+ False -> {
+ do_list_combination(arr, k, [])
+ |> Ok
+ }
+ }
+ }
+ }
+}
+
+fn do_list_combination(arr: List(a), k: Int, prefix: List(a)) -> List(List(a)) {
+ case k {
+ 0 -> [list.reverse(prefix)]
+ _ ->
+ case arr {
+ [] -> []
+ [x, ..xs] -> {
+ let with_x = do_list_combination(xs, k - 1, [x, ..prefix])
+ let without_x = do_list_combination(xs, k, prefix)
+ list.append(with_x, without_x)
+ }
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Generate all permutations of a given list.
+///
+/// Repeated elements are treated as distinct for the
+/// purpose of permutations, so two identical elements
+/// for example will appear "both ways round". This
+/// means lists with repeated elements return the same
+/// number of permutations as ones without.
+///
+/// N.B. The output of this function is a list of size
+/// factorial in the size of the input list. Caution is
+/// advised on input lists longer than ~11 elements, which
+/// may cause the VM to use unholy amounts of memory for
+/// the output.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/set
+/// import gleam_community/maths/combinatorics
+///
+/// pub fn example () {
+/// [1, 2, 3]
+/// |> combinatorics.list_permutation()
+/// |> set.from_list()
+/// |> should.equal(set.from_list([
+/// [1, 2, 3],
+/// [2, 1, 3],
+/// [3, 1, 2],
+/// [1, 3, 2],
+/// [2, 3, 1],
+/// [3, 2, 1],
+/// ]))
+///
+/// [1.0, 1.0]
+/// |> combinatorics.list_permutation()
+/// |> should.equal([[1.0, 1.0], [1.0, 1.0]])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn list_permutation(arr: List(a)) -> List(List(a)) {
+ case arr {
+ [] -> [[]]
+ _ -> {
+ use x <- list.flat_map(arr)
+ // `x` is drawn from the list `arr` above,
+ // so Ok(...) can be safely asserted as the result of `list.pop` below
+ let assert Ok(#(_, remaining)) = list.pop(arr, fn(y) { x == y })
+ list.map(list_permutation(remaining), fn(perm) { [x, ..perm] })
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Generate a list containing all combinations of pairs of elements coming from two given lists.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/list
+/// import gleam_community/maths/combinatorics
+///
+/// pub fn example () {
+/// []
+/// |> combinatorics.cartesian_product([])
+/// |> should.equal([])
+///
+/// [1.0, 10.0]
+/// |> combinatorics.cartesian_product([1.0, 2.0])
+/// |> should.equal([#(1.0, 1.0), #(1.0, 2.0), #(10.0, 1.0), #(10.0, 2.0)])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn cartesian_product(xarr: List(a), yarr: List(a)) -> List(#(a, a)) {
+ let xset: set.Set(a) =
+ xarr
+ |> set.from_list()
+ let yset: set.Set(a) =
+ yarr
+ |> set.from_list()
+ xset
+ |> set.fold(
+ set.new(),
+ fn(accumulator0: set.Set(#(a, a)), member0: a) -> set.Set(#(a, a)) {
+ set.fold(
+ yset,
+ accumulator0,
+ fn(accumulator1: set.Set(#(a, a)), member1: a) -> set.Set(#(a, a)) {
+ set.insert(accumulator1, #(member0, member1))
+ },
+ )
+ },
+ )
+ |> set.to_list()
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam
new file mode 100644
index 0000000..017aabd
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/conversion.gleam
@@ -0,0 +1,183 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Conversion: A module containing various functions for converting between types and quantities.
+////
+//// * **Misc. functions**
+//// * [`float_to_int`](#float_to_int)
+//// * [`int_to_float`](#int_to_float)
+//// * [`degrees_to_radians`](#degrees_to_radians)
+//// * [`radians_to_degrees`](#radians_to_degrees)
+
+import gleam/int
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A function that produces a number of type `Float` from an `Int`.
+///
+/// Note: The function is equivalent to the `int.to_float` function in the Gleam stdlib.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/conversion
+///
+/// pub fn example() {
+/// conversion.int_to_float(-1)
+/// |> should.equal(-1.0)
+///
+/// conversion.int_to_float(1)
+/// |> should.equal(1.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_to_float(x: Int) -> Float {
+ int.to_float(x)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function returns the integral part of a given floating point value.
+/// That is, everything after the decimal point of a given floating point value is discarded and only the integer value before the decimal point is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/option
+/// import gleam_community/maths/conversion
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// conversion.float_to_int(12.0654)
+/// |> should.equal(12)
+///
+/// // Note: Making the following function call is equivalent
+/// // but instead of returning a value of type 'Int' a value
+/// // of type 'Float' is returned.
+/// piecewise.round(12.0654, option.Some(0), option.Some(piecewise.RoundToZero))
+/// |> should.equal(Ok(12.0))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_to_int(x: Float) -> Int {
+ do_to_int(x)
+}
+
+@external(erlang, "erlang", "trunc")
+@external(javascript, "../../maths.mjs", "truncate")
+fn do_to_int(a: Float) -> Int
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Convert a value in degrees to a value measured in radians.
+/// That is, $$1 \text{ degrees } = \frac{\pi}{180} \text{ radians }$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/conversion
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// conversion.degrees_to_radians(360.)
+/// |> should.equal(2. *. elementary.pi())
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn degrees_to_radians(x: Float) -> Float {
+ x *. do_pi() /. 180.0
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Convert a value in degrees to a value measured in radians.
+/// That is, $$1 \text{ radians } = \frac{180}{\pi} \text{ degrees }$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/conversion
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// conversion.radians_to_degrees(0.0)
+/// |> should.equal(0.0)
+///
+/// conversion.radians_to_degrees(2. *. elementary.pi())
+/// |> should.equal(360.)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn radians_to_degrees(x: Float) -> Float {
+ x *. 180.0 /. do_pi()
+}
+
+@external(erlang, "math", "pi")
+@external(javascript, "../../maths.mjs", "pi")
+fn do_pi() -> Float
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam
new file mode 100644
index 0000000..1b518a4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/elementary.gleam
@@ -0,0 +1,1256 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Elementary: A module containing a comprehensive set of foundational mathematical functions and constants.
+////
+//// * **Trigonometric and hyperbolic functions**
+//// * [`acos`](#acos)
+//// * [`acosh`](#acosh)
+//// * [`asin`](#asin)
+//// * [`asinh`](#asinh)
+//// * [`atan`](#atan)
+//// * [`atan2`](#atan2)
+//// * [`atanh`](#atanh)
+//// * [`cos`](#cos)
+//// * [`cosh`](#cosh)
+//// * [`sin`](#sin)
+//// * [`sinh`](#sinh)
+//// * [`tan`](#tan)
+//// * [`tanh`](#tanh)
+//// * **Powers, logs and roots**
+//// * [`exponential`](#exponential)
+//// * [`natural_logarithm`](#natural_logarithm)
+//// * [`logarithm`](#logarithm)
+//// * [`logarithm_2`](#logarithm_2)
+//// * [`logarithm_10`](#logarithm_10)
+//// * [`power`](#power)
+//// * [`square_root`](#square_root)
+//// * [`cube_root`](#cube_root)
+//// * [`nth_root`](#nth_root)
+//// * **Mathematical constants**
+//// * [`pi`](#pi)
+//// * [`tau`](#tau)
+//// * [`e`](#e)
+////
+
+import gleam/int
+import gleam/option
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse cosine function:
+///
+/// \\[
+/// \forall x \in \[-1, 1\], \\; \cos^{-1}{(x)} = y \in \[0, \pi \]
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\[-1, 1\]$$ as input and returns a
+/// numeric value $$y$$ that lies in the range $$\[0, \pi \]$$ (an angle in radians).
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.acos(1.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.acos(1.1)
+/// |> should.be_error()
+///
+/// elementary.acos(-1.1)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn acos(x: Float) -> Result(Float, String) {
+ case x >=. -1.0 && x <=. 1.0 {
+ True ->
+ do_acos(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "acos")
+@external(javascript, "../../maths.mjs", "acos")
+fn do_acos(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse hyperbolic cosine function:
+///
+/// \\[
+/// \forall x \in [1, +\infty\), \\; \cosh^{-1}{(x)} = y \in \[0, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\[1, +\infty\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\[0, +\infty\)$$ (an angle in radians).
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.acosh(1.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.acosh(0.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn acosh(x: Float) -> Result(Float, String) {
+ case x >=. 1.0 {
+ True ->
+ do_acosh(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x < 1. Valid input is x >= 1."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "acosh")
+@external(javascript, "../../maths.mjs", "acosh")
+fn do_acosh(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse sine function:
+///
+/// \\[
+/// \forall x \in \[-1, 1\], \\; \sin^{-1}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\[-1, 1\]$$ as input and returns a numeric
+/// value $$y$$ that lies in the range $$\[-\frac{\pi}{2}, \frac{\pi}{2}\]$$ (an angle in radians).
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.asin(0.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.asin(1.1)
+/// |> should.be_error()
+///
+/// elementary.asin(-1.1)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn asin(x: Float) -> Result(Float, String) {
+ case x >=. -1.0 && x <=. 1.0 {
+ True ->
+ do_asin(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "asin")
+@external(javascript, "../../maths.mjs", "asin")
+fn do_asin(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse hyperbolic sine function:
+///
+/// \\[
+/// \forall x \in \(-\infty, \infty\), \\; \sinh^{-1}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\(-\infty, +\infty\)$$ (an angle in radians).
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.asinh(0.0)
+/// |> should.equal(0.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn asinh(x: Float) -> Float {
+ do_asinh(x)
+}
+
+@external(erlang, "math", "asinh")
+@external(javascript, "../../maths.mjs", "asinh")
+fn do_asinh(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse tangent function:
+///
+/// \\[
+/// \forall x \in \(-\infty, \infty\), \\; \tan^{-1}{(x)} = y \in \[-\frac{\pi}{2}, \frac{\pi}{2}\]
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\[-\frac{\pi}{2}, \frac{\pi}{2}\]$$ (an angle in radians).
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.atan(0.0)
+/// |> should.equal(0.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn atan(x: Float) -> Float {
+ do_atan(x)
+}
+
+@external(erlang, "math", "atan")
+@external(javascript, "../../maths.mjs", "atan")
+fn do_atan(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse 2-argument tangent function:
+///
+/// \\[
+/// \text{atan2}(y, x) =
+/// \begin{cases}
+/// \tan^{-1}(\frac y x) &\text{if } x > 0, \\\\
+/// \tan^{-1}(\frac y x) + \pi &\text{if } x < 0 \text{ and } y \ge 0, \\\\
+/// \tan^{-1}(\frac y x) - \pi &\text{if } x < 0 \text{ and } y < 0, \\\\
+/// +\frac{\pi}{2} &\text{if } x = 0 \text{ and } y > 0, \\\\
+/// -\frac{\pi}{2} &\text{if } x = 0 \text{ and } y < 0, \\\\
+/// \text{undefined} &\text{if } x = 0 \text{ and } y = 0.
+/// \end{cases}
+/// \\]
+///
+/// The function returns the angle in radians from the x-axis to the line containing the
+/// origin $$\(0, 0\)$$ and a point given as input with coordinates $$\(x, y\)$$. The numeric value
+/// returned by $$\text{atan2}(y, x)$$ is in the range $$\[-\pi, \pi\]$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.atan2(0.0, 0.0)
+/// |> should.equal(0.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn atan2(y: Float, x: Float) -> Float {
+ do_atan2(y, x)
+}
+
+@external(erlang, "math", "atan2")
+@external(javascript, "../../maths.mjs", "atan2")
+fn do_atan2(a: Float, b: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The inverse hyperbolic tangent function:
+///
+/// \\[
+/// \forall x \in \(-1, 1\), \\; \tanh^{-1}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-1, 1\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$ (an angle in radians).
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.atanh(0.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.atanh(1.0)
+/// |> should.be_error()
+///
+/// elementary.atanh(-1.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn atanh(x: Float) -> Result(Float, String) {
+ case x >. -1.0 && x <. 1.0 {
+ True ->
+ do_atanh(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x > -1 or x < 1. Valid input is -1. < x < 1."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "atanh")
+@external(javascript, "../../maths.mjs", "atanh")
+fn do_atanh(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The cosine function:
+///
+/// \\[
+/// \forall x \in \(-\infty, +\infty\), \\; \cos{(x)} = y \in \[-1, 1\]
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ (an angle in radians)
+/// as input and returns a numeric value $$y$$ that lies in the range $$\[-1, 1\]$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.cos(0.0)
+/// |> should.equal(1.0)
+///
+/// elementary.cos(elementary.pi())
+/// |> should.equal(-1.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn cos(x: Float) -> Float {
+ do_cos(x)
+}
+
+@external(erlang, "math", "cos")
+@external(javascript, "../../maths.mjs", "cos")
+fn do_cos(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The hyperbolic cosine function:
+///
+/// \\[
+/// \forall x \in \(-\infty, \infty\), \\; \cosh{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ as input (an angle in radians)
+/// and returns a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$.
+/// If the input value is too large an overflow error might occur.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.cosh(0.0)
+/// |> should.equal(0.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn cosh(x: Float) -> Float {
+ do_cosh(x)
+}
+
+@external(erlang, "math", "cosh")
+@external(javascript, "../../maths.mjs", "cosh")
+fn do_cosh(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The sine function:
+///
+/// \\[
+/// \forall x \in \(-\infty, +\infty\), \\; \sin{(x)} = y \in \[-1, 1\]
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ (an angle in radians)
+/// as input and returns a numeric value $$y$$ that lies in the range $$\[-1, 1\]$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.sin(0.0)
+/// |> should.equal(0.0)
+///
+/// elementary.sin(0.5 *. elementary.pi())
+/// |> should.equal(1.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn sin(x: Float) -> Float {
+ do_sin(x)
+}
+
+@external(erlang, "math", "sin")
+@external(javascript, "../../maths.mjs", "sin")
+fn do_sin(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The hyperbolic sine function:
+///
+/// \\[
+/// \forall x \in \(-\infty, +\infty\), \\; \sinh{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input
+/// (an angle in radians) and returns a numeric value $$y$$ that lies in the range
+/// $$\(-\infty, +\infty\)$$. If the input value is too large an overflow error might
+/// occur.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.sinh(0.0)
+/// |> should.equal(0.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn sinh(x: Float) -> Float {
+ do_sinh(x)
+}
+
+@external(erlang, "math", "sinh")
+@external(javascript, "../../maths.mjs", "sinh")
+fn do_sinh(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The tangent function:
+///
+/// \\[
+/// \forall x \in \(-\infty, +\infty\), \\; \tan{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, +\infty\)$$ as input
+/// (an angle in radians) and returns a numeric value $$y$$ that lies in the range
+/// $$\(-\infty, +\infty\)$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.tan(0.0)
+/// |> should.equal(0.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn tan(x: Float) -> Float {
+ do_tan(x)
+}
+
+@external(erlang, "math", "tan")
+@external(javascript, "../../maths.mjs", "tan")
+fn do_tan(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The hyperbolic tangent function:
+///
+/// \\[
+/// \forall x \in \(-\infty, \infty\), \\; \tanh{(x)} = y \in \[-1, 1\]
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(-\infty, \infty\)$$ as input (an angle in radians)
+/// and returns a numeric value $$y$$ that lies in the range $$\[-1, 1\]$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example () {
+/// elementary.tanh(0.0)
+/// |> should.equal(0.0)
+///
+/// elementary.tanh(25.0)
+/// |> should.equal(1.0)
+///
+/// elementary.tanh(-25.0)
+/// |> should.equal(-1.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn tanh(x: Float) -> Float {
+ do_tanh(x)
+}
+
+@external(erlang, "math", "tanh")
+@external(javascript, "../../maths.mjs", "tanh")
+fn do_tanh(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The exponential function:
+///
+/// \\[
+/// \forall x \in \(-\infty, \infty\), \\; e^{(x)} = y \in \(0, +\infty\)
+/// \\]
+///
+/// $$e \approx 2.71828\dots$$ is Eulers' number.
+///
+/// Note: If the input value $$x$$ is too large an overflow error might occur.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.exponential(0.0)
+/// |> should.equal(1.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn exponential(x: Float) -> Float {
+ do_exponential(x)
+}
+
+@external(erlang, "math", "exp")
+@external(javascript, "../../maths.mjs", "exponential")
+fn do_exponential(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The natural logarithm function:
+///
+/// \\[
+/// \forall x \in \(0, \infty\), \\; \log_{e}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$.
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example () {
+/// elementary.natural_logarithm(1.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.natural_logarithm(elementary.e())
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.natural_logarithm(-1.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn natural_logarithm(x: Float) -> Result(Float, String) {
+ case x >. 0.0 {
+ True ->
+ do_natural_logarithm(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x <= 0. Valid input is x > 0."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "log")
+@external(javascript, "../../maths.mjs", "logarithm")
+fn do_natural_logarithm(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The base $$b$$ logarithm function (computed through the "change of base" formula):
+///
+/// \\[
+/// \forall x \in \(0, \infty\) \textnormal{ and } b > 1, \\; \log_{b}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ and a base $$b > 1$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$.
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/option
+/// import gleam_community/maths/elementary
+///
+/// pub fn example () {
+/// elementary.logarithm(1.0, option.Some(10.0))
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.logarithm(elementary.e(), option.Some(elementary.e()))
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.logarithm(-1.0, option.Some(2.0))
+/// |> should.be_error()
+/// }
+/// </details>
+///
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn logarithm(x: Float, base: option.Option(Float)) -> Result(Float, String) {
+ case x >. 0.0 {
+ True ->
+ case base {
+ option.Some(a) ->
+ case a >. 0.0 && a != 1.0 {
+ True -> {
+ // Apply the "change of base formula"
+ let assert Ok(numerator) = logarithm_10(x)
+ let assert Ok(denominator) = logarithm_10(a)
+ numerator /. denominator
+ |> Ok
+ }
+ False ->
+ "Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."
+ |> Error
+ }
+ _ ->
+ "Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."
+ |> Error
+ }
+ _ ->
+ "Invalid input argument: x <= 0. Valid input is x > 0."
+ |> Error
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The The base-2 logarithm function:
+///
+/// \\[
+/// \forall x \in \(0, \infty), \\; \log_{2}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$.
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example () {
+/// elementary.logarithm_2(1.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.logarithm_2(2.0)
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.logarithm_2(-1.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn logarithm_2(x: Float) -> Result(Float, String) {
+ case x >. 0.0 {
+ True ->
+ do_logarithm_2(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x <= 0. Valid input is x > 0."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "log2")
+@external(javascript, "../../maths.mjs", "logarithm_2")
+fn do_logarithm_2(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The base-10 logarithm function:
+///
+/// \\[
+/// \forall x \in \(0, \infty), \\; \log_{10}{(x)} = y \in \(-\infty, +\infty\)
+/// \\]
+///
+/// The function takes a number $$x$$ in its domain $$\(0, \infty\)$$ as input and returns
+/// a numeric value $$y$$ that lies in the range $$\(-\infty, \infty\)$$.
+/// If the input value is outside the domain of the function an error is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example () {
+/// elementary.logarithm_10(1.0)
+/// |> should.equal(Ok(0.0))
+///
+/// elementary.logarithm_10(10.0)
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.logarithm_10(-1.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn logarithm_10(x: Float) -> Result(Float, String) {
+ case x >. 0.0 {
+ True ->
+ do_logarithm_10(x)
+ |> Ok
+ False ->
+ "Invalid input argument: x <= 0. Valid input is x > 0."
+ |> Error
+ }
+}
+
+@external(erlang, "math", "log10")
+@external(javascript, "../../maths.mjs", "logarithm_10")
+fn do_logarithm_10(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The exponentiation function: $$y = x^{a}$$.
+///
+/// Note that the function is not defined if:
+/// 1. The base is negative ($$x < 0$$) and the exponent is fractional
+/// ($$a = \frac{n}{m}$$ is an irrreducible fraction). An error will be returned
+/// as an imaginary number will otherwise have to be returned.
+/// 2. The base is zero ($$x = 0$$) and the exponent is negative ($$a < 0$$) then the
+/// expression is equivalent to the exponent $$y$$ divided by $$0$$ and an
+/// error will have to be returned as the expression is otherwise undefined.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.power(2., -1.)
+/// |> should.equal(Ok(0.5))
+///
+/// elementary.power(2., 2.)
+/// |> should.equal(Ok(4.0))
+///
+/// elementary.power(-1., 0.5)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn power(x: Float, y: Float) -> Result(Float, String) {
+ let fractional: Bool = do_ceiling(y) -. y >. 0.0
+ // In the following check:
+ // 1. If the base (x) is negative and the exponent (y) is fractional
+ // then return an error as it will otherwise be an imaginary number
+ // 2. If the base (x) is 0 and the exponent (y) is negative then the
+ // expression is equivalent to the exponent (y) divided by 0 and an
+ // error should be returned
+ case x <. 0.0 && fractional || x == 0.0 && y <. 0.0 {
+ True ->
+ "Invalid input argument: x < 0 and y is fractional or x = 0 and y < 0."
+ |> Error
+ False ->
+ do_power(x, y)
+ |> Ok
+ }
+}
+
+@external(erlang, "math", "pow")
+@external(javascript, "../../maths.mjs", "power")
+fn do_power(a: Float, b: Float) -> Float
+
+@external(erlang, "math", "ceil")
+@external(javascript, "../../maths.mjs", "ceiling")
+fn do_ceiling(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The square root function: $$y = \sqrt[2]{x} = x^{\frac{1}{2}}$$.
+///
+/// Note that the function is not defined if:
+/// 1. The input is negative ($$x < 0$$). An error will be returned
+/// as an imaginary number will otherwise have to be returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.square_root(1.0)
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.square_root(4.0)
+/// |> should.equal(Ok(2.0))
+///
+/// elementary.square_root(-1.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn square_root(x: Float) -> Result(Float, String) {
+ // In the following check:
+ // 1. If x is negative then return an error as it will otherwise be an
+ // imaginary number
+ case x <. 0.0 {
+ True ->
+ "Invalid input argument: x < 0."
+ |> Error
+ False -> {
+ let assert Ok(result) = power(x, 1.0 /. 2.0)
+ result
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The cube root function: $$y = \sqrt[3]{x} = x^{\frac{1}{3}}$$.
+///
+/// Note that the function is not defined if:
+/// 1. The input is negative ($$x < 0$$). An error will be returned
+/// as an imaginary number will otherwise have to be returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.cube_root(1.0)
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.cube_root(27.0)
+/// |> should.equal(Ok(3.0))
+///
+/// elementary.cube_root(-1.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn cube_root(x: Float) -> Result(Float, String) {
+ // In the following check:
+ // 1. If x is negative then return an error as it will otherwise be an
+ // imaginary number
+ case x <. 0.0 {
+ True ->
+ "Invalid input argument: x < 0."
+ |> Error
+ False -> {
+ let assert Ok(result) = power(x, 1.0 /. 3.0)
+ result
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The $$n$$'th root function: $$y = \sqrt[n]{x} = x^{\frac{1}{n}}$$.
+///
+/// Note that the function is not defined if:
+/// 1. The input is negative ($$x < 0$$). An error will be returned
+/// as an imaginary number will otherwise have to be returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// elementary.nth_root(1.0, 2)
+/// |> should.equal(Ok(1.0))
+///
+/// elementary.nth_root(27.0, 3)
+/// |> should.equal(Ok(3.0))
+///
+/// elementary.nth_root(256.0, 4)
+/// |> should.equal(Ok(4.0))
+///
+/// elementary.nth_root(-1.0, 2)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn nth_root(x: Float, n: Int) -> Result(Float, String) {
+ // In the following check:
+ // 1. If x is negative then return an error as it will otherwise be an
+ // imaginary number
+ case x <. 0.0 {
+ True ->
+ "Invalid input argument: x < 0. Valid input is x > 0"
+ |> Error
+ False ->
+ case n >= 1 {
+ True -> {
+ let assert Ok(result) = power(x, 1.0 /. int.to_float(n))
+ result
+ |> Ok
+ }
+ False ->
+ "Invalid input argument: n < 1. Valid input is n >= 2."
+ |> Error
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The mathematical constant pi: $$\pi \approx 3.1415\dots$$
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn pi() -> Float {
+ do_pi()
+}
+
+@external(erlang, "math", "pi")
+@external(javascript, "../../maths.mjs", "pi")
+fn do_pi() -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The mathematical constant tau: $$\tau = 2 \cdot \pi \approx 6.283\dots$$
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn tau() -> Float {
+ 2.0 *. pi()
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Euler's number $$e \approx 2.71828\dots$$.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+///
+/// pub fn example() {
+/// // Test that the constant is approximately equal to 2.7128...
+/// elementary.e()
+/// |> elementary.is_close(2.7128, 0.0, 0.000001)
+/// |> should.be_true()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn e() -> Float {
+ exponential(1.0)
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam
new file mode 100644
index 0000000..1dab2b4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/metrics.gleam
@@ -0,0 +1,560 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Metrics: A module offering functions for calculating distances and other types of metrics.
+////
+//// * **Distances**
+//// * [`norm`](#norm)
+//// * [`manhatten_distance`](#float_manhatten_distance)
+//// * [`minkowski_distance`](#minkowski_distance)
+//// * [`euclidean_distance`](#euclidean_distance)
+//// * **Basic statistical measures**
+//// * [`mean`](#mean)
+//// * [`median`](#median)
+//// * [`variance`](#variance)
+//// * [`standard_deviation`](#standard_deviation)
+////
+
+import gleam_community/maths/elementary
+import gleam_community/maths/piecewise
+import gleam_community/maths/arithmetics
+import gleam_community/maths/predicates
+import gleam_community/maths/conversion
+import gleam/list
+import gleam/pair
+import gleam/float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the $$p$$-norm of a list (representing a vector):
+///
+/// \\[
+/// \left( \sum_{i=1}^n \left|x_i\right|^{p} \right)^{\frac{1}{p}}
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the list and $$x_i$$ is the value in the input list indexed by $$i$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/metrics
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+///
+/// [1.0, 1.0, 1.0]
+/// |> metrics.norm(1.0)
+/// |> predicates.is_close(3.0, 0.0, tol)
+/// |> should.be_true()
+///
+/// [1.0, 1.0, 1.0]
+/// |> metrics.norm(-1.0)
+/// |> predicates.is_close(0.3333333333333333, 0.0, tol)
+/// |> should.be_true()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn norm(arr: List(Float), p: Float) -> Float {
+ case arr {
+ [] -> 0.0
+ _ -> {
+ let agg: Float =
+ arr
+ |> list.fold(
+ 0.0,
+ fn(acc: Float, a: Float) -> Float {
+ let assert Ok(result) =
+ elementary.power(piecewise.float_absolute_value(a), p)
+ result +. acc
+ },
+ )
+ let assert Ok(result) = elementary.power(agg, 1.0 /. p)
+ result
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the Manhatten distance between two lists (representing vectors):
+///
+/// \\[
+/// \sum_{i=1}^n \left|x_i - y_i \right|
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the two lists and $$x_i, y_i$$ are the values in the respective input lists indexed by $$i, j$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/metrics
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+///
+/// // Empty lists returns 0.0
+/// metrics.float_manhatten_distance([], [])
+/// |> should.equal(Ok(0.0))
+///
+/// // Differing lengths returns error
+/// metrics.manhatten_distance([], [1.0])
+/// |> should.be_error()
+///
+/// let assert Ok(result) = metrics.manhatten_distance([0.0, 0.0], [1.0, 2.0])
+/// result
+/// |> predicates.is_close(3.0, 0.0, tol)
+/// |> should.be_true()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn manhatten_distance(
+ xarr: List(Float),
+ yarr: List(Float),
+) -> Result(Float, String) {
+ minkowski_distance(xarr, yarr, 1.0)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the Minkowski distance between two lists (representing vectors):
+///
+/// \\[
+/// \left( \sum_{i=1}^n \left|x_i - y_i \right|^{p} \right)^{\frac{1}{p}}
+/// \\]
+///
+/// In the formula, $$p >= 1$$ is the order, $$n$$ is the length of the two lists and $$x_i, y_i$$ are the values in the respective input lists indexed by $$i, j$$.
+///
+/// The Minkowski distance is a generalization of both the Euclidean distance ($$p=2$$) and the Manhattan distance ($$p = 1$$).
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/metrics
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+///
+/// // Empty lists returns 0.0
+/// metrics.minkowski_distance([], [], 1.0)
+/// |> should.equal(Ok(0.0))
+///
+/// // Differing lengths returns error
+/// metrics.minkowski_distance([], [1.0], 1.0)
+/// |> should.be_error()
+///
+/// // Test order < 1
+/// metrics.minkowski_distance([0.0, 0.0], [0.0, 0.0], -1.0)
+/// |> should.be_error()
+///
+/// let assert Ok(result) = metrics.minkowski_distance([0.0, 0.0], [1.0, 2.0], 1.0)
+/// result
+/// |> predicates.is_close(3.0, 0.0, tol)
+/// |> should.be_true()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn minkowski_distance(
+ xarr: List(Float),
+ yarr: List(Float),
+ p: Float,
+) -> Result(Float, String) {
+ let xlen: Int = list.length(xarr)
+ let ylen: Int = list.length(yarr)
+ case xlen == ylen {
+ False ->
+ "Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."
+ |> Error
+ True ->
+ case p <. 1.0 {
+ True ->
+ "Invalid input argument: p < 1. Valid input is p >= 1."
+ |> Error
+ False ->
+ list.zip(xarr, yarr)
+ |> list.map(fn(tuple: #(Float, Float)) -> Float {
+ pair.first(tuple) -. pair.second(tuple)
+ })
+ |> norm(p)
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the Euclidean distance between two lists (representing vectors):
+///
+/// \\[
+/// \left( \sum_{i=1}^n \left|x_i - y_i \right|^{2} \right)^{\frac{1}{2}}
+/// \\]
+///
+/// In the formula, $$n$$ is the length of the two lists and $$x_i, y_i$$ are the values in the respective input lists indexed by $$i, j$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/metrics
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+///
+/// // Empty lists returns 0.0
+/// metrics.euclidean_distance([], [])
+/// |> should.equal(Ok(0.0))
+///
+/// // Differing lengths returns error
+/// metrics.euclidean_distance([], [1.0])
+/// |> should.be_error()
+///
+/// let assert Ok(result) = metrics.euclidean_distance([0.0, 0.0], [1.0, 2.0])
+/// result
+/// |> predicates.is_close(2.23606797749979, 0.0, tol)
+/// |> should.be_true()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn euclidean_distance(
+ xarr: List(Float),
+ yarr: List(Float),
+) -> Result(Float, String) {
+ minkowski_distance(xarr, yarr, 2.0)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/nicklasxyz/gleam_stats/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the arithmetic mean of the elements in a list:
+///
+/// \\[
+/// \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i
+/// \\]
+///
+/// In the formula, $$n$$ is the sample size (the length of the list) and
+/// $$x_i$$ is the sample point in the input list indexed by $$i$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/metrics
+///
+/// pub fn example () {
+/// // An empty list returns an error
+/// []
+/// |> metrics.mean()
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [1., 2., 3.]
+/// |> metrics.mean()
+/// |> should.equal(Ok(2.))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn mean(arr: List(Float)) -> Result(Float, String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ ->
+ arr
+ |> arithmetics.float_sum()
+ |> fn(a: Float) -> Float {
+ a /. conversion.int_to_float(list.length(arr))
+ }
+ |> Ok
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/nicklasxyz/gleam_stats/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the median of the elements in a list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/metrics
+///
+/// pub fn example () {
+/// // An empty list returns an error
+/// []
+/// |> metrics.median()
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [1., 2., 3.]
+/// |> metrics.median()
+/// |> should.equal(Ok(2.))
+///
+/// [1., 2., 3., 4.]
+/// |> metrics.median()
+/// |> should.equal(Ok(2.5))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn median(arr: List(Float)) -> Result(Float, String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ -> {
+ let count: Int = list.length(arr)
+ let mid: Int = list.length(arr) / 2
+ let sorted: List(Float) = list.sort(arr, float.compare)
+ case predicates.is_odd(count) {
+ // If there is an odd number of elements in the list, then the median
+ // is just the middle value
+ True -> {
+ let assert Ok(val0) = list.at(sorted, mid)
+ val0
+ |> Ok
+ }
+ // If there is an even number of elements in the list, then the median
+ // is the mean of the two middle values
+ False -> {
+ let assert Ok(val0) = list.at(sorted, mid - 1)
+ let assert Ok(val1) = list.at(sorted, mid)
+ [val0, val1]
+ |> mean()
+ }
+ }
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/nicklasxyz/gleam_stats/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the sample variance of the elements in a list:
+/// \\[
+/// s^{2} = \frac{1}{n - d} \sum_{i=1}^{n}(x_i - \bar{x})
+/// \\]
+///
+/// In the formula, $$n$$ is the sample size (the length of the list) and
+/// $$x_i$$ is the sample point in the input list indexed by $$i$$.
+/// Furthermore, $$\bar{x}$$ is the sample mean and $$d$$ is the "Delta
+/// Degrees of Freedom", and is by default set to $$d = 0$$, which gives a biased
+/// estimate of the sample variance. Setting $$d = 1$$ gives an unbiased estimate.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/metrics
+///
+/// pub fn example () {
+/// // Degrees of freedom
+/// let ddof: Int = 1
+///
+/// // An empty list returns an error
+/// []
+/// |> metrics.variance(ddof)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [1., 2., 3.]
+/// |> metrics.variance(ddof)
+/// |> should.equal(Ok(1.))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn variance(arr: List(Float), ddof: Int) -> Result(Float, String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ ->
+ case ddof < 0 {
+ True ->
+ "Invalid input argument: ddof < 0. Valid input is ddof >= 0."
+ |> Error
+ False -> {
+ let assert Ok(mean) = mean(arr)
+ arr
+ |> list.map(fn(a: Float) -> Float {
+ let assert Ok(result) = elementary.power(a -. mean, 2.0)
+ result
+ })
+ |> arithmetics.float_sum()
+ |> fn(a: Float) -> Float {
+ a /. {
+ conversion.int_to_float(list.length(arr)) -. conversion.int_to_float(
+ ddof,
+ )
+ }
+ }
+ |> Ok
+ }
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/nicklasxyz/gleam_stats/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Calculcate the sample standard deviation of the elements in a list:
+/// \\[
+/// s = \left(\frac{1}{n - d} \sum_{i=1}^{n}(x_i - \bar{x})\right)^{\frac{1}{2}}
+/// \\]
+///
+/// In the formula, $$n$$ is the sample size (the length of the list) and
+/// $$x_i$$ is the sample point in the input list indexed by $$i$$.
+/// Furthermore, $$\bar{x}$$ is the sample mean and $$d$$ is the "Delta
+/// Degrees of Freedom", and is by default set to $$d = 0$$, which gives a biased
+/// estimate of the sample standard deviation. Setting $$d = 1$$ gives an unbiased estimate.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/metrics
+///
+/// pub fn example () {
+/// // Degrees of freedom
+/// let ddof: Int = 1
+///
+/// // An empty list returns an error
+/// []
+/// |> metrics.standard_deviationddof)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [1., 2., 3.]
+/// |> metrics.standard_deviation(ddof)
+/// |> should.equal(Ok(1.))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn standard_deviation(arr: List(Float), ddof: Int) -> Result(Float, String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ ->
+ case ddof < 0 {
+ True ->
+ "Invalid input argument: ddof < 0. Valid input is ddof >= 0."
+ |> Error
+ False -> {
+ let assert Ok(variance) = variance(arr, ddof)
+ // The computed variance will always be positive
+ // So an error should never be returned
+ let assert Ok(stdev) = elementary.square_root(variance)
+ stdev
+ |> Ok
+ }
+ }
+ }
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam
new file mode 100644
index 0000000..3b40a18
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/piecewise.gleam
@@ -0,0 +1,1228 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Piecewise: A module containing functions that have different definitions depending on conditions or intervals of their domain.
+////
+//// * **Rounding functions**
+//// * [`ceiling`](#ceiling)
+//// * [`floor`](#floor)
+//// * [`truncate`](#truncate)
+//// * [`round`](#round)
+//// * **Sign and absolute value functions**
+//// * [`float_absolute_value`](#float_absolute_value)
+//// * [`int_absolute_value`](#int_absolute_value)
+//// * [`float_absolute_difference`](#float_absolute_difference)
+//// * [`int_absolute_difference`](#int_absolute_difference)
+//// * [`float_sign`](#float_sign)
+//// * [`int_sign`](#int_sign)
+//// * [`float_copy_sign`](#float_copy_sign)
+//// * [`int_copy_sign`](#float_copy_sign)
+//// * [`float_flip_sign`](#float_flip_sign)
+//// * [`int_flip_sign`](#int_flip_sign)
+//// * **Misc. mathematical functions**
+//// * [`minimum`](#minimum)
+//// * [`maximum`](#maximum)
+//// * [`minmax`](#minmax)
+//// * [`list_minimum`](#list_minimum)
+//// * [`list_maximum`](#list_maximum)
+//// * [`extrema`](#extrema)
+//// * [`arg_minimum`](#arg_minimum)
+//// * [`arg_maximum`](#arg_maximum)
+////
+
+import gleam/option
+import gleam/list
+import gleam/order
+import gleam/pair
+import gleam/int
+import gleam_community/maths/conversion
+import gleam_community/maths/elementary
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The ceiling function rounds a given input value $$x \in \mathbb{R}$$ to the nearest integer value (at the specified digit) that is larger than or equal to the input $$x$$.
+///
+/// Note: The ceiling function is used as an alias for the rounding function [`round`](#round) with rounding mode `RoundUp`.
+///
+/// <details>
+/// <summary>Details</summary>
+///
+/// For example, $$12.0654$$ is rounded to:
+/// - $$13.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`)
+/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.066$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// For example, $$12.0654$$ is rounded to:
+/// - $$20.0$$ for 1 digit places before the decimal point (`digit = -1`)
+/// - $$100.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$1000.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// </details>
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/option
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.ceiling(12.0654, option.Some(1))
+/// |> should.equal(Ok(12.1))
+///
+/// piecewise.ceiling(12.0654, option.Some(2))
+/// |> should.equal(Ok(12.07))
+///
+/// piecewise.ceiling(12.0654, option.Some(3))
+/// |> should.equal(Ok(12.066))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn ceiling(x: Float, digits: option.Option(Int)) -> Result(Float, String) {
+ round(x, digits, option.Some(RoundUp))
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The floor function rounds input $$x \in \mathbb{R}$$ to the nearest integer value (at the specified digit) that is less than or equal to the input $$x$$.
+///
+/// Note: The floor function is used as an alias for the rounding function [`round`](#round) with rounding mode `RoundDown`.
+///
+/// <details>
+/// <summary>Details</summary>
+///
+/// For example, $$12.0654$$ is rounded to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.0$$ for 1 digits after the decimal point (`digits = 1`)
+/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// </details>
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/option
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.floor(12.0654, option.Some(1))
+/// |> should.equal(Ok(12.0))
+///
+/// piecewise.floor(12.0654, option.Some(2))
+/// |> should.equal(Ok(12.06))
+///
+/// piecewise.floor(12.0654, option.Some(3))
+/// |> should.equal(Ok(12.065))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn floor(x: Float, digits: option.Option(Int)) -> Result(Float, String) {
+ round(x, digits, option.Some(RoundDown))
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The truncate function rounds a given input $$x \in \mathbb{R}$$ to the nearest integer value (at the specified digit) that is less than or equal to the absolute value of the input $$x$$.
+///
+/// Note: The truncate function is used as an alias for the rounding function [`round`](#round) with rounding mode `RoundToZero`.
+///
+/// <details>
+/// <summary>Details</summary>
+///
+/// For example, $$12.0654$$ is rounded to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.0$$ for 1 digits after the decimal point (`digits = 1`)
+/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// </details>
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/option
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.truncate(12.0654, option.Some(1))
+/// |> should.equal(Ok(12.0))
+///
+/// piecewise.truncate(12.0654, option.Some(2))
+/// |> should.equal(Ok(12.0))
+///
+/// piecewise.truncate(12.0654, option.Some(3))
+/// |> should.equal(Ok(12.0))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn truncate(x: Float, digits: option.Option(Int)) -> Result(Float, String) {
+ round(x, digits, option.Some(RoundToZero))
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function rounds a float to a specific number of digits (after the decimal place or before if negative) using a specified rounding mode.
+///
+/// Valid rounding modes include:
+/// - `RoundNearest` (default): The input $$x$$ is rounded to the nearest integer value (at the specified digit) with ties (fractional values of 0.5) being rounded to the nearest even integer.
+/// - `RoundTiesAway`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) with ties (fractional values of 0.5) being rounded away from zero (C/C++ rounding behavior).
+/// - `RoundTiesUp`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) with ties (fractional values of 0.5) being rounded towards $$+\infty$$ (Java/JavaScript rounding behaviour).
+/// - `RoundToZero`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) that is less than or equal to the absolute value of the input $$x$$. An alias for this rounding mode is [`truncate`](#truncate).
+/// - `RoundDown`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) that is less than or equal to the input $$x$$. An alias for this rounding mode is [`floor`](#floor).
+/// - `RoundUp`: The input $$x$$ is rounded to the nearest integer value (at the specified digit) that is larger than or equal to the input $$x$$. An alias for this rounding mode is [`ceiling`](#ceiling).
+///
+/// <details>
+/// <summary>Details</summary>
+///
+/// The `RoundNearest` rounding mode, rounds $$12.0654$$ to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`)
+/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// The `RoundTiesAway` rounding mode, rounds $$12.0654$$ to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`)
+/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// The `RoundTiesUp` rounding mode, rounds $$12.0654$$ to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.1$$ for 1 digits after the decimal point (`digits = 1`)
+/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// The `RoundToZero` rounding mode, rounds $$12.0654$$ to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.0$$ for 1 digit after the decimal point (`digits = 1`)
+/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// The `RoundDown` rounding mode, rounds $$12.0654$$ to:
+/// - $$12.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.0$$ for 1 digits after the decimal point (`digits = 1`)
+/// - $$12.06$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.065$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$10.0$$ for 1 digit before the decimal point (`digits = -1`)
+/// - $$0.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$0.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// The `RoundUp` rounding mode, rounds $$12.0654$$ to:
+/// - $$13.0$$ for 0 digits after the decimal point (`digits = 0`)
+/// - $$12.1$$ for 1 digit after the decimal point (`digits = 1`)
+/// - $$12.07$$ for 2 digits after the decimal point (`digits = 2`)
+/// - $$12.066$$ for 3 digits after the decimal point (`digits = 3`)
+///
+/// It is also possible to specify a negative number of digits. In that case, the negative number refers to the digits before the decimal point.
+/// - $$20.0$$ for 1 digit places before the decimal point (`digit = -1`)
+/// - $$100.0$$ for 2 digits before the decimal point (`digits = -2`)
+/// - $$1000.0$$ for 3 digits before the decimal point (`digits = -3`)
+///
+/// </details>
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/option
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// // The default number of digits is 0 if None is provided
+/// piecewise.round(12.0654, option.None, option.Some(piecewise.RoundNearest))
+/// |> should.equal(Ok(12.0))
+///
+/// // The default rounding mode is "RoundNearest" if None is provided
+/// piecewise.round(12.0654, option.None, option.None)
+/// |> should.equal(Ok(12.0))
+///
+/// // Try different rounding modes
+/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundNearest))
+/// |> should.equal(Ok(12.07))
+///
+/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundTiesAway))
+/// |> should.equal(Ok(12.07))
+///
+/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundTiesUp))
+/// |> should.equal(Ok(12.07))
+///
+/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundToZero))
+/// |> should.equal(Ok(12.06))
+///
+/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundDown))
+/// |> should.equal(Ok(12.06))
+///
+/// piecewise.round(12.0654, option.Some(2), option.Some(piecewise.RoundUp))
+/// |> should.equal(Ok(12.07))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn round(
+ x: Float,
+ digits: option.Option(Int),
+ mode: option.Option(RoundingMode),
+) -> Result(Float, String) {
+ case digits {
+ option.Some(a) -> {
+ let assert Ok(p) = elementary.power(10.0, conversion.int_to_float(a))
+ // Round the given input x using at the specified digit
+ do_round(p, x, mode)
+ }
+ // Round the given input x using at the default digit
+ option.None -> do_round(1.0, x, mode)
+ }
+}
+
+pub type RoundingMode {
+ RoundNearest
+ RoundTiesAway
+ RoundTiesUp
+ RoundToZero
+ RoundDown
+ RoundUp
+}
+
+fn do_round(
+ p: Float,
+ x: Float,
+ mode: option.Option(RoundingMode),
+) -> Result(Float, String) {
+ case mode {
+ // Determine the rounding mode
+ option.Some(RoundNearest) ->
+ round_to_nearest(p, x)
+ |> Ok
+ option.Some(RoundTiesAway) ->
+ round_ties_away(p, x)
+ |> Ok
+ option.Some(RoundTiesUp) ->
+ round_ties_up(p, x)
+ |> Ok
+ option.Some(RoundToZero) ->
+ round_to_zero(p, x)
+ |> Ok
+ option.Some(RoundDown) ->
+ round_down(p, x)
+ |> Ok
+ option.Some(RoundUp) ->
+ round_up(p, x)
+ |> Ok
+ // Otherwise, use the default rounding mode
+ option.None ->
+ round_to_nearest(p, x)
+ |> Ok
+ }
+}
+
+fn round_to_nearest(p: Float, x: Float) -> Float {
+ let xabs: Float = float_absolute_value(x) *. p
+ let xabs_truncated: Float = truncate_float(xabs)
+ let remainder: Float = xabs -. xabs_truncated
+ case remainder {
+ _ if remainder >. 0.5 -> float_sign(x) *. truncate_float(xabs +. 1.0) /. p
+ _ if remainder == 0.5 -> {
+ let assert Ok(is_even) = int.modulo(conversion.float_to_int(xabs), 2)
+ case is_even == 0 {
+ True -> float_sign(x) *. xabs_truncated /. p
+ False -> float_sign(x) *. truncate_float(xabs +. 1.0) /. p
+ }
+ }
+ _ -> float_sign(x) *. xabs_truncated /. p
+ }
+}
+
+fn round_ties_away(p: Float, x: Float) -> Float {
+ let xabs: Float = float_absolute_value(x) *. p
+ let remainder: Float = xabs -. truncate_float(xabs)
+ case remainder {
+ _ if remainder >=. 0.5 -> float_sign(x) *. truncate_float(xabs +. 1.0) /. p
+ _ -> float_sign(x) *. truncate_float(xabs) /. p
+ }
+}
+
+fn round_ties_up(p: Float, x: Float) -> Float {
+ let xabs: Float = float_absolute_value(x) *. p
+ let xabs_truncated: Float = truncate_float(xabs)
+ let remainder: Float = xabs -. xabs_truncated
+ case remainder {
+ _ if remainder >=. 0.5 && x >=. 0.0 ->
+ float_sign(x) *. truncate_float(xabs +. 1.0) /. p
+ _ -> float_sign(x) *. xabs_truncated /. p
+ }
+}
+
+// Rounding mode: ToZero / Truncate
+fn round_to_zero(p: Float, x: Float) -> Float {
+ truncate_float(x *. p) /. p
+}
+
+fn truncate_float(x: Float) -> Float {
+ do_truncate_float(x)
+}
+
+@external(erlang, "erlang", "trunc")
+@external(javascript, "../../maths.mjs", "truncate")
+fn do_truncate_float(a: Float) -> Float
+
+// Rounding mode: Down / Floor
+fn round_down(p: Float, x: Float) -> Float {
+ do_floor(x *. p) /. p
+}
+
+@external(erlang, "math", "floor")
+@external(javascript, "../../maths.mjs", "floor")
+fn do_floor(a: Float) -> Float
+
+// Rounding mode: Up / Ceiling
+fn round_up(p: Float, x: Float) -> Float {
+ do_ceiling(x *. p) /. p
+}
+
+@external(erlang, "math", "ceil")
+@external(javascript, "../../maths.mjs", "ceiling")
+fn do_ceiling(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The absolute value:
+///
+/// \\[
+/// \forall x, y \in \mathbb{R}, \\; |x| \in \mathbb{R}_{+}.
+/// \\]
+///
+/// The function takes an input $$x$$ and returns a positive float value.
+///
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_absolute_value(x: Float) -> Float {
+ case x >. 0.0 {
+ True -> x
+ False -> -1.0 *. x
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The absolute value:
+///
+/// \\[
+/// \forall x, y \in \mathbb{Z}, \\; |x| \in \mathbb{Z}_{+}.
+/// \\]
+///
+/// The function takes an input $$x$$ and returns a positive integer value.
+///
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_absolute_value(x: Int) -> Int {
+ case x > 0 {
+ True -> x
+ False -> -1 * x
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The absolute difference:
+///
+/// \\[
+/// \forall x, y \in \mathbb{R}, \\; |x - y| \in \mathbb{R}_{+}.
+/// \\]
+///
+/// The function takes two inputs $$x$$ and $$y$$ and returns a positive float
+/// value which is the the absolute difference of the inputs.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.float_absolute_difference(-10.0, 10.0)
+/// |> should.equal(20.0)
+///
+/// piecewise.float_absolute_difference(0.0, -2.0)
+/// |> should.equal(2.0)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_absolute_difference(a: Float, b: Float) -> Float {
+ a -. b
+ |> float_absolute_value()
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The absolute difference:
+///
+/// \\[
+/// \forall x, y \in \mathbb{Z}, \\; |x - y| \in \mathbb{Z}_{+}.
+/// \\]
+///
+/// The function takes two inputs $$x$$ and $$y$$ and returns a positive integer value which is the the absolute difference of the inputs.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.absolute_difference(-10, 10)
+/// |> should.equal(20)
+///
+/// piecewise.absolute_difference(0, -2)
+/// |> should.equal(2)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_absolute_difference(a: Int, b: Int) -> Int {
+ a - b
+ |> int_absolute_value()
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function takes an input $$x \in \mathbb{R}$$ and returns the sign of
+/// the input, indicating whether it is positive (+1.0), negative (-1.0), or
+/// zero (0.0).
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_sign(x: Float) -> Float {
+ do_float_sign(x)
+}
+
+@target(erlang)
+fn do_float_sign(x: Float) -> Float {
+ case x <. 0.0 {
+ True -> -1.0
+ False ->
+ case x == 0.0 {
+ True -> 0.0
+ False -> 1.0
+ }
+ }
+}
+
+@target(javascript)
+@external(javascript, "../../maths.mjs", "sign")
+fn do_float_sign(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function takes an input $$x \in \mathbb{Z}$$ and returns the sign of
+/// the input, indicating whether it is positive (+1), negative (-1), or zero
+/// (0).
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_sign(x: Int) -> Int {
+ do_int_sign(x)
+}
+
+@target(erlang)
+fn do_int_sign(x: Int) -> Int {
+ case x < 0 {
+ True -> -1
+ False ->
+ case x == 0 {
+ True -> 0
+ False -> 1
+ }
+ }
+}
+
+@target(javascript)
+@external(javascript, "../../maths.mjs", "sign")
+fn do_int_sign(a: Int) -> Int
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function takes two arguments $$x, y \in \mathbb{R}$$ and returns $$x$$ such that it has the same sign as $$y$$.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_copy_sign(x: Float, y: Float) -> Float {
+ case float_sign(x) == float_sign(y) {
+ // x and y have the same sign, just return x
+ True -> x
+ // x and y have different signs:
+ // - x is positive and y is negative, then flip sign of x
+ // - x is negative and y is positive, then flip sign of x
+ False -> float_flip_sign(x)
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function takes two arguments $$x, y \in \mathbb{Z}$$ and returns $$x$$ such that it has the same sign as $$y$$.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_copy_sign(x: Int, y: Int) -> Int {
+ case int_sign(x) == int_sign(y) {
+ // x and y have the same sign, just return x
+ True -> x
+ // x and y have different signs:
+ // - x is positive and y is negative, then flip sign of x
+ // - x is negative and y is positive, then flip sign of x
+ False -> int_flip_sign(x)
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function flips the sign of a given input value $$x \in \mathbb{R}$$.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn float_flip_sign(x: Float) -> Float {
+ -1.0 *. x
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function flips the sign of a given input value $$x \in \mathbb{Z}$$.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn int_flip_sign(x: Int) -> Int {
+ -1 * x
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The minimum function takes two arguments $$x, y$$ along with a function
+/// for comparing $$x, y$$. The function returns the smallest of the two given
+/// values.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.minimum(2.0, 1.5, float.compare)
+/// |> should.equal(1.5)
+///
+/// piecewise.minimum(1.5, 2.0, float.compare)
+/// |> should.equal(1.5)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn minimum(x: a, y: a, compare: fn(a, a) -> order.Order) -> a {
+ case compare(x, y) {
+ order.Lt -> x
+ order.Eq -> x
+ order.Gt -> y
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The maximum function takes two arguments $$x, y$$ along with a function
+/// for comparing $$x, y$$. The function returns the largest of the two given
+/// values.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.maximum(2.0, 1.5, float.compare)
+/// |> should.equal(1.5)
+///
+/// piecewise.maximum(1.5, 2.0, float.compare)
+/// |> should.equal(1.5)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn maximum(x: a, y: a, compare: fn(a, a) -> order.Order) -> a {
+ case compare(x, y) {
+ order.Lt -> y
+ order.Eq -> y
+ order.Gt -> x
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The minmax function takes two arguments $$x, y$$ along with a function
+/// for comparing $$x, y$$. The function returns a tuple with the smallest
+/// value first and largest second.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example() {
+/// piecewise.minmax(2.0, 1.5, float.compare)
+/// |> should.equal(#(1.5, 2.0))
+///
+/// piecewise.minmax(1.5, 2.0, float.compare)
+/// |> should.equal(#(1.5, 2.0))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn minmax(x: a, y: a, compare: fn(a, a) -> order.Order) -> #(a, a) {
+ #(minimum(x, y, compare), maximum(x, y, compare))
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Returns the minimum value of a given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/int
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example () {
+/// // An empty lists returns an error
+/// []
+/// |> piecewise.list_minimum(int.compare)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [4, 4, 3, 2, 1]
+/// |> piecewise.list_minimum(int.compare)
+/// |> should.equal(Ok(1))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+pub fn list_minimum(
+ arr: List(a),
+ compare: fn(a, a) -> order.Order,
+) -> Result(a, String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ -> {
+ let assert Ok(val0) = list.at(arr, 0)
+ arr
+ |> list.fold(
+ val0,
+ fn(acc: a, element: a) {
+ case compare(element, acc) {
+ order.Lt -> element
+ _ -> acc
+ }
+ },
+ )
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Returns the maximum value of a given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example () {
+/// // An empty lists returns an error
+/// []
+/// |> piecewise.list_maximum(float.compare)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [4.0, 4.0, 3.0, 2.0, 1.0]
+/// |> piecewise.list_maximum(float.compare)
+/// |> should.equal(Ok(4.0))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn list_maximum(
+ arr: List(a),
+ compare: fn(a, a) -> order.Order,
+) -> Result(a, String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ -> {
+ let assert Ok(val0) = list.at(arr, 0)
+ arr
+ |> list.fold(
+ val0,
+ fn(acc: a, element: a) {
+ case compare(acc, element) {
+ order.Lt -> element
+ _ -> acc
+ }
+ },
+ )
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Returns the indices of the minimum values in a given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example () {
+/// // An empty lists returns an error
+/// []
+/// |> piecewise.arg_minimum(float.compare)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [4.0, 4.0, 3.0, 2.0, 1.0]
+/// |> piecewise.arg_minimum(float.compare)
+/// |> should.equal(Ok([4]))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn arg_minimum(
+ arr: List(a),
+ compare: fn(a, a) -> order.Order,
+) -> Result(List(Int), String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ -> {
+ let assert Ok(min) =
+ arr
+ |> list_minimum(compare)
+ arr
+ |> list.index_map(fn(index: Int, element: a) -> Int {
+ case compare(element, min) {
+ order.Eq -> index
+ _ -> -1
+ }
+ })
+ |> list.filter(fn(index: Int) -> Bool {
+ case index {
+ -1 -> False
+ _ -> True
+ }
+ })
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Returns the indices of the maximum values in a given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example () {
+/// // An empty lists returns an error
+/// []
+/// |> piecewise.arg_maximum(float.compare)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [4.0, 4.0, 3.0, 2.0, 1.0]
+/// |> piecewise.arg_maximum(float.compare)
+/// |> should.equal(Ok([0, 1]))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn arg_maximum(
+ arr: List(a),
+ compare: fn(a, a) -> order.Order,
+) -> Result(List(Int), String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ -> {
+ let assert Ok(max) =
+ arr
+ |> list_maximum(compare)
+ arr
+ |> list.index_map(fn(index: Int, element: a) -> Int {
+ case compare(element, max) {
+ order.Eq -> index
+ _ -> -1
+ }
+ })
+ |> list.filter(fn(index: Int) -> Bool {
+ case index {
+ -1 -> False
+ _ -> True
+ }
+ })
+ |> Ok
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Returns a tuple consisting of the minimum and maximum values of a given list.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/float
+/// import gleam_community/maths/piecewise
+///
+/// pub fn example () {
+/// // An empty lists returns an error
+/// []
+/// |> piecewise.extrema(float.compare)
+/// |> should.be_error()
+///
+/// // Valid input returns a result
+/// [4.0, 4.0, 3.0, 2.0, 1.0]
+/// |> piecewise.extrema(float.compare)
+/// |> should.equal(Ok(#(1.0, 4.0)))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn extrema(
+ arr: List(a),
+ compare: fn(a, a) -> order.Order,
+) -> Result(#(a, a), String) {
+ case arr {
+ [] ->
+ "Invalid input argument: The list is empty."
+ |> Error
+ _ -> {
+ let assert Ok(val_max) = list.at(arr, 0)
+ let assert Ok(val_min) = list.at(arr, 0)
+ arr
+ |> list.fold(
+ #(val_min, val_max),
+ fn(acc: #(a, a), element: a) {
+ let first: a = pair.first(acc)
+ let second: a = pair.second(acc)
+ case compare(element, first), compare(second, element) {
+ order.Lt, order.Lt -> #(element, element)
+ order.Lt, _ -> #(element, second)
+ _, order.Lt -> #(first, element)
+ _, _ -> #(first, second)
+ }
+ },
+ )
+ |> Ok
+ }
+ }
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam
new file mode 100644
index 0000000..f8d357c
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/predicates.gleam
@@ -0,0 +1,363 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Predicates: A module containing functions for testing various mathematical properties of numbers.
+////
+//// * **Tests**
+//// * [`is_close`](#is_close)
+//// * [`list_all_close`](#all_close)
+//// * [`is_fractional`](#is_fractional)
+//// * [`is_power`](#is_power)
+//// * [`is_perfect`](#is_perfect)
+//// * [`is_even`](#is_even)
+//// * [`is_odd`](#is_odd)
+
+import gleam/pair
+import gleam/int
+import gleam/list
+import gleam/option
+import gleam_community/maths/elementary
+import gleam_community/maths/piecewise
+import gleam_community/maths/arithmetics
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Determine if a given value $$a$$ is close to or equivalent to a reference value
+/// $$b$$ based on supplied relative $$r_{tol}$$ and absolute $$a_{tol}$$ tolerance values.
+/// The equivalance of the two given values are then determined based on the equation:
+///
+/// \\[
+/// \|a - b\| \leq (a_{tol} + r_{tol} \cdot \|b\|)
+/// \\]
+///
+/// `True` is returned if statement holds, otherwise `False` is returned.
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/tests
+///
+/// pub fn example () {
+/// let val: Float = 99.
+/// let ref_val: Float = 100.
+/// // We set 'atol' and 'rtol' such that the values are equivalent
+/// // if 'val' is within 1 percent of 'ref_val' +/- 0.1
+/// let rtol: Float = 0.01
+/// let atol: Float = 0.10
+/// floatx.is_close(val, ref_val, rtol, atol)
+/// |> should.be_true()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn is_close(a: Float, b: Float, rtol: Float, atol: Float) -> Bool {
+ let x: Float = float_absolute_difference(a, b)
+ let y: Float = atol +. rtol *. float_absolute_value(b)
+ case x <=. y {
+ True -> True
+ False -> False
+ }
+}
+
+fn float_absolute_value(x: Float) -> Float {
+ case x >. 0.0 {
+ True -> x
+ False -> -1.0 *. x
+ }
+}
+
+fn float_absolute_difference(a: Float, b: Float) -> Float {
+ a -. b
+ |> float_absolute_value()
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Determine if a list of values are close to or equivalent to a another list of reference values.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam/list
+/// import gleam_community/maths/tests
+///
+/// pub fn example () {
+/// let val: Float = 99.
+/// let ref_val: Float = 100.
+/// let xarr: List(Float) = list.repeat(val, 42)
+/// let yarr: List(Float) = list.repeat(ref_val, 42)
+/// // We set 'atol' and 'rtol' such that the values are equivalent
+/// // if 'val' is within 1 percent of 'ref_val' +/- 0.1
+/// let rtol: Float = 0.01
+/// let atol: Float = 0.10
+/// tests.all_close(xarr, yarr, rtol, atol)
+/// |> fn(zarr: Result(List(Bool), String)) -> Result(Bool, Nil) {
+/// case zarr {
+/// Ok(arr) ->
+/// arr
+/// |> list.all(fn(a: Bool) -> Bool { a })
+/// |> Ok
+/// _ -> Nil |> Error
+/// }
+/// }
+/// |> should.equal(Ok(True))
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn all_close(
+ xarr: List(Float),
+ yarr: List(Float),
+ rtol: Float,
+ atol: Float,
+) -> Result(List(Bool), String) {
+ let xlen: Int = list.length(xarr)
+ let ylen: Int = list.length(yarr)
+ case xlen == ylen {
+ False ->
+ "Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."
+ |> Error
+ True ->
+ list.zip(xarr, yarr)
+ |> list.map(fn(z: #(Float, Float)) -> Bool {
+ is_close(pair.first(z), pair.second(z), rtol, atol)
+ })
+ |> Ok
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Determine if a given value is fractional.
+///
+/// `True` is returned if the given value is fractional, otherwise `False` is returned.
+///
+/// <details>
+/// <summary>Example</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/tests
+///
+/// pub fn example () {
+/// tests.is_fractional(0.3333)
+/// |> should.equal(True)
+///
+/// tests.is_fractional(1.0)
+/// |> should.equal(False)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn is_fractional(x: Float) -> Bool {
+ do_ceiling(x) -. x >. 0.0
+}
+
+@external(erlang, "math", "ceil")
+@external(javascript, "../../maths.mjs", "ceiling")
+fn do_ceiling(a: Float) -> Float
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A function that tests whether a given integer value $$x \in \mathbb{Z}$$ is a power of another integer value $$y \in \mathbb{Z}$$.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/tests
+///
+/// pub fn example() {
+/// // Check if 4 is a power of 2 (it is)
+/// tests.is_power(4, 2)
+/// |> should.equal(True)
+///
+/// // Check if 5 is a power of 2 (it is not)
+/// tests.is_power(5, 2)
+/// |> should.equal(False)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn is_power(x: Int, y: Int) -> Bool {
+ let assert Ok(value) =
+ elementary.logarithm(int.to_float(x), option.Some(int.to_float(y)))
+ let assert Ok(truncated) = piecewise.truncate(value, option.Some(0))
+ let rem = value -. truncated
+ rem == 0.0
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A function that tests whether a given integer value $$n \in \mathbb{Z}$$ is a perfect number. A number is perfect if it is equal to the sum of its proper positive divisors.
+///
+/// <details>
+/// <summary>Details</summary>
+///
+/// For example:
+/// - $$6$$ is a perfect number since the divisors of 6 are $$1 + 2 + 3 = 6$$.
+/// - $$28$$ is a perfect number since the divisors of 28 are $$1 + 2 + 4 + 7 + 14 = 28$$
+///
+/// </details>
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/tests
+///
+/// pub fn example() {
+/// tests.is_perfect(6)
+/// |> should.equal(True)
+///
+/// tests.is_perfect(28)
+/// |> should.equal(True)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn is_perfect(n: Int) -> Bool {
+ do_sum(arithmetics.proper_divisors(n)) == n
+}
+
+fn do_sum(arr: List(Int)) -> Int {
+ case arr {
+ [] -> 0
+ _ ->
+ arr
+ |> list.fold(0, fn(acc: Int, a: Int) -> Int { a + acc })
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A function that tests whether a given integer value $$x \in \mathbb{Z}$$ is even.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/tests
+///
+/// pub fn example() {
+/// tests.is_even(-3)
+/// |> should.equal(False)
+///
+/// tests.is_even(-4)
+/// |> should.equal(True)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn is_even(x: Int) -> Bool {
+ x % 2 == 0
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// A function that tests whether a given integer value $$x \in \mathbb{Z}$$ is odd.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/tests
+///
+/// pub fn example() {
+/// tests.is_odd(-3)
+/// |> should.equal(True)
+///
+/// tests.is_odd(-4)
+/// |> should.equal(False)
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn is_odd(x: Int) -> Bool {
+ x % 2 != 0
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam
new file mode 100644
index 0000000..e7c0388
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/sequences.gleam
@@ -0,0 +1,302 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Sequences: A module containing functions for generating various types of sequences, ranges and intervals.
+////
+//// * **Ranges and intervals**
+//// * [`arange`](#arange)
+//// * [`linear_space`](#linear_space)
+//// * [`logarithmic_space`](#logarithmic_space)
+//// * [`geometric_space`](#geometric_space)
+
+import gleam_community/maths/elementary
+import gleam_community/maths/piecewise
+import gleam_community/maths/conversion
+import gleam/list
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function returns a list with evenly spaced values within a given interval based on a start, stop value and a given increment (step-length) between consecutive values.
+/// The list returned includes the given start value but excludes the stop value.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/sequences
+///
+/// pub fn example () {
+/// sequences.arange(1.0, 5.0, 1.0)
+/// |> should.equal([1.0, 2.0, 3.0, 4.0])
+///
+/// // No points returned since
+/// // start smaller than stop and positive step
+/// sequences.arange(5.0, 1.0, 1.0)
+/// |> should.equal([])
+///
+/// // Points returned since
+/// // start smaller than stop but negative step
+/// sequences.arange(5.0, 1.0, -1.0)
+/// |> should.equal([5.0, 4.0, 3.0, 2.0])
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn arange(start: Float, stop: Float, step: Float) -> List(Float) {
+ case start >=. stop && step >. 0.0 || start <=. stop && step <. 0.0 {
+ True -> []
+ False -> {
+ let direction: Float = case start <=. stop {
+ True -> 1.0
+ False -> -1.0
+ }
+ let step_abs: Float = piecewise.float_absolute_value(step)
+ let num: Float = piecewise.float_absolute_value(start -. stop) /. step_abs
+
+ list.range(0, conversion.float_to_int(num) - 1)
+ |> list.map(fn(i: Int) -> Float {
+ start +. conversion.int_to_float(i) *. step_abs *. direction
+ })
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Generate a linearly spaced list of points over a specified interval. The endpoint of the interval can optionally be included/excluded.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/sequences
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+/// let assert Ok(linspace) = sequences.linear_space(10.0, 50.0, 5, True)
+/// let assert Ok(result) =
+/// predicates.all_close(linspace, [10.0, 20.0, 30.0, 40.0, 50.0], 0.0, tol)
+/// result
+/// |> list.all(fn(x) { x == True })
+/// |> should.be_true()
+///
+/// // A negative number of points (-5) does not work
+/// sequences.linear_space(10.0, 50.0, -5, True)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn linear_space(
+ start: Float,
+ stop: Float,
+ num: Int,
+ endpoint: Bool,
+) -> Result(List(Float), String) {
+ let direction: Float = case start <=. stop {
+ True -> 1.0
+ False -> -1.0
+ }
+ case num > 0 {
+ True ->
+ case endpoint {
+ True -> {
+ let increment: Float =
+ piecewise.float_absolute_value(start -. stop) /. conversion.int_to_float(
+ num - 1,
+ )
+ list.range(0, num - 1)
+ |> list.map(fn(i: Int) -> Float {
+ start +. conversion.int_to_float(i) *. increment *. direction
+ })
+ |> Ok
+ }
+ False -> {
+ let increment: Float =
+ piecewise.float_absolute_value(start -. stop) /. conversion.int_to_float(
+ num,
+ )
+ list.range(0, num - 1)
+ |> list.map(fn(i: Int) -> Float {
+ start +. conversion.int_to_float(i) *. increment *. direction
+ })
+ |> Ok
+ }
+ }
+
+ False ->
+ "Invalid input: num < 0. Valid input is num > 0."
+ |> Error
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// Generate a logarithmically spaced list of points over a specified interval. The endpoint of the interval can optionally be included/excluded.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/sequences
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+/// let assert Ok(logspace) = sequences.logarithmic_space(1.0, 3.0, 3, True, 10.0)
+/// let assert Ok(result) =
+/// predicates.all_close(logspace, [10.0, 100.0, 1000.0], 0.0, tol)
+/// result
+/// |> list.all(fn(x) { x == True })
+/// |> should.be_true()
+///
+/// // A negative number of points (-3) does not work
+/// sequences.logarithmic_space(1.0, 3.0, -3, False, 10.0)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn logarithmic_space(
+ start: Float,
+ stop: Float,
+ num: Int,
+ endpoint: Bool,
+ base: Float,
+) -> Result(List(Float), String) {
+ case num > 0 {
+ True -> {
+ let assert Ok(linspace) = linear_space(start, stop, num, endpoint)
+ linspace
+ |> list.map(fn(i: Float) -> Float {
+ let assert Ok(result) = elementary.power(base, i)
+ result
+ })
+ |> Ok
+ }
+ False ->
+ "Invalid input: num < 0. Valid input is num > 0."
+ |> Error
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The function returns a list of numbers spaced evenly on a log scale (a geometric progression). Each point in the list is a constant multiple of the previous.
+/// The function is similar to the [`logarithmic_space`](#logarithmic_space) function, but with endpoints specified directly.
+///
+/// <details>
+/// <summary>Example:</summary>
+///
+/// import gleeunit/should
+/// import gleam_community/maths/elementary
+/// import gleam_community/maths/sequences
+/// import gleam_community/maths/predicates
+///
+/// pub fn example () {
+/// let assert Ok(tol) = elementary.power(-10.0, -6.0)
+/// let assert Ok(logspace) = sequences.geometric_space(10.0, 1000.0, 3, True)
+/// let assert Ok(result) =
+/// predicates.all_close(logspace, [10.0, 100.0, 1000.0], 0.0, tol)
+/// result
+/// |> list.all(fn(x) { x == True })
+/// |> should.be_true()
+///
+/// // Input (start and stop can't be equal to 0.0)
+/// sequences.geometric_space(0.0, 1000.0, 3, False)
+/// |> should.be_error()
+///
+/// sequences.geometric_space(-1000.0, 0.0, 3, False)
+/// |> should.be_error()
+///
+/// // A negative number of points (-3) does not work
+/// sequences.geometric_space(10.0, 1000.0, -3, False)
+/// |> should.be_error()
+/// }
+/// </details>
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn geometric_space(
+ start: Float,
+ stop: Float,
+ num: Int,
+ endpoint: Bool,
+) -> Result(List(Float), String) {
+ case start == 0.0 || stop == 0.0 {
+ True ->
+ ""
+ |> Error
+ False ->
+ case num > 0 {
+ True -> {
+ let assert Ok(log_start) = elementary.logarithm_10(start)
+ let assert Ok(log_stop) = elementary.logarithm_10(stop)
+ logarithmic_space(log_start, log_stop, num, endpoint, 10.0)
+ }
+ False ->
+ "Invalid input: num < 0. Valid input is num > 0."
+ |> Error
+ }
+ }
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam
new file mode 100644
index 0000000..dfd9cbb
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community/maths/special.gleam
@@ -0,0 +1,205 @@
+////<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.css" integrity="sha384-GvrOXuhMATgEsSwCs4smul74iXGOixntILdUW9XmUC6+HX0sLNAK3q71HotJqlAn" crossorigin="anonymous">
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/katex.min.js" integrity="sha384-cpW21h6RZv/phavutF+AuVYrr+dA8xD9zs6FwLpaCct6O9ctzYFfFr4dgmgccOTx" crossorigin="anonymous"></script>
+////<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.8/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>
+////<script>
+//// document.addEventListener("DOMContentLoaded", function() {
+//// renderMathInElement(document.body, {
+//// // customised options
+//// // • auto-render specific keys, e.g.:
+//// delimiters: [
+//// {left: '$$', right: '$$', display: false},
+//// // {left: '$', right: '$', display: false},
+//// // {left: '\\(', right: '\\)', display: false},
+//// {left: '\\[', right: '\\]', display: true}
+//// ],
+//// // • rendering keys, e.g.:
+//// throwOnError : false
+//// });
+//// });
+////</script>
+////<style>
+//// .katex { font-size: 1.1em; }
+////</style>
+////
+//// ---
+////
+//// Special: A module containing special mathematical functions.
+////
+//// * **Special mathematical functions**
+//// * [`beta`](#beta)
+//// * [`erf`](#erf)
+//// * [`gamma`](#gamma)
+//// * [`incomplete_gamma`](#incomplete_gamma)
+////
+
+import gleam_community/maths/conversion
+import gleam_community/maths/elementary
+import gleam_community/maths/piecewise
+import gleam/list
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The beta function over the real numbers:
+///
+/// \\[
+/// \text{B}(x, y) = \frac{\Gamma(x) \cdot \Gamma(y)}{\Gamma(x + y)}
+/// \\]
+///
+/// The beta function is evaluated through the use of the gamma function.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn beta(x: Float, y: Float) -> Float {
+ gamma(x) *. gamma(y) /. gamma(x +. y)
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The error function.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn erf(x: Float) -> Float {
+ let assert [a1, a2, a3, a4, a5]: List(Float) = [
+ 0.254829592, -0.284496736, 1.421413741, -1.453152027, 1.061405429,
+ ]
+ let p: Float = 0.3275911
+
+ let sign: Float = piecewise.float_sign(x)
+ let x: Float = piecewise.float_absolute_value(x)
+
+ // Formula 7.1.26 given in Abramowitz and Stegun.
+ let t: Float = 1.0 /. { 1.0 +. p *. x }
+ let y: Float =
+ 1.0 -. { { { { a5 *. t +. a4 } *. t +. a3 } *. t +. a2 } *. t +. a1 } *. t *. elementary.exponential(
+ -1.0 *. x *. x,
+ )
+ sign *. y
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The gamma function over the real numbers. The function is essentially equal to the
+/// factorial for any positive integer argument: $$\Gamma(n) = (n - 1)!$$
+///
+/// The implemented gamma function is approximated through Lanczos approximation
+/// using the same coefficients used by the GNU Scientific Library.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn gamma(x: Float) -> Float {
+ gamma_lanczos(x)
+}
+
+const lanczos_g: Float = 7.0
+
+const lanczos_p: List(Float) = [
+ 0.99999999999980993, 676.5203681218851, -1259.1392167224028,
+ 771.32342877765313, -176.61502916214059, 12.507343278686905,
+ -0.13857109526572012, 0.0000099843695780195716, 0.00000015056327351493116,
+]
+
+fn gamma_lanczos(x: Float) -> Float {
+ case x <. 0.5 {
+ True ->
+ elementary.pi() /. {
+ elementary.sin(elementary.pi() *. x) *. gamma_lanczos(1.0 -. x)
+ }
+ False -> {
+ let z = x -. 1.0
+ let x: Float =
+ list.index_fold(
+ lanczos_p,
+ 0.0,
+ fn(acc: Float, v: Float, index: Int) {
+ case index > 0 {
+ True -> acc +. v /. { z +. conversion.int_to_float(index) }
+ False -> v
+ }
+ },
+ )
+ let t: Float = z +. lanczos_g +. 0.5
+ let assert Ok(v1) = elementary.power(2.0 *. elementary.pi(), 0.5)
+ let assert Ok(v2) = elementary.power(t, z +. 0.5)
+ v1 *. v2 *. elementary.exponential(-1.0 *. t) *. x
+ }
+ }
+}
+
+/// <div style="text-align: right;">
+/// <a href="https://github.com/gleam-community/maths/issues">
+/// <small>Spot a typo? Open an issue!</small>
+/// </a>
+/// </div>
+///
+/// The lower incomplete gamma function over the real numbers.
+///
+/// The implemented incomplete gamma function is evaluated through a power series
+/// expansion.
+///
+/// <div style="text-align: right;">
+/// <a href="#">
+/// <small>Back to top ↑</small>
+/// </a>
+/// </div>
+///
+pub fn incomplete_gamma(a: Float, x: Float) -> Result(Float, String) {
+ case a >. 0.0 && x >=. 0.0 {
+ True -> {
+ let assert Ok(v) = elementary.power(x, a)
+ v *. elementary.exponential(-1.0 *. x) *. incomplete_gamma_sum(
+ a,
+ x,
+ 1.0 /. a,
+ 0.0,
+ 1.0,
+ )
+ |> Ok
+ }
+
+ False ->
+ "Invlaid input argument: a <= 0 or x < 0. Valid input is a > 0 and x >= 0."
+ |> Error
+ }
+}
+
+fn incomplete_gamma_sum(
+ a: Float,
+ x: Float,
+ t: Float,
+ s: Float,
+ n: Float,
+) -> Float {
+ case t {
+ 0.0 -> s
+ _ -> {
+ let ns: Float = s +. t
+ let nt: Float = t *. { x /. { a +. n } }
+ incomplete_gamma_sum(a, x, nt, ns, n +. 1.0)
+ }
+ }
+}
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl
new file mode 100644
index 0000000..ca266c8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@arithmetics.erl
@@ -0,0 +1,172 @@
+-module(gleam_community@maths@arithmetics).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([gcd/2, lcm/2, divisors/1, proper_divisors/1, float_sum/1, int_sum/1, float_product/1, int_product/1, float_cumulative_sum/1, int_cumulative_sum/1, float_cumumlative_product/1, int_cumulative_product/1]).
+
+-spec do_gcd(integer(), integer()) -> integer().
+do_gcd(X, Y) ->
+ case X =:= 0 of
+ true ->
+ Y;
+
+ false ->
+ _assert_subject = gleam@int:modulo(Y, X),
+ {ok, Z} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/arithmetics"/utf8>>,
+ function => <<"do_gcd"/utf8>>,
+ line => 93})
+ end,
+ do_gcd(Z, X)
+ end.
+
+-spec gcd(integer(), integer()) -> integer().
+gcd(X, Y) ->
+ Absx = gleam_community@maths@piecewise:int_absolute_value(X),
+ Absy = gleam_community@maths@piecewise:int_absolute_value(Y),
+ do_gcd(Absx, Absy).
+
+-spec lcm(integer(), integer()) -> integer().
+lcm(X, Y) ->
+ Absx = gleam_community@maths@piecewise:int_absolute_value(X),
+ Absy = gleam_community@maths@piecewise:int_absolute_value(Y),
+ case do_gcd(Absx, Absy) of
+ 0 -> 0;
+ Gleam@denominator -> (Absx * Absy) div Gleam@denominator
+ end.
+
+-spec find_divisors(integer()) -> list(integer()).
+find_divisors(N) ->
+ Nabs = gleam_community@maths@piecewise:float_absolute_value(
+ gleam_community@maths@conversion:int_to_float(N)
+ ),
+ _assert_subject = gleam_community@maths@elementary:square_root(Nabs),
+ {ok, Sqrt_result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/arithmetics"/utf8>>,
+ function => <<"find_divisors"/utf8>>,
+ line => 176})
+ end,
+ Max = gleam_community@maths@conversion:float_to_int(Sqrt_result) + 1,
+ _pipe = gleam@list:range(2, Max),
+ _pipe@1 = gleam@list:fold(_pipe, [1, N], fun(Acc, I) -> case (case I of
+ 0 -> 0;
+ Gleam@denominator -> N rem Gleam@denominator
+ end) =:= 0 of
+ true ->
+ [I, case I of
+ 0 -> 0;
+ Gleam@denominator@1 -> N div Gleam@denominator@1
+ end | Acc];
+
+ false ->
+ Acc
+ end end),
+ _pipe@2 = gleam@list:unique(_pipe@1),
+ gleam@list:sort(_pipe@2, fun gleam@int:compare/2).
+
+-spec divisors(integer()) -> list(integer()).
+divisors(N) ->
+ find_divisors(N).
+
+-spec proper_divisors(integer()) -> list(integer()).
+proper_divisors(N) ->
+ Divisors = find_divisors(N),
+ _pipe = Divisors,
+ gleam@list:take(_pipe, gleam@list:length(Divisors) - 1).
+
+-spec float_sum(list(float())) -> float().
+float_sum(Arr) ->
+ case Arr of
+ [] ->
+ +0.0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, +0.0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec int_sum(list(integer())) -> integer().
+int_sum(Arr) ->
+ case Arr of
+ [] ->
+ 0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec float_product(list(float())) -> float().
+float_product(Arr) ->
+ case Arr of
+ [] ->
+ 1.0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 1.0, fun(Acc, A) -> A * Acc end)
+ end.
+
+-spec int_product(list(integer())) -> integer().
+int_product(Arr) ->
+ case Arr of
+ [] ->
+ 1;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 1, fun(Acc, A) -> A * Acc end)
+ end.
+
+-spec float_cumulative_sum(list(float())) -> list(float()).
+float_cumulative_sum(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, +0.0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec int_cumulative_sum(list(integer())) -> list(integer()).
+int_cumulative_sum(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, 0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec float_cumumlative_product(list(float())) -> list(float()).
+float_cumumlative_product(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, 1.0, fun(Acc, A) -> A * Acc end)
+ end.
+
+-spec int_cumulative_product(list(integer())) -> list(integer()).
+int_cumulative_product(Arr) ->
+ case Arr of
+ [] ->
+ [];
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:scan(_pipe, 1, fun(Acc, A) -> A * Acc end)
+ end.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl
new file mode 100644
index 0000000..17644c4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@combinatorics.erl
@@ -0,0 +1,218 @@
+-module(gleam_community@maths@combinatorics).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([combination/2, factorial/1, permutation/2, list_combination/2, list_permutation/1, cartesian_product/2]).
+
+-spec combination(integer(), integer()) -> {ok, integer()} | {error, binary()}.
+combination(N, K) ->
+ case N < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case (K < 0) orelse (K > N) of
+ true ->
+ _pipe@1 = 0,
+ {ok, _pipe@1};
+
+ false ->
+ case (K =:= 0) orelse (K =:= N) of
+ true ->
+ _pipe@2 = 1,
+ {ok, _pipe@2};
+
+ false ->
+ Min = case K < (N - K) of
+ true ->
+ K;
+
+ false ->
+ N - K
+ end,
+ _pipe@3 = gleam@list:range(1, Min),
+ _pipe@4 = gleam@list:fold(
+ _pipe@3,
+ 1,
+ fun(Acc, X) -> case X of
+ 0 -> 0;
+ Gleam@denominator -> (Acc * ((N + 1) - X))
+ div Gleam@denominator
+ end end
+ ),
+ {ok, _pipe@4}
+ end
+ end
+ end.
+
+-spec factorial(integer()) -> {ok, integer()} | {error, binary()}.
+factorial(N) ->
+ case N < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case N of
+ 0 ->
+ _pipe@1 = 1,
+ {ok, _pipe@1};
+
+ 1 ->
+ _pipe@2 = 1,
+ {ok, _pipe@2};
+
+ _ ->
+ _pipe@3 = gleam@list:range(1, N),
+ _pipe@4 = gleam@list:fold(
+ _pipe@3,
+ 1,
+ fun(Acc, X) -> Acc * X end
+ ),
+ {ok, _pipe@4}
+ end
+ end.
+
+-spec permutation(integer(), integer()) -> {ok, integer()} | {error, binary()}.
+permutation(N, K) ->
+ case N < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: n < 0. Valid input is n > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case (K < 0) orelse (K > N) of
+ true ->
+ _pipe@1 = 0,
+ {ok, _pipe@1};
+
+ false ->
+ case K =:= N of
+ true ->
+ _pipe@2 = 1,
+ {ok, _pipe@2};
+
+ false ->
+ _assert_subject = factorial(N),
+ {ok, V1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/combinatorics"/utf8>>,
+ function => <<"permutation"/utf8>>,
+ line => 241})
+ end,
+ _assert_subject@1 = factorial(N - K),
+ {ok, V2} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/combinatorics"/utf8>>,
+ function => <<"permutation"/utf8>>,
+ line => 242})
+ end,
+ _pipe@3 = case V2 of
+ 0 -> 0;
+ Gleam@denominator -> V1 div Gleam@denominator
+ end,
+ {ok, _pipe@3}
+ end
+ end
+ end.
+
+-spec do_list_combination(list(GIO), integer(), list(GIO)) -> list(list(GIO)).
+do_list_combination(Arr, K, Prefix) ->
+ case K of
+ 0 ->
+ [gleam@list:reverse(Prefix)];
+
+ _ ->
+ case Arr of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ With_x = do_list_combination(Xs, K - 1, [X | Prefix]),
+ Without_x = do_list_combination(Xs, K, Prefix),
+ gleam@list:append(With_x, Without_x)
+ end
+ end.
+
+-spec list_combination(list(GII), integer()) -> {ok, list(list(GII))} |
+ {error, binary()}.
+list_combination(Arr, K) ->
+ case K < 0 of
+ true ->
+ _pipe = <<"Invalid input argument: k < 0. Valid input is k > 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case K > gleam@list:length(Arr) of
+ true ->
+ _pipe@1 = <<"Invalid input argument: k > length(arr). Valid input is 0 < k <= length(arr)."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _pipe@2 = do_list_combination(Arr, K, []),
+ {ok, _pipe@2}
+ end
+ end.
+
+-spec list_permutation(list(GIT)) -> list(list(GIT)).
+list_permutation(Arr) ->
+ case Arr of
+ [] ->
+ [[]];
+
+ _ ->
+ gleam@list:flat_map(
+ Arr,
+ fun(X) ->
+ _assert_subject = gleam@list:pop(Arr, fun(Y) -> X =:= Y end),
+ {ok, {_, Remaining}} = case _assert_subject of
+ {ok, {_, _}} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/combinatorics"/utf8>>,
+ function => <<"list_permutation"/utf8>>,
+ line => 373})
+ end,
+ gleam@list:map(
+ list_permutation(Remaining),
+ fun(Perm) -> [X | Perm] end
+ )
+ end
+ )
+ end.
+
+-spec cartesian_product(list(GIX), list(GIX)) -> list({GIX, GIX}).
+cartesian_product(Xarr, Yarr) ->
+ Xset = begin
+ _pipe = Xarr,
+ gleam@set:from_list(_pipe)
+ end,
+ Yset = begin
+ _pipe@1 = Yarr,
+ gleam@set:from_list(_pipe@1)
+ end,
+ _pipe@2 = Xset,
+ _pipe@3 = gleam@set:fold(
+ _pipe@2,
+ gleam@set:new(),
+ fun(Accumulator0, Member0) ->
+ gleam@set:fold(
+ Yset,
+ Accumulator0,
+ fun(Accumulator1, Member1) ->
+ gleam@set:insert(Accumulator1, {Member0, Member1})
+ end
+ )
+ end
+ ),
+ gleam@set:to_list(_pipe@3).
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl
new file mode 100644
index 0000000..0f6decb
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@conversion.erl
@@ -0,0 +1,23 @@
+-module(gleam_community@maths@conversion).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([int_to_float/1, float_to_int/1, degrees_to_radians/1, radians_to_degrees/1]).
+
+-spec int_to_float(integer()) -> float().
+int_to_float(X) ->
+ gleam@int:to_float(X).
+
+-spec float_to_int(float()) -> integer().
+float_to_int(X) ->
+ erlang:trunc(X).
+
+-spec degrees_to_radians(float()) -> float().
+degrees_to_radians(X) ->
+ (X * math:pi()) / 180.0.
+
+-spec radians_to_degrees(float()) -> float().
+radians_to_degrees(X) ->
+ case math:pi() of
+ 0.0 -> 0.0;
+ Gleam@denominator -> (X * 180.0) / Gleam@denominator
+ end.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl
new file mode 100644
index 0000000..dab5d68
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@elementary.erl
@@ -0,0 +1,284 @@
+-module(gleam_community@maths@elementary).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([acos/1, acosh/1, asin/1, asinh/1, atan/1, atan2/2, atanh/1, cos/1, cosh/1, sin/1, sinh/1, tan/1, tanh/1, exponential/1, natural_logarithm/1, logarithm_2/1, logarithm_10/1, logarithm/2, power/2, square_root/1, cube_root/1, nth_root/2, pi/0, tau/0, e/0]).
+
+-spec acos(float()) -> {ok, float()} | {error, binary()}.
+acos(X) ->
+ case (X >= -1.0) andalso (X =< 1.0) of
+ true ->
+ _pipe = math:acos(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec acosh(float()) -> {ok, float()} | {error, binary()}.
+acosh(X) ->
+ case X >= 1.0 of
+ true ->
+ _pipe = math:acosh(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x < 1. Valid input is x >= 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec asin(float()) -> {ok, float()} | {error, binary()}.
+asin(X) ->
+ case (X >= -1.0) andalso (X =< 1.0) of
+ true ->
+ _pipe = math:asin(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x >= -1 or x <= 1. Valid input is -1. <= x <= 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec asinh(float()) -> float().
+asinh(X) ->
+ math:asinh(X).
+
+-spec atan(float()) -> float().
+atan(X) ->
+ math:atan(X).
+
+-spec atan2(float(), float()) -> float().
+atan2(Y, X) ->
+ math:atan2(Y, X).
+
+-spec atanh(float()) -> {ok, float()} | {error, binary()}.
+atanh(X) ->
+ case (X > -1.0) andalso (X < 1.0) of
+ true ->
+ _pipe = math:atanh(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x > -1 or x < 1. Valid input is -1. < x < 1."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec cos(float()) -> float().
+cos(X) ->
+ math:cos(X).
+
+-spec cosh(float()) -> float().
+cosh(X) ->
+ math:cosh(X).
+
+-spec sin(float()) -> float().
+sin(X) ->
+ math:sin(X).
+
+-spec sinh(float()) -> float().
+sinh(X) ->
+ math:sinh(X).
+
+-spec tan(float()) -> float().
+tan(X) ->
+ math:tan(X).
+
+-spec tanh(float()) -> float().
+tanh(X) ->
+ math:tanh(X).
+
+-spec exponential(float()) -> float().
+exponential(X) ->
+ math:exp(X).
+
+-spec natural_logarithm(float()) -> {ok, float()} | {error, binary()}.
+natural_logarithm(X) ->
+ case X > +0.0 of
+ true ->
+ _pipe = math:log(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec logarithm_2(float()) -> {ok, float()} | {error, binary()}.
+logarithm_2(X) ->
+ case X > +0.0 of
+ true ->
+ _pipe = math:log2(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec logarithm_10(float()) -> {ok, float()} | {error, binary()}.
+logarithm_10(X) ->
+ case X > +0.0 of
+ true ->
+ _pipe = math:log10(X),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@1}
+ end.
+
+-spec logarithm(float(), gleam@option:option(float())) -> {ok, float()} |
+ {error, binary()}.
+logarithm(X, Base) ->
+ case X > +0.0 of
+ true ->
+ case Base of
+ {some, A} ->
+ case (A > +0.0) andalso (A /= 1.0) of
+ true ->
+ _assert_subject = logarithm_10(X),
+ {ok, Numerator} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"logarithm"/utf8>>,
+ line => 820})
+ end,
+ _assert_subject@1 = logarithm_10(A),
+ {ok, Denominator} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"logarithm"/utf8>>,
+ line => 821})
+ end,
+ _pipe = case Denominator of
+ 0.0 -> 0.0;
+ Gleam@denominator -> Numerator / Gleam@denominator
+ end,
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>,
+ {error, _pipe@1}
+ end;
+
+ _ ->
+ _pipe@2 = <<"Invalid input argument: base <= 0 or base == 1. Valid input is base > 0 and base != 1."/utf8>>,
+ {error, _pipe@2}
+ end;
+
+ _ ->
+ _pipe@3 = <<"Invalid input argument: x <= 0. Valid input is x > 0."/utf8>>,
+ {error, _pipe@3}
+ end.
+
+-spec power(float(), float()) -> {ok, float()} | {error, binary()}.
+power(X, Y) ->
+ Fractional = (math:ceil(Y) - Y) > +0.0,
+ case ((X < +0.0) andalso Fractional) orelse ((X =:= +0.0) andalso (Y < +0.0)) of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0 and y is fractional or x = 0 and y < 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ _pipe@1 = math:pow(X, Y),
+ {ok, _pipe@1}
+ end.
+
+-spec square_root(float()) -> {ok, float()} | {error, binary()}.
+square_root(X) ->
+ case X < +0.0 of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ _assert_subject = power(X, 1.0 / 2.0),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"square_root"/utf8>>,
+ line => 1066})
+ end,
+ _pipe@1 = Result,
+ {ok, _pipe@1}
+ end.
+
+-spec cube_root(float()) -> {ok, float()} | {error, binary()}.
+cube_root(X) ->
+ case X < +0.0 of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0."/utf8>>,
+ {error, _pipe};
+
+ false ->
+ _assert_subject = power(X, 1.0 / 3.0),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"cube_root"/utf8>>,
+ line => 1118})
+ end,
+ _pipe@1 = Result,
+ {ok, _pipe@1}
+ end.
+
+-spec nth_root(float(), integer()) -> {ok, float()} | {error, binary()}.
+nth_root(X, N) ->
+ case X < +0.0 of
+ true ->
+ _pipe = <<"Invalid input argument: x < 0. Valid input is x > 0"/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case N >= 1 of
+ true ->
+ _assert_subject = power(X, case gleam@int:to_float(N) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/elementary"/utf8>>,
+ function => <<"nth_root"/utf8>>,
+ line => 1175})
+ end,
+ _pipe@1 = Result,
+ {ok, _pipe@1};
+
+ false ->
+ _pipe@2 = <<"Invalid input argument: n < 1. Valid input is n >= 2."/utf8>>,
+ {error, _pipe@2}
+ end
+ end.
+
+-spec pi() -> float().
+pi() ->
+ math:pi().
+
+-spec tau() -> float().
+tau() ->
+ 2.0 * pi().
+
+-spec e() -> float().
+e() ->
+ exponential(1.0).
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl
new file mode 100644
index 0000000..2a58da6
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@metrics.erl
@@ -0,0 +1,278 @@
+-module(gleam_community@maths@metrics).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([norm/2, minkowski_distance/3, manhatten_distance/2, euclidean_distance/2, mean/1, median/1, variance/2, standard_deviation/2]).
+
+-spec norm(list(float()), float()) -> float().
+norm(Arr, P) ->
+ case Arr of
+ [] ->
+ +0.0;
+
+ _ ->
+ Agg = begin
+ _pipe = Arr,
+ gleam@list:fold(
+ _pipe,
+ +0.0,
+ fun(Acc, A) ->
+ _assert_subject = gleam_community@maths@elementary:power(
+ gleam_community@maths@piecewise:float_absolute_value(
+ A
+ ),
+ P
+ ),
+ {ok, Result} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"norm"/utf8>>,
+ line => 101})
+ end,
+ Result + Acc
+ end
+ )
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ Agg,
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end
+ ),
+ {ok, Result@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"norm"/utf8>>,
+ line => 106})
+ end,
+ Result@1
+ end.
+
+-spec minkowski_distance(list(float()), list(float()), float()) -> {ok, float()} |
+ {error, binary()}.
+minkowski_distance(Xarr, Yarr, P) ->
+ Xlen = gleam@list:length(Xarr),
+ Ylen = gleam@list:length(Yarr),
+ case Xlen =:= Ylen of
+ false ->
+ _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>,
+ {error, _pipe};
+
+ true ->
+ case P < 1.0 of
+ true ->
+ _pipe@1 = <<"Invalid input argument: p < 1. Valid input is p >= 1."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _pipe@2 = gleam@list:zip(Xarr, Yarr),
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(Tuple) ->
+ gleam@pair:first(Tuple) - gleam@pair:second(Tuple)
+ end
+ ),
+ _pipe@4 = norm(_pipe@3, P),
+ {ok, _pipe@4}
+ end
+ end.
+
+-spec manhatten_distance(list(float()), list(float())) -> {ok, float()} |
+ {error, binary()}.
+manhatten_distance(Xarr, Yarr) ->
+ minkowski_distance(Xarr, Yarr, 1.0).
+
+-spec euclidean_distance(list(float()), list(float())) -> {ok, float()} |
+ {error, binary()}.
+euclidean_distance(Xarr, Yarr) ->
+ minkowski_distance(Xarr, Yarr, 2.0).
+
+-spec mean(list(float())) -> {ok, float()} | {error, binary()}.
+mean(Arr) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _pipe@1 = Arr,
+ _pipe@2 = gleam_community@maths@arithmetics:float_sum(_pipe@1),
+ _pipe@3 = (fun(A) ->
+ case gleam_community@maths@conversion:int_to_float(
+ gleam@list:length(Arr)
+ ) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> A / Gleam@denominator
+ end
+ end)(_pipe@2),
+ {ok, _pipe@3}
+ end.
+
+-spec median(list(float())) -> {ok, float()} | {error, binary()}.
+median(Arr) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ Count = gleam@list:length(Arr),
+ Mid = gleam@list:length(Arr) div 2,
+ Sorted = gleam@list:sort(Arr, fun gleam@float:compare/2),
+ case gleam_community@maths@predicates:is_odd(Count) of
+ true ->
+ _assert_subject = gleam@list:at(Sorted, Mid),
+ {ok, Val0} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"median"/utf8>>,
+ line => 402})
+ end,
+ _pipe@1 = Val0,
+ {ok, _pipe@1};
+
+ false ->
+ _assert_subject@1 = gleam@list:at(Sorted, Mid - 1),
+ {ok, Val0@1} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"median"/utf8>>,
+ line => 409})
+ end,
+ _assert_subject@2 = gleam@list:at(Sorted, Mid),
+ {ok, Val1} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"median"/utf8>>,
+ line => 410})
+ end,
+ _pipe@2 = [Val0@1, Val1],
+ mean(_pipe@2)
+ end
+ end.
+
+-spec variance(list(float()), integer()) -> {ok, float()} | {error, binary()}.
+variance(Arr, Ddof) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ case Ddof < 0 of
+ true ->
+ _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _assert_subject = mean(Arr),
+ {ok, Mean} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"variance"/utf8>>,
+ line => 475})
+ end,
+ _pipe@2 = Arr,
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(A) ->
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ A - Mean,
+ 2.0
+ ),
+ {ok, Result} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"variance"/utf8>>,
+ line => 478})
+ end,
+ Result
+ end
+ ),
+ _pipe@4 = gleam_community@maths@arithmetics:float_sum(
+ _pipe@3
+ ),
+ _pipe@5 = (fun(A@1) ->
+ case (gleam_community@maths@conversion:int_to_float(
+ gleam@list:length(Arr)
+ )
+ - gleam_community@maths@conversion:int_to_float(Ddof)) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> A@1 / Gleam@denominator
+ end
+ end)(_pipe@4),
+ {ok, _pipe@5}
+ end
+ end.
+
+-spec standard_deviation(list(float()), integer()) -> {ok, float()} |
+ {error, binary()}.
+standard_deviation(Arr, Ddof) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ case Ddof < 0 of
+ true ->
+ _pipe@1 = <<"Invalid input argument: ddof < 0. Valid input is ddof >= 0."/utf8>>,
+ {error, _pipe@1};
+
+ false ->
+ _assert_subject = variance(Arr, Ddof),
+ {ok, Variance} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"standard_deviation"/utf8>>,
+ line => 551})
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:square_root(
+ Variance
+ ),
+ {ok, Stdev} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/metrics"/utf8>>,
+ function => <<"standard_deviation"/utf8>>,
+ line => 554})
+ end,
+ _pipe@2 = Stdev,
+ {ok, _pipe@2}
+ end
+ end.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl
new file mode 100644
index 0000000..258d879
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@piecewise.erl
@@ -0,0 +1,553 @@
+-module(gleam_community@maths@piecewise).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([float_absolute_value/1, int_absolute_value/1, float_absolute_difference/2, int_absolute_difference/2, float_sign/1, round/3, ceiling/2, floor/2, truncate/2, int_sign/1, float_flip_sign/1, float_copy_sign/2, int_flip_sign/1, int_copy_sign/2, minimum/3, maximum/3, minmax/3, list_minimum/2, list_maximum/2, arg_minimum/2, arg_maximum/2, extrema/2]).
+-export_type([rounding_mode/0]).
+
+-type rounding_mode() :: round_nearest |
+ round_ties_away |
+ round_ties_up |
+ round_to_zero |
+ round_down |
+ round_up.
+
+-spec truncate_float(float()) -> float().
+truncate_float(X) ->
+ erlang:trunc(X).
+
+-spec round_to_zero(float(), float()) -> float().
+round_to_zero(P, X) ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> truncate_float(X * P) / Gleam@denominator
+ end.
+
+-spec round_down(float(), float()) -> float().
+round_down(P, X) ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> math:floor(X * P) / Gleam@denominator
+ end.
+
+-spec round_up(float(), float()) -> float().
+round_up(P, X) ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> math:ceil(X * P) / Gleam@denominator
+ end.
+
+-spec float_absolute_value(float()) -> float().
+float_absolute_value(X) ->
+ case X > +0.0 of
+ true ->
+ X;
+
+ false ->
+ -1.0 * X
+ end.
+
+-spec int_absolute_value(integer()) -> integer().
+int_absolute_value(X) ->
+ case X > 0 of
+ true ->
+ X;
+
+ false ->
+ -1 * X
+ end.
+
+-spec float_absolute_difference(float(), float()) -> float().
+float_absolute_difference(A, B) ->
+ _pipe = A - B,
+ float_absolute_value(_pipe).
+
+-spec int_absolute_difference(integer(), integer()) -> integer().
+int_absolute_difference(A, B) ->
+ _pipe = A - B,
+ int_absolute_value(_pipe).
+
+-spec do_float_sign(float()) -> float().
+do_float_sign(X) ->
+ case X < +0.0 of
+ true ->
+ -1.0;
+
+ false ->
+ case X =:= +0.0 of
+ true ->
+ +0.0;
+
+ false ->
+ 1.0
+ end
+ end.
+
+-spec float_sign(float()) -> float().
+float_sign(X) ->
+ do_float_sign(X).
+
+-spec round_to_nearest(float(), float()) -> float().
+round_to_nearest(P, X) ->
+ Xabs = float_absolute_value(X) * P,
+ Xabs_truncated = truncate_float(Xabs),
+ Remainder = Xabs - Xabs_truncated,
+ case Remainder of
+ _ when Remainder > 0.5 ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> (float_sign(X) * truncate_float(Xabs + 1.0))
+ / Gleam@denominator
+ end;
+
+ _ when Remainder =:= 0.5 ->
+ _assert_subject = gleam@int:modulo(
+ gleam_community@maths@conversion:float_to_int(Xabs),
+ 2
+ ),
+ {ok, Is_even} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"round_to_nearest"/utf8>>,
+ line => 423})
+ end,
+ case Is_even =:= 0 of
+ true ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> (float_sign(X) * Xabs_truncated)
+ / Gleam@denominator@1
+ end;
+
+ false ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator@2 -> (float_sign(X) * truncate_float(
+ Xabs + 1.0
+ ))
+ / Gleam@denominator@2
+ end
+ end;
+
+ _ ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator@3 -> (float_sign(X) * Xabs_truncated) / Gleam@denominator@3
+ end
+ end.
+
+-spec round_ties_away(float(), float()) -> float().
+round_ties_away(P, X) ->
+ Xabs = float_absolute_value(X) * P,
+ Remainder = Xabs - truncate_float(Xabs),
+ case Remainder of
+ _ when Remainder >= 0.5 ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> (float_sign(X) * truncate_float(Xabs + 1.0))
+ / Gleam@denominator
+ end;
+
+ _ ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> (float_sign(X) * truncate_float(Xabs)) / Gleam@denominator@1
+ end
+ end.
+
+-spec round_ties_up(float(), float()) -> float().
+round_ties_up(P, X) ->
+ Xabs = float_absolute_value(X) * P,
+ Xabs_truncated = truncate_float(Xabs),
+ Remainder = Xabs - Xabs_truncated,
+ case Remainder of
+ _ when (Remainder >= 0.5) andalso (X >= +0.0) ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator -> (float_sign(X) * truncate_float(Xabs + 1.0))
+ / Gleam@denominator
+ end;
+
+ _ ->
+ case P of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> (float_sign(X) * Xabs_truncated) / Gleam@denominator@1
+ end
+ end.
+
+-spec do_round(float(), float(), gleam@option:option(rounding_mode())) -> {ok,
+ float()} |
+ {error, binary()}.
+do_round(P, X, Mode) ->
+ case Mode of
+ {some, round_nearest} ->
+ _pipe = round_to_nearest(P, X),
+ {ok, _pipe};
+
+ {some, round_ties_away} ->
+ _pipe@1 = round_ties_away(P, X),
+ {ok, _pipe@1};
+
+ {some, round_ties_up} ->
+ _pipe@2 = round_ties_up(P, X),
+ {ok, _pipe@2};
+
+ {some, round_to_zero} ->
+ _pipe@3 = round_to_zero(P, X),
+ {ok, _pipe@3};
+
+ {some, round_down} ->
+ _pipe@4 = round_down(P, X),
+ {ok, _pipe@4};
+
+ {some, round_up} ->
+ _pipe@5 = round_up(P, X),
+ {ok, _pipe@5};
+
+ none ->
+ _pipe@6 = round_to_nearest(P, X),
+ {ok, _pipe@6}
+ end.
+
+-spec round(
+ float(),
+ gleam@option:option(integer()),
+ gleam@option:option(rounding_mode())
+) -> {ok, float()} | {error, binary()}.
+round(X, Digits, Mode) ->
+ case Digits of
+ {some, A} ->
+ _assert_subject = gleam_community@maths@elementary:power(
+ 10.0,
+ gleam_community@maths@conversion:int_to_float(A)
+ ),
+ {ok, P} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"round"/utf8>>,
+ line => 366})
+ end,
+ do_round(P, X, Mode);
+
+ none ->
+ do_round(1.0, X, Mode)
+ end.
+
+-spec ceiling(float(), gleam@option:option(integer())) -> {ok, float()} |
+ {error, binary()}.
+ceiling(X, Digits) ->
+ round(X, Digits, {some, round_up}).
+
+-spec floor(float(), gleam@option:option(integer())) -> {ok, float()} |
+ {error, binary()}.
+floor(X, Digits) ->
+ round(X, Digits, {some, round_down}).
+
+-spec truncate(float(), gleam@option:option(integer())) -> {ok, float()} |
+ {error, binary()}.
+truncate(X, Digits) ->
+ round(X, Digits, {some, round_to_zero}).
+
+-spec do_int_sign(integer()) -> integer().
+do_int_sign(X) ->
+ case X < 0 of
+ true ->
+ -1;
+
+ false ->
+ case X =:= 0 of
+ true ->
+ 0;
+
+ false ->
+ 1
+ end
+ end.
+
+-spec int_sign(integer()) -> integer().
+int_sign(X) ->
+ do_int_sign(X).
+
+-spec float_flip_sign(float()) -> float().
+float_flip_sign(X) ->
+ -1.0 * X.
+
+-spec float_copy_sign(float(), float()) -> float().
+float_copy_sign(X, Y) ->
+ case float_sign(X) =:= float_sign(Y) of
+ true ->
+ X;
+
+ false ->
+ float_flip_sign(X)
+ end.
+
+-spec int_flip_sign(integer()) -> integer().
+int_flip_sign(X) ->
+ -1 * X.
+
+-spec int_copy_sign(integer(), integer()) -> integer().
+int_copy_sign(X, Y) ->
+ case int_sign(X) =:= int_sign(Y) of
+ true ->
+ X;
+
+ false ->
+ int_flip_sign(X)
+ end.
+
+-spec minimum(FQL, FQL, fun((FQL, FQL) -> gleam@order:order())) -> FQL.
+minimum(X, Y, Compare) ->
+ case Compare(X, Y) of
+ lt ->
+ X;
+
+ eq ->
+ X;
+
+ gt ->
+ Y
+ end.
+
+-spec maximum(FQM, FQM, fun((FQM, FQM) -> gleam@order:order())) -> FQM.
+maximum(X, Y, Compare) ->
+ case Compare(X, Y) of
+ lt ->
+ Y;
+
+ eq ->
+ Y;
+
+ gt ->
+ X
+ end.
+
+-spec minmax(FQN, FQN, fun((FQN, FQN) -> gleam@order:order())) -> {FQN, FQN}.
+minmax(X, Y, Compare) ->
+ {minimum(X, Y, Compare), maximum(X, Y, Compare)}.
+
+-spec list_minimum(list(FQO), fun((FQO, FQO) -> gleam@order:order())) -> {ok,
+ FQO} |
+ {error, binary()}.
+list_minimum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = gleam@list:at(Arr, 0),
+ {ok, Val0} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"list_minimum"/utf8>>,
+ line => 945})
+ end,
+ _pipe@1 = Arr,
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ Val0,
+ fun(Acc, Element) -> case Compare(Element, Acc) of
+ lt ->
+ Element;
+
+ _ ->
+ Acc
+ end end
+ ),
+ {ok, _pipe@2}
+ end.
+
+-spec list_maximum(list(FQS), fun((FQS, FQS) -> gleam@order:order())) -> {ok,
+ FQS} |
+ {error, binary()}.
+list_maximum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = gleam@list:at(Arr, 0),
+ {ok, Val0} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"list_maximum"/utf8>>,
+ line => 1004})
+ end,
+ _pipe@1 = Arr,
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ Val0,
+ fun(Acc, Element) -> case Compare(Acc, Element) of
+ lt ->
+ Element;
+
+ _ ->
+ Acc
+ end end
+ ),
+ {ok, _pipe@2}
+ end.
+
+-spec arg_minimum(list(FQW), fun((FQW, FQW) -> gleam@order:order())) -> {ok,
+ list(integer())} |
+ {error, binary()}.
+arg_minimum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = begin
+ _pipe@1 = Arr,
+ list_minimum(_pipe@1, Compare)
+ end,
+ {ok, Min} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"arg_minimum"/utf8>>,
+ line => 1069})
+ end,
+ _pipe@2 = Arr,
+ _pipe@3 = gleam@list:index_map(
+ _pipe@2,
+ fun(Index, Element) -> case Compare(Element, Min) of
+ eq ->
+ Index;
+
+ _ ->
+ -1
+ end end
+ ),
+ _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of
+ -1 ->
+ false;
+
+ _ ->
+ true
+ end end),
+ {ok, _pipe@4}
+ end.
+
+-spec arg_maximum(list(FRB), fun((FRB, FRB) -> gleam@order:order())) -> {ok,
+ list(integer())} |
+ {error, binary()}.
+arg_maximum(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = begin
+ _pipe@1 = Arr,
+ list_maximum(_pipe@1, Compare)
+ end,
+ {ok, Max} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"arg_maximum"/utf8>>,
+ line => 1139})
+ end,
+ _pipe@2 = Arr,
+ _pipe@3 = gleam@list:index_map(
+ _pipe@2,
+ fun(Index, Element) -> case Compare(Element, Max) of
+ eq ->
+ Index;
+
+ _ ->
+ -1
+ end end
+ ),
+ _pipe@4 = gleam@list:filter(_pipe@3, fun(Index@1) -> case Index@1 of
+ -1 ->
+ false;
+
+ _ ->
+ true
+ end end),
+ {ok, _pipe@4}
+ end.
+
+-spec extrema(list(FRG), fun((FRG, FRG) -> gleam@order:order())) -> {ok,
+ {FRG, FRG}} |
+ {error, binary()}.
+extrema(Arr, Compare) ->
+ case Arr of
+ [] ->
+ _pipe = <<"Invalid input argument: The list is empty."/utf8>>,
+ {error, _pipe};
+
+ _ ->
+ _assert_subject = gleam@list:at(Arr, 0),
+ {ok, Val_max} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"extrema"/utf8>>,
+ line => 1209})
+ end,
+ _assert_subject@1 = gleam@list:at(Arr, 0),
+ {ok, Val_min} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/piecewise"/utf8>>,
+ function => <<"extrema"/utf8>>,
+ line => 1210})
+ end,
+ _pipe@1 = Arr,
+ _pipe@2 = gleam@list:fold(
+ _pipe@1,
+ {Val_min, Val_max},
+ fun(Acc, Element) ->
+ First = gleam@pair:first(Acc),
+ Second = gleam@pair:second(Acc),
+ case {Compare(Element, First), Compare(Second, Element)} of
+ {lt, lt} ->
+ {Element, Element};
+
+ {lt, _} ->
+ {Element, Second};
+
+ {_, lt} ->
+ {First, Element};
+
+ {_, _} ->
+ {First, Second}
+ end
+ end
+ ),
+ {ok, _pipe@2}
+ end.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl
new file mode 100644
index 0000000..d991d89
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@predicates.erl
@@ -0,0 +1,118 @@
+-module(gleam_community@maths@predicates).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([is_close/4, all_close/4, is_fractional/1, is_power/2, is_perfect/1, is_even/1, is_odd/1]).
+
+-spec float_absolute_value(float()) -> float().
+float_absolute_value(X) ->
+ case X > +0.0 of
+ true ->
+ X;
+
+ false ->
+ -1.0 * X
+ end.
+
+-spec float_absolute_difference(float(), float()) -> float().
+float_absolute_difference(A, B) ->
+ _pipe = A - B,
+ float_absolute_value(_pipe).
+
+-spec is_close(float(), float(), float(), float()) -> boolean().
+is_close(A, B, Rtol, Atol) ->
+ X = float_absolute_difference(A, B),
+ Y = Atol + (Rtol * float_absolute_value(B)),
+ case X =< Y of
+ true ->
+ true;
+
+ false ->
+ false
+ end.
+
+-spec all_close(list(float()), list(float()), float(), float()) -> {ok,
+ list(boolean())} |
+ {error, binary()}.
+all_close(Xarr, Yarr, Rtol, Atol) ->
+ Xlen = gleam@list:length(Xarr),
+ Ylen = gleam@list:length(Yarr),
+ case Xlen =:= Ylen of
+ false ->
+ _pipe = <<"Invalid input argument: length(xarr) != length(yarr). Valid input is when length(xarr) == length(yarr)."/utf8>>,
+ {error, _pipe};
+
+ true ->
+ _pipe@1 = gleam@list:zip(Xarr, Yarr),
+ _pipe@2 = gleam@list:map(
+ _pipe@1,
+ fun(Z) ->
+ is_close(
+ gleam@pair:first(Z),
+ gleam@pair:second(Z),
+ Rtol,
+ Atol
+ )
+ end
+ ),
+ {ok, _pipe@2}
+ end.
+
+-spec is_fractional(float()) -> boolean().
+is_fractional(X) ->
+ (math:ceil(X) - X) > +0.0.
+
+-spec is_power(integer(), integer()) -> boolean().
+is_power(X, Y) ->
+ _assert_subject = gleam_community@maths@elementary:logarithm(
+ gleam@int:to_float(X),
+ {some, gleam@int:to_float(Y)}
+ ),
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/predicates"/utf8>>,
+ function => <<"is_power"/utf8>>,
+ line => 241})
+ end,
+ _assert_subject@1 = gleam_community@maths@piecewise:truncate(
+ Value,
+ {some, 0}
+ ),
+ {ok, Truncated} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/predicates"/utf8>>,
+ function => <<"is_power"/utf8>>,
+ line => 243})
+ end,
+ Rem = Value - Truncated,
+ Rem =:= +0.0.
+
+-spec do_sum(list(integer())) -> integer().
+do_sum(Arr) ->
+ case Arr of
+ [] ->
+ 0;
+
+ _ ->
+ _pipe = Arr,
+ gleam@list:fold(_pipe, 0, fun(Acc, A) -> A + Acc end)
+ end.
+
+-spec is_perfect(integer()) -> boolean().
+is_perfect(N) ->
+ do_sum(gleam_community@maths@arithmetics:proper_divisors(N)) =:= N.
+
+-spec is_even(integer()) -> boolean().
+is_even(X) ->
+ (X rem 2) =:= 0.
+
+-spec is_odd(integer()) -> boolean().
+is_odd(X) ->
+ (X rem 2) /= 0.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl
new file mode 100644
index 0000000..74dcff4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@sequences.erl
@@ -0,0 +1,199 @@
+-module(gleam_community@maths@sequences).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([arange/3, linear_space/4, logarithmic_space/5, geometric_space/4]).
+
+-spec arange(float(), float(), float()) -> list(float()).
+arange(Start, Stop, Step) ->
+ case ((Start >= Stop) andalso (Step > +0.0)) orelse ((Start =< Stop) andalso (Step
+ < +0.0)) of
+ true ->
+ [];
+
+ false ->
+ Direction = case Start =< Stop of
+ true ->
+ 1.0;
+
+ false ->
+ -1.0
+ end,
+ Step_abs = gleam_community@maths@piecewise:float_absolute_value(
+ Step
+ ),
+ Num = case Step_abs of
+ 0.0 -> 0.0;
+ Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value(
+ Start - Stop
+ )
+ / Gleam@denominator
+ end,
+ _pipe = gleam@list:range(
+ 0,
+ gleam_community@maths@conversion:float_to_int(Num) - 1
+ ),
+ gleam@list:map(
+ _pipe,
+ fun(I) ->
+ Start + ((gleam_community@maths@conversion:int_to_float(I) * Step_abs)
+ * Direction)
+ end
+ )
+ end.
+
+-spec linear_space(float(), float(), integer(), boolean()) -> {ok,
+ list(float())} |
+ {error, binary()}.
+linear_space(Start, Stop, Num, Endpoint) ->
+ Direction = case Start =< Stop of
+ true ->
+ 1.0;
+
+ false ->
+ -1.0
+ end,
+ case Num > 0 of
+ true ->
+ case Endpoint of
+ true ->
+ Increment = case gleam_community@maths@conversion:int_to_float(
+ Num - 1
+ ) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> gleam_community@maths@piecewise:float_absolute_value(
+ Start - Stop
+ )
+ / Gleam@denominator
+ end,
+ _pipe = gleam@list:range(0, Num - 1),
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(I) ->
+ Start + ((gleam_community@maths@conversion:int_to_float(
+ I
+ )
+ * Increment)
+ * Direction)
+ end
+ ),
+ {ok, _pipe@1};
+
+ false ->
+ Increment@1 = case gleam_community@maths@conversion:int_to_float(
+ Num
+ ) of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> gleam_community@maths@piecewise:float_absolute_value(
+ Start - Stop
+ )
+ / Gleam@denominator@1
+ end,
+ _pipe@2 = gleam@list:range(0, Num - 1),
+ _pipe@3 = gleam@list:map(
+ _pipe@2,
+ fun(I@1) ->
+ Start + ((gleam_community@maths@conversion:int_to_float(
+ I@1
+ )
+ * Increment@1)
+ * Direction)
+ end
+ ),
+ {ok, _pipe@3}
+ end;
+
+ false ->
+ _pipe@4 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>,
+ {error, _pipe@4}
+ end.
+
+-spec logarithmic_space(float(), float(), integer(), boolean(), float()) -> {ok,
+ list(float())} |
+ {error, binary()}.
+logarithmic_space(Start, Stop, Num, Endpoint, Base) ->
+ case Num > 0 of
+ true ->
+ _assert_subject = linear_space(Start, Stop, Num, Endpoint),
+ {ok, Linspace} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"logarithmic_space"/utf8>>,
+ line => 221})
+ end,
+ _pipe = Linspace,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(I) ->
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ Base,
+ I
+ ),
+ {ok, Result} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"logarithmic_space"/utf8>>,
+ line => 224})
+ end,
+ Result
+ end
+ ),
+ {ok, _pipe@1};
+
+ false ->
+ _pipe@2 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>,
+ {error, _pipe@2}
+ end.
+
+-spec geometric_space(float(), float(), integer(), boolean()) -> {ok,
+ list(float())} |
+ {error, binary()}.
+geometric_space(Start, Stop, Num, Endpoint) ->
+ case (Start =:= +0.0) orelse (Stop =:= +0.0) of
+ true ->
+ _pipe = <<""/utf8>>,
+ {error, _pipe};
+
+ false ->
+ case Num > 0 of
+ true ->
+ _assert_subject = gleam_community@maths@elementary:logarithm_10(
+ Start
+ ),
+ {ok, Log_start} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"geometric_space"/utf8>>,
+ line => 293})
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:logarithm_10(
+ Stop
+ ),
+ {ok, Log_stop} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/sequences"/utf8>>,
+ function => <<"geometric_space"/utf8>>,
+ line => 294})
+ end,
+ logarithmic_space(Log_start, Log_stop, Num, Endpoint, 10.0);
+
+ false ->
+ _pipe@1 = <<"Invalid input: num < 0. Valid input is num > 0."/utf8>>,
+ {error, _pipe@1}
+ end
+ end.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl
new file mode 100644
index 0000000..925f4bb
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community@maths@special.erl
@@ -0,0 +1,157 @@
+-module(gleam_community@maths@special).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([erf/1, gamma/1, beta/2, incomplete_gamma/2]).
+
+-spec erf(float()) -> float().
+erf(X) ->
+ _assert_subject = [0.254829592,
+ -0.284496736,
+ 1.421413741,
+ -1.453152027,
+ 1.061405429],
+ [A1, A2, A3, A4, A5] = case _assert_subject of
+ [_, _, _, _, _] -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"erf"/utf8>>,
+ line => 79})
+ end,
+ P = 0.3275911,
+ Sign = gleam_community@maths@piecewise:float_sign(X),
+ X@1 = gleam_community@maths@piecewise:float_absolute_value(X),
+ T = case (1.0 + (P * X@1)) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end,
+ Y = 1.0 - ((((((((((A5 * T) + A4) * T) + A3) * T) + A2) * T) + A1) * T) * gleam_community@maths@elementary:exponential(
+ (-1.0 * X@1) * X@1
+ )),
+ Sign * Y.
+
+-spec gamma_lanczos(float()) -> float().
+gamma_lanczos(X) ->
+ case X < 0.5 of
+ true ->
+ case (gleam_community@maths@elementary:sin(
+ gleam_community@maths@elementary:pi() * X
+ )
+ * gamma_lanczos(1.0 - X)) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> gleam_community@maths@elementary:pi() / Gleam@denominator
+ end;
+
+ false ->
+ Z = X - 1.0,
+ X@1 = gleam@list:index_fold(
+ [0.99999999999980993,
+ 676.5203681218851,
+ -1259.1392167224028,
+ 771.32342877765313,
+ -176.61502916214059,
+ 12.507343278686905,
+ -0.13857109526572012,
+ 0.0000099843695780195716,
+ 0.00000015056327351493116],
+ +0.0,
+ fun(Acc, V, Index) -> case Index > 0 of
+ true ->
+ Acc + (case (Z + gleam_community@maths@conversion:int_to_float(
+ Index
+ )) of
+ 0.0 -> 0.0;
+ Gleam@denominator@1 -> V / Gleam@denominator@1
+ end);
+
+ false ->
+ V
+ end end
+ ),
+ T = (Z + 7.0) + 0.5,
+ _assert_subject = gleam_community@maths@elementary:power(
+ 2.0 * gleam_community@maths@elementary:pi(),
+ 0.5
+ ),
+ {ok, V1} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"gamma_lanczos"/utf8>>,
+ line => 146})
+ end,
+ _assert_subject@1 = gleam_community@maths@elementary:power(
+ T,
+ Z + 0.5
+ ),
+ {ok, V2} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"gamma_lanczos"/utf8>>,
+ line => 147})
+ end,
+ ((V1 * V2) * gleam_community@maths@elementary:exponential(-1.0 * T))
+ * X@1
+ end.
+
+-spec gamma(float()) -> float().
+gamma(X) ->
+ gamma_lanczos(X).
+
+-spec beta(float(), float()) -> float().
+beta(X, Y) ->
+ case gamma(X + Y) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> (gamma(X) * gamma(Y)) / Gleam@denominator
+ end.
+
+-spec incomplete_gamma_sum(float(), float(), float(), float(), float()) -> float().
+incomplete_gamma_sum(A, X, T, S, N) ->
+ case T of
+ +0.0 ->
+ S;
+
+ _ ->
+ Ns = S + T,
+ Nt = T * (case (A + N) of
+ 0.0 -> 0.0;
+ Gleam@denominator -> X / Gleam@denominator
+ end),
+ incomplete_gamma_sum(A, X, Nt, Ns, N + 1.0)
+ end.
+
+-spec incomplete_gamma(float(), float()) -> {ok, float()} | {error, binary()}.
+incomplete_gamma(A, X) ->
+ case (A > +0.0) andalso (X >= +0.0) of
+ true ->
+ _assert_subject = gleam_community@maths@elementary:power(X, A),
+ {ok, V} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam_community/maths/special"/utf8>>,
+ function => <<"incomplete_gamma"/utf8>>,
+ line => 173})
+ end,
+ _pipe = (V * gleam_community@maths@elementary:exponential(-1.0 * X))
+ * incomplete_gamma_sum(A, X, case A of
+ 0.0 -> 0.0;
+ Gleam@denominator -> 1.0 / Gleam@denominator
+ end, +0.0, 1.0),
+ {ok, _pipe};
+
+ false ->
+ _pipe@1 = <<"Invlaid input argument: a <= 0 or x < 0. Valid input is a > 0 and x >= 0."/utf8>>,
+ {error, _pipe@1}
+ end.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src b/aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src
new file mode 100644
index 0000000..091e679
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/gleam_community_maths.app.src
@@ -0,0 +1,16 @@
+{application, gleam_community_maths, [
+ {vsn, "1.0.1"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "A basic maths library"},
+ {modules, [gleam_community@maths@arithmetics,
+ gleam_community@maths@combinatorics,
+ gleam_community@maths@conversion,
+ gleam_community@maths@elementary,
+ gleam_community@maths@metrics,
+ gleam_community@maths@piecewise,
+ gleam_community@maths@predicates,
+ gleam_community@maths@sequences,
+ gleam_community@maths@special]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_community_maths/src/maths.mjs b/aoc2023/build/packages/gleam_community_maths/src/maths.mjs
new file mode 100644
index 0000000..5c5ab31
--- /dev/null
+++ b/aoc2023/build/packages/gleam_community_maths/src/maths.mjs
@@ -0,0 +1,95 @@
+export function sin(float) {
+ return Math.sin(float)
+}
+
+export function pi() {
+ return Math.PI
+}
+
+export function acos(float) {
+ return Math.acos(float)
+}
+
+export function acosh(float) {
+ return Math.acosh(float)
+}
+
+export function asin(float) {
+ return Math.asin(float)
+}
+
+export function asinh(float) {
+ return Math.asinh(float)
+}
+
+export function atan(float) {
+ return Math.atan(float)
+}
+
+export function tan(float) {
+ return Math.tan(float)
+}
+
+export function atan2(floaty, floatx) {
+ return Math.atan2(floaty, floatx)
+}
+
+export function atanh(float) {
+ return Math.atanh(float)
+}
+
+export function cos(float) {
+ return Math.cos(float)
+}
+
+export function cosh(float) {
+ return Math.cosh(float)
+}
+
+export function exponential(float) {
+ return Math.exp(float)
+}
+
+export function ceiling(float) {
+ return Math.ceil(float)
+}
+
+export function floor(float) {
+ return Math.floor(float)
+}
+
+export function power(base, exponent) {
+ return Math.pow(base, exponent)
+}
+
+export function logarithm(float) {
+ return Math.log(float)
+}
+
+export function logarithm_10(float) {
+ return Math.log10(float)
+}
+
+export function logarithm_2(float) {
+ return Math.log2(float)
+}
+
+export function sinh(float) {
+ return Math.sinh(float)
+}
+
+export function tanh(float) {
+ return Math.tanh(float)
+}
+
+export function sign(float) {
+ return Math.sign(float)
+}
+
+export function truncate(float) {
+ return Math.trunc(float)
+}
+
+export function to_int(float) {
+ return Math.trunc(float)
+}
diff --git a/aoc2023/build/packages/gleam_erlang/LICENSE b/aoc2023/build/packages/gleam_erlang/LICENSE
new file mode 100644
index 0000000..59e1345
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/LICENSE
@@ -0,0 +1,191 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright {{copyright_year}}, {{author_name}} <{{author_email}}>.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/aoc2023/build/packages/gleam_erlang/README.md b/aoc2023/build/packages/gleam_erlang/README.md
new file mode 100644
index 0000000..ffee4cd
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/README.md
@@ -0,0 +1,37 @@
+# Gleam Erlang 🐙
+
+A library for making use of Erlang specific code!
+
+## Features
+
+- Typed Erlang processes and message sending.
+- Erlang binary format (de)serialisation.
+- Functions for working with Erlang's charlists.
+- Reading, writing, and deletion of files.
+- Basic distributed Erlang support and working with nodes.
+- Reading and writing of environment variables.
+- Functions for working with atoms.
+
+## Usage
+
+Add this library to your Gleam project
+
+```shell
+gleam add gleam_erlang
+```
+
+And then use it in your code
+
+```gleam
+import gleam/io
+import gleam/erlang/file
+
+pub fn main() {
+ assert Ok(contents) = file.read("pokedex.txt")
+ io.println(contents)
+}
+```
+
+Documentation can be found at <https://hexdocs.pm/gleam_erlang/>.
+
+This library requires OTP 23.0 or higher.
diff --git a/aoc2023/build/packages/gleam_erlang/gleam.toml b/aoc2023/build/packages/gleam_erlang/gleam.toml
new file mode 100644
index 0000000..8d62603
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/gleam.toml
@@ -0,0 +1,18 @@
+name = "gleam_erlang"
+
+version = "0.23.1"
+licences = ["Apache-2.0"]
+description = "A Gleam library for working with Erlang"
+
+repository = { type = "github", user = "gleam-lang", repo = "erlang" }
+links = [
+ { title = "Website", href = "https://gleam.run" },
+ { title = "Sponsor", href = "https://github.com/sponsors/lpil" },
+]
+gleam = ">= 0.32.0"
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+
+[dev-dependencies]
+gleeunit = "~> 0.6"
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl
new file mode 100644
index 0000000..b38d11e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@file_FileInfo.hrl
@@ -0,0 +1,15 @@
+-record(file_info, {
+ size :: integer(),
+ file_type :: gleam@erlang@file:file_type(),
+ access :: gleam@erlang@file:access(),
+ atime :: integer(),
+ mtime :: integer(),
+ ctime :: integer(),
+ mode :: integer(),
+ links :: integer(),
+ major_device :: integer(),
+ minor_device :: integer(),
+ inode :: integer(),
+ user_id :: integer(),
+ group_id :: integer()
+}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl
new file mode 100644
index 0000000..4cd0452
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Abnormal.hrl
@@ -0,0 +1 @@
+-record(abnormal, {reason :: binary()}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl
new file mode 100644
index 0000000..5dd5047
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_CalleeDown.hrl
@@ -0,0 +1 @@
+-record(callee_down, {reason :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl
new file mode 100644
index 0000000..b82b49f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Cancelled.hrl
@@ -0,0 +1 @@
+-record(cancelled, {time_remaining :: integer()}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl
new file mode 100644
index 0000000..c476308
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ExitMessage.hrl
@@ -0,0 +1,4 @@
+-record(exit_message, {
+ pid :: gleam@erlang@process:pid_(),
+ reason :: gleam@erlang@process:exit_reason()
+}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl
new file mode 100644
index 0000000..df0b6b7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessDown.hrl
@@ -0,0 +1,4 @@
+-record(process_down, {
+ pid :: gleam@erlang@process:pid_(),
+ reason :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl
new file mode 100644
index 0000000..ce552e2
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_ProcessMonitor.hrl
@@ -0,0 +1 @@
+-record(process_monitor, {tag :: gleam@erlang:reference_()}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl
new file mode 100644
index 0000000..abc46b2
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang@process_Subject.hrl
@@ -0,0 +1,4 @@
+-record(subject, {
+ owner :: gleam@erlang@process:pid_(),
+ tag :: gleam@erlang:reference_()
+}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl
new file mode 100644
index 0000000..52c9896
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_ApplicationFailedToStart.hrl
@@ -0,0 +1,4 @@
+-record(application_failed_to_start, {
+ name :: gleam@erlang@atom:atom_(),
+ reason :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl
new file mode 100644
index 0000000..fde3c61
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/include/gleam@erlang_UnknownApplication.hrl
@@ -0,0 +1 @@
+-record(unknown_application, {name :: gleam@erlang@atom:atom_()}).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam
new file mode 100644
index 0000000..783cd53
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang.gleam
@@ -0,0 +1,158 @@
+import gleam/dynamic.{type Dynamic}
+import gleam/list
+import gleam/erlang/atom.{type Atom}
+import gleam/erlang/charlist.{type Charlist}
+
+@external(erlang, "io_lib", "format")
+fn erl_format(a: String, b: List(a)) -> Charlist
+
+/// Return a string representation of any term
+pub fn format(term: any) -> String {
+ charlist.to_string(erl_format("~p", [term]))
+}
+
+@external(erlang, "erlang", "term_to_binary")
+pub fn term_to_binary(a: a) -> BitArray
+
+type Safe {
+ Safe
+}
+
+@external(erlang, "erlang", "binary_to_term")
+fn erl_binary_to_term(a: BitArray, b: List(Safe)) -> Dynamic
+
+pub fn binary_to_term(binary: BitArray) -> Result(Dynamic, Nil) {
+ case rescue(fn() { erl_binary_to_term(binary, [Safe]) }) {
+ Ok(term) -> Ok(term)
+ Error(_) -> Error(Nil)
+ }
+}
+
+pub fn unsafe_binary_to_term(binary: BitArray) -> Result(Dynamic, Nil) {
+ case rescue(fn() { erl_binary_to_term(binary, []) }) {
+ Ok(term) -> Ok(term)
+ Error(_) -> Error(Nil)
+ }
+}
+
+/// Error value returned by `get_line` function
+///
+pub type GetLineError {
+ Eof
+ NoData
+}
+
+/// Reads a line from standard input with the given prompt.
+///
+/// # Example
+///
+/// > get_line("Language: ")
+/// // -> Language: <- gleam
+/// Ok("gleam\n")
+///
+@external(erlang, "gleam_erlang_ffi", "get_line")
+pub fn get_line(prompt prompt: String) -> Result(String, GetLineError)
+
+pub type TimeUnit {
+ Second
+ Millisecond
+ Microsecond
+ Nanosecond
+}
+
+/// Returns the current OS system time.
+///
+/// <https://erlang.org/doc/apps/erts/time_correction.html#OS_System_Time>
+@external(erlang, "os", "system_time")
+pub fn system_time(a: TimeUnit) -> Int
+
+/// Returns the current OS system time as a tuple of Ints
+///
+/// http://erlang.org/doc/man/os.html#timestamp-0
+@external(erlang, "os", "timestamp")
+pub fn erlang_timestamp() -> #(Int, Int, Int)
+
+/// Gleam doesn't offer any way to raise exceptions, but they may still occur
+/// due to bugs when working with unsafe code, such as when calling Erlang
+/// function.
+///
+/// This function will catch any error thrown and convert it into a result
+/// rather than crashing the process.
+///
+@external(erlang, "gleam_erlang_ffi", "rescue")
+pub fn rescue(a: fn() -> a) -> Result(a, Crash)
+
+pub type Crash {
+ Exited(Dynamic)
+ Thrown(Dynamic)
+ Errored(Dynamic)
+}
+
+@external(erlang, "init", "get_plain_arguments")
+fn get_start_arguments() -> List(Charlist)
+
+/// Get the arguments given to the program when it was started.
+///
+/// This is sometimes called `argv` in other languages.
+pub fn start_arguments() -> List(String) {
+ get_start_arguments()
+ |> list.map(charlist.to_string)
+}
+
+/// Starts an OTP application's process tree in the background, as well as
+/// the trees of any applications that the given application depends upon. An
+/// OTP application typically maps onto a Gleam or Hex package.
+///
+/// Returns a list of the applications that were started. Calling this function
+/// for application that have already been started is a no-op so you do not need
+/// to check the application state beforehand.
+///
+/// In Gleam we prefer to not use these implicit background process trees, but
+/// you will likely still need to start the trees of OTP applications written in
+/// other BEAM languages such as Erlang or Elixir, including those included by
+/// default with Erlang/OTP.
+///
+/// For more information see the OTP documentation.
+/// - <https://www.erlang.org/doc/man/application.html#ensure_all_started-1>
+/// - <https://www.erlang.org/doc/man/application.html#start-1>
+///
+@external(erlang, "gleam_erlang_ffi", "ensure_all_started")
+pub fn ensure_all_started(
+ application application: Atom,
+) -> Result(List(Atom), EnsureAllStartedError)
+
+pub type EnsureAllStartedError {
+ UnknownApplication(name: Atom)
+ ApplicationFailedToStart(name: Atom, reason: Dynamic)
+}
+
+/// A unique reference value.
+///
+/// It holds no particular meaning or value, but unique values are often useful
+/// in programs are used heavily within both Gleam and Erlang's OTP frameworks.
+///
+/// More can be read about references in the [Erlang documentation][1].
+///
+/// [1]: https://www.erlang.org/doc/efficiency_guide/advanced.html#unique_references
+///
+pub type Reference
+
+/// Create a new unique reference.
+///
+@external(erlang, "erlang", "make_ref")
+pub fn make_reference() -> Reference
+
+/// Returns the path of a package's `priv` directory, where extra non-Gleam
+/// or Erlang files are typically kept.
+///
+/// Returns an error if no package was found with the given name.
+///
+/// # Example
+///
+/// ```gleam
+/// > erlang.priv_directory("my_app")
+/// // -> Ok("/some/location/my_app/priv")
+/// ```
+///
+@external(erlang, "gleam_erlang_ffi", "priv_directory")
+pub fn priv_directory(name: String) -> Result(String, Nil)
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam
new file mode 100644
index 0000000..a27289c
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/atom.gleam
@@ -0,0 +1,79 @@
+import gleam/dynamic.{type DecodeErrors, type Dynamic}
+
+/// Atom is a special string-like data-type that is most commonly used for
+/// interfacing with code written in other BEAM languages such as Erlang and
+/// Elixir. It is preferable to define your own custom types to use instead of
+/// atoms where possible.
+///
+/// Atoms are not used much in typical Gleam code!
+///
+/// ## Creating atoms
+///
+/// We can create atoms with the the [`create_from_string`](#create_from_string)
+/// function, though we must be careful when doing so as atoms are never
+/// garbage collected. If we create too many atoms (for example, if we convert
+/// user input into atoms) we may hit the max limit of atoms and cause the
+/// virtual machine to crash.
+///
+pub type Atom
+
+/// An error returned when no atom is found in the virtual machine's atom table
+/// for a given string when calling the [`from_string`](#from_string) function.
+pub type FromStringError {
+ AtomNotLoaded
+}
+
+/// Finds an existing Atom for the given String.
+///
+/// If no atom is found in the virtual machine's atom table for the String then
+/// an error is returned.
+///
+/// ## Examples
+///
+/// > from_string("ok")
+/// Ok(create_from_string("ok"))
+///
+/// > from_string("some_new_atom")
+/// Error(AtomNotLoaded)
+///
+@external(erlang, "gleam_erlang_ffi", "atom_from_string")
+pub fn from_string(a: String) -> Result(Atom, FromStringError)
+
+/// Creates an atom from a string, inserting a new value into the virtual
+/// machine's atom table if an atom does not already exist for the given
+/// string.
+///
+/// We must be careful when using this function as there is a limit to the
+/// number of atom that can fit in the virtual machine's atom table. Never
+/// convert user input into atoms as filling the atom table will cause the
+/// virtual machine to crash!
+///
+@external(erlang, "erlang", "binary_to_atom")
+pub fn create_from_string(a: String) -> Atom
+
+/// Returns a `String` corresponding to the text representation of the given
+/// `Atom`.
+///
+/// ## Examples
+///
+/// > let ok_atom = create_from_string("ok")
+/// > to_string(ok_atom)
+/// "ok"
+///
+@external(erlang, "erlang", "atom_to_binary")
+pub fn to_string(a: Atom) -> String
+
+/// Checks to see whether a `Dynamic` value is an atom, and return the atom if
+/// it is.
+///
+/// ## Examples
+///
+/// > import gleam/dynamic
+/// > from_dynamic(dynamic.from(create_from_string("hello")))
+/// Ok(create_from_string("hello"))
+///
+/// > from_dynamic(dynamic.from(123))
+/// Error([DecodeError(expected: "Atom", found: "Int", path: [])])
+///
+@external(erlang, "gleam_erlang_ffi", "atom_from_dynamic")
+pub fn from_dynamic(from from: Dynamic) -> Result(Atom, DecodeErrors)
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam
new file mode 100644
index 0000000..e5b6d65
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/charlist.gleam
@@ -0,0 +1,25 @@
+//// A charlist is a list of integers where all the integers are valid code
+//// points.
+////
+//// In practice, you will not come across them often, except perhaps when
+//// interfacing with Erlang, in particular when using older libraries that do
+//// not accept binaries as arguments.
+
+/// A list of characters represented as ints. Commonly used by older Erlang
+/// modules.
+pub type Charlist
+
+/// Transform a charlist to a string
+@external(erlang, "unicode", "characters_to_binary")
+pub fn to_string(a: Charlist) -> String
+
+// Calls `unicode:characters_to_binary(Data, unicode, unicode)`
+// Note: `unicode is an alias for utf8`
+// See <https://www.erlang.org/doc/man/unicode.html#characters_to_binary-1>
+
+/// Transform a string to a charlist
+@external(erlang, "unicode", "characters_to_list")
+pub fn from_string(a: String) -> Charlist
+// Calls `unicode:characters_to_list(Data, unicode)`
+// Note: `unicode is an alias for utf8`
+// See <https://www.erlang.org/doc/man/unicode.html#characters_to_list-1>
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam
new file mode 100644
index 0000000..48e11a7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/file.gleam
@@ -0,0 +1,737 @@
+//// Working with files on the filesystem.
+////
+//// The functions included in this module are for high-level concepts such as
+//// reading and writing.
+
+import gleam/bit_array
+import gleam/result
+
+/// Reason represents all of the reasons that Erlang surfaces of why a file
+/// system operation could fail. Most of these reasons are POSIX errors, which
+/// come from the operating system and start with `E`. Others have been added to
+/// represent other issues that may arise.
+pub type Reason {
+ /// Permission denied.
+ Eacces
+ /// Resource temporarily unavailable.
+ Eagain
+ /// Bad file number
+ Ebadf
+ /// Bad message.
+ Ebadmsg
+ /// File busy.
+ Ebusy
+ /// Resource deadlock avoided.
+ Edeadlk
+ /// On most architectures, same as `Edeadlk`. On some architectures, it
+ /// means "File locking deadlock error."
+ Edeadlock
+ /// Disk quota exceeded.
+ Edquot
+ /// File already exists.
+ Eexist
+ /// Bad address in system call argument.
+ Efault
+ /// File too large.
+ Efbig
+ /// Inappropriate file type or format. Usually caused by trying to set the
+ /// "sticky bit" on a regular file (not a directory).
+ Eftype
+ /// Interrupted system call.
+ Eintr
+ /// Invalid argument.
+ Einval
+ /// I/O error.
+ Eio
+ /// Illegal operation on a directory.
+ Eisdir
+ /// Too many levels of symbolic links.
+ Eloop
+ /// Too many open files.
+ Emfile
+ /// Too many links.
+ Emlink
+ /// Multihop attempted.
+ Emultihop
+ /// Filename too long
+ Enametoolong
+ /// File table overflow
+ Enfile
+ /// No buffer space available.
+ Enobufs
+ /// No such device.
+ Enodev
+ /// No locks available.
+ Enolck
+ /// Link has been severed.
+ Enolink
+ /// No such file or directory.
+ Enoent
+ /// Not enough memory.
+ Enomem
+ /// No space left on device.
+ Enospc
+ /// No STREAM resources.
+ Enosr
+ /// Not a STREAM.
+ Enostr
+ /// Function not implemented.
+ Enosys
+ /// Block device required.
+ Enotblk
+ /// Not a directory.
+ Enotdir
+ /// Operation not supported.
+ Enotsup
+ /// No such device or address.
+ Enxio
+ /// Operation not supported on socket.
+ Eopnotsupp
+ /// Value too large to be stored in data type.
+ Eoverflow
+ /// Not owner.
+ Eperm
+ /// Broken pipe.
+ Epipe
+ /// Result too large.
+ Erange
+ /// Read-only file system.
+ Erofs
+ /// Invalid seek.
+ Espipe
+ /// No such process.
+ Esrch
+ /// Stale remote file handle.
+ Estale
+ /// Text file busy.
+ Etxtbsy
+ /// Cross-domain link.
+ Exdev
+ /// File was requested to be read as UTF-8, but is not UTF-8 encoded.
+ NotUtf8
+}
+
+/// The type of file found by `file_info` or `link_info`.
+///
+pub type FileType {
+ Device
+ Directory
+ Other
+ Regular
+ Symlink
+}
+
+/// The read/write permissions a user can have for a file.
+///
+pub type Access {
+ NoAccess
+ Read
+ ReadWrite
+ Write
+}
+
+/// Meta information for a file.
+///
+/// Timestamps are in seconds before or after the Unix time epoch,
+/// `1970-01-01 00:00:00 UTC`.
+///
+pub type FileInfo {
+ FileInfo(
+ /// File size in bytes.
+ ///
+ size: Int,
+ /// `Regular`, `Directory`, `Symlink`, `Device`, or `Other`.
+ ///
+ file_type: FileType,
+ /// `ReadWrite`, `Read`, `Write`, or `NoAccess`.
+ ///
+ access: Access,
+ /// Timestamp of most recent access.
+ ///
+ atime: Int,
+ /// Timestamp of most recent modification.
+ ///
+ mtime: Int,
+ /// Timestamp of most recent change (or file creation, depending on
+ /// operating system).
+ ///
+ ctime: Int,
+ /// File permissions encoded as a sum of bit values, including but not
+ /// limited to:
+ ///
+ /// Owner read, write, execute.
+ ///
+ /// `0o400`, `0o200`, `0o100`
+ ///
+ /// Group read, write, execute.
+ ///
+ /// `0o40`, `0o20`, `0o10`
+ ///
+ /// Other read, write, execute.
+ ///
+ /// `0o4`, `0o2`, `0o1`
+ ///
+ /// Set user ID, group ID on execution.
+ ///
+ /// `0x800`, `0x400`
+ ///
+ mode: Int,
+ /// Total links to a file (always `1` for file systems without links).
+ ///
+ links: Int,
+ /// The file system where a file is located (`0` for drive `A:` on Windows,
+ /// `1` for `B:`, etc.).
+ ///
+ major_device: Int,
+ /// Character device (or `0` on non-Unix systems).
+ ///
+ minor_device: Int,
+ /// The `inode` number for a file (always `0` on non-Unix file systems).
+ ///
+ inode: Int,
+ /// The owner of a file (always `0` on non-Unix file systems).
+ ///
+ user_id: Int,
+ /// The group id of a file (always `0` on non-Unix file systems).
+ ///
+ group_id: Int,
+ )
+}
+
+/// Results in `FileInfo` about the given `path` on success, otherwise a
+/// `Reason` for failure.
+///
+/// When `path` refers to a symlink, the result pertains to the link's target.
+/// To get `FileInfo` about a symlink itself, use `link_info`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > file_info("gleam.toml")
+/// Ok(FileInfo(
+/// size: 430,
+/// file_type: Regular,
+/// access: ReadWrite,
+/// atime: 1680580321,
+/// mtime: 1680580272,
+/// ctime: 1680580272,
+/// mode: 33188,
+/// links: 1,
+/// major_device: 64,
+/// minor_device: 0,
+/// inode: 469028,
+/// user_id: 1000,
+/// group_id: 1000,
+/// ))
+///
+/// > file_info("/root")
+/// Ok(FileInfo(
+/// size: 16,
+/// file_type: Directory,
+/// access: Read,
+/// atime: 1677789967,
+/// mtime: 1664561240,
+/// ctime: 1664561240,
+/// mode: 16877,
+/// links: 11,
+/// major_device: 54,
+/// minor_device: 0,
+/// inode: 34,
+/// user_id: 0,
+/// group_id: 0,
+/// ))
+///
+/// > file_info("./build/dev/erlang/rad/priv")
+/// Ok(FileInfo(
+/// size: 140,
+/// file_type: Directory,
+/// access: ReadWrite,
+/// atime: 1680580321,
+/// mtime: 1680580272,
+/// ctime: 1680580272,
+/// mode: 33188,
+/// links: 1,
+/// major_device: 64,
+/// minor_device: 0,
+/// inode: 469028,
+/// user_id: 1000,
+/// group_id: 1000,
+/// ))
+///
+/// > file_info("/does_not_exist")
+/// Error(Enoent)
+///
+/// > file_info("/root/.local/maybe_exists")
+/// Error(Eacces)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn file_info(a: String) -> Result(FileInfo, Reason) {
+ do_file_info(a)
+}
+
+@external(erlang, "gleam_erlang_ffi", "file_info")
+fn do_file_info(a: String) -> Result(FileInfo, Reason)
+
+/// Results in `FileInfo` about the given `path` on success, otherwise a
+/// `Reason` for failure.
+///
+/// When `path` refers to a symlink, the result pertains to the link itself.
+/// To get `FileInfo` about a symlink's target, use `file_info`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > link_info("gleam.toml")
+/// Ok(FileInfo(
+/// size: 430,
+/// file_type: Regular,
+/// access: ReadWrite,
+/// atime: 1680580321,
+/// mtime: 1680580272,
+/// ctime: 1680580272,
+/// mode: 33188,
+/// links: 1,
+/// major_device: 64,
+/// minor_device: 0,
+/// inode: 469028,
+/// user_id: 1000,
+/// group_id: 1000,
+/// ))
+///
+/// > link_info("/root")
+/// Ok(FileInfo(
+/// size: 16,
+/// file_type: Directory,
+/// access: Read,
+/// atime: 1677789967,
+/// mtime: 1664561240,
+/// ctime: 1664561240,
+/// mode: 16877,
+/// links: 11,
+/// major_device: 54,
+/// minor_device: 0,
+/// inode: 34,
+/// user_id: 0,
+/// group_id: 0,
+/// ))
+///
+/// > link_info("./build/dev/erlang/rad/priv")
+/// Ok(FileInfo(
+/// size: 41,
+/// file_type: Symlink,
+/// access: ReadWrite,
+/// atime: 1680581150,
+/// mtime: 1680581150,
+/// ctime: 1680581150,
+/// mode: 41471,
+/// links: 1,
+/// major_device: 64,
+/// minor_device: 0,
+/// inode: 471587,
+/// user_id: 1000,
+/// group_id: 1000,
+/// ))
+///
+/// > link_info("/does_not_exist")
+/// Error(Enoent)
+///
+/// > link_info("/root/.local/maybe_exists")
+/// Error(Eacces)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn link_info(a: String) -> Result(FileInfo, Reason) {
+ do_link_info(a)
+}
+
+@external(erlang, "gleam_erlang_ffi", "link_info")
+fn do_link_info(a: String) -> Result(FileInfo, Reason)
+
+/// Results in a `Bool` on success that indicates whether the given `path` has
+/// a `Directory` `FileType`, otherwise a `Reason` for failure.
+///
+/// When `path` refers to a symlink, the result pertains to the link's target.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_directory("/tmp")
+/// Ok(True)
+///
+/// > is_directory("resume.pdf")
+/// Ok(False)
+///
+/// > is_directory("/does_not_exist")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn is_directory(path: String) -> Result(Bool, Reason) {
+ use FileInfo(file_type: file_type, ..) <- result.map(over: do_file_info(path))
+ file_type == Directory
+}
+
+/// Results in a `Bool` on success that indicates whether the given `path` has
+/// a `Regular` `FileType`, otherwise a `Reason` for failure.
+///
+/// When `path` refers to a symlink, the result pertains to the link's target.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_regular("resume.pdf")
+/// Ok(True)
+///
+/// > is_regular("/tmp")
+/// Ok(False)
+///
+/// > is_regular("/does_not_exist.txt")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn is_regular(path: String) -> Result(Bool, Reason) {
+ use FileInfo(file_type: file_type, ..) <- result.map(over: do_file_info(path))
+ file_type == Regular
+}
+
+/// Results in a `Bool` on success that indicates whether the given `path`
+/// exists, otherwise a `Reason` for failure.
+///
+/// When `path` refers to a symlink, the result pertains to the link's target.
+/// To find whether a symlink itself exists, use `link_exists`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > file_exists("resume.pdf")
+/// Ok(True)
+///
+/// > file_exists("/tmp")
+/// Ok(True)
+///
+/// > file_exists("/does_not_exist")
+/// Ok(False)
+///
+/// > file_exists("/root/.local/maybe_exists")
+/// Error(Eacces)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn file_exists(path: String) -> Result(Bool, Reason) {
+ let result =
+ path
+ |> do_file_info
+ |> result.replace(True)
+ case result {
+ Error(Enoent) -> Ok(False)
+ _ -> result
+ }
+}
+
+/// Results in a `Bool` on success that indicates whether the given `path`
+/// exists, otherwise a `Reason` for failure.
+///
+/// When `path` refers to a symlink, the result pertains to the link itself.
+/// To find whether a symlink's target exists, use `file_exists`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > link_exists("resume.pdf")
+/// Ok(True)
+///
+/// > link_exists("/tmp")
+/// Ok(True)
+///
+/// > link_exists("/does_not_exist")
+/// Ok(False)
+///
+/// > link_exists("/root/.local/maybe_exists")
+/// Error(Eacces)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn link_exists(path: String) -> Result(Bool, Reason) {
+ let result =
+ path
+ |> do_link_info
+ |> result.replace(True)
+ case result {
+ Error(Enoent) -> Ok(False)
+ _ -> result
+ }
+}
+
+/// Tries to create a directory. Missing parent directories are not created.
+///
+/// Returns a Result of nil if the directory is created or Reason if the
+/// operation failed.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > make_directory("/tmp/foo")
+/// Ok(Nil)
+///
+/// > make_directory("relative_directory")
+/// Ok(Nil)
+///
+/// > make_directory("/tmp/missing_intermediate_directory/foo")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+@external(erlang, "gleam_erlang_ffi", "make_directory")
+pub fn make_directory(a: String) -> Result(Nil, Reason)
+
+/// Lists all files in a directory, except files with
+/// [raw filenames](https://www.erlang.org/doc/apps/stdlib/unicode_usage.html#notes-about-raw-filenames).
+///
+/// Returns a Result containing the list of filenames in the directory, or Reason
+/// if the operation failed.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > list_directory("/tmp")
+/// Ok(["FB01293B-8597-4359-80D5-130140A0C0DE","AlTest2.out"])
+///
+/// > list_directory("resume.docx")
+/// Error(Enotdir)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+@external(erlang, "gleam_erlang_ffi", "list_directory")
+pub fn list_directory(a: String) -> Result(List(String), Reason)
+
+/// Deletes a directory.
+///
+/// The directory must be empty before it can be deleted. Returns a nil Success
+/// or Reason if the operation failed.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > delete_directory("foo")
+/// Ok(Nil)
+///
+/// > delete_directory("does_not_exist/")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+@external(erlang, "gleam_erlang_ffi", "delete_directory")
+pub fn delete_directory(a: String) -> Result(Nil, Reason)
+
+/// Deletes a file or directory recursively.
+///
+/// Returns a nil Success or Reason if the operation failed.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > recursive_delete("foo")
+/// Ok(Nil)
+///
+/// > recursive_delete("/bar")
+/// Ok(Nil)
+///
+/// > recursive_delete("does_not_exist/")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+@external(erlang, "gleam_erlang_ffi", "recursive_delete")
+pub fn recursive_delete(a: String) -> Result(Nil, Reason)
+
+/// Read the contents of the given file as a String
+///
+/// Assumes the file is UTF-8 encoded. Returns a Result containing the file's
+/// contents as a String if the operation was successful, or Reason if the file
+/// operation failed. If the file is not UTF-8 encoded, the `NotUTF8` variant
+/// will be returned.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > read("example.txt")
+/// Ok("Hello, World!")
+///
+/// > read(from: "example.txt")
+/// Ok("Hello, World!")
+///
+/// > read("does_not_exist.txt")
+/// Error(Enoent)
+///
+/// > read("cat.gif")
+/// Error(NotUTF8)
+/// ```
+///
+@deprecated("Use the simplifile package instead?")
+pub fn read(from path: String) -> Result(String, Reason) {
+ path
+ |> do_read_bits()
+ |> result.then(fn(content) {
+ case bit_array.to_string(content) {
+ Ok(string) -> Ok(string)
+ Error(Nil) -> Error(NotUtf8)
+ }
+ })
+}
+
+/// Read the contents of the given file as a BitString
+///
+/// Returns a Result containing the file's contents as a BitString if the
+/// operation was successful, or Reason if the operation failed.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > read_bits("example.txt")
+/// Ok(<<"Hello, World!">>)
+///
+/// > read_bits(from: "cat.gif")
+/// Ok(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>)
+///
+/// > read_bits("does_not_exist.txt")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn read_bits(from path: String) -> Result(BitArray, Reason) {
+ do_read_bits(path)
+}
+
+@external(erlang, "gleam_erlang_ffi", "read_file")
+fn do_read_bits(a: path) -> Result(BitArray, Reason)
+
+/// Write the given String contents to a file of the given name.
+///
+/// Returns a Result with Nil if the operation was successful or a Reason
+/// otherwise.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > write("Hello, World!", "file.txt")
+/// Ok(Nil)
+///
+/// > write(to: "file.txt", contents: "Hello, World!")
+/// Ok(Nil)
+///
+/// > write("Hello, World!", "does_not_exist/file.txt")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn write(contents contents: String, to path: String) -> Result(Nil, Reason) {
+ contents
+ |> bit_array.from_string
+ |> do_write_bits(path)
+}
+
+/// Write the given BitString contents to a file of the given name.
+///
+/// Returns a Result with Nil if the operation was successful or a Reason
+/// otherwise.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > write_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "cat.gif")
+/// Ok(Nil)
+///
+/// > write_bits(to: "cat.gif", contents: <<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>)
+/// Ok(Nil)
+///
+/// > write_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "does_not_exist/cat.gif")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn write_bits(
+ contents contents: BitArray,
+ to path: String,
+) -> Result(Nil, Reason) {
+ do_write_bits(contents, path)
+}
+
+@external(erlang, "gleam_erlang_ffi", "write_file")
+fn do_write_bits(a: BitArray, b: String) -> Result(Nil, Reason)
+
+/// Append the given String contents to a file of the given name.
+///
+/// Returns a Result with Nil if the operation was successful or a Reason
+/// otherwise.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > append("Hello, World!", "file.txt")
+/// Ok(Nil)
+///
+/// > append(to: "file.txt", contents: "Hello, World!")
+/// Ok(Nil)
+///
+/// > append("Hello, World!", "does_not_exist/file.txt")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+pub fn append(contents contents: String, to path: String) -> Result(Nil, Reason) {
+ contents
+ |> bit_array.from_string
+ |> do_append_bits(path)
+}
+
+/// Append the given BitString contents to a file of the given name.
+///
+/// Returns a Result with Nil if the operation was successful or a Reason
+/// otherwise.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > append_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "cat.gif")
+/// Ok(Nil)
+///
+/// > append_bits(to: "cat.gif", contents: <<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>)
+/// Ok(Nil)
+///
+/// > append_bits(<<71,73,70,56,57,97,1,0,1,0,0,0,0,59>>, "does_not_exist/cat.gif")
+/// Error(Enoent)
+/// ```
+///
+pub fn append_bits(
+ contents contents: BitArray,
+ to path: String,
+) -> Result(Nil, Reason) {
+ do_append_bits(contents, path)
+}
+
+@external(erlang, "gleam_erlang_ffi", "append_file")
+fn do_append_bits(
+ contents contents: BitArray,
+ path path: String,
+) -> Result(Nil, Reason)
+
+/// Delete the given file.
+///
+/// Returns a Result with Nil if the operation was successful or a Reason
+/// otherwise.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > delete("file.txt")
+/// Ok(Nil)
+///
+/// > delete("does_not_exist.txt")
+/// Error(Enoent)
+/// ```
+///
+@deprecated("Use the simplifile package instead")
+@external(erlang, "gleam_erlang_ffi", "delete_file")
+pub fn delete(a: String) -> Result(Nil, Reason)
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam
new file mode 100644
index 0000000..339415c
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/node.gleam
@@ -0,0 +1,62 @@
+import gleam/erlang/atom.{type Atom}
+
+pub type Node
+
+type DoNotLeak
+
+/// Return the current node.
+///
+@external(erlang, "erlang", "node")
+pub fn self() -> Node
+
+/// Return a list of all visible nodes in the cluster, not including the current
+/// node.
+///
+/// The current node can be included by calling `self()` and prepending the
+/// result.
+///
+/// ```gleam
+/// let all_nodes = [node.self(), ..node.visible()]
+/// ```
+///
+@external(erlang, "erlang", "nodes")
+pub fn visible() -> List(Node)
+
+pub type ConnectError {
+ /// Was unable to connect to the node.
+ FailedToConnect
+ /// The local node is not alive, so it is not possible to connect to the other
+ /// node.
+ LocalNodeIsNotAlive
+}
+
+// TODO: test unknown node
+// TODO: test successfully connecting
+/// Establish a connection to a node, so the nodes can send messages to each
+/// other and any other connected nodes.
+///
+/// Returns `Error(FailedToConnect)` if the node is not reachable.
+///
+/// Returns `Error(LocalNodeIsNotAlive)` if the local node is not alive, meaning
+/// it is not running in distributed mode.
+///
+@external(erlang, "gleam_erlang_ffi", "connect_node")
+pub fn connect(node: Atom) -> Result(Node, ConnectError)
+
+// TODO: test
+/// Send a message to a named process on a given node.
+///
+/// These messages are untyped, like regular Erlang messages.
+///
+pub fn send(node: Node, name: Atom, message: message) -> Nil {
+ raw_send(#(name, node), message)
+ Nil
+}
+
+@external(erlang, "erlang", "send")
+fn raw_send(receiver: #(Atom, Node), message: message) -> DoNotLeak
+
+/// Convert a node to the atom of its name.
+///
+@external(erlang, "gleam_erlang_ffi", "identity")
+pub fn to_atom(node: Node) -> Atom
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam
new file mode 100644
index 0000000..e135974
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/os.gleam
@@ -0,0 +1,95 @@
+//// Access to the shell's environment variables
+
+import gleam/map.{type Map}
+
+/// Returns the list of all available environment variables as a list of key,
+/// tuples.
+///
+/// ## Examples
+///
+/// > get_all_env()
+/// map.from_list([
+/// #("SHELL", "/bin/bash"),
+/// #("PWD", "/home/j3rn"),
+/// ...
+/// ])
+///
+@external(erlang, "gleam_erlang_ffi", "get_all_env")
+pub fn get_all_env() -> Map(String, String)
+
+/// Returns the value associated with the given environment variable name.
+///
+/// ## Examples
+///
+/// > get_env("SHELL")
+/// "/bin/bash"
+///
+/// > get_env(name: "PWD")
+/// "/home/j3rn"
+///
+@external(erlang, "gleam_erlang_ffi", "get_env")
+pub fn get_env(name name: String) -> Result(String, Nil)
+
+/// Associates the given value with the given environment variable name.
+///
+/// ## Examples
+///
+/// > set_env("MYVAR", "MYVALUE")
+/// Nil
+/// > get_env("MYVAR")
+/// "MYVALUE"
+///
+/// > set_env(value: "MYVALUE", name: "MYVAR")
+/// Nil
+///
+@external(erlang, "gleam_erlang_ffi", "set_env")
+pub fn set_env(name name: String, value value: String) -> Nil
+
+/// Removes the environment variable with the given name.
+///
+/// Returns Nil regardless of whether the variable ever existed.
+///
+/// ## Examples
+///
+/// > get_env("MYVAR")
+/// Ok("MYVALUE")
+/// > unset_env("MYVAR")
+/// Nil
+/// > get_env("MYVAR")
+/// Error(Nil)
+///
+/// > unset_env(name: "MYVAR")
+/// Nil
+///
+@external(erlang, "gleam_erlang_ffi", "unset_env")
+pub fn unset_env(name name: String) -> Nil
+
+/// Represents operating system kernels
+pub type OsFamily {
+ // The family which includes modern versions of the Windows operating system.
+ WindowsNt
+ // The family of operating systems based on the open source Linux kernel.
+ Linux
+ // The family of Apple operating systems such as macOS and iOS.
+ Darwin
+ // The family of operating systems based on the FreeBSD kernel.
+ FreeBsd
+ // An operating system kernel other than Linux, Darwin, FreeBSD, or NT.
+ Other(String)
+}
+
+/// Returns the kernel of the host operating system.
+///
+/// Unknown kernels are reported as `Other(String)`; e.g. `Other("sunos")`.
+///
+/// ## Examples
+///
+/// > family()
+/// Linux
+/// > family()
+/// Darwin
+/// > family()
+/// Other("sunos")
+///
+@external(erlang, "gleam_erlang_ffi", "os_family")
+pub fn family() -> OsFamily
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam
new file mode 100644
index 0000000..f660306
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam/erlang/process.gleam
@@ -0,0 +1,744 @@
+import gleam/string
+import gleam/dynamic.{type Dynamic}
+import gleam/erlang.{type Reference}
+import gleam/erlang/atom.{type Atom}
+
+/// A `Pid` (or Process identifier) is a reference to an Erlang process. Each
+/// process has a `Pid` and it is one of the lowest level building blocks of
+/// inter-process communication in the Erlang and Gleam OTP frameworks.
+///
+pub type Pid
+
+/// Get the `Pid` for the current process.
+@external(erlang, "erlang", "self")
+pub fn self() -> Pid
+
+/// Create a new Erlang process that runs concurrently to the creator. In other
+/// languages this might be called a fibre, a green thread, or a coroutine.
+///
+/// If `linked` is `True` then the created process is linked to the creator
+/// process. When a process terminates an exit signal is sent to all other
+/// processes that are linked to it, causing the process to either terminate or
+/// have to handle the signal.
+///
+/// More can be read about processes and links in the [Erlang documentation][1].
+///
+/// [1]: https://www.erlang.org/doc/reference_manual/processes.html
+///
+pub fn start(running implementation: fn() -> anything, linked link: Bool) -> Pid {
+ case link {
+ True -> spawn_link(implementation)
+ False -> spawn(implementation)
+ }
+}
+
+@external(erlang, "erlang", "spawn")
+fn spawn(a: fn() -> anything) -> Pid
+
+@external(erlang, "erlang", "spawn_link")
+fn spawn_link(a: fn() -> anything) -> Pid
+
+/// A `Subject` is a value that processes can use to send and receive messages
+/// to and from each other in a well typed way.
+///
+/// Each subject is "owned" by the process that created it. Any process can use
+/// the `send` function to sent a message of the correct type to the process
+/// that owns the subject, and the owner can use the `receive` function or the
+/// `Selector` type to receive these messages.
+///
+/// The `Subject` type is similar to the "channel" types found in other
+/// languages and the "topic" concept found in some pub-sub systems.
+///
+/// # Examples
+///
+/// ```gleam
+/// let subject = new_subject()
+///
+/// // Send a message with the subject
+/// send(subject, "Hello, Joe!")
+///
+/// // Receive the message
+/// receive(subject, within: 10)
+/// ```
+///
+pub opaque type Subject(message) {
+ Subject(owner: Pid, tag: Reference)
+}
+
+/// Create a new `Subject` owned by the current process.
+///
+pub fn new_subject() -> Subject(message) {
+ Subject(owner: self(), tag: erlang.make_reference())
+}
+
+/// Get the owner process for a `Subject`. This is the process that created the
+/// `Subject` and will receive messages sent with it.
+///
+pub fn subject_owner(subject: Subject(message)) -> Pid {
+ subject.owner
+}
+
+type DoNotLeak
+
+@external(erlang, "erlang", "send")
+fn raw_send(a: Pid, b: message) -> DoNotLeak
+
+/// Send a message to a process using a `Subject`. The message must be of the
+/// type that the `Subject` accepts.
+///
+/// This function does not wait for the `Subject` owner process to call the
+/// `receive` function, instead it returns once the message has been placed in
+/// the process' mailbox.
+///
+/// # Ordering
+///
+/// If process P1 sends two messages to process P2 it is guaranteed that process
+/// P1 will receive the messages in the order they were sent.
+///
+/// If you wish to receive the messages in a different order you can send them
+/// on two different subjects and the receiver function can call the `receive`
+/// function for each subject in the desired order, or you can write some Erlang
+/// code to perform a selective receive.
+///
+/// # Examples
+///
+/// ```gleam
+/// let subject = new_subject()
+/// send(subject, "Hello, Joe!")
+/// ```
+///
+pub fn send(subject: Subject(message), message: message) -> Nil {
+ raw_send(subject.owner, #(subject.tag, message))
+ Nil
+}
+
+/// Receive a message that has been sent to current process using the `Subject`.
+///
+/// If there is not an existing message for the `Subject` in the process'
+/// mailbox or one does not arrive `within` the permitted timeout then the
+/// `Error(Nil)` is returned.
+///
+/// Only the process that is owner of the `Subject` can receive a message using
+/// it. If a process that does not own the `Subject` attempts to receive with it
+/// then it will not receive a message.
+///
+/// To wait for messages from multiple `Subject`s at the same time see the
+/// `Selector` type.
+///
+pub fn receive(
+ from subject: Subject(message),
+ within milliseconds: Int,
+) -> Result(message, Nil) {
+ new_selector()
+ |> selecting(subject, fn(x) { x })
+ |> select(within: milliseconds)
+}
+
+/// A type that enables a process to wait for messages from multiple `Subject`s
+/// at the same time, returning whichever message arrives first.
+///
+/// Used with the `new_selector`, `selecting`, and `select` functions.
+///
+/// # Examples
+///
+/// ```gleam
+/// > let int_subject = new_subject()
+/// > let float_subject = new_subject()
+/// > send(int_subject, 1)
+/// >
+/// > let selector =
+/// > new_selector()
+/// > |> selecting(int_subject, int.to_string)
+/// > |> selecting(float_subject, float.to_string)
+/// >
+/// > select(selector, 10)
+/// Ok("1")
+/// ```
+///
+pub type Selector(payload)
+
+/// Create a new `Selector` which can be used to receive messages on multiple
+/// `Subject`s at once.
+///
+@external(erlang, "gleam_erlang_ffi", "new_selector")
+pub fn new_selector() -> Selector(payload)
+
+/// Receive a message that has been sent to current process using any of the
+/// `Subject`s that have been added to the `Selector` with the `selecting`
+/// function.
+///
+/// If there is not an existing message for the `Selector` in the process'
+/// mailbox or one does not arrive `within` the permitted timeout then the
+/// `Error(Nil)` is returned.
+///
+/// Only the process that is owner of the `Subject`s can receive a message using
+/// them. If a process that does not own the a `Subject` attempts to receive
+/// with it then it will not receive a message.
+///
+/// To wait forever for the next message rather than for a limited amount of
+/// time see the `select_forever` function.
+///
+@external(erlang, "gleam_erlang_ffi", "select")
+pub fn select(
+ from from: Selector(payload),
+ within within: Int,
+) -> Result(payload, Nil)
+
+/// Similar to the `select` function but will wait forever for a message to
+/// arrive rather than timing out after a specified amount of time.
+///
+@external(erlang, "gleam_erlang_ffi", "select")
+pub fn select_forever(from from: Selector(payload)) -> payload
+
+/// Add a transformation function to a selector. When a message is received
+/// using this selector the transformation function is applied to the message.
+///
+/// This function can be used to change the type of messages received and may
+/// be useful when combined with the `merge_selector` function.
+///
+@external(erlang, "gleam_erlang_ffi", "map_selector")
+pub fn map_selector(a: Selector(a), b: fn(a) -> b) -> Selector(b)
+
+/// Merge one selector into another, producing a selector that contains the
+/// message handlers of both.
+///
+/// If a subject is handled by both selectors the handler function of the
+/// second selector is used.
+///
+@external(erlang, "gleam_erlang_ffi", "merge_selector")
+pub fn merge_selector(a: Selector(a), b: Selector(a)) -> Selector(a)
+
+pub type ExitMessage {
+ ExitMessage(pid: Pid, reason: ExitReason)
+}
+
+pub type ExitReason {
+ Normal
+ Killed
+ Abnormal(reason: String)
+}
+
+/// Add a handler for trapped exit messages. In order for these messages to be
+/// sent to the process when a linked process exits the process must call the
+/// `trap_exit` beforehand.
+///
+pub fn selecting_trapped_exits(
+ selector: Selector(a),
+ handler: fn(ExitMessage) -> a,
+) -> Selector(a) {
+ let tag = atom.create_from_string("EXIT")
+ let handler = fn(message: #(Atom, Pid, Dynamic)) -> a {
+ let reason = message.2
+ let normal = dynamic.from(Normal)
+ let killed = dynamic.from(Killed)
+ let reason = case dynamic.string(reason) {
+ _ if reason == normal -> Normal
+ _ if reason == killed -> Killed
+ Ok(reason) -> Abnormal(reason)
+ Error(_) -> Abnormal(string.inspect(reason))
+ }
+ handler(ExitMessage(message.1, reason))
+ }
+ insert_selector_handler(selector, #(tag, 3), handler)
+}
+
+// TODO: implement in Gleam
+/// Discard all messages in the current process' mailbox.
+///
+/// Warning: This function may cause other processes to crash if they sent a
+/// message to the current process and are waiting for a response, so use with
+/// caution.
+///
+@external(erlang, "gleam_erlang_ffi", "flush_messages")
+pub fn flush_messages() -> Nil
+
+/// Add a new `Subject` to the `Selector` to that it's messages can be received.
+///
+/// The `mapping` function provided with the `Subject` can be used to convert
+/// the type of messages received using this `Subject`. This is useful for when
+/// you wish to add multiple `Subject`s to a `Seletor` when they have differing
+/// message types. If you do not wish to transform the incoming messages in any
+/// way then the `identity` function can be given.
+///
+pub fn selecting(
+ selector: Selector(payload),
+ for subject: Subject(message),
+ mapping transform: fn(message) -> payload,
+) -> Selector(payload) {
+ let handler = fn(message: #(Reference, message)) { transform(message.1) }
+ insert_selector_handler(selector, #(subject.tag, 2), handler)
+}
+
+/// Add a handler to a selector for 2 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record2(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(Dynamic) -> payload,
+) -> Selector(payload) {
+ let handler = fn(message: #(tag, Dynamic)) { transform(message.1) }
+ insert_selector_handler(selector, #(tag, 2), handler)
+}
+
+/// Add a handler to a selector for 3 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record3(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(Dynamic, Dynamic) -> payload,
+) -> Selector(payload) {
+ let handler = fn(message: #(tag, Dynamic, Dynamic)) {
+ transform(message.1, message.2)
+ }
+ insert_selector_handler(selector, #(tag, 3), handler)
+}
+
+/// Add a handler to a selector for 4 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record4(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(Dynamic, Dynamic, Dynamic) -> payload,
+) -> Selector(payload) {
+ let handler = fn(message: #(tag, Dynamic, Dynamic, Dynamic)) {
+ transform(message.1, message.2, message.3)
+ }
+ insert_selector_handler(selector, #(tag, 4), handler)
+}
+
+/// Add a handler to a selector for 5 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record5(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(Dynamic, Dynamic, Dynamic, Dynamic) -> payload,
+) -> Selector(payload) {
+ let handler = fn(message: #(tag, Dynamic, Dynamic, Dynamic, Dynamic)) {
+ transform(message.1, message.2, message.3, message.4)
+ }
+ insert_selector_handler(selector, #(tag, 5), handler)
+}
+
+/// Add a handler to a selector for 6 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record6(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic) -> payload,
+) -> Selector(payload) {
+ let handler = fn(message: #(tag, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic)) {
+ transform(message.1, message.2, message.3, message.4, message.5)
+ }
+ insert_selector_handler(selector, #(tag, 6), handler)
+}
+
+/// Add a handler to a selector for 7 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record7(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic) ->
+ payload,
+) -> Selector(payload) {
+ let handler = fn(
+ message: #(tag, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic),
+ ) {
+ transform(message.1, message.2, message.3, message.4, message.5, message.6)
+ }
+ insert_selector_handler(selector, #(tag, 7), handler)
+}
+
+/// Add a handler to a selector for 8 element tuple messages with a given tag
+/// element in the first position.
+///
+/// Typically you want to use the `selecting` function with a `Subject` instead,
+/// but this function may be useful if you need to receive messages sent from
+/// other BEAM languages that do not use the `Subject` type.
+///
+pub fn selecting_record8(
+ selector: Selector(payload),
+ tag: tag,
+ mapping transform: fn(
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ ) ->
+ payload,
+) -> Selector(payload) {
+ let handler = fn(
+ message: #(
+ tag,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ Dynamic,
+ ),
+ ) {
+ transform(
+ message.1,
+ message.2,
+ message.3,
+ message.4,
+ message.5,
+ message.6,
+ message.7,
+ )
+ }
+ insert_selector_handler(selector, #(tag, 8), handler)
+}
+
+type AnythingSelectorTag {
+ Anything
+}
+
+/// Add a catch-all handler to a selector that will be used when no other
+/// handler in a selector is suitable for a given message.
+///
+/// This may be useful for when you want to ensure that any message in the inbox
+/// is handled, or when you need to handle messages from other BEAM languages
+/// which do not use subjects or record format messages.
+///
+pub fn selecting_anything(
+ selector: Selector(payload),
+ mapping handler: fn(Dynamic) -> payload,
+) -> Selector(payload) {
+ insert_selector_handler(selector, Anything, handler)
+}
+
+@external(erlang, "gleam_erlang_ffi", "insert_selector_handler")
+fn insert_selector_handler(
+ a: Selector(payload),
+ for for: tag,
+ mapping mapping: fn(message) -> payload,
+) -> Selector(payload)
+
+/// Suspends the process calling this function for the specified number of
+/// milliseconds.
+///
+@external(erlang, "gleam_erlang_ffi", "sleep")
+pub fn sleep(a: Int) -> Nil
+
+/// Suspends the process forever! This may be useful for suspending the main
+/// process in a Gleam program when it has no more work to do but we want other
+/// processes to continue to work.
+///
+@external(erlang, "gleam_erlang_ffi", "sleep_forever")
+pub fn sleep_forever() -> Nil
+
+/// Check to see whether the process for a given `Pid` is alive.
+///
+/// See the [Erlang documentation][1] for more information.
+///
+/// [1]: http://erlang.org/doc/man/erlang.html#is_process_alive-1
+///
+@external(erlang, "erlang", "is_process_alive")
+pub fn is_alive(a: Pid) -> Bool
+
+type ProcessMonitorFlag {
+ Process
+}
+
+@external(erlang, "erlang", "monitor")
+fn erlang_monitor_process(a: ProcessMonitorFlag, b: Pid) -> Reference
+
+pub opaque type ProcessMonitor {
+ ProcessMonitor(tag: Reference)
+}
+
+/// A message received when a monitored process exits.
+///
+pub type ProcessDown {
+ ProcessDown(pid: Pid, reason: Dynamic)
+}
+
+/// Start monitoring a process so that when the monitored process exits a
+/// message is sent to the monitoring process.
+///
+/// The message is only sent once, when the target process exits. If the
+/// process was not alive when this function is called the message will never
+/// be received.
+///
+/// The down message can be received with a `Selector` and the
+/// `selecting_process_down` function.
+///
+/// The process can be demonitored with the `demonitor_process` function.
+///
+pub fn monitor_process(pid: Pid) -> ProcessMonitor {
+ Process
+ |> erlang_monitor_process(pid)
+ |> ProcessMonitor
+}
+
+/// Add a `ProcessMonitor` to a `Selector` so that the `ProcessDown` message can
+/// be received using the `Selector` and the `select` function.
+///
+pub fn selecting_process_down(
+ selector: Selector(payload),
+ monitor: ProcessMonitor,
+ mapping: fn(ProcessDown) -> payload,
+) -> Selector(payload) {
+ insert_selector_handler(selector, monitor.tag, mapping)
+}
+
+/// Remove the monitor for a process so that when the monitor process exits a
+/// `ProcessDown` message is not sent to the monitoring process.
+///
+/// If the message has already been sent it is removed from the monitoring
+/// process' mailbox.
+///
+@external(erlang, "gleam_erlang_ffi", "demonitor")
+pub fn demonitor_process(monitor monitor: ProcessMonitor) -> Nil
+
+/// An error returned when making a call to a process.
+///
+pub type CallError(msg) {
+ /// The process being called exited before it sent a response.
+ ///
+ CalleeDown(reason: Dynamic)
+
+ /// The process being called did not response within the permitted amount of
+ /// time.
+ ///
+ CallTimeout
+}
+
+// This function is based off of Erlang's gen:do_call/4.
+/// Send a message to a process and wait for a reply.
+///
+/// If the receiving process exits or does not reply within the allowed amount
+/// of time then an error is returned.
+///
+pub fn try_call(
+ subject: Subject(request),
+ make_request: fn(Subject(response)) -> request,
+ within timeout: Int,
+) -> Result(response, CallError(response)) {
+ let reply_subject = new_subject()
+
+ // Monitor the callee process so we can tell if it goes down (meaning we
+ // won't get a reply)
+ let monitor = monitor_process(subject_owner(subject))
+
+ // Send the request to the process over the channel
+ send(subject, make_request(reply_subject))
+
+ // Await a reply or handle failure modes (timeout, process down, etc)
+ let result =
+ new_selector()
+ |> selecting(reply_subject, Ok)
+ |> selecting_process_down(
+ monitor,
+ fn(down: ProcessDown) { Error(CalleeDown(reason: down.reason)) },
+ )
+ |> select(timeout)
+
+ // Demonitor the process and close the channels as we're done
+ demonitor_process(monitor)
+
+ // Prepare an appropriate error (if present) for the caller
+ case result {
+ Error(Nil) -> Error(CallTimeout)
+ Ok(res) -> res
+ }
+}
+
+/// Send a message to a process and wait for a reply.
+///
+/// If the receiving process exits or does not reply within the allowed amount
+/// of time the calling process crashes. If you wish an error to be returned
+/// instead see the `try_call` function.
+///
+pub fn call(
+ subject: Subject(request),
+ make_request: fn(Subject(response)) -> request,
+ within timeout: Int,
+) -> response {
+ let assert Ok(resp) = try_call(subject, make_request, timeout)
+ resp
+}
+
+/// Creates a link between the calling process and another process.
+///
+/// When a process crashes any linked processes will also crash. This is useful
+/// to ensure that groups of processes that depend on each other all either
+/// succeed or fail together.
+///
+/// Returns `True` if the link was created successfully, returns `False` if the
+/// process was not alive and as such could not be linked.
+///
+@external(erlang, "gleam_erlang_ffi", "link")
+pub fn link(pid pid: Pid) -> Bool
+
+@external(erlang, "erlang", "unlink")
+fn erlang_unlink(pid pid: Pid) -> Bool
+
+/// Removes any existing link between the caller process and the target process.
+///
+pub fn unlink(pid: Pid) -> Nil {
+ erlang_unlink(pid)
+ Nil
+}
+
+pub type Timer
+
+@external(erlang, "erlang", "send_after")
+fn erlang_send_after(a: Int, b: Pid, c: msg) -> Timer
+
+/// Send a message over a channel after a specified number of milliseconds.
+///
+pub fn send_after(subject: Subject(msg), delay: Int, message: msg) -> Timer {
+ erlang_send_after(delay, subject.owner, #(subject.tag, message))
+}
+
+@external(erlang, "erlang", "cancel_timer")
+fn erlang_cancel_timer(a: Timer) -> Dynamic
+
+/// Values returned when a timer is cancelled.
+///
+pub type Cancelled {
+ /// The timer could not be found. It likely has already triggered.
+ ///
+ TimerNotFound
+
+ /// The timer was found and cancelled before it triggered.
+ ///
+ /// The amount of remaining time before the timer was due to be triggered is
+ /// returned in milliseconds.
+ ///
+ Cancelled(time_remaining: Int)
+}
+
+/// Cancel a given timer, causing it not to trigger if it has not done already.
+///
+pub fn cancel_timer(timer: Timer) -> Cancelled {
+ case dynamic.int(erlang_cancel_timer(timer)) {
+ Ok(i) -> Cancelled(i)
+ Error(_) -> TimerNotFound
+ }
+}
+
+type KillFlag {
+ Kill
+}
+
+@external(erlang, "erlang", "exit")
+fn erlang_kill(to to: Pid, because because: KillFlag) -> Bool
+
+// Go, my pretties. Kill! Kill!
+// - Bart Simpson
+//
+/// Send an untrappable `kill` exit signal to the target process.
+///
+/// See the documentation for the Erlang [`erlang:exit`][1] function for more
+/// information.
+///
+/// [1]: https://erlang.org/doc/man/erlang.html#exit-1
+///
+pub fn kill(pid: Pid) -> Nil {
+ erlang_kill(pid, Kill)
+ Nil
+}
+
+@external(erlang, "erlang", "exit")
+fn erlang_send_exit(to to: Pid, because because: whatever) -> Bool
+
+// TODO: test
+/// Sends an exit signal to a process, indicating that the process is to shut
+/// down.
+///
+/// See the [Erlang documentation][erl] for more information.
+/// [erl]: http://erlang.org/doc/man/erlang.html#exit-2
+///
+pub fn send_exit(to pid: Pid) -> Nil {
+ erlang_send_exit(pid, Normal)
+ Nil
+}
+
+/// Sends an exit signal to a process, indicating that the process is to shut
+/// down due to an abnormal reason such as a failure.
+///
+/// See the [Erlang documentation][erl] for more information.
+/// [erl]: http://erlang.org/doc/man/erlang.html#exit-2
+///
+pub fn send_abnormal_exit(pid: Pid, reason: String) -> Nil {
+ erlang_send_exit(pid, Abnormal(reason))
+ Nil
+}
+
+/// Set whether the current process is to trap exit signals or not.
+///
+/// When not trapping exits if a linked process crashes the exit signal
+/// propagates to the process which will also crash.
+/// This is the normal behaviour before this function is called.
+///
+/// When trapping exits (after this function is called) if a linked process
+/// crashes an exit message is sent to the process instead. These messages can
+/// be handled with the `selecting_trapped_exits` function.
+///
+@external(erlang, "gleam_erlang_ffi", "trap_exits")
+pub fn trap_exits(a: Bool) -> Nil
+
+/// Register a process under a given name, allowing it to be looked up using
+/// the `named` function.
+///
+/// This function will return an error under the following conditions:
+/// - The process for the pid no longer exists.
+/// - The name has already been registered.
+/// - The process already has a name.
+/// - The name is the atom `undefined`, which is reserved by Erlang.
+///
+@external(erlang, "gleam_erlang_ffi", "register_process")
+pub fn register(pid: Pid, name: Atom) -> Result(Nil, Nil)
+
+/// Un-register a process name, after which the process can no longer be looked
+/// up by that name, and both the name and the process can be re-used in other
+/// registrations.
+///
+/// It is possible to un-register process that are not from your application,
+/// including those from Erlang/OTP itself. This is not recommended and will
+/// likely result in undesirable behaviour and crashes.
+///
+@external(erlang, "gleam_erlang_ffi", "unregister_process")
+pub fn unregister(name: Atom) -> Result(Nil, Nil)
+
+/// Look up a process by name, returning the pid if it exists.
+///
+@external(erlang, "gleam_erlang_ffi", "process_named")
+pub fn named(name: Atom) -> Result(Pid, Nil)
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl
new file mode 100644
index 0000000..14a5538
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang.erl
@@ -0,0 +1,90 @@
+-module(gleam@erlang).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([format/1, term_to_binary/1, get_line/1, system_time/1, erlang_timestamp/0, rescue/1, binary_to_term/1, unsafe_binary_to_term/1, start_arguments/0, ensure_all_started/1, make_reference/0, priv_directory/1]).
+-export_type([safe/0, get_line_error/0, time_unit/0, crash/0, ensure_all_started_error/0, reference_/0]).
+
+-type safe() :: safe.
+
+-type get_line_error() :: eof | no_data.
+
+-type time_unit() :: second | millisecond | microsecond | nanosecond.
+
+-type crash() :: {exited, gleam@dynamic:dynamic_()} |
+ {thrown, gleam@dynamic:dynamic_()} |
+ {errored, gleam@dynamic:dynamic_()}.
+
+-type ensure_all_started_error() :: {unknown_application,
+ gleam@erlang@atom:atom_()} |
+ {application_failed_to_start,
+ gleam@erlang@atom:atom_(),
+ gleam@dynamic:dynamic_()}.
+
+-type reference_() :: any().
+
+-spec format(any()) -> binary().
+format(Term) ->
+ unicode:characters_to_binary(io_lib:format(<<"~p"/utf8>>, [Term])).
+
+-spec term_to_binary(any()) -> bitstring().
+term_to_binary(A) ->
+ erlang:term_to_binary(A).
+
+-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}.
+get_line(Prompt) ->
+ gleam_erlang_ffi:get_line(Prompt).
+
+-spec system_time(time_unit()) -> integer().
+system_time(A) ->
+ os:system_time(A).
+
+-spec erlang_timestamp() -> {integer(), integer(), integer()}.
+erlang_timestamp() ->
+ os:timestamp().
+
+-spec rescue(fun(() -> FHH)) -> {ok, FHH} | {error, crash()}.
+rescue(A) ->
+ gleam_erlang_ffi:rescue(A).
+
+-spec binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} |
+ {error, nil}.
+binary_to_term(Binary) ->
+ case gleam_erlang_ffi:rescue(
+ fun() -> erlang:binary_to_term(Binary, [safe]) end
+ ) of
+ {ok, Term} ->
+ {ok, Term};
+
+ {error, _} ->
+ {error, nil}
+ end.
+
+-spec unsafe_binary_to_term(bitstring()) -> {ok, gleam@dynamic:dynamic_()} |
+ {error, nil}.
+unsafe_binary_to_term(Binary) ->
+ case gleam_erlang_ffi:rescue(fun() -> erlang:binary_to_term(Binary, []) end) of
+ {ok, Term} ->
+ {ok, Term};
+
+ {error, _} ->
+ {error, nil}
+ end.
+
+-spec start_arguments() -> list(binary()).
+start_arguments() ->
+ _pipe = init:get_plain_arguments(),
+ gleam@list:map(_pipe, fun unicode:characters_to_binary/1).
+
+-spec ensure_all_started(gleam@erlang@atom:atom_()) -> {ok,
+ list(gleam@erlang@atom:atom_())} |
+ {error, ensure_all_started_error()}.
+ensure_all_started(Application) ->
+ gleam_erlang_ffi:ensure_all_started(Application).
+
+-spec make_reference() -> reference_().
+make_reference() ->
+ erlang:make_ref().
+
+-spec priv_directory(binary()) -> {ok, binary()} | {error, nil}.
+priv_directory(Name) ->
+ gleam_erlang_ffi:priv_directory(Name).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl
new file mode 100644
index 0000000..e9ad530
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@atom.erl
@@ -0,0 +1,26 @@
+-module(gleam@erlang@atom).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_string/1, create_from_string/1, to_string/1, from_dynamic/1]).
+-export_type([atom_/0, from_string_error/0]).
+
+-type atom_() :: any().
+
+-type from_string_error() :: atom_not_loaded.
+
+-spec from_string(binary()) -> {ok, atom_()} | {error, from_string_error()}.
+from_string(A) ->
+ gleam_erlang_ffi:atom_from_string(A).
+
+-spec create_from_string(binary()) -> atom_().
+create_from_string(A) ->
+ erlang:binary_to_atom(A).
+
+-spec to_string(atom_()) -> binary().
+to_string(A) ->
+ erlang:atom_to_binary(A).
+
+-spec from_dynamic(gleam@dynamic:dynamic_()) -> {ok, atom_()} |
+ {error, list(gleam@dynamic:decode_error())}.
+from_dynamic(From) ->
+ gleam_erlang_ffi:atom_from_dynamic(From).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl
new file mode 100644
index 0000000..9f9c0fa
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@charlist.erl
@@ -0,0 +1,15 @@
+-module(gleam@erlang@charlist).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_string/1, from_string/1]).
+-export_type([charlist/0]).
+
+-type charlist() :: any().
+
+-spec to_string(charlist()) -> binary().
+to_string(A) ->
+ unicode:characters_to_binary(A).
+
+-spec from_string(binary()) -> charlist().
+from_string(A) ->
+ unicode:characters_to_list(A).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl
new file mode 100644
index 0000000..1fe6628
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@file.erl
@@ -0,0 +1,190 @@
+-module(gleam@erlang@file).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([file_info/1, link_info/1, is_directory/1, is_regular/1, file_exists/1, link_exists/1, make_directory/1, list_directory/1, delete_directory/1, recursive_delete/1, read/1, read_bits/1, write/2, write_bits/2, append/2, append_bits/2, delete/1]).
+-export_type([reason/0, file_type/0, access/0, file_info/0]).
+
+-type reason() :: eacces |
+ eagain |
+ ebadf |
+ ebadmsg |
+ ebusy |
+ edeadlk |
+ edeadlock |
+ edquot |
+ eexist |
+ efault |
+ efbig |
+ eftype |
+ eintr |
+ einval |
+ eio |
+ eisdir |
+ eloop |
+ emfile |
+ emlink |
+ emultihop |
+ enametoolong |
+ enfile |
+ enobufs |
+ enodev |
+ enolck |
+ enolink |
+ enoent |
+ enomem |
+ enospc |
+ enosr |
+ enostr |
+ enosys |
+ enotblk |
+ enotdir |
+ enotsup |
+ enxio |
+ eopnotsupp |
+ eoverflow |
+ eperm |
+ epipe |
+ erange |
+ erofs |
+ espipe |
+ esrch |
+ estale |
+ etxtbsy |
+ exdev |
+ not_utf8.
+
+-type file_type() :: device | directory | other | regular | symlink.
+
+-type access() :: no_access | read | read_write | write.
+
+-type file_info() :: {file_info,
+ integer(),
+ file_type(),
+ access(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer(),
+ integer()}.
+
+-spec file_info(binary()) -> {ok, file_info()} | {error, reason()}.
+file_info(A) ->
+ gleam_erlang_ffi:file_info(A).
+
+-spec link_info(binary()) -> {ok, file_info()} | {error, reason()}.
+link_info(A) ->
+ gleam_erlang_ffi:link_info(A).
+
+-spec is_directory(binary()) -> {ok, boolean()} | {error, reason()}.
+is_directory(Path) ->
+ gleam@result:map(
+ gleam_erlang_ffi:file_info(Path),
+ fun(_use0) ->
+ {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0,
+ File_type =:= directory
+ end
+ ).
+
+-spec is_regular(binary()) -> {ok, boolean()} | {error, reason()}.
+is_regular(Path) ->
+ gleam@result:map(
+ gleam_erlang_ffi:file_info(Path),
+ fun(_use0) ->
+ {file_info, _, File_type, _, _, _, _, _, _, _, _, _, _, _} = _use0,
+ File_type =:= regular
+ end
+ ).
+
+-spec file_exists(binary()) -> {ok, boolean()} | {error, reason()}.
+file_exists(Path) ->
+ Result = begin
+ _pipe = Path,
+ _pipe@1 = gleam_erlang_ffi:file_info(_pipe),
+ gleam@result:replace(_pipe@1, true)
+ end,
+ case Result of
+ {error, enoent} ->
+ {ok, false};
+
+ _ ->
+ Result
+ end.
+
+-spec link_exists(binary()) -> {ok, boolean()} | {error, reason()}.
+link_exists(Path) ->
+ Result = begin
+ _pipe = Path,
+ _pipe@1 = gleam_erlang_ffi:link_info(_pipe),
+ gleam@result:replace(_pipe@1, true)
+ end,
+ case Result of
+ {error, enoent} ->
+ {ok, false};
+
+ _ ->
+ Result
+ end.
+
+-spec make_directory(binary()) -> {ok, nil} | {error, reason()}.
+make_directory(A) ->
+ gleam_erlang_ffi:make_directory(A).
+
+-spec list_directory(binary()) -> {ok, list(binary())} | {error, reason()}.
+list_directory(A) ->
+ gleam_erlang_ffi:list_directory(A).
+
+-spec delete_directory(binary()) -> {ok, nil} | {error, reason()}.
+delete_directory(A) ->
+ gleam_erlang_ffi:delete_directory(A).
+
+-spec recursive_delete(binary()) -> {ok, nil} | {error, reason()}.
+recursive_delete(A) ->
+ gleam_erlang_ffi:recursive_delete(A).
+
+-spec read(binary()) -> {ok, binary()} | {error, reason()}.
+read(Path) ->
+ _pipe = Path,
+ _pipe@1 = gleam_erlang_ffi:read_file(_pipe),
+ gleam@result:then(
+ _pipe@1,
+ fun(Content) -> case gleam@bit_array:to_string(Content) of
+ {ok, String} ->
+ {ok, String};
+
+ {error, nil} ->
+ {error, not_utf8}
+ end end
+ ).
+
+-spec read_bits(binary()) -> {ok, bitstring()} | {error, reason()}.
+read_bits(Path) ->
+ gleam_erlang_ffi:read_file(Path).
+
+-spec write(binary(), binary()) -> {ok, nil} | {error, reason()}.
+write(Contents, Path) ->
+ _pipe = Contents,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ gleam_erlang_ffi:write_file(_pipe@1, Path).
+
+-spec write_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}.
+write_bits(Contents, Path) ->
+ gleam_erlang_ffi:write_file(Contents, Path).
+
+-spec append(binary(), binary()) -> {ok, nil} | {error, reason()}.
+append(Contents, Path) ->
+ _pipe = Contents,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ gleam_erlang_ffi:append_file(_pipe@1, Path).
+
+-spec append_bits(bitstring(), binary()) -> {ok, nil} | {error, reason()}.
+append_bits(Contents, Path) ->
+ gleam_erlang_ffi:append_file(Contents, Path).
+
+-spec delete(binary()) -> {ok, nil} | {error, reason()}.
+delete(A) ->
+ gleam_erlang_ffi:delete_file(A).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl
new file mode 100644
index 0000000..f57d029
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@node.erl
@@ -0,0 +1,33 @@
+-module(gleam@erlang@node).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([self/0, visible/0, connect/1, send/3, to_atom/1]).
+-export_type([node_/0, do_not_leak/0, connect_error/0]).
+
+-type node_() :: any().
+
+-type do_not_leak() :: any().
+
+-type connect_error() :: failed_to_connect | local_node_is_not_alive.
+
+-spec self() -> node_().
+self() ->
+ erlang:node().
+
+-spec visible() -> list(node_()).
+visible() ->
+ erlang:nodes().
+
+-spec connect(gleam@erlang@atom:atom_()) -> {ok, node_()} |
+ {error, connect_error()}.
+connect(Node) ->
+ gleam_erlang_ffi:connect_node(Node).
+
+-spec send(node_(), gleam@erlang@atom:atom_(), any()) -> nil.
+send(Node, Name, Message) ->
+ erlang:send({Name, Node}, Message),
+ nil.
+
+-spec to_atom(node_()) -> gleam@erlang@atom:atom_().
+to_atom(Node) ->
+ gleam_erlang_ffi:identity(Node).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl
new file mode 100644
index 0000000..6604255
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@os.erl
@@ -0,0 +1,27 @@
+-module(gleam@erlang@os).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get_all_env/0, get_env/1, set_env/2, unset_env/1, family/0]).
+-export_type([os_family/0]).
+
+-type os_family() :: windows_nt | linux | darwin | free_bsd | {other, binary()}.
+
+-spec get_all_env() -> gleam@map:map_(binary(), binary()).
+get_all_env() ->
+ gleam_erlang_ffi:get_all_env().
+
+-spec get_env(binary()) -> {ok, binary()} | {error, nil}.
+get_env(Name) ->
+ gleam_erlang_ffi:get_env(Name).
+
+-spec set_env(binary(), binary()) -> nil.
+set_env(Name, Value) ->
+ gleam_erlang_ffi:set_env(Name, Value).
+
+-spec unset_env(binary()) -> nil.
+unset_env(Name) ->
+ gleam_erlang_ffi:unset_env(Name).
+
+-spec family() -> os_family().
+family() ->
+ gleam_erlang_ffi:os_family().
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl
new file mode 100644
index 0000000..fc8e0ff
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam@erlang@process.erl
@@ -0,0 +1,374 @@
+-module(gleam@erlang@process).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([self/0, start/2, new_subject/0, subject_owner/1, send/2, new_selector/0, select/2, select_forever/1, map_selector/2, merge_selector/2, flush_messages/0, selecting_trapped_exits/2, selecting/3, 'receive'/2, selecting_record2/3, selecting_record3/3, selecting_record4/3, selecting_record5/3, selecting_record6/3, selecting_record7/3, selecting_record8/3, selecting_anything/2, sleep/1, sleep_forever/0, is_alive/1, monitor_process/1, selecting_process_down/3, demonitor_process/1, try_call/3, call/3, link/1, unlink/1, send_after/3, cancel_timer/1, kill/1, send_exit/1, send_abnormal_exit/2, trap_exits/1, register/2, unregister/1, named/1]).
+-export_type([pid_/0, subject/1, do_not_leak/0, selector/1, exit_message/0, exit_reason/0, anything_selector_tag/0, process_monitor_flag/0, process_monitor/0, process_down/0, call_error/1, timer/0, cancelled/0, kill_flag/0]).
+
+-type pid_() :: any().
+
+-opaque subject(FJD) :: {subject, pid_(), gleam@erlang:reference_()} |
+ {gleam_phantom, FJD}.
+
+-type do_not_leak() :: any().
+
+-type selector(FJE) :: any() | {gleam_phantom, FJE}.
+
+-type exit_message() :: {exit_message, pid_(), exit_reason()}.
+
+-type exit_reason() :: normal | killed | {abnormal, binary()}.
+
+-type anything_selector_tag() :: anything.
+
+-type process_monitor_flag() :: process.
+
+-opaque process_monitor() :: {process_monitor, gleam@erlang:reference_()}.
+
+-type process_down() :: {process_down, pid_(), gleam@dynamic:dynamic_()}.
+
+-type call_error(FJF) :: {callee_down, gleam@dynamic:dynamic_()} |
+ call_timeout |
+ {gleam_phantom, FJF}.
+
+-type timer() :: any().
+
+-type cancelled() :: timer_not_found | {cancelled, integer()}.
+
+-type kill_flag() :: kill.
+
+-spec self() -> pid_().
+self() ->
+ erlang:self().
+
+-spec start(fun(() -> any()), boolean()) -> pid_().
+start(Implementation, Link) ->
+ case Link of
+ true ->
+ erlang:spawn_link(Implementation);
+
+ false ->
+ erlang:spawn(Implementation)
+ end.
+
+-spec new_subject() -> subject(any()).
+new_subject() ->
+ {subject, erlang:self(), erlang:make_ref()}.
+
+-spec subject_owner(subject(any())) -> pid_().
+subject_owner(Subject) ->
+ erlang:element(2, Subject).
+
+-spec send(subject(FJO), FJO) -> nil.
+send(Subject, Message) ->
+ erlang:send(
+ erlang:element(2, Subject),
+ {erlang:element(3, Subject), Message}
+ ),
+ nil.
+
+-spec new_selector() -> selector(any()).
+new_selector() ->
+ gleam_erlang_ffi:new_selector().
+
+-spec select(selector(FJW), integer()) -> {ok, FJW} | {error, nil}.
+select(From, Within) ->
+ gleam_erlang_ffi:select(From, Within).
+
+-spec select_forever(selector(FKA)) -> FKA.
+select_forever(From) ->
+ gleam_erlang_ffi:select(From).
+
+-spec map_selector(selector(FKC), fun((FKC) -> FKE)) -> selector(FKE).
+map_selector(A, B) ->
+ gleam_erlang_ffi:map_selector(A, B).
+
+-spec merge_selector(selector(FKG), selector(FKG)) -> selector(FKG).
+merge_selector(A, B) ->
+ gleam_erlang_ffi:merge_selector(A, B).
+
+-spec flush_messages() -> nil.
+flush_messages() ->
+ gleam_erlang_ffi:flush_messages().
+
+-spec selecting_trapped_exits(selector(FKK), fun((exit_message()) -> FKK)) -> selector(FKK).
+selecting_trapped_exits(Selector, Handler) ->
+ Tag = erlang:binary_to_atom(<<"EXIT"/utf8>>),
+ Handler@1 = fun(Message) ->
+ Reason = erlang:element(3, Message),
+ Normal = gleam@dynamic:from(normal),
+ Killed = gleam@dynamic:from(killed),
+ Reason@2 = case gleam@dynamic:string(Reason) of
+ _ when Reason =:= Normal ->
+ normal;
+
+ _ when Reason =:= Killed ->
+ killed;
+
+ {ok, Reason@1} ->
+ {abnormal, Reason@1};
+
+ {error, _} ->
+ {abnormal, gleam@string:inspect(Reason)}
+ end,
+ Handler({exit_message, erlang:element(2, Message), Reason@2})
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler@1).
+
+-spec selecting(selector(FKN), subject(FKP), fun((FKP) -> FKN)) -> selector(FKN).
+selecting(Selector, Subject, Transform) ->
+ Handler = fun(Message) -> Transform(erlang:element(2, Message)) end,
+ gleam_erlang_ffi:insert_selector_handler(
+ Selector,
+ {erlang:element(3, Subject), 2},
+ Handler
+ ).
+
+-spec 'receive'(subject(FJQ), integer()) -> {ok, FJQ} | {error, nil}.
+'receive'(Subject, Milliseconds) ->
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = selecting(_pipe, Subject, fun(X) -> X end),
+ gleam_erlang_ffi:select(_pipe@1, Milliseconds).
+
+-spec selecting_record2(
+ selector(FKS),
+ any(),
+ fun((gleam@dynamic:dynamic_()) -> FKS)
+) -> selector(FKS).
+selecting_record2(Selector, Tag, Transform) ->
+ Handler = fun(Message) -> Transform(erlang:element(2, Message)) end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 2}, Handler).
+
+-spec selecting_record3(
+ selector(FKW),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FKW)
+) -> selector(FKW).
+selecting_record3(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(erlang:element(2, Message), erlang:element(3, Message))
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 3}, Handler).
+
+-spec selecting_record4(
+ selector(FLA),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLA)
+) -> selector(FLA).
+selecting_record4(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 4}, Handler).
+
+-spec selecting_record5(
+ selector(FLE),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLE)
+) -> selector(FLE).
+selecting_record5(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 5}, Handler).
+
+-spec selecting_record6(
+ selector(FLI),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLI)
+) -> selector(FLI).
+selecting_record6(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message),
+ erlang:element(6, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 6}, Handler).
+
+-spec selecting_record7(
+ selector(FLM),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLM)
+) -> selector(FLM).
+selecting_record7(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message),
+ erlang:element(6, Message),
+ erlang:element(7, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 7}, Handler).
+
+-spec selecting_record8(
+ selector(FLQ),
+ any(),
+ fun((gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_(), gleam@dynamic:dynamic_()) -> FLQ)
+) -> selector(FLQ).
+selecting_record8(Selector, Tag, Transform) ->
+ Handler = fun(Message) ->
+ Transform(
+ erlang:element(2, Message),
+ erlang:element(3, Message),
+ erlang:element(4, Message),
+ erlang:element(5, Message),
+ erlang:element(6, Message),
+ erlang:element(7, Message),
+ erlang:element(8, Message)
+ )
+ end,
+ gleam_erlang_ffi:insert_selector_handler(Selector, {Tag, 8}, Handler).
+
+-spec selecting_anything(selector(FLU), fun((gleam@dynamic:dynamic_()) -> FLU)) -> selector(FLU).
+selecting_anything(Selector, Handler) ->
+ gleam_erlang_ffi:insert_selector_handler(Selector, anything, Handler).
+
+-spec sleep(integer()) -> nil.
+sleep(A) ->
+ gleam_erlang_ffi:sleep(A).
+
+-spec sleep_forever() -> nil.
+sleep_forever() ->
+ gleam_erlang_ffi:sleep_forever().
+
+-spec is_alive(pid_()) -> boolean().
+is_alive(A) ->
+ erlang:is_process_alive(A).
+
+-spec monitor_process(pid_()) -> process_monitor().
+monitor_process(Pid) ->
+ _pipe = process,
+ _pipe@1 = erlang:monitor(_pipe, Pid),
+ {process_monitor, _pipe@1}.
+
+-spec selecting_process_down(
+ selector(FMC),
+ process_monitor(),
+ fun((process_down()) -> FMC)
+) -> selector(FMC).
+selecting_process_down(Selector, Monitor, Mapping) ->
+ gleam_erlang_ffi:insert_selector_handler(
+ Selector,
+ erlang:element(2, Monitor),
+ Mapping
+ ).
+
+-spec demonitor_process(process_monitor()) -> nil.
+demonitor_process(Monitor) ->
+ gleam_erlang_ffi:demonitor(Monitor).
+
+-spec try_call(subject(FMF), fun((subject(FMH)) -> FMF), integer()) -> {ok, FMH} |
+ {error, call_error(FMH)}.
+try_call(Subject, Make_request, Timeout) ->
+ Reply_subject = new_subject(),
+ Monitor = monitor_process(subject_owner(Subject)),
+ send(Subject, Make_request(Reply_subject)),
+ Result = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = selecting(
+ _pipe,
+ Reply_subject,
+ fun(Field@0) -> {ok, Field@0} end
+ ),
+ _pipe@2 = selecting_process_down(
+ _pipe@1,
+ Monitor,
+ fun(Down) -> {error, {callee_down, erlang:element(3, Down)}} end
+ ),
+ gleam_erlang_ffi:select(_pipe@2, Timeout)
+ end,
+ gleam_erlang_ffi:demonitor(Monitor),
+ case Result of
+ {error, nil} ->
+ {error, call_timeout};
+
+ {ok, Res} ->
+ Res
+ end.
+
+-spec call(subject(FMM), fun((subject(FMO)) -> FMM), integer()) -> FMO.
+call(Subject, Make_request, Timeout) ->
+ _assert_subject = try_call(Subject, Make_request, Timeout),
+ {ok, Resp} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/erlang/process"/utf8>>,
+ function => <<"call"/utf8>>,
+ line => 593})
+ end,
+ Resp.
+
+-spec link(pid_()) -> boolean().
+link(Pid) ->
+ gleam_erlang_ffi:link(Pid).
+
+-spec unlink(pid_()) -> nil.
+unlink(Pid) ->
+ erlang:unlink(Pid),
+ nil.
+
+-spec send_after(subject(FMR), integer(), FMR) -> timer().
+send_after(Subject, Delay, Message) ->
+ erlang:send_after(
+ Delay,
+ erlang:element(2, Subject),
+ {erlang:element(3, Subject), Message}
+ ).
+
+-spec cancel_timer(timer()) -> cancelled().
+cancel_timer(Timer) ->
+ case gleam@dynamic:int(erlang:cancel_timer(Timer)) of
+ {ok, I} ->
+ {cancelled, I};
+
+ {error, _} ->
+ timer_not_found
+ end.
+
+-spec kill(pid_()) -> nil.
+kill(Pid) ->
+ erlang:exit(Pid, kill),
+ nil.
+
+-spec send_exit(pid_()) -> nil.
+send_exit(Pid) ->
+ erlang:exit(Pid, normal),
+ nil.
+
+-spec send_abnormal_exit(pid_(), binary()) -> nil.
+send_abnormal_exit(Pid, Reason) ->
+ erlang:exit(Pid, {abnormal, Reason}),
+ nil.
+
+-spec trap_exits(boolean()) -> nil.
+trap_exits(A) ->
+ gleam_erlang_ffi:trap_exits(A).
+
+-spec register(pid_(), gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}.
+register(Pid, Name) ->
+ gleam_erlang_ffi:register_process(Pid, Name).
+
+-spec unregister(gleam@erlang@atom:atom_()) -> {ok, nil} | {error, nil}.
+unregister(Name) ->
+ gleam_erlang_ffi:unregister_process(Name).
+
+-spec named(gleam@erlang@atom:atom_()) -> {ok, pid_()} | {error, nil}.
+named(Name) ->
+ gleam_erlang_ffi:process_named(Name).
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src
new file mode 100644
index 0000000..bb1b8e6
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang.app.src
@@ -0,0 +1,14 @@
+{application, gleam_erlang, [
+ {vsn, "0.23.1"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "A Gleam library for working with Erlang"},
+ {modules, [gleam@erlang,
+ gleam@erlang@atom,
+ gleam@erlang@charlist,
+ gleam@erlang@file,
+ gleam@erlang@node,
+ gleam@erlang@os,
+ gleam@erlang@process]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl
new file mode 100644
index 0000000..872126f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_erlang/src/gleam_erlang_ffi.erl
@@ -0,0 +1,263 @@
+-module(gleam_erlang_ffi).
+-export([
+ atom_from_dynamic/1, rescue/1, atom_from_string/1, get_line/1,
+ ensure_all_started/1, sleep/1, os_family/0, sleep_forever/0, read_file/1,
+ append_file/2, write_file/2, delete_file/1, get_all_env/0, get_env/1,
+ set_env/2, unset_env/1, delete_directory/1, recursive_delete/1,
+ list_directory/1, demonitor/1, make_directory/1, new_selector/0, link/1,
+ insert_selector_handler/3, select/1, select/2, trap_exits/1, map_selector/2,
+ merge_selector/2, flush_messages/0, file_info/1, link_info/1,
+ priv_directory/1, connect_node/1, register_process/2, unregister_process/1,
+ process_named/1, identity/1
+]).
+
+-define(is_posix_error(Error),
+ Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse
+ Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse
+ Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse
+ Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse
+ Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse
+ Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse
+ Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse
+ Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse
+ Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse
+ Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse
+ Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse
+ Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse
+ Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse
+ Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse
+ Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse
+ Error =:= etxtbsy orelse Error =:= exdev
+).
+
+-spec atom_from_string(binary()) -> {ok, atom()} | {error, atom_not_loaded}.
+atom_from_string(S) ->
+ try {ok, binary_to_existing_atom(S)}
+ catch error:badarg -> {error, atom_not_loaded}
+ end.
+
+atom_from_dynamic(Data) when is_atom(Data) ->
+ {ok, Data};
+atom_from_dynamic(Data) ->
+ {error, [{decode_error, <<"Atom">>, gleam@dynamic:classify(Data), []}]}.
+
+-spec get_line(io:prompt()) -> {ok, unicode:unicode_binary()} | {error, eof | no_data}.
+get_line(Prompt) ->
+ case io:get_line(Prompt) of
+ eof -> {error, eof};
+ {error, _} -> {error, no_data};
+ Data when is_binary(Data) -> {ok, Data};
+ Data when is_list(Data) -> {ok, unicode:characters_to_binary(Data)}
+ end.
+
+rescue(F) ->
+ try {ok, F()}
+ catch
+ throw:X -> {error, {thrown, X}};
+ error:X -> {error, {errored, X}};
+ exit:X -> {error, {exited, X}}
+ end.
+
+ensure_all_started(Application) ->
+ case application:ensure_all_started(Application) of
+ {ok, _} = Ok -> Ok;
+
+ {error, {ProblemApp, {"no such file or directory", _}}} ->
+ {error, {unknown_application, ProblemApp}}
+ end.
+
+sleep(Microseconds) ->
+ timer:sleep(Microseconds),
+ nil.
+
+sleep_forever() ->
+ timer:sleep(infinity),
+ nil.
+
+file_info_result(Result) ->
+ case Result of
+ {ok, {file_info, Size, Type, Access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}} when Access =:= none ->
+ {ok, {file_info, Size, Type, no_access, Atime, Mtime, Ctime, Mode, Links, MajorDevice, MinorDevice, Inode, Uid, Gid}};
+ {ok, _} ->
+ Result;
+ {error, Reason} when ?is_posix_error(Reason) ->
+ Result
+ end.
+
+file_info(Filename) ->
+ file_info_result(file:read_file_info(Filename, [{time, posix}])).
+
+link_info(Filename) ->
+ file_info_result(file:read_link_info(Filename, [{time, posix}])).
+
+posix_result(Result) ->
+ case Result of
+ ok -> {ok, nil};
+ {ok, Value} -> {ok, Value};
+ {error, Reason} when ?is_posix_error(Reason) -> {error, Reason}
+ end.
+
+read_file(Filename) ->
+ posix_result(file:read_file(Filename)).
+
+write_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents)).
+
+append_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents, [append])).
+
+delete_file(Filename) ->
+ posix_result(file:delete(Filename)).
+
+make_directory(Dir) ->
+ posix_result(file:make_dir(Dir)).
+
+list_directory(Dir) ->
+ case file:list_dir(Dir) of
+ {ok, Filenames} ->
+ {ok, [list_to_binary(Filename) || Filename <- Filenames]};
+ {error, Reason} when ?is_posix_error(Reason) ->
+ {error, Reason}
+ end.
+
+delete_directory(Dir) ->
+ posix_result(file:del_dir(Dir)).
+
+recursive_delete(Dir) ->
+ posix_result(file:del_dir_r(Dir)).
+
+get_all_env() ->
+ BinVars = lists:map(fun(VarString) ->
+ [VarName, VarVal] = string:split(VarString, "="),
+ {list_to_binary(VarName), list_to_binary(VarVal)}
+ end, os:getenv()),
+ maps:from_list(BinVars).
+
+get_env(Name) ->
+ case os:getenv(binary_to_list(Name)) of
+ false -> {error, nil};
+ Value -> {ok, list_to_binary(Value)}
+ end.
+
+set_env(Name, Value) ->
+ os:putenv(binary_to_list(Name), binary_to_list(Value)),
+ nil.
+
+unset_env(Name) ->
+ os:unsetenv(binary_to_list(Name)),
+ nil.
+
+os_family() ->
+ case os:type() of
+ {win32, nt} ->
+ windows_nt;
+ {unix, linux} ->
+ linux;
+ {unix, darwin} ->
+ darwin;
+ {unix, freebsd} ->
+ free_bsd;
+ {_, Other} ->
+ {other, atom_to_binary(Other, utf8)}
+ end.
+
+new_selector() ->
+ {selector, #{}}.
+
+map_selector({selector, Handlers}, Fn) ->
+ MappedHandlers = maps:map(fun(_Tag, Handler) ->
+ fun(Message) -> Fn(Handler(Message)) end
+ end, Handlers),
+ {selector, MappedHandlers}.
+
+merge_selector({selector, HandlersA}, {selector, HandlersB}) ->
+ {selector, maps:merge(HandlersA, HandlersB)}.
+
+insert_selector_handler({selector, Handlers}, Tag, Fn) ->
+ {selector, Handlers#{Tag => Fn}}.
+
+select(Selector) ->
+ {ok, Message} = select(Selector, infinity),
+ Message.
+
+select({selector, Handlers}, Timeout) ->
+ AnythingHandler = maps:get(anything, Handlers, undefined),
+ receive
+ % Monitored process down messages.
+ % This is special cased so we can selectively receive based on the
+ % reference as well as the record tag.
+ {'DOWN', Ref, process, Pid, Reason} when is_map_key(Ref, Handlers) ->
+ Fn = maps:get(Ref, Handlers),
+ {ok, Fn({process_down, Pid, Reason})};
+
+ Msg when is_map_key({element(1, Msg), tuple_size(Msg)}, Handlers) ->
+ Fn = maps:get({element(1, Msg), tuple_size(Msg)}, Handlers),
+ {ok, Fn(Msg)};
+
+ Msg when AnythingHandler =/= undefined ->
+ {ok, AnythingHandler(Msg)}
+ after Timeout ->
+ {error, nil}
+ end.
+
+demonitor({_, Reference}) ->
+ erlang:demonitor(Reference, [flush]).
+
+link(Pid) ->
+ try
+ erlang:link(Pid)
+ catch
+ error:_ -> false
+ end.
+
+trap_exits(ShouldTrap) ->
+ erlang:process_flag(trap_exit, ShouldTrap),
+ nil.
+
+flush_messages() ->
+ receive _Message -> flush_messages()
+ after 0 -> nil
+ end.
+
+priv_directory(Name) ->
+ try erlang:binary_to_existing_atom(Name) of
+ Atom ->
+ case code:priv_dir(Atom) of
+ {error, _} -> {error, nil};
+ Path -> {ok, unicode:characters_to_binary(Path)}
+ end
+ catch
+ error:badarg -> {error, nil}
+ end.
+
+connect_node(Node) ->
+ case net_kernel:connect_node(Node) of
+ true -> {ok, Node};
+ false -> {error, failed_to_connect};
+ ignored -> {error, local_node_is_not_alive}
+ end.
+
+register_process(Pid, Name) ->
+ try
+ true = erlang:register(Name, Pid),
+ {ok, nil}
+ catch
+ error:badarg -> {error, nil}
+ end.
+
+unregister_process(Name) ->
+ try
+ true = erlang:unregister(Name),
+ {ok, nil}
+ catch
+ error:badarg -> {error, nil}
+ end.
+
+process_named(Name) ->
+ case erlang:whereis(Name) of
+ Pid when is_pid(Pid) -> {ok, Pid};
+ _ -> {error, nil}
+ end.
+
+identity(X) ->
+ X.
diff --git a/aoc2023/build/packages/gleam_http/LICENSE b/aoc2023/build/packages/gleam_http/LICENSE
new file mode 100644
index 0000000..619ec77
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/LICENSE
@@ -0,0 +1,191 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2019, Louis Pilfold <louis@lpil.uk>.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/aoc2023/build/packages/gleam_http/README.md b/aoc2023/build/packages/gleam_http/README.md
new file mode 100644
index 0000000..9e06952
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/README.md
@@ -0,0 +1,67 @@
+# Gleam HTTP
+
+Types and functions for HTTP clients and servers!
+
+## HTTP Service Example
+
+```gleam
+import gleam/http/elli
+import gleam/http/response.{Response}
+import gleam/http/request.{Request}
+import gleam/bit_builder.{BitBuilder}
+
+// Define a HTTP service
+//
+pub fn my_service(request: Request(t)) -> Response(BitBuilder) {
+ let body = bit_builder.from_string("Hello, world!")
+
+ response.new(200)
+ |> response.prepend_header("made-with", "Gleam")
+ |> response.set_body(body)
+}
+
+// Start it on port 3000 using the Elli web server
+//
+pub fn main() {
+ elli.become(my_service, on_port: 3000)
+}
+```
+
+## Server adapters
+
+In the example above the Elli Erlang web server is used to run the Gleam HTTP
+service. Here's a full list of the server adapters available, sorted
+alphabetically.
+
+| Adapter | About |
+| --- | --- |
+| [Mist][mist] | [Mist][mist] is a high performance pure Gleam web server |
+| [gleam_cowboy][cowboy-adapter] | [Cowboy][cowboy] is an Erlang HTTP2 & HTTP1.1 web server |
+| [gleam_elli][elli-adapter] | [Elli][elli] is an Erlang HTTP1.1 web server |
+| [gleam_plug][plug-adapter] | [Plug][plug] is an Elixir web application interface |
+
+[cowboy]:https://github.com/ninenines/cowboy
+[cowboy-adapter]: https://github.com/gleam-lang/cowboy
+[elli]:https://github.com/elli-lib/elli
+[elli-adapter]: https://github.com/gleam-lang/elli
+[plug]:https://github.com/elixir-plug/plug
+[plug-adapter]: https://github.com/gleam-lang/plug
+[mist]: https://github.com/rawhat/mist
+
+## Client adapters
+
+Client adapters are used to send HTTP requests to services over the network.
+Here's a full list of the client adapters available, sorted alphabetically.
+
+| Adapter | About |
+| --- | --- |
+| [gleam_fetch][fetch-adapter] | [fetch][fetch] is a HTTP client included with JavaScript |
+| [gleam_hackney][hackney-adapter] | [Hackney][hackney] is a simple HTTP client for Erlang |
+| [gleam_httpc][httpc-adapter] | [httpc][httpc] is a HTTP client included with Erlang |
+
+[hackney]: https://github.com/benoitc/hackney
+[hackney-adapter]: https://github.com/gleam-lang/hackney
+[httpc]: https://erlang.org/doc/man/httpc.html
+[httpc-adapter]: https://github.com/gleam-lang/httpc
+[fetch]: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
+[fetch-adapter]: https://github.com/gleam-lang/fetch
diff --git a/aoc2023/build/packages/gleam_http/gleam.toml b/aoc2023/build/packages/gleam_http/gleam.toml
new file mode 100644
index 0000000..ba733e8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/gleam.toml
@@ -0,0 +1,17 @@
+name = "gleam_http"
+version = "3.5.2"
+licences = ["Apache-2.0"]
+description = "Types and functions for Gleam HTTP clients and servers"
+gleam = ">= 0.32.0"
+
+repository = { type = "github", user = "gleam-lang", repo = "http" }
+links = [
+ { title = "Website", href = "https://gleam.run" },
+ { title = "Sponsor", href = "https://github.com/sponsors/lpil" },
+]
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl
new file mode 100644
index 0000000..78a7d02
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http@cookie_Attributes.hrl
@@ -0,0 +1,8 @@
+-record(attributes, {
+ max_age :: gleam@option:option(integer()),
+ domain :: gleam@option:option(binary()),
+ path :: gleam@option:option(binary()),
+ secure :: boolean(),
+ http_only :: boolean(),
+ same_site :: gleam@option:option(gleam@http@cookie:same_site_policy())
+}).
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl
new file mode 100644
index 0000000..c8bbae6
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http@request_Request.hrl
@@ -0,0 +1,10 @@
+-record(request, {
+ method :: gleam@http:method(),
+ headers :: list({binary(), binary()}),
+ body :: any(),
+ scheme :: gleam@http:scheme(),
+ host :: binary(),
+ port :: gleam@option:option(integer()),
+ path :: binary(),
+ 'query' :: gleam@option:option(binary())
+}).
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl
new file mode 100644
index 0000000..ba6f077
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http@response_Response.hrl
@@ -0,0 +1,5 @@
+-record(response, {
+ status :: integer(),
+ headers :: list({binary(), binary()}),
+ body :: any()
+}).
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl
new file mode 100644
index 0000000..abd56dd
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForBody.hrl
@@ -0,0 +1,5 @@
+-record(more_required_for_body, {
+ chunk :: bitstring(),
+ continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_body()} |
+ {error, nil})
+}).
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl
new file mode 100644
index 0000000..43729c1
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MoreRequiredForHeaders.hrl
@@ -0,0 +1,4 @@
+-record(more_required_for_headers, {
+ continuation :: fun((bitstring()) -> {ok, gleam@http:multipart_headers()} |
+ {error, nil})
+}).
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl
new file mode 100644
index 0000000..4521591
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartBody.hrl
@@ -0,0 +1,5 @@
+-record(multipart_body, {
+ chunk :: bitstring(),
+ done :: boolean(),
+ remaining :: bitstring()
+}).
diff --git a/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl
new file mode 100644
index 0000000..d9fca5c
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/include/gleam@http_MultipartHeaders.hrl
@@ -0,0 +1,4 @@
+-record(multipart_headers, {
+ headers :: list({binary(), binary()}),
+ remaining :: bitstring()
+}).
diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http.gleam
new file mode 100644
index 0000000..a892006
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam/http.gleam
@@ -0,0 +1,560 @@
+//// Functions for working with HTTP data structures in Gleam.
+////
+//// This module makes it easy to create and modify Requests and Responses, data types.
+//// A general HTTP message type is defined that enables functions to work on both requests and responses.
+////
+//// This module does not implement a HTTP client or HTTP server, but it can be used as a base for them.
+
+import gleam/dynamic.{type DecodeError, type Dynamic, DecodeError}
+import gleam/string
+import gleam/bit_array
+import gleam/result
+import gleam/list
+import gleam/bool
+
+/// HTTP standard method as defined by [RFC 2616](https://tools.ietf.org/html/rfc2616),
+/// and PATCH which is defined by [RFC 5789](https://tools.ietf.org/html/rfc5789).
+pub type Method {
+ Get
+ Post
+ Head
+ Put
+ Delete
+ Trace
+ Connect
+ Options
+ Patch
+
+ /// Non-standard but valid HTTP methods.
+ Other(String)
+}
+
+// TODO: check if the a is a valid HTTP method (i.e. it is a token, as per the
+// spec) and return Ok(Other(s)) if so.
+pub fn parse_method(s) -> Result(Method, Nil) {
+ case string.lowercase(s) {
+ "connect" -> Ok(Connect)
+ "delete" -> Ok(Delete)
+ "get" -> Ok(Get)
+ "head" -> Ok(Head)
+ "options" -> Ok(Options)
+ "patch" -> Ok(Patch)
+ "post" -> Ok(Post)
+ "put" -> Ok(Put)
+ "trace" -> Ok(Trace)
+ _ -> Error(Nil)
+ }
+}
+
+pub fn method_to_string(method: Method) -> String {
+ case method {
+ Connect -> "connect"
+ Delete -> "delete"
+ Get -> "get"
+ Head -> "head"
+ Options -> "options"
+ Patch -> "patch"
+ Post -> "post"
+ Put -> "put"
+ Trace -> "trace"
+ Other(s) -> s
+ }
+}
+
+/// The two URI schemes for HTTP
+///
+pub type Scheme {
+ Http
+ Https
+}
+
+/// Convert a scheme into a string.
+///
+/// # Examples
+///
+/// > scheme_to_string(Http)
+/// "http"
+///
+/// > scheme_to_string(Https)
+/// "https"
+///
+pub fn scheme_to_string(scheme: Scheme) -> String {
+ case scheme {
+ Http -> "http"
+ Https -> "https"
+ }
+}
+
+/// Parse a HTTP scheme from a string
+///
+/// # Examples
+///
+/// > scheme_from_string("http")
+/// Ok(Http)
+///
+/// > scheme_from_string("ftp")
+/// Error(Nil)
+///
+pub fn scheme_from_string(scheme: String) -> Result(Scheme, Nil) {
+ case string.lowercase(scheme) {
+ "http" -> Ok(Http)
+ "https" -> Ok(Https)
+ _ -> Error(Nil)
+ }
+}
+
+pub fn method_from_dynamic(value: Dynamic) -> Result(Method, List(DecodeError)) {
+ case do_method_from_dynamic(value) {
+ Ok(method) -> Ok(method)
+ Error(_) -> Error([DecodeError("HTTP method", dynamic.classify(value), [])])
+ }
+}
+
+pub type MultipartHeaders {
+ /// The headers for the part have been fully parsed.
+ MultipartHeaders(
+ headers: List(Header),
+ /// The remaining content that has not yet been parsed. This will contain
+ /// the body for this part, if any, and can be parsed with the
+ /// `parse_multipart_body` function.
+ remaining: BitArray,
+ )
+ /// More input is required to parse the headers for this part.
+ MoreRequiredForHeaders(
+ /// Call this function to continue parsing the headers for this part.
+ continuation: fn(BitArray) -> Result(MultipartHeaders, Nil),
+ )
+}
+
+pub type MultipartBody {
+ /// The body for the part has been fully parsed.
+ MultipartBody(
+ // The rest of the body for this part. The full body of the part is this
+ // concatenated onto the end of each chunk returned by any previous
+ // `MoreRequiredForBody` returns.
+ chunk: BitArray,
+ /// This is `True` if this was the last part in the multipart message,
+ /// otherwise there are more parts to parse.
+ done: Bool,
+ /// The remaining content that has not yet been parsed. This will contain
+ /// the next part if `done` is `False`, otherwise it will contain the
+ /// epilogue, if any.
+ remaining: BitArray,
+ )
+ MoreRequiredForBody(
+ // The body that has been parsed so far. The full body of the part is this
+ // concatenated with the chunk returned by each `MoreRequiredForBody` return
+ // value, and the final `MultipartBody` return value.
+ chunk: BitArray,
+ /// Call this function to continue parsing the body for this part.
+ continuation: fn(BitArray) -> Result(MultipartBody, Nil),
+ )
+}
+
+/// Parse the headers for part of a multipart message, as defined in RFC 2045.
+///
+/// This function skips any preamble before the boundary. The preamble may be
+/// retrieved using `parse_multipart_body`.
+///
+/// This function will accept input of any size, it is up to the caller to limit
+/// it if needed.
+///
+/// To enable streaming parsing of multipart messages, this function will return
+/// a continuation if there is not enough data to fully parse the headers.
+/// Further information is available in the documentation for `MultipartBody`.
+///
+pub fn parse_multipart_headers(
+ data: BitArray,
+ boundary: String,
+) -> Result(MultipartHeaders, Nil) {
+ let boundary = bit_array.from_string(boundary)
+ // TODO: rewrite this to use a bit pattern once JavaScript supports
+ // the `b:binary-size(bsize)` pattern.
+ let prefix = <<45, 45, boundary:bits>>
+ case bit_array.slice(data, 0, bit_array.byte_size(prefix)) == Ok(prefix) {
+ // There is no preamble, parse the headers.
+ True -> parse_headers_after_prelude(data, boundary)
+ // There is a preamble, skip it before parsing.
+ False -> skip_preamble(data, boundary)
+ }
+}
+
+/// Parse the body for part of a multipart message, as defined in RFC 2045. The
+/// body is everything until the next boundary. This function is generally to be
+/// called after calling `parse_multipart_headers` for a given part.
+///
+/// This function will accept input of any size, it is up to the caller to limit
+/// it if needed.
+///
+/// To enable streaming parsing of multipart messages, this function will return
+/// a continuation if there is not enough data to fully parse the body, along
+/// with the data that has been parsed so far. Further information is available
+/// in the documentation for `MultipartBody`.
+///
+pub fn parse_multipart_body(
+ data: BitArray,
+ boundary: String,
+) -> Result(MultipartBody, Nil) {
+ boundary
+ |> bit_array.from_string
+ |> parse_body_with_bit_array(data, _)
+}
+
+fn parse_body_with_bit_array(
+ data: BitArray,
+ boundary: BitArray,
+) -> Result(MultipartBody, Nil) {
+ let bsize = bit_array.byte_size(boundary)
+ let prefix = bit_array.slice(data, 0, 2 + bsize)
+ case prefix == Ok(<<45, 45, boundary:bits>>) {
+ True -> Ok(MultipartBody(<<>>, done: False, remaining: data))
+ False -> parse_body_loop(data, boundary, <<>>)
+ }
+}
+
+fn parse_body_loop(
+ data: BitArray,
+ boundary: BitArray,
+ body: BitArray,
+) -> Result(MultipartBody, Nil) {
+ let dsize = bit_array.byte_size(data)
+ let bsize = bit_array.byte_size(boundary)
+ let required = 6 + bsize
+ case data {
+ _ if dsize < required -> {
+ more_please_body(parse_body_loop(_, boundary, <<>>), body, data)
+ }
+
+ // TODO: flatten this into a single case expression once JavaScript supports
+ // the `b:binary-size(bsize)` pattern.
+ //
+ // \r\n
+ <<13, 10, data:bytes>> -> {
+ let desired = <<45, 45, boundary:bits>>
+ let size = bit_array.byte_size(desired)
+ let dsize = bit_array.byte_size(data)
+ let prefix = bit_array.slice(data, 0, size)
+ let rest = bit_array.slice(data, size, dsize - size)
+ case prefix == Ok(desired), rest {
+ // --boundary\r\n
+ True, Ok(<<13, 10, _:bytes>>) ->
+ Ok(MultipartBody(body, done: False, remaining: data))
+
+ // --boundary--
+ True, Ok(<<45, 45, data:bytes>>) ->
+ Ok(MultipartBody(body, done: True, remaining: data))
+
+ False, _ -> parse_body_loop(data, boundary, <<body:bits, 13, 10>>)
+ _, _ -> Error(Nil)
+ }
+ }
+
+ <<char, data:bytes>> -> {
+ parse_body_loop(data, boundary, <<body:bits, char>>)
+ }
+ }
+}
+
+fn parse_headers_after_prelude(
+ data: BitArray,
+ boundary: BitArray,
+) -> Result(MultipartHeaders, Nil) {
+ let dsize = bit_array.byte_size(data)
+ let bsize = bit_array.byte_size(boundary)
+ let required_size = bsize + 4
+
+ // TODO: this could be written as a single case expression if JavaScript had
+ // support for the `b:binary-size(bsize)` pattern. Rewrite this once the
+ // compiler support this.
+
+ use <- bool.guard(
+ when: dsize < required_size,
+ return: more_please_headers(parse_headers_after_prelude(_, boundary), data),
+ )
+
+ use prefix <- result.try(bit_array.slice(data, 0, required_size - 2))
+ use second <- result.try(bit_array.slice(data, 2 + bsize, 2))
+ let desired = <<45, 45, boundary:bits>>
+
+ use <- bool.guard(prefix != desired, return: Error(Nil))
+
+ case second == <<45, 45>> {
+ // --boundary--
+ // The last boundary. Return the epilogue.
+ True -> {
+ let rest_size = dsize - required_size
+ use data <- result.map(bit_array.slice(data, required_size, rest_size))
+ MultipartHeaders([], remaining: data)
+ }
+
+ // --boundary
+ False -> {
+ let start = required_size - 2
+ let rest_size = dsize - required_size + 2
+ use data <- result.try(bit_array.slice(data, start, rest_size))
+ do_parse_headers(data)
+ }
+ }
+}
+
+fn skip_preamble(
+ data: BitArray,
+ boundary: BitArray,
+) -> Result(MultipartHeaders, Nil) {
+ let data_size = bit_array.byte_size(data)
+ let boundary_size = bit_array.byte_size(boundary)
+ let required = boundary_size + 4
+ case data {
+ _ if data_size < required ->
+ more_please_headers(skip_preamble(_, boundary), data)
+
+ // TODO: change this to use one non-nested case expression once the compiler
+ // supports the `b:binary-size(bsize)` pattern on JS.
+ // \r\n--
+ <<13, 10, 45, 45, data:bytes>> -> {
+ case bit_array.slice(data, 0, boundary_size) {
+ // --boundary
+ Ok(prefix) if prefix == boundary -> {
+ let start = boundary_size
+ let length = bit_array.byte_size(data) - boundary_size
+ use rest <- result.try(bit_array.slice(data, start, length))
+ do_parse_headers(rest)
+ }
+ Ok(_) -> skip_preamble(data, boundary)
+ Error(_) -> Error(Nil)
+ }
+ }
+
+ <<_, data:bytes>> -> skip_preamble(data, boundary)
+ }
+}
+
+fn skip_whitespace(data: BitArray) -> BitArray {
+ case data {
+ // Space or tab.
+ <<32, data:bytes>> | <<9, data:bytes>> -> skip_whitespace(data)
+ _ -> data
+ }
+}
+
+fn do_parse_headers(data: BitArray) -> Result(MultipartHeaders, Nil) {
+ case data {
+ // \r\n\r\n
+ // We've reached the end, there are no headers.
+ <<13, 10, 13, 10, data:bytes>> -> Ok(MultipartHeaders([], remaining: data))
+
+ // \r\n
+ // Skip the line break after the boundary.
+ <<13, 10, data:bytes>> -> parse_header_name(data, [], <<>>)
+
+ <<13>> | <<>> -> more_please_headers(do_parse_headers, data)
+
+ _ -> Error(Nil)
+ }
+}
+
+fn parse_header_name(
+ data: BitArray,
+ headers: List(Header),
+ name: BitArray,
+) -> Result(MultipartHeaders, Nil) {
+ case skip_whitespace(data) {
+ // :
+ <<58, data:bytes>> ->
+ data
+ |> skip_whitespace
+ |> parse_header_value(headers, name, <<>>)
+
+ <<char, data:bytes>> ->
+ parse_header_name(data, headers, <<name:bits, char>>)
+
+ <<>> -> more_please_headers(parse_header_name(_, headers, name), data)
+ }
+}
+
+fn parse_header_value(
+ data: BitArray,
+ headers: List(Header),
+ name: BitArray,
+ value: BitArray,
+) -> Result(MultipartHeaders, Nil) {
+ let size = bit_array.byte_size(data)
+ case data {
+ // We need at least 4 bytes to check for the end of the headers.
+ _ if size < 4 ->
+ fn(data) {
+ data
+ |> skip_whitespace
+ |> parse_header_value(headers, name, value)
+ }
+ |> more_please_headers(data)
+
+ // \r\n\r\n
+ <<13, 10, 13, 10, data:bytes>> -> {
+ use name <- result.try(bit_array.to_string(name))
+ use value <- result.map(bit_array.to_string(value))
+ let headers = list.reverse([#(string.lowercase(name), value), ..headers])
+ MultipartHeaders(headers, data)
+ }
+
+ // \r\n\s
+ // \r\n\t
+ <<13, 10, 32, data:bytes>> | <<13, 10, 9, data:bytes>> ->
+ parse_header_value(data, headers, name, value)
+
+ // \r\n
+ <<13, 10, data:bytes>> -> {
+ use name <- result.try(bit_array.to_string(name))
+ use value <- result.try(bit_array.to_string(value))
+ let headers = [#(string.lowercase(name), value), ..headers]
+ parse_header_name(data, headers, <<>>)
+ }
+
+ <<char, rest:bytes>> -> {
+ let value = <<value:bits, char>>
+ parse_header_value(rest, headers, name, value)
+ }
+
+ _ -> Error(Nil)
+ }
+}
+
+fn more_please_headers(
+ continuation: fn(BitArray) -> Result(MultipartHeaders, Nil),
+ existing: BitArray,
+) -> Result(MultipartHeaders, Nil) {
+ Ok(MoreRequiredForHeaders(fn(more) {
+ use <- bool.guard(more == <<>>, return: Error(Nil))
+ continuation(<<existing:bits, more:bits>>)
+ }))
+}
+
+pub type ContentDisposition {
+ ContentDisposition(String, parameters: List(#(String, String)))
+}
+
+pub fn parse_content_disposition(
+ header: String,
+) -> Result(ContentDisposition, Nil) {
+ parse_content_disposition_type(header, "")
+}
+
+fn parse_content_disposition_type(
+ header: String,
+ name: String,
+) -> Result(ContentDisposition, Nil) {
+ case string.pop_grapheme(header) {
+ Error(Nil) -> Ok(ContentDisposition(name, []))
+
+ Ok(#(" ", rest)) | Ok(#("\t", rest)) | Ok(#(";", rest)) -> {
+ let result = parse_rfc_2045_parameters(rest, [])
+ use parameters <- result.map(result)
+ ContentDisposition(name, parameters)
+ }
+
+ Ok(#(grapheme, rest)) ->
+ parse_content_disposition_type(rest, name <> string.lowercase(grapheme))
+ }
+}
+
+fn parse_rfc_2045_parameters(
+ header: String,
+ parameters: List(#(String, String)),
+) -> Result(List(#(String, String)), Nil) {
+ case string.pop_grapheme(header) {
+ Error(Nil) -> Ok(list.reverse(parameters))
+
+ Ok(#(";", rest)) | Ok(#(" ", rest)) | Ok(#("\t", rest)) ->
+ parse_rfc_2045_parameters(rest, parameters)
+
+ Ok(#(grapheme, rest)) -> {
+ let acc = string.lowercase(grapheme)
+ use #(parameter, rest) <- result.try(parse_rfc_2045_parameter(rest, acc))
+ parse_rfc_2045_parameters(rest, [parameter, ..parameters])
+ }
+ }
+}
+
+fn parse_rfc_2045_parameter(
+ header: String,
+ name: String,
+) -> Result(#(#(String, String), String), Nil) {
+ use #(grapheme, rest) <- result.try(string.pop_grapheme(header))
+ case grapheme {
+ "=" -> parse_rfc_2045_parameter_value(rest, name)
+ _ -> parse_rfc_2045_parameter(rest, name <> string.lowercase(grapheme))
+ }
+}
+
+fn parse_rfc_2045_parameter_value(
+ header: String,
+ name: String,
+) -> Result(#(#(String, String), String), Nil) {
+ case string.pop_grapheme(header) {
+ Error(Nil) -> Error(Nil)
+ Ok(#("\"", rest)) -> parse_rfc_2045_parameter_quoted_value(rest, name, "")
+ Ok(#(grapheme, rest)) ->
+ Ok(parse_rfc_2045_parameter_unquoted_value(rest, name, grapheme))
+ }
+}
+
+fn parse_rfc_2045_parameter_quoted_value(
+ header: String,
+ name: String,
+ value: String,
+) -> Result(#(#(String, String), String), Nil) {
+ case string.pop_grapheme(header) {
+ Error(Nil) -> Error(Nil)
+ Ok(#("\"", rest)) -> Ok(#(#(name, value), rest))
+ Ok(#("\\", rest)) -> {
+ use #(grapheme, rest) <- result.try(string.pop_grapheme(rest))
+ parse_rfc_2045_parameter_quoted_value(rest, name, value <> grapheme)
+ }
+ Ok(#(grapheme, rest)) ->
+ parse_rfc_2045_parameter_quoted_value(rest, name, value <> grapheme)
+ }
+}
+
+fn parse_rfc_2045_parameter_unquoted_value(
+ header: String,
+ name: String,
+ value: String,
+) -> #(#(String, String), String) {
+ case string.pop_grapheme(header) {
+ Error(Nil) -> #(#(name, value), header)
+
+ Ok(#(";", rest)) | Ok(#(" ", rest)) | Ok(#("\t", rest)) -> #(
+ #(name, value),
+ rest,
+ )
+
+ Ok(#(grapheme, rest)) ->
+ parse_rfc_2045_parameter_unquoted_value(rest, name, value <> grapheme)
+ }
+}
+
+fn more_please_body(
+ continuation: fn(BitArray) -> Result(MultipartBody, Nil),
+ chunk: BitArray,
+ existing: BitArray,
+) -> Result(MultipartBody, Nil) {
+ fn(more) {
+ use <- bool.guard(more == <<>>, return: Error(Nil))
+ continuation(<<existing:bits, more:bits>>)
+ }
+ |> MoreRequiredForBody(chunk, _)
+ |> Ok
+}
+
+@target(erlang)
+@external(erlang, "gleam_http_native", "decode_method")
+fn do_method_from_dynamic(a: Dynamic) -> Result(Method, nil)
+
+@target(javascript)
+@external(javascript, "../gleam_http_native.mjs", "decode_method")
+fn do_method_from_dynamic(a: Dynamic) -> Result(Method, Nil)
+
+/// A HTTP header is a key-value pair. Header keys should be all lowercase
+/// characters.
+pub type Header =
+ #(String, String)
diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam
new file mode 100644
index 0000000..e9ccb55
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam/http/cookie.gleam
@@ -0,0 +1,128 @@
+import gleam/result
+import gleam/int
+import gleam/list
+import gleam/regex
+import gleam/string
+import gleam/option.{type Option, Some}
+import gleam/http.{type Scheme}
+
+/// Policy options for the SameSite cookie attribute
+///
+/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
+pub type SameSitePolicy {
+ Lax
+ Strict
+ None
+}
+
+fn same_site_to_string(policy) {
+ case policy {
+ Lax -> "Lax"
+ Strict -> "Strict"
+ None -> "None"
+ }
+}
+
+/// Attributes of a cookie when sent to a client in the `set-cookie` header.
+pub type Attributes {
+ Attributes(
+ max_age: Option(Int),
+ domain: Option(String),
+ path: Option(String),
+ secure: Bool,
+ http_only: Bool,
+ same_site: Option(SameSitePolicy),
+ )
+}
+
+/// Helper to create sensible default attributes for a set cookie.
+///
+/// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#Attributes
+pub fn defaults(scheme: Scheme) {
+ Attributes(
+ max_age: option.None,
+ domain: option.None,
+ path: option.Some("/"),
+ secure: scheme == http.Https,
+ http_only: True,
+ same_site: Some(Lax),
+ )
+}
+
+const epoch = "Expires=Thu, 01 Jan 1970 00:00:00 GMT"
+
+fn cookie_attributes_to_list(attributes) {
+ let Attributes(
+ max_age: max_age,
+ domain: domain,
+ path: path,
+ secure: secure,
+ http_only: http_only,
+ same_site: same_site,
+ ) = attributes
+ [
+ // Expires is a deprecated attribute for cookies, it has been replaced with MaxAge
+ // MaxAge is widely supported and so Expires values are not set.
+ // Only when deleting cookies is the exception made to use the old format,
+ // to ensure complete clearup of cookies if required by an application.
+ case max_age {
+ option.Some(0) -> option.Some([epoch])
+ _ -> option.None
+ },
+ option.map(max_age, fn(max_age) { ["Max-Age=", int.to_string(max_age)] }),
+ option.map(domain, fn(domain) { ["Domain=", domain] }),
+ option.map(path, fn(path) { ["Path=", path] }),
+ case secure {
+ True -> option.Some(["Secure"])
+ False -> option.None
+ },
+ case http_only {
+ True -> option.Some(["HttpOnly"])
+ False -> option.None
+ },
+ option.map(
+ same_site,
+ fn(same_site) { ["SameSite=", same_site_to_string(same_site)] },
+ ),
+ ]
+ |> list.filter_map(option.to_result(_, Nil))
+}
+
+pub fn set_header(name: String, value: String, attributes: Attributes) -> String {
+ [[name, "=", value], ..cookie_attributes_to_list(attributes)]
+ |> list.map(string.join(_, ""))
+ |> string.join("; ")
+}
+
+/// Parse a list of cookies from a header string. Any malformed cookies will be
+/// discarded.
+///
+pub fn parse(cookie_string: String) -> List(#(String, String)) {
+ let assert Ok(re) = regex.from_string("[,;]")
+ regex.split(re, cookie_string)
+ |> list.filter_map(fn(pair) {
+ case string.split_once(string.trim(pair), "=") {
+ Ok(#("", _)) -> Error(Nil)
+ Ok(#(key, value)) -> {
+ let key = string.trim(key)
+ let value = string.trim(value)
+ use _ <- result.then(check_token(key))
+ use _ <- result.then(check_token(value))
+ Ok(#(key, value))
+ }
+ Error(Nil) -> Error(Nil)
+ }
+ })
+}
+
+fn check_token(token: String) -> Result(Nil, Nil) {
+ case string.pop_grapheme(token) {
+ Error(Nil) -> Ok(Nil)
+ Ok(#(" ", _)) -> Error(Nil)
+ Ok(#("\t", _)) -> Error(Nil)
+ Ok(#("\r", _)) -> Error(Nil)
+ Ok(#("\n", _)) -> Error(Nil)
+ Ok(#("\f", _)) -> Error(Nil)
+ Ok(#(_, rest)) -> check_token(rest)
+ }
+}
diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam
new file mode 100644
index 0000000..0bf9af9
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam/http/request.gleam
@@ -0,0 +1,267 @@
+import gleam/result
+// TODO: validate_req
+import gleam/http.{type Header, type Method, type Scheme, Get}
+import gleam/http/cookie
+import gleam/option.{type Option}
+import gleam/uri.{type Uri, Uri}
+import gleam/list
+import gleam/string
+import gleam/string_builder
+
+// TODO: document
+pub type Request(body) {
+ Request(
+ method: Method,
+ headers: List(Header),
+ body: body,
+ scheme: Scheme,
+ host: String,
+ port: Option(Int),
+ path: String,
+ query: Option(String),
+ )
+}
+
+/// Return the uri that a request was sent to.
+///
+pub fn to_uri(request: Request(a)) -> Uri {
+ Uri(
+ scheme: option.Some(http.scheme_to_string(request.scheme)),
+ userinfo: option.None,
+ host: option.Some(request.host),
+ port: request.port,
+ path: request.path,
+ query: request.query,
+ fragment: option.None,
+ )
+}
+
+/// Construct a request from a URI.
+///
+pub fn from_uri(uri: Uri) -> Result(Request(String), Nil) {
+ use scheme <- result.then(
+ uri.scheme
+ |> option.unwrap("")
+ |> http.scheme_from_string,
+ )
+ use host <- result.then(
+ uri.host
+ |> option.to_result(Nil),
+ )
+ let req =
+ Request(
+ method: Get,
+ headers: [],
+ body: "",
+ scheme: scheme,
+ host: host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ )
+ Ok(req)
+}
+
+/// Get the value for a given header.
+///
+/// If the request does not have that header then `Error(Nil)` is returned.
+///
+pub fn get_header(request: Request(body), key: String) -> Result(String, Nil) {
+ list.key_find(request.headers, string.lowercase(key))
+}
+
+/// Set the header with the given value under the given header key.
+///
+/// If already present, it is replaced.
+pub fn set_header(
+ request: Request(body),
+ key: String,
+ value: String,
+) -> Request(body) {
+ let headers = list.key_set(request.headers, string.lowercase(key), value)
+ Request(..request, headers: headers)
+}
+
+/// Prepend the header with the given value under the given header key.
+///
+/// Similar to `set_header` except if the header already exists it prepends
+/// another header with the same key.
+pub fn prepend_header(
+ request: Request(body),
+ key: String,
+ value: String,
+) -> Request(body) {
+ let headers = [#(string.lowercase(key), value), ..request.headers]
+ Request(..request, headers: headers)
+}
+
+// TODO: record update syntax, which can't be done currently as body type changes
+/// Set the body of the request, overwriting any existing body.
+///
+pub fn set_body(req: Request(old_body), body: new_body) -> Request(new_body) {
+ let Request(
+ method: method,
+ headers: headers,
+ scheme: scheme,
+ host: host,
+ port: port,
+ path: path,
+ query: query,
+ ..,
+ ) = req
+ Request(
+ method: method,
+ headers: headers,
+ body: body,
+ scheme: scheme,
+ host: host,
+ port: port,
+ path: path,
+ query: query,
+ )
+}
+
+/// Update the body of a request using a given function.
+///
+pub fn map(
+ request: Request(old_body),
+ transform: fn(old_body) -> new_body,
+) -> Request(new_body) {
+ request.body
+ |> transform
+ |> set_body(request, _)
+}
+
+/// Return the non-empty segments of a request path.
+///
+/// # Examples
+///
+/// ```gleam
+/// > new()
+/// > |> set_path("/one/two/three")
+/// > |> path_segments
+/// ["one", "two", "three"]
+/// ```
+///
+pub fn path_segments(request: Request(body)) -> List(String) {
+ request.path
+ |> uri.path_segments
+}
+
+/// Decode the query of a request.
+pub fn get_query(request: Request(body)) -> Result(List(#(String, String)), Nil) {
+ case request.query {
+ option.Some(query_string) -> uri.parse_query(query_string)
+ option.None -> Ok([])
+ }
+}
+
+// TODO: escape
+/// Set the query of the request.
+///
+pub fn set_query(
+ req: Request(body),
+ query: List(#(String, String)),
+) -> Request(body) {
+ let pair = fn(t: #(String, String)) {
+ string_builder.from_strings([t.0, "=", t.1])
+ }
+ let query =
+ query
+ |> list.map(pair)
+ |> list.intersperse(string_builder.from_string("&"))
+ |> string_builder.concat
+ |> string_builder.to_string
+ |> option.Some
+ Request(..req, query: query)
+}
+
+/// Set the method of the request.
+///
+pub fn set_method(req: Request(body), method: Method) -> Request(body) {
+ Request(..req, method: method)
+}
+
+/// A request with commonly used default values. This request can be used as
+/// an initial value and then update to create the desired request.
+///
+pub fn new() -> Request(String) {
+ Request(
+ method: Get,
+ headers: [],
+ body: "",
+ scheme: http.Https,
+ host: "localhost",
+ port: option.None,
+ path: "",
+ query: option.None,
+ )
+}
+
+/// Construct a request from a URL string
+///
+pub fn to(url: String) -> Result(Request(String), Nil) {
+ url
+ |> uri.parse
+ |> result.then(from_uri)
+}
+
+/// Set the scheme (protocol) of the request.
+///
+pub fn set_scheme(req: Request(body), scheme: Scheme) -> Request(body) {
+ Request(..req, scheme: scheme)
+}
+
+/// Set the method of the request.
+///
+pub fn set_host(req: Request(body), host: String) -> Request(body) {
+ Request(..req, host: host)
+}
+
+/// Set the port of the request.
+///
+pub fn set_port(req: Request(body), port: Int) -> Request(body) {
+ Request(..req, port: option.Some(port))
+}
+
+/// Set the path of the request.
+///
+pub fn set_path(req: Request(body), path: String) -> Request(body) {
+ Request(..req, path: path)
+}
+
+/// Send a cookie with a request
+///
+/// Multiple cookies are added to the same cookie header.
+pub fn set_cookie(req: Request(body), name: String, value: String) {
+ let new_cookie_string = string.join([name, value], "=")
+
+ let #(cookies_string, headers) = case list.key_pop(req.headers, "cookie") {
+ Ok(#(cookies_string, headers)) -> {
+ let cookies_string =
+ string.join([cookies_string, new_cookie_string], "; ")
+ #(cookies_string, headers)
+ }
+ Error(Nil) -> #(new_cookie_string, req.headers)
+ }
+
+ Request(..req, headers: [#("cookie", cookies_string), ..headers])
+}
+
+/// Fetch the cookies sent in a request.
+///
+/// Note badly formed cookie pairs will be ignored.
+/// RFC6265 specifies that invalid cookie names/attributes should be ignored.
+pub fn get_cookies(req) -> List(#(String, String)) {
+ let Request(headers: headers, ..) = req
+
+ headers
+ |> list.filter_map(fn(header) {
+ let #(name, value) = header
+ case name {
+ "cookie" -> Ok(cookie.parse(value))
+ _ -> Error(Nil)
+ }
+ })
+ |> list.flatten()
+}
diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam
new file mode 100644
index 0000000..87f9140
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam/http/response.gleam
@@ -0,0 +1,141 @@
+import gleam/result
+import gleam/http.{type Header}
+import gleam/http/cookie
+import gleam/list
+import gleam/string
+import gleam/option
+
+// TODO: document
+pub type Response(body) {
+ Response(status: Int, headers: List(Header), body: body)
+}
+
+/// Update the body of a response using a given result returning function.
+///
+/// If the given function returns an `Ok` value the body is set, if it returns
+/// an `Error` value then the error is returned.
+///
+pub fn try_map(
+ response: Response(old_body),
+ transform: fn(old_body) -> Result(new_body, error),
+) -> Result(Response(new_body), error) {
+ use body <- result.then(transform(response.body))
+ Ok(set_body(response, body))
+}
+
+/// Construct an empty Response.
+///
+/// The body type of the returned response is `String` and could be set with a
+/// call to `set_body`.
+///
+pub fn new(status: Int) -> Response(String) {
+ Response(status: status, headers: [], body: "")
+}
+
+/// Get the value for a given header.
+///
+/// If the response does not have that header then `Error(Nil)` is returned.
+///
+pub fn get_header(response: Response(body), key: String) -> Result(String, Nil) {
+ list.key_find(response.headers, string.lowercase(key))
+}
+
+/// Set the header with the given value under the given header key.
+///
+/// If the response already has that key, it is replaced.
+pub fn set_header(
+ response: Response(body),
+ key: String,
+ value: String,
+) -> Response(body) {
+ let headers = list.key_set(response.headers, string.lowercase(key), value)
+ Response(..response, headers: headers)
+}
+
+/// Prepend the header with the given value under the given header key.
+///
+/// Similar to `set_header` except if the header already exists it prepends
+/// another header with the same key.
+pub fn prepend_header(
+ response: Response(body),
+ key: String,
+ value: String,
+) -> Response(body) {
+ let headers = [#(string.lowercase(key), value), ..response.headers]
+ Response(..response, headers: headers)
+}
+
+/// Set the body of the response, overwriting any existing body.
+///
+pub fn set_body(
+ response: Response(old_body),
+ body: new_body,
+) -> Response(new_body) {
+ let Response(status: status, headers: headers, ..) = response
+ Response(status: status, headers: headers, body: body)
+}
+
+/// Update the body of a response using a given function.
+///
+pub fn map(
+ response: Response(old_body),
+ transform: fn(old_body) -> new_body,
+) -> Response(new_body) {
+ response.body
+ |> transform
+ |> set_body(response, _)
+}
+
+/// Create a response that redirects to the given uri.
+///
+pub fn redirect(uri: String) -> Response(String) {
+ Response(
+ status: 303,
+ headers: [#("location", uri)],
+ body: string.append("You are being redirected to ", uri),
+ )
+}
+
+/// Fetch the cookies sent in a response.
+///
+/// Badly formed cookies will be discarded.
+///
+pub fn get_cookies(resp) -> List(#(String, String)) {
+ let Response(headers: headers, ..) = resp
+ headers
+ |> list.filter_map(fn(header) {
+ let #(name, value) = header
+ case name {
+ "set-cookie" -> Ok(cookie.parse(value))
+ _ -> Error(Nil)
+ }
+ })
+ |> list.flatten()
+}
+
+/// Set a cookie value for a client
+///
+pub fn set_cookie(
+ response: Response(t),
+ name: String,
+ value: String,
+ attributes: cookie.Attributes,
+) -> Response(t) {
+ prepend_header(
+ response,
+ "set-cookie",
+ cookie.set_header(name, value, attributes),
+ )
+}
+
+/// Expire a cookie value for a client
+///
+/// Note: The attributes value should be the same as when the response cookie was set.
+pub fn expire_cookie(
+ response: Response(t),
+ name: String,
+ attributes: cookie.Attributes,
+) -> Response(t) {
+ let attrs = cookie.Attributes(..attributes, max_age: option.Some(0))
+ set_cookie(response, name, "", attrs)
+}
diff --git a/aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam b/aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam
new file mode 100644
index 0000000..3dfac87
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam/http/service.gleam
@@ -0,0 +1,82 @@
+import gleam/http.{Delete, Patch, Post, Put}
+import gleam/http/request.{type Request}
+import gleam/http/response.{type Response}
+import gleam/list
+import gleam/result
+
+// TODO: document
+pub type Service(in, out) =
+ fn(Request(in)) -> Response(out)
+
+pub type Middleware(before_req, before_resp, after_req, after_resp) =
+ fn(Service(before_req, before_resp)) -> Service(after_req, after_resp)
+
+/// A middleware that transform the response body returned by the service using
+/// a given function.
+///
+pub fn map_response_body(
+ service: Service(req, a),
+ with mapper: fn(a) -> b,
+) -> Service(req, b) {
+ fn(req) {
+ req
+ |> service
+ |> response.map(mapper)
+ }
+}
+
+/// A middleware that prepends a header to the request.
+///
+pub fn prepend_response_header(
+ service: Service(req, resp),
+ key: String,
+ value: String,
+) -> Service(req, resp) {
+ fn(req) {
+ req
+ |> service
+ |> response.prepend_header(key, value)
+ }
+}
+
+fn ensure_post(req: Request(a)) {
+ case req.method {
+ Post -> Ok(req)
+ _ -> Error(Nil)
+ }
+}
+
+fn get_override_method(request: Request(t)) -> Result(http.Method, Nil) {
+ use query_params <- result.then(request.get_query(request))
+ use method <- result.then(list.key_find(query_params, "_method"))
+ use method <- result.then(http.parse_method(method))
+ case method {
+ Put | Patch | Delete -> Ok(method)
+ _ -> Error(Nil)
+ }
+}
+
+/// A middleware that overrides an incoming POST request with a method given in
+/// the request's `_method` query paramerter. This is useful as web browsers
+/// typically only support GET and POST requests, but our application may
+/// expect other HTTP methods that are more semantically correct.
+///
+/// The methods PUT, PATCH, and DELETE are accepted for overriding, all others
+/// are ignored.
+///
+/// The `_method` query paramerter can be specified in a HTML form like so:
+///
+/// <form method="POST" action="/item/1?_method=DELETE">
+/// <button type="submit">Delete item</button>
+/// </form>
+///
+pub fn method_override(service: Service(req, resp)) -> Service(req, resp) {
+ fn(request) {
+ request
+ |> ensure_post
+ |> result.then(get_override_method)
+ |> result.map(request.set_method(request, _))
+ |> result.unwrap(request)
+ |> service
+ }
+}
diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http.erl b/aoc2023/build/packages/gleam_http/src/gleam@http.erl
new file mode 100644
index 0000000..91ee6e8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam@http.erl
@@ -0,0 +1,626 @@
+-module(gleam@http).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([parse_method/1, method_to_string/1, scheme_to_string/1, scheme_from_string/1, parse_content_disposition/1, parse_multipart_body/2, method_from_dynamic/1, parse_multipart_headers/2]).
+-export_type([method/0, scheme/0, multipart_headers/0, multipart_body/0, content_disposition/0]).
+
+-type method() :: get |
+ post |
+ head |
+ put |
+ delete |
+ trace |
+ connect |
+ options |
+ patch |
+ {other, binary()}.
+
+-type scheme() :: http | https.
+
+-type multipart_headers() :: {multipart_headers,
+ list({binary(), binary()}),
+ bitstring()} |
+ {more_required_for_headers,
+ fun((bitstring()) -> {ok, multipart_headers()} | {error, nil})}.
+
+-type multipart_body() :: {multipart_body, bitstring(), boolean(), bitstring()} |
+ {more_required_for_body,
+ bitstring(),
+ fun((bitstring()) -> {ok, multipart_body()} | {error, nil})}.
+
+-type content_disposition() :: {content_disposition,
+ binary(),
+ list({binary(), binary()})}.
+
+-spec parse_method(binary()) -> {ok, method()} | {error, nil}.
+parse_method(S) ->
+ case gleam@string:lowercase(S) of
+ <<"connect"/utf8>> ->
+ {ok, connect};
+
+ <<"delete"/utf8>> ->
+ {ok, delete};
+
+ <<"get"/utf8>> ->
+ {ok, get};
+
+ <<"head"/utf8>> ->
+ {ok, head};
+
+ <<"options"/utf8>> ->
+ {ok, options};
+
+ <<"patch"/utf8>> ->
+ {ok, patch};
+
+ <<"post"/utf8>> ->
+ {ok, post};
+
+ <<"put"/utf8>> ->
+ {ok, put};
+
+ <<"trace"/utf8>> ->
+ {ok, trace};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec method_to_string(method()) -> binary().
+method_to_string(Method) ->
+ case Method of
+ connect ->
+ <<"connect"/utf8>>;
+
+ delete ->
+ <<"delete"/utf8>>;
+
+ get ->
+ <<"get"/utf8>>;
+
+ head ->
+ <<"head"/utf8>>;
+
+ options ->
+ <<"options"/utf8>>;
+
+ patch ->
+ <<"patch"/utf8>>;
+
+ post ->
+ <<"post"/utf8>>;
+
+ put ->
+ <<"put"/utf8>>;
+
+ trace ->
+ <<"trace"/utf8>>;
+
+ {other, S} ->
+ S
+ end.
+
+-spec scheme_to_string(scheme()) -> binary().
+scheme_to_string(Scheme) ->
+ case Scheme of
+ http ->
+ <<"http"/utf8>>;
+
+ https ->
+ <<"https"/utf8>>
+ end.
+
+-spec scheme_from_string(binary()) -> {ok, scheme()} | {error, nil}.
+scheme_from_string(Scheme) ->
+ case gleam@string:lowercase(Scheme) of
+ <<"http"/utf8>> ->
+ {ok, http};
+
+ <<"https"/utf8>> ->
+ {ok, https};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec skip_whitespace(bitstring()) -> bitstring().
+skip_whitespace(Data) ->
+ case Data of
+ <<32, Data@1/binary>> ->
+ skip_whitespace(Data@1);
+
+ <<9, Data@1/binary>> ->
+ skip_whitespace(Data@1);
+
+ _ ->
+ Data
+ end.
+
+-spec more_please_headers(
+ fun((bitstring()) -> {ok, multipart_headers()} | {error, nil}),
+ bitstring()
+) -> {ok, multipart_headers()} | {error, nil}.
+more_please_headers(Continuation, Existing) ->
+ {ok,
+ {more_required_for_headers,
+ fun(More) ->
+ gleam@bool:guard(
+ More =:= <<>>,
+ {error, nil},
+ fun() ->
+ Continuation(<<Existing/bitstring, More/bitstring>>)
+ end
+ )
+ end}}.
+
+-spec parse_rfc_2045_parameter_quoted_value(binary(), binary(), binary()) -> {ok,
+ {{binary(), binary()}, binary()}} |
+ {error, nil}.
+parse_rfc_2045_parameter_quoted_value(Header, Name, Value) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {error, nil};
+
+ {ok, {<<"\""/utf8>>, Rest}} ->
+ {ok, {{Name, Value}, Rest}};
+
+ {ok, {<<"\\"/utf8>>, Rest@1}} ->
+ gleam@result:'try'(
+ gleam@string:pop_grapheme(Rest@1),
+ fun(_use0) ->
+ {Grapheme, Rest@2} = _use0,
+ parse_rfc_2045_parameter_quoted_value(
+ Rest@2,
+ Name,
+ <<Value/binary, Grapheme/binary>>
+ )
+ end
+ );
+
+ {ok, {Grapheme@1, Rest@3}} ->
+ parse_rfc_2045_parameter_quoted_value(
+ Rest@3,
+ Name,
+ <<Value/binary, Grapheme@1/binary>>
+ )
+ end.
+
+-spec parse_rfc_2045_parameter_unquoted_value(binary(), binary(), binary()) -> {{binary(),
+ binary()},
+ binary()}.
+parse_rfc_2045_parameter_unquoted_value(Header, Name, Value) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {{Name, Value}, Header};
+
+ {ok, {<<";"/utf8>>, Rest}} ->
+ {{Name, Value}, Rest};
+
+ {ok, {<<" "/utf8>>, Rest}} ->
+ {{Name, Value}, Rest};
+
+ {ok, {<<"\t"/utf8>>, Rest}} ->
+ {{Name, Value}, Rest};
+
+ {ok, {Grapheme, Rest@1}} ->
+ parse_rfc_2045_parameter_unquoted_value(
+ Rest@1,
+ Name,
+ <<Value/binary, Grapheme/binary>>
+ )
+ end.
+
+-spec parse_rfc_2045_parameter_value(binary(), binary()) -> {ok,
+ {{binary(), binary()}, binary()}} |
+ {error, nil}.
+parse_rfc_2045_parameter_value(Header, Name) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {error, nil};
+
+ {ok, {<<"\""/utf8>>, Rest}} ->
+ parse_rfc_2045_parameter_quoted_value(Rest, Name, <<""/utf8>>);
+
+ {ok, {Grapheme, Rest@1}} ->
+ {ok,
+ parse_rfc_2045_parameter_unquoted_value(Rest@1, Name, Grapheme)}
+ end.
+
+-spec parse_rfc_2045_parameter(binary(), binary()) -> {ok,
+ {{binary(), binary()}, binary()}} |
+ {error, nil}.
+parse_rfc_2045_parameter(Header, Name) ->
+ gleam@result:'try'(
+ gleam@string:pop_grapheme(Header),
+ fun(_use0) ->
+ {Grapheme, Rest} = _use0,
+ case Grapheme of
+ <<"="/utf8>> ->
+ parse_rfc_2045_parameter_value(Rest, Name);
+
+ _ ->
+ parse_rfc_2045_parameter(
+ Rest,
+ <<Name/binary,
+ (gleam@string:lowercase(Grapheme))/binary>>
+ )
+ end
+ end
+ ).
+
+-spec parse_rfc_2045_parameters(binary(), list({binary(), binary()})) -> {ok,
+ list({binary(), binary()})} |
+ {error, nil}.
+parse_rfc_2045_parameters(Header, Parameters) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {ok, gleam@list:reverse(Parameters)};
+
+ {ok, {<<";"/utf8>>, Rest}} ->
+ parse_rfc_2045_parameters(Rest, Parameters);
+
+ {ok, {<<" "/utf8>>, Rest}} ->
+ parse_rfc_2045_parameters(Rest, Parameters);
+
+ {ok, {<<"\t"/utf8>>, Rest}} ->
+ parse_rfc_2045_parameters(Rest, Parameters);
+
+ {ok, {Grapheme, Rest@1}} ->
+ Acc = gleam@string:lowercase(Grapheme),
+ gleam@result:'try'(
+ parse_rfc_2045_parameter(Rest@1, Acc),
+ fun(_use0) ->
+ {Parameter, Rest@2} = _use0,
+ parse_rfc_2045_parameters(Rest@2, [Parameter | Parameters])
+ end
+ )
+ end.
+
+-spec parse_content_disposition_type(binary(), binary()) -> {ok,
+ content_disposition()} |
+ {error, nil}.
+parse_content_disposition_type(Header, Name) ->
+ case gleam@string:pop_grapheme(Header) of
+ {error, nil} ->
+ {ok, {content_disposition, Name, []}};
+
+ {ok, {<<" "/utf8>>, Rest}} ->
+ Result = parse_rfc_2045_parameters(Rest, []),
+ gleam@result:map(
+ Result,
+ fun(Parameters) -> {content_disposition, Name, Parameters} end
+ );
+
+ {ok, {<<"\t"/utf8>>, Rest}} ->
+ Result = parse_rfc_2045_parameters(Rest, []),
+ gleam@result:map(
+ Result,
+ fun(Parameters) -> {content_disposition, Name, Parameters} end
+ );
+
+ {ok, {<<";"/utf8>>, Rest}} ->
+ Result = parse_rfc_2045_parameters(Rest, []),
+ gleam@result:map(
+ Result,
+ fun(Parameters) -> {content_disposition, Name, Parameters} end
+ );
+
+ {ok, {Grapheme, Rest@1}} ->
+ parse_content_disposition_type(
+ Rest@1,
+ <<Name/binary, (gleam@string:lowercase(Grapheme))/binary>>
+ )
+ end.
+
+-spec parse_content_disposition(binary()) -> {ok, content_disposition()} |
+ {error, nil}.
+parse_content_disposition(Header) ->
+ parse_content_disposition_type(Header, <<""/utf8>>).
+
+-spec more_please_body(
+ fun((bitstring()) -> {ok, multipart_body()} | {error, nil}),
+ bitstring(),
+ bitstring()
+) -> {ok, multipart_body()} | {error, nil}.
+more_please_body(Continuation, Chunk, Existing) ->
+ _pipe = fun(More) ->
+ gleam@bool:guard(
+ More =:= <<>>,
+ {error, nil},
+ fun() -> Continuation(<<Existing/bitstring, More/bitstring>>) end
+ )
+ end,
+ _pipe@1 = {more_required_for_body, Chunk, _pipe},
+ {ok, _pipe@1}.
+
+-spec parse_body_loop(bitstring(), bitstring(), bitstring()) -> {ok,
+ multipart_body()} |
+ {error, nil}.
+parse_body_loop(Data, Boundary, Body) ->
+ Dsize = erlang:byte_size(Data),
+ Bsize = erlang:byte_size(Boundary),
+ Required = 6 + Bsize,
+ case Data of
+ _ when Dsize < Required ->
+ more_please_body(
+ fun(_capture) -> parse_body_loop(_capture, Boundary, <<>>) end,
+ Body,
+ Data
+ );
+
+ <<13, 10, Data@1/binary>> ->
+ Desired = <<45, 45, Boundary/bitstring>>,
+ Size = erlang:byte_size(Desired),
+ Dsize@1 = erlang:byte_size(Data@1),
+ Prefix = gleam_stdlib:bit_array_slice(Data@1, 0, Size),
+ Rest = gleam_stdlib:bit_array_slice(Data@1, Size, Dsize@1 - Size),
+ case {Prefix =:= {ok, Desired}, Rest} of
+ {true, {ok, <<13, 10, _/binary>>}} ->
+ {ok, {multipart_body, Body, false, Data@1}};
+
+ {true, {ok, <<45, 45, Data@2/binary>>}} ->
+ {ok, {multipart_body, Body, true, Data@2}};
+
+ {false, _} ->
+ parse_body_loop(
+ Data@1,
+ Boundary,
+ <<Body/bitstring, 13, 10>>
+ );
+
+ {_, _} ->
+ {error, nil}
+ end;
+
+ <<Char, Data@3/binary>> ->
+ parse_body_loop(Data@3, Boundary, <<Body/bitstring, Char>>)
+ end.
+
+-spec parse_body_with_bit_array(bitstring(), bitstring()) -> {ok,
+ multipart_body()} |
+ {error, nil}.
+parse_body_with_bit_array(Data, Boundary) ->
+ Bsize = erlang:byte_size(Boundary),
+ Prefix = gleam_stdlib:bit_array_slice(Data, 0, 2 + Bsize),
+ case Prefix =:= {ok, <<45, 45, Boundary/bitstring>>} of
+ true ->
+ {ok, {multipart_body, <<>>, false, Data}};
+
+ false ->
+ parse_body_loop(Data, Boundary, <<>>)
+ end.
+
+-spec parse_multipart_body(bitstring(), binary()) -> {ok, multipart_body()} |
+ {error, nil}.
+parse_multipart_body(Data, Boundary) ->
+ _pipe = Boundary,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ parse_body_with_bit_array(Data, _pipe@1).
+
+-spec method_from_dynamic(gleam@dynamic:dynamic_()) -> {ok, method()} |
+ {error, list(gleam@dynamic:decode_error())}.
+method_from_dynamic(Value) ->
+ case gleam_http_native:decode_method(Value) of
+ {ok, Method} ->
+ {ok, Method};
+
+ {error, _} ->
+ {error,
+ [{decode_error,
+ <<"HTTP method"/utf8>>,
+ gleam@dynamic:classify(Value),
+ []}]}
+ end.
+
+-spec parse_header_value(
+ bitstring(),
+ list({binary(), binary()}),
+ bitstring(),
+ bitstring()
+) -> {ok, multipart_headers()} | {error, nil}.
+parse_header_value(Data, Headers, Name, Value) ->
+ Size = erlang:byte_size(Data),
+ case Data of
+ _ when Size < 4 ->
+ _pipe@2 = fun(Data@1) -> _pipe = Data@1,
+ _pipe@1 = skip_whitespace(_pipe),
+ parse_header_value(_pipe@1, Headers, Name, Value) end,
+ more_please_headers(_pipe@2, Data);
+
+ <<13, 10, 13, 10, Data@2/binary>> ->
+ gleam@result:'try'(
+ gleam@bit_array:to_string(Name),
+ fun(Name@1) ->
+ gleam@result:map(
+ gleam@bit_array:to_string(Value),
+ fun(Value@1) ->
+ Headers@1 = gleam@list:reverse(
+ [{gleam@string:lowercase(Name@1), Value@1} |
+ Headers]
+ ),
+ {multipart_headers, Headers@1, Data@2}
+ end
+ )
+ end
+ );
+
+ <<13, 10, 32, Data@3/binary>> ->
+ parse_header_value(Data@3, Headers, Name, Value);
+
+ <<13, 10, 9, Data@3/binary>> ->
+ parse_header_value(Data@3, Headers, Name, Value);
+
+ <<13, 10, Data@4/binary>> ->
+ gleam@result:'try'(
+ gleam@bit_array:to_string(Name),
+ fun(Name@2) ->
+ gleam@result:'try'(
+ gleam@bit_array:to_string(Value),
+ fun(Value@2) ->
+ Headers@2 = [{gleam@string:lowercase(Name@2),
+ Value@2} |
+ Headers],
+ parse_header_name(Data@4, Headers@2, <<>>)
+ end
+ )
+ end
+ );
+
+ <<Char, Rest/binary>> ->
+ Value@3 = <<Value/bitstring, Char>>,
+ parse_header_value(Rest, Headers, Name, Value@3);
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec parse_header_name(bitstring(), list({binary(), binary()}), bitstring()) -> {ok,
+ multipart_headers()} |
+ {error, nil}.
+parse_header_name(Data, Headers, Name) ->
+ case skip_whitespace(Data) of
+ <<58, Data@1/binary>> ->
+ _pipe = Data@1,
+ _pipe@1 = skip_whitespace(_pipe),
+ parse_header_value(_pipe@1, Headers, Name, <<>>);
+
+ <<Char, Data@2/binary>> ->
+ parse_header_name(Data@2, Headers, <<Name/bitstring, Char>>);
+
+ <<>> ->
+ more_please_headers(
+ fun(_capture) -> parse_header_name(_capture, Headers, Name) end,
+ Data
+ )
+ end.
+
+-spec do_parse_headers(bitstring()) -> {ok, multipart_headers()} | {error, nil}.
+do_parse_headers(Data) ->
+ case Data of
+ <<13, 10, 13, 10, Data@1/binary>> ->
+ {ok, {multipart_headers, [], Data@1}};
+
+ <<13, 10, Data@2/binary>> ->
+ parse_header_name(Data@2, [], <<>>);
+
+ <<13>> ->
+ more_please_headers(fun do_parse_headers/1, Data);
+
+ <<>> ->
+ more_please_headers(fun do_parse_headers/1, Data);
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec parse_headers_after_prelude(bitstring(), bitstring()) -> {ok,
+ multipart_headers()} |
+ {error, nil}.
+parse_headers_after_prelude(Data, Boundary) ->
+ Dsize = erlang:byte_size(Data),
+ Bsize = erlang:byte_size(Boundary),
+ Required_size = Bsize + 4,
+ gleam@bool:guard(
+ Dsize < Required_size,
+ more_please_headers(
+ fun(_capture) -> parse_headers_after_prelude(_capture, Boundary) end,
+ Data
+ ),
+ fun() ->
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(Data, 0, Required_size - 2),
+ fun(Prefix) ->
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(Data, 2 + Bsize, 2),
+ fun(Second) ->
+ Desired = <<45, 45, Boundary/bitstring>>,
+ gleam@bool:guard(
+ Prefix /= Desired,
+ {error, nil},
+ fun() -> case Second =:= <<45, 45>> of
+ true ->
+ Rest_size = Dsize - Required_size,
+ gleam@result:map(
+ gleam_stdlib:bit_array_slice(
+ Data,
+ Required_size,
+ Rest_size
+ ),
+ fun(Data@1) ->
+ {multipart_headers,
+ [],
+ Data@1}
+ end
+ );
+
+ false ->
+ Start = Required_size - 2,
+ Rest_size@1 = (Dsize - Required_size)
+ + 2,
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(
+ Data,
+ Start,
+ Rest_size@1
+ ),
+ fun(Data@2) ->
+ do_parse_headers(Data@2)
+ end
+ )
+ end end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec skip_preamble(bitstring(), bitstring()) -> {ok, multipart_headers()} |
+ {error, nil}.
+skip_preamble(Data, Boundary) ->
+ Data_size = erlang:byte_size(Data),
+ Boundary_size = erlang:byte_size(Boundary),
+ Required = Boundary_size + 4,
+ case Data of
+ _ when Data_size < Required ->
+ more_please_headers(
+ fun(_capture) -> skip_preamble(_capture, Boundary) end,
+ Data
+ );
+
+ <<13, 10, 45, 45, Data@1/binary>> ->
+ case gleam_stdlib:bit_array_slice(Data@1, 0, Boundary_size) of
+ {ok, Prefix} when Prefix =:= Boundary ->
+ Start = Boundary_size,
+ Length = erlang:byte_size(Data@1) - Boundary_size,
+ gleam@result:'try'(
+ gleam_stdlib:bit_array_slice(Data@1, Start, Length),
+ fun(Rest) -> do_parse_headers(Rest) end
+ );
+
+ {ok, _} ->
+ skip_preamble(Data@1, Boundary);
+
+ {error, _} ->
+ {error, nil}
+ end;
+
+ <<_, Data@2/binary>> ->
+ skip_preamble(Data@2, Boundary)
+ end.
+
+-spec parse_multipart_headers(bitstring(), binary()) -> {ok,
+ multipart_headers()} |
+ {error, nil}.
+parse_multipart_headers(Data, Boundary) ->
+ Boundary@1 = gleam_stdlib:identity(Boundary),
+ Prefix = <<45, 45, Boundary@1/bitstring>>,
+ case gleam_stdlib:bit_array_slice(Data, 0, erlang:byte_size(Prefix)) =:= {ok,
+ Prefix} of
+ true ->
+ parse_headers_after_prelude(Data, Boundary@1);
+
+ false ->
+ skip_preamble(Data, Boundary@1)
+ end.
diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl
new file mode 100644
index 0000000..9d6d13e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam@http@cookie.erl
@@ -0,0 +1,153 @@
+-module(gleam@http@cookie).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([defaults/1, set_header/3, parse/1]).
+-export_type([same_site_policy/0, attributes/0]).
+
+-type same_site_policy() :: lax | strict | none.
+
+-type attributes() :: {attributes,
+ gleam@option:option(integer()),
+ gleam@option:option(binary()),
+ gleam@option:option(binary()),
+ boolean(),
+ boolean(),
+ gleam@option:option(same_site_policy())}.
+
+-spec same_site_to_string(same_site_policy()) -> binary().
+same_site_to_string(Policy) ->
+ case Policy of
+ lax ->
+ <<"Lax"/utf8>>;
+
+ strict ->
+ <<"Strict"/utf8>>;
+
+ none ->
+ <<"None"/utf8>>
+ end.
+
+-spec defaults(gleam@http:scheme()) -> attributes().
+defaults(Scheme) ->
+ {attributes,
+ none,
+ none,
+ {some, <<"/"/utf8>>},
+ Scheme =:= https,
+ true,
+ {some, lax}}.
+
+-spec cookie_attributes_to_list(attributes()) -> list(list(binary())).
+cookie_attributes_to_list(Attributes) ->
+ {attributes, Max_age, Domain, Path, Secure, Http_only, Same_site} = Attributes,
+ _pipe = [case Max_age of
+ {some, 0} ->
+ {some, [<<"Expires=Thu, 01 Jan 1970 00:00:00 GMT"/utf8>>]};
+
+ _ ->
+ none
+ end, gleam@option:map(
+ Max_age,
+ fun(Max_age@1) ->
+ [<<"Max-Age="/utf8>>, gleam@int:to_string(Max_age@1)]
+ end
+ ), gleam@option:map(
+ Domain,
+ fun(Domain@1) -> [<<"Domain="/utf8>>, Domain@1] end
+ ), gleam@option:map(Path, fun(Path@1) -> [<<"Path="/utf8>>, Path@1] end), case Secure of
+ true ->
+ {some, [<<"Secure"/utf8>>]};
+
+ false ->
+ none
+ end, case Http_only of
+ true ->
+ {some, [<<"HttpOnly"/utf8>>]};
+
+ false ->
+ none
+ end, gleam@option:map(
+ Same_site,
+ fun(Same_site@1) ->
+ [<<"SameSite="/utf8>>, same_site_to_string(Same_site@1)]
+ end
+ )],
+ gleam@list:filter_map(
+ _pipe,
+ fun(_capture) -> gleam@option:to_result(_capture, nil) end
+ ).
+
+-spec set_header(binary(), binary(), attributes()) -> binary().
+set_header(Name, Value, Attributes) ->
+ _pipe = [[Name, <<"="/utf8>>, Value] |
+ cookie_attributes_to_list(Attributes)],
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(_capture) -> gleam@string:join(_capture, <<""/utf8>>) end
+ ),
+ gleam@string:join(_pipe@1, <<"; "/utf8>>).
+
+-spec check_token(binary()) -> {ok, nil} | {error, nil}.
+check_token(Token) ->
+ case gleam@string:pop_grapheme(Token) of
+ {error, nil} ->
+ {ok, nil};
+
+ {ok, {<<" "/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\t"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\r"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\n"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {<<"\f"/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {_, Rest}} ->
+ check_token(Rest)
+ end.
+
+-spec parse(binary()) -> list({binary(), binary()}).
+parse(Cookie_string) ->
+ _assert_subject = gleam@regex:from_string(<<"[,;]"/utf8>>),
+ {ok, Re} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/http/cookie"/utf8>>,
+ function => <<"parse"/utf8>>,
+ line => 101})
+ end,
+ _pipe = gleam@regex:split(Re, Cookie_string),
+ gleam@list:filter_map(
+ _pipe,
+ fun(Pair) ->
+ case gleam@string:split_once(gleam@string:trim(Pair), <<"="/utf8>>) of
+ {ok, {<<""/utf8>>, _}} ->
+ {error, nil};
+
+ {ok, {Key, Value}} ->
+ Key@1 = gleam@string:trim(Key),
+ Value@1 = gleam@string:trim(Value),
+ gleam@result:then(
+ check_token(Key@1),
+ fun(_) ->
+ gleam@result:then(
+ check_token(Value@1),
+ fun(_) -> {ok, {Key@1, Value@1}} end
+ )
+ end
+ );
+
+ {error, nil} ->
+ {error, nil}
+ end
+ end
+ ).
diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@request.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@request.erl
new file mode 100644
index 0000000..630788d
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam@http@request.erl
@@ -0,0 +1,202 @@
+-module(gleam@http@request).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([to_uri/1, from_uri/1, get_header/2, set_header/3, prepend_header/3, set_body/2, map/2, path_segments/1, get_query/1, set_query/2, set_method/2, new/0, to/1, set_scheme/2, set_host/2, set_port/2, set_path/2, set_cookie/3, get_cookies/1]).
+-export_type([request/1]).
+
+-type request(FYJ) :: {request,
+ gleam@http:method(),
+ list({binary(), binary()}),
+ FYJ,
+ gleam@http:scheme(),
+ binary(),
+ gleam@option:option(integer()),
+ binary(),
+ gleam@option:option(binary())}.
+
+-spec to_uri(request(any())) -> gleam@uri:uri().
+to_uri(Request) ->
+ {uri,
+ {some, gleam@http:scheme_to_string(erlang:element(5, Request))},
+ none,
+ {some, erlang:element(6, Request)},
+ erlang:element(7, Request),
+ erlang:element(8, Request),
+ erlang:element(9, Request),
+ none}.
+
+-spec from_uri(gleam@uri:uri()) -> {ok, request(binary())} | {error, nil}.
+from_uri(Uri) ->
+ gleam@result:then(
+ begin
+ _pipe = erlang:element(2, Uri),
+ _pipe@1 = gleam@option:unwrap(_pipe, <<""/utf8>>),
+ gleam@http:scheme_from_string(_pipe@1)
+ end,
+ fun(Scheme) ->
+ gleam@result:then(
+ begin
+ _pipe@2 = erlang:element(4, Uri),
+ gleam@option:to_result(_pipe@2, nil)
+ end,
+ fun(Host) ->
+ Req = {request,
+ get,
+ [],
+ <<""/utf8>>,
+ Scheme,
+ Host,
+ erlang:element(5, Uri),
+ erlang:element(6, Uri),
+ erlang:element(7, Uri)},
+ {ok, Req}
+ end
+ )
+ end
+ ).
+
+-spec get_header(request(any()), binary()) -> {ok, binary()} | {error, nil}.
+get_header(Request, Key) ->
+ gleam@list:key_find(erlang:element(3, Request), gleam@string:lowercase(Key)).
+
+-spec set_header(request(FYT), binary(), binary()) -> request(FYT).
+set_header(Request, Key, Value) ->
+ Headers = gleam@list:key_set(
+ erlang:element(3, Request),
+ gleam@string:lowercase(Key),
+ Value
+ ),
+ erlang:setelement(3, Request, Headers).
+
+-spec prepend_header(request(FYW), binary(), binary()) -> request(FYW).
+prepend_header(Request, Key, Value) ->
+ Headers = [{gleam@string:lowercase(Key), Value} |
+ erlang:element(3, Request)],
+ erlang:setelement(3, Request, Headers).
+
+-spec set_body(request(any()), FZB) -> request(FZB).
+set_body(Req, Body) ->
+ {request, Method, Headers, _, Scheme, Host, Port, Path, Query} = Req,
+ {request, Method, Headers, Body, Scheme, Host, Port, Path, Query}.
+
+-spec map(request(FZD), fun((FZD) -> FZF)) -> request(FZF).
+map(Request, Transform) ->
+ _pipe = erlang:element(4, Request),
+ _pipe@1 = Transform(_pipe),
+ set_body(Request, _pipe@1).
+
+-spec path_segments(request(any())) -> list(binary()).
+path_segments(Request) ->
+ _pipe = erlang:element(8, Request),
+ gleam@uri:path_segments(_pipe).
+
+-spec get_query(request(any())) -> {ok, list({binary(), binary()})} |
+ {error, nil}.
+get_query(Request) ->
+ case erlang:element(9, Request) of
+ {some, Query_string} ->
+ gleam@uri:parse_query(Query_string);
+
+ none ->
+ {ok, []}
+ end.
+
+-spec set_query(request(FZP), list({binary(), binary()})) -> request(FZP).
+set_query(Req, Query) ->
+ Pair = fun(T) ->
+ gleam@string_builder:from_strings(
+ [erlang:element(1, T), <<"="/utf8>>, erlang:element(2, T)]
+ )
+ end,
+ Query@1 = begin
+ _pipe = Query,
+ _pipe@1 = gleam@list:map(_pipe, Pair),
+ _pipe@2 = gleam@list:intersperse(
+ _pipe@1,
+ gleam@string_builder:from_string(<<"&"/utf8>>)
+ ),
+ _pipe@3 = gleam@string_builder:concat(_pipe@2),
+ _pipe@4 = gleam@string_builder:to_string(_pipe@3),
+ {some, _pipe@4}
+ end,
+ erlang:setelement(9, Req, Query@1).
+
+-spec set_method(request(FZT), gleam@http:method()) -> request(FZT).
+set_method(Req, Method) ->
+ erlang:setelement(2, Req, Method).
+
+-spec new() -> request(binary()).
+new() ->
+ {request,
+ get,
+ [],
+ <<""/utf8>>,
+ https,
+ <<"localhost"/utf8>>,
+ none,
+ <<""/utf8>>,
+ none}.
+
+-spec to(binary()) -> {ok, request(binary())} | {error, nil}.
+to(Url) ->
+ _pipe = Url,
+ _pipe@1 = gleam@uri:parse(_pipe),
+ gleam@result:then(_pipe@1, fun from_uri/1).
+
+-spec set_scheme(request(GAA), gleam@http:scheme()) -> request(GAA).
+set_scheme(Req, Scheme) ->
+ erlang:setelement(5, Req, Scheme).
+
+-spec set_host(request(GAD), binary()) -> request(GAD).
+set_host(Req, Host) ->
+ erlang:setelement(6, Req, Host).
+
+-spec set_port(request(GAG), integer()) -> request(GAG).
+set_port(Req, Port) ->
+ erlang:setelement(7, Req, {some, Port}).
+
+-spec set_path(request(GAJ), binary()) -> request(GAJ).
+set_path(Req, Path) ->
+ erlang:setelement(8, Req, Path).
+
+-spec set_cookie(request(GAM), binary(), binary()) -> request(GAM).
+set_cookie(Req, Name, Value) ->
+ New_cookie_string = gleam@string:join([Name, Value], <<"="/utf8>>),
+ {Cookies_string@2, Headers@1} = case gleam@list:key_pop(
+ erlang:element(3, Req),
+ <<"cookie"/utf8>>
+ ) of
+ {ok, {Cookies_string, Headers}} ->
+ Cookies_string@1 = gleam@string:join(
+ [Cookies_string, New_cookie_string],
+ <<"; "/utf8>>
+ ),
+ {Cookies_string@1, Headers};
+
+ {error, nil} ->
+ {New_cookie_string, erlang:element(3, Req)}
+ end,
+ erlang:setelement(
+ 3,
+ Req,
+ [{<<"cookie"/utf8>>, Cookies_string@2} | Headers@1]
+ ).
+
+-spec get_cookies(request(any())) -> list({binary(), binary()}).
+get_cookies(Req) ->
+ {request, _, Headers, _, _, _, _, _, _} = Req,
+ _pipe = Headers,
+ _pipe@1 = gleam@list:filter_map(
+ _pipe,
+ fun(Header) ->
+ {Name, Value} = Header,
+ case Name of
+ <<"cookie"/utf8>> ->
+ {ok, gleam@http@cookie:parse(Value)};
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ),
+ gleam@list:flatten(_pipe@1).
diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@response.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@response.erl
new file mode 100644
index 0000000..b073c1d
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam@http@response.erl
@@ -0,0 +1,97 @@
+-module(gleam@http@response).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/1, get_header/2, set_header/3, prepend_header/3, set_body/2, try_map/2, map/2, redirect/1, get_cookies/1, set_cookie/4, expire_cookie/3]).
+-export_type([response/1]).
+
+-type response(GFN) :: {response, integer(), list({binary(), binary()}), GFN}.
+
+-spec new(integer()) -> response(binary()).
+new(Status) ->
+ {response, Status, [], <<""/utf8>>}.
+
+-spec get_header(response(any()), binary()) -> {ok, binary()} | {error, nil}.
+get_header(Response, Key) ->
+ gleam@list:key_find(
+ erlang:element(3, Response),
+ gleam@string:lowercase(Key)
+ ).
+
+-spec set_header(response(GGC), binary(), binary()) -> response(GGC).
+set_header(Response, Key, Value) ->
+ Headers = gleam@list:key_set(
+ erlang:element(3, Response),
+ gleam@string:lowercase(Key),
+ Value
+ ),
+ erlang:setelement(3, Response, Headers).
+
+-spec prepend_header(response(GGF), binary(), binary()) -> response(GGF).
+prepend_header(Response, Key, Value) ->
+ Headers = [{gleam@string:lowercase(Key), Value} |
+ erlang:element(3, Response)],
+ erlang:setelement(3, Response, Headers).
+
+-spec set_body(response(any()), GGK) -> response(GGK).
+set_body(Response, Body) ->
+ {response, Status, Headers, _} = Response,
+ {response, Status, Headers, Body}.
+
+-spec try_map(response(GFO), fun((GFO) -> {ok, GFQ} | {error, GFR})) -> {ok,
+ response(GFQ)} |
+ {error, GFR}.
+try_map(Response, Transform) ->
+ gleam@result:then(
+ Transform(erlang:element(4, Response)),
+ fun(Body) -> {ok, set_body(Response, Body)} end
+ ).
+
+-spec map(response(GGM), fun((GGM) -> GGO)) -> response(GGO).
+map(Response, Transform) ->
+ _pipe = erlang:element(4, Response),
+ _pipe@1 = Transform(_pipe),
+ set_body(Response, _pipe@1).
+
+-spec redirect(binary()) -> response(binary()).
+redirect(Uri) ->
+ {response,
+ 303,
+ [{<<"location"/utf8>>, Uri}],
+ gleam@string:append(<<"You are being redirected to "/utf8>>, Uri)}.
+
+-spec get_cookies(response(any())) -> list({binary(), binary()}).
+get_cookies(Resp) ->
+ {response, _, Headers, _} = Resp,
+ _pipe = Headers,
+ _pipe@1 = gleam@list:filter_map(
+ _pipe,
+ fun(Header) ->
+ {Name, Value} = Header,
+ case Name of
+ <<"set-cookie"/utf8>> ->
+ {ok, gleam@http@cookie:parse(Value)};
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ),
+ gleam@list:flatten(_pipe@1).
+
+-spec set_cookie(
+ response(GGT),
+ binary(),
+ binary(),
+ gleam@http@cookie:attributes()
+) -> response(GGT).
+set_cookie(Response, Name, Value, Attributes) ->
+ prepend_header(
+ Response,
+ <<"set-cookie"/utf8>>,
+ gleam@http@cookie:set_header(Name, Value, Attributes)
+ ).
+
+-spec expire_cookie(response(GGW), binary(), gleam@http@cookie:attributes()) -> response(GGW).
+expire_cookie(Response, Name, Attributes) ->
+ Attrs = erlang:setelement(2, Attributes, {some, 0}),
+ set_cookie(Response, Name, <<""/utf8>>, Attrs).
diff --git a/aoc2023/build/packages/gleam_http/src/gleam@http@service.erl b/aoc2023/build/packages/gleam_http/src/gleam@http@service.erl
new file mode 100644
index 0000000..d07b31f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam@http@service.erl
@@ -0,0 +1,82 @@
+-module(gleam@http@service).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([map_response_body/2, prepend_response_header/3, method_override/1]).
+
+-spec map_response_body(
+ fun((gleam@http@request:request(GJL)) -> gleam@http@response:response(GJM)),
+ fun((GJM) -> GJP)
+) -> fun((gleam@http@request:request(GJL)) -> gleam@http@response:response(GJP)).
+map_response_body(Service, Mapper) ->
+ fun(Req) -> _pipe = Req,
+ _pipe@1 = Service(_pipe),
+ gleam@http@response:map(_pipe@1, Mapper) end.
+
+-spec prepend_response_header(
+ fun((gleam@http@request:request(GJS)) -> gleam@http@response:response(GJT)),
+ binary(),
+ binary()
+) -> fun((gleam@http@request:request(GJS)) -> gleam@http@response:response(GJT)).
+prepend_response_header(Service, Key, Value) ->
+ fun(Req) -> _pipe = Req,
+ _pipe@1 = Service(_pipe),
+ gleam@http@response:prepend_header(_pipe@1, Key, Value) end.
+
+-spec ensure_post(gleam@http@request:request(GJY)) -> {ok,
+ gleam@http@request:request(GJY)} |
+ {error, nil}.
+ensure_post(Req) ->
+ case erlang:element(2, Req) of
+ post ->
+ {ok, Req};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec get_override_method(gleam@http@request:request(any())) -> {ok,
+ gleam@http:method()} |
+ {error, nil}.
+get_override_method(Request) ->
+ gleam@result:then(
+ gleam@http@request:get_query(Request),
+ fun(Query_params) ->
+ gleam@result:then(
+ gleam@list:key_find(Query_params, <<"_method"/utf8>>),
+ fun(Method) ->
+ gleam@result:then(
+ gleam@http:parse_method(Method),
+ fun(Method@1) -> case Method@1 of
+ put ->
+ {ok, Method@1};
+
+ patch ->
+ {ok, Method@1};
+
+ delete ->
+ {ok, Method@1};
+
+ _ ->
+ {error, nil}
+ end end
+ )
+ end
+ )
+ end
+ ).
+
+-spec method_override(
+ fun((gleam@http@request:request(GKF)) -> gleam@http@response:response(GKG))
+) -> fun((gleam@http@request:request(GKF)) -> gleam@http@response:response(GKG)).
+method_override(Service) ->
+ fun(Request) -> _pipe = Request,
+ _pipe@1 = ensure_post(_pipe),
+ _pipe@2 = gleam@result:then(_pipe@1, fun get_override_method/1),
+ _pipe@3 = gleam@result:map(
+ _pipe@2,
+ fun(_capture) ->
+ gleam@http@request:set_method(Request, _capture)
+ end
+ ),
+ _pipe@4 = gleam@result:unwrap(_pipe@3, Request),
+ Service(_pipe@4) end.
diff --git a/aoc2023/build/packages/gleam_http/src/gleam_http.app.src b/aoc2023/build/packages/gleam_http/src/gleam_http.app.src
new file mode 100644
index 0000000..c37ad54
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam_http.app.src
@@ -0,0 +1,12 @@
+{application, gleam_http, [
+ {vsn, "3.5.2"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "Types and functions for Gleam HTTP clients and servers"},
+ {modules, [gleam@http,
+ gleam@http@cookie,
+ gleam@http@request,
+ gleam@http@response,
+ gleam@http@service]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_http/src/gleam_http_native.erl b/aoc2023/build/packages/gleam_http/src/gleam_http_native.erl
new file mode 100644
index 0000000..bb499bb
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam_http_native.erl
@@ -0,0 +1,88 @@
+-module(gleam_http_native).
+-export([decode_method/1]).
+
+decode_method(Term) ->
+ case Term of
+ "connect" -> {ok, connect};
+ "delete" -> {ok, delete};
+ "get" -> {ok, get};
+ "head" -> {ok, head};
+ "options" -> {ok, options};
+ "patch" -> {ok, patch};
+ "post" -> {ok, post};
+ "put" -> {ok, put};
+ "trace" -> {ok, trace};
+ "CONNECT" -> {ok, connect};
+ "DELETE" -> {ok, delete};
+ "GET" -> {ok, get};
+ "HEAD" -> {ok, head};
+ "OPTIONS" -> {ok, options};
+ "PATCH" -> {ok, patch};
+ "POST" -> {ok, post};
+ "PUT" -> {ok, put};
+ "TRACE" -> {ok, trace};
+ "Connect" -> {ok, connect};
+ "Delete" -> {ok, delete};
+ "Get" -> {ok, get};
+ "Head" -> {ok, head};
+ "Options" -> {ok, options};
+ "Patch" -> {ok, patch};
+ "Post" -> {ok, post};
+ "Put" -> {ok, put};
+ "Trace" -> {ok, trace};
+ 'connect' -> {ok, connect};
+ 'delete' -> {ok, delete};
+ 'get' -> {ok, get};
+ 'head' -> {ok, head};
+ 'options' -> {ok, options};
+ 'patch' -> {ok, patch};
+ 'post' -> {ok, post};
+ 'put' -> {ok, put};
+ 'trace' -> {ok, trace};
+ 'CONNECT' -> {ok, connect};
+ 'DELETE' -> {ok, delete};
+ 'GET' -> {ok, get};
+ 'HEAD' -> {ok, head};
+ 'OPTIONS' -> {ok, options};
+ 'PATCH' -> {ok, patch};
+ 'POST' -> {ok, post};
+ 'PUT' -> {ok, put};
+ 'TRACE' -> {ok, trace};
+ 'Connect' -> {ok, connect};
+ 'Delete' -> {ok, delete};
+ 'Get' -> {ok, get};
+ 'Head' -> {ok, head};
+ 'Options' -> {ok, options};
+ 'Patch' -> {ok, patch};
+ 'Post' -> {ok, post};
+ 'Put' -> {ok, put};
+ 'Trace' -> {ok, trace};
+ <<"connect">> -> {ok, connect};
+ <<"delete">> -> {ok, delete};
+ <<"get">> -> {ok, get};
+ <<"head">> -> {ok, head};
+ <<"options">> -> {ok, options};
+ <<"patch">> -> {ok, patch};
+ <<"post">> -> {ok, post};
+ <<"put">> -> {ok, put};
+ <<"trace">> -> {ok, trace};
+ <<"CONNECT">> -> {ok, connect};
+ <<"DELETE">> -> {ok, delete};
+ <<"GET">> -> {ok, get};
+ <<"HEAD">> -> {ok, head};
+ <<"OPTIONS">> -> {ok, options};
+ <<"PATCH">> -> {ok, patch};
+ <<"POST">> -> {ok, post};
+ <<"PUT">> -> {ok, put};
+ <<"TRACE">> -> {ok, trace};
+ <<"Connect">> -> {ok, connect};
+ <<"Delete">> -> {ok, delete};
+ <<"Get">> -> {ok, get};
+ <<"Head">> -> {ok, head};
+ <<"Options">> -> {ok, options};
+ <<"Patch">> -> {ok, patch};
+ <<"Post">> -> {ok, post};
+ <<"Put">> -> {ok, put};
+ <<"Trace">> -> {ok, trace};
+ _ -> {error, nil}
+ end.
diff --git a/aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs b/aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs
new file mode 100644
index 0000000..c871a8b
--- /dev/null
+++ b/aoc2023/build/packages/gleam_http/src/gleam_http_native.mjs
@@ -0,0 +1,38 @@
+import { Ok, Error } from "./gleam.mjs";
+import {
+ Get,
+ Post,
+ Head,
+ Put,
+ Delete,
+ Trace,
+ Connect,
+ Options,
+ Patch,
+} from "./gleam/http.mjs";
+
+export function decode_method(value) {
+ try {
+ switch (value.toLowerCase()) {
+ case "get":
+ return new Ok(new Get());
+ case "post":
+ return new Ok(new Post());
+ case "head":
+ return new Ok(new Head());
+ case "put":
+ return new Ok(new Put());
+ case "delete":
+ return new Ok(new Delete());
+ case "trace":
+ return new Ok(new Trace());
+ case "connect":
+ return new Ok(new Connect());
+ case "options":
+ return new Ok(new Options());
+ case "patch":
+ return new Ok(new Patch());
+ }
+ } catch {}
+ return new Error(undefined);
+}
diff --git a/aoc2023/build/packages/gleam_httpc/LICENSE b/aoc2023/build/packages/gleam_httpc/LICENSE
new file mode 100644
index 0000000..59e1345
--- /dev/null
+++ b/aoc2023/build/packages/gleam_httpc/LICENSE
@@ -0,0 +1,191 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright {{copyright_year}}, {{author_name}} <{{author_email}}>.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/aoc2023/build/packages/gleam_httpc/README.md b/aoc2023/build/packages/gleam_httpc/README.md
new file mode 100644
index 0000000..c2363c5
--- /dev/null
+++ b/aoc2023/build/packages/gleam_httpc/README.md
@@ -0,0 +1,52 @@
+# httpc
+<a href="https://github.com/gleam-lang/httpc/releases"><img src="https://img.shields.io/github/release/gleam-lang/httpc" alt="GitHub release"></a>
+<a href="https://discord.gg/Fm8Pwmy"><img src="https://img.shields.io/discord/768594524158427167?color=blue" alt="Discord chat"></a>
+![CI](https://github.com/gleam-lang/httpc/workflows/test/badge.svg?branch=main)
+
+Bindings to Erlang's built in HTTP client, `httpc`.
+
+```gleam
+import gleam/httpc
+import gleam/http.{Get}
+import gleam/http/request
+import gleam/http/response
+import gleeunit/should
+
+pub fn main() {
+ // Prepare a HTTP request record
+ let request = request.new()
+ |> request.set_method(Get)
+ |> request.set_host("test-api.service.hmrc.gov.uk")
+ |> request.set_path("/hello/world")
+ |> request.prepend_header("accept", "application/vnd.hmrc.1.0+json")
+
+ // Send the HTTP request to the server
+ try resp = httpc.send(req)
+
+ // We get a response record back
+ resp.status
+ |> should.equal(200)
+
+ resp
+ |> response.get_header("content-type")
+ |> should.equal(Ok("application/json"))
+
+ resp.body
+ |> should.equal("{\"message\":\"Hello World\"}")
+
+ Ok(resp)
+}
+```
+
+## Installation
+
+```shell
+gleam add gleam_httpc
+```
+
+## Use with Erlang/OTP versions older than 26.0
+
+Older versions of HTTPC do not verify TLS connections by default, so with them
+your connection may not be secure when using this library. Consider upgrading to
+a newer version of Erlang/OTP, or using a different HTTP client such as
+[hackney](https://github.com/gleam-lang/hackney).
diff --git a/aoc2023/build/packages/gleam_httpc/gleam.toml b/aoc2023/build/packages/gleam_httpc/gleam.toml
new file mode 100644
index 0000000..d623a94
--- /dev/null
+++ b/aoc2023/build/packages/gleam_httpc/gleam.toml
@@ -0,0 +1,23 @@
+name = "gleam_httpc"
+version = "2.1.1"
+gleam = ">= 0.32.0"
+
+licences = ["Apache-2.0"]
+description = "Gleam bindings to Erlang's built in HTTP client, httpc"
+
+repository = { type = "github", user = "gleam-lang", repo = "httpc" }
+links = [
+ { title = "Website", href = "https://gleam.run" },
+ { title = "Sponsor", href = "https://github.com/sponsors/lpil" },
+]
+
+[erlang]
+extra_applications = ["inets", "ssl"]
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+gleam_http = "~> 3.0"
+
+[dev-dependencies]
+gleeunit = "~> 0.6"
+gleam_erlang = "~> 0.9"
diff --git a/aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam b/aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam
new file mode 100644
index 0000000..cf166c3
--- /dev/null
+++ b/aoc2023/build/packages/gleam_httpc/src/gleam/httpc.gleam
@@ -0,0 +1,105 @@
+import gleam/dynamic.{type Dynamic}
+import gleam/http.{type Method}
+import gleam/http/response.{type Response, Response}
+import gleam/http/request.{type Request}
+import gleam/bit_array
+import gleam/result
+import gleam/list
+import gleam/uri
+
+type Charlist
+
+@external(erlang, "erlang", "binary_to_list")
+fn binary_to_list(a: String) -> Charlist
+
+@external(erlang, "erlang", "list_to_binary")
+fn list_to_binary(a: Charlist) -> String
+
+type ErlHttpOption
+
+type BodyFormat {
+ Binary
+}
+
+type ErlOption {
+ BodyFormat(BodyFormat)
+}
+
+@external(erlang, "httpc", "request")
+fn erl_request(
+ a: Method,
+ b: #(Charlist, List(#(Charlist, Charlist)), Charlist, BitArray),
+ c: List(ErlHttpOption),
+ d: List(ErlOption),
+) -> Result(
+ #(#(Charlist, Int, Charlist), List(#(Charlist, Charlist)), BitArray),
+ Dynamic,
+)
+
+@external(erlang, "httpc", "request")
+fn erl_request_no_body(
+ a: Method,
+ b: #(Charlist, List(#(Charlist, Charlist))),
+ c: List(ErlHttpOption),
+ d: List(ErlOption),
+) -> Result(
+ #(#(Charlist, Int, Charlist), List(#(Charlist, Charlist)), BitArray),
+ Dynamic,
+)
+
+fn charlist_header(header: #(String, String)) -> #(Charlist, Charlist) {
+ let #(k, v) = header
+ #(binary_to_list(k), binary_to_list(v))
+}
+
+fn string_header(header: #(Charlist, Charlist)) -> #(String, String) {
+ let #(k, v) = header
+ #(list_to_binary(k), list_to_binary(v))
+}
+
+// TODO: test
+// TODO: refine error type
+pub fn send_bits(req: Request(BitArray)) -> Result(Response(BitArray), Dynamic) {
+ let erl_url =
+ req
+ |> request.to_uri
+ |> uri.to_string
+ |> binary_to_list
+ let erl_headers = list.map(req.headers, charlist_header)
+ let erl_http_options = []
+ let erl_options = [BodyFormat(Binary)]
+
+ use response <- result.then(case req.method {
+ http.Options | http.Head | http.Get -> {
+ let erl_req = #(erl_url, erl_headers)
+ erl_request_no_body(req.method, erl_req, erl_http_options, erl_options)
+ }
+ _ -> {
+ let erl_content_type =
+ req
+ |> request.get_header("content-type")
+ |> result.unwrap("application/octet-stream")
+ |> binary_to_list
+ let erl_req = #(erl_url, erl_headers, erl_content_type, req.body)
+ erl_request(req.method, erl_req, erl_http_options, erl_options)
+ }
+ })
+
+ let #(#(_version, status, _status), headers, resp_body) = response
+ Ok(Response(status, list.map(headers, string_header), resp_body))
+}
+
+// TODO: test
+// TODO: refine error type
+pub fn send(req: Request(String)) -> Result(Response(String), Dynamic) {
+ use resp <- result.then(
+ req
+ |> request.map(bit_array.from_string)
+ |> send_bits,
+ )
+
+ case bit_array.to_string(resp.body) {
+ Ok(body) -> Ok(response.set_body(resp, body))
+ Error(_) -> Error(dynamic.from("Response body was not valid UTF-8"))
+ }
+}
diff --git a/aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl b/aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl
new file mode 100644
index 0000000..1d634df
--- /dev/null
+++ b/aoc2023/build/packages/gleam_httpc/src/gleam@httpc.erl
@@ -0,0 +1,118 @@
+-module(gleam@httpc).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([send_bits/1, send/1]).
+-export_type([charlist/0, erl_http_option/0, body_format/0, erl_option/0]).
+
+-type charlist() :: any().
+
+-type erl_http_option() :: any().
+
+-type body_format() :: binary.
+
+-type erl_option() :: {body_format, body_format()}.
+
+-spec charlist_header({binary(), binary()}) -> {charlist(), charlist()}.
+charlist_header(Header) ->
+ {K, V} = Header,
+ {erlang:binary_to_list(K), erlang:binary_to_list(V)}.
+
+-spec string_header({charlist(), charlist()}) -> {binary(), binary()}.
+string_header(Header) ->
+ {K, V} = Header,
+ {erlang:list_to_binary(K), erlang:list_to_binary(V)}.
+
+-spec send_bits(gleam@http@request:request(bitstring())) -> {ok,
+ gleam@http@response:response(bitstring())} |
+ {error, gleam@dynamic:dynamic_()}.
+send_bits(Req) ->
+ Erl_url = begin
+ _pipe = Req,
+ _pipe@1 = gleam@http@request:to_uri(_pipe),
+ _pipe@2 = gleam@uri:to_string(_pipe@1),
+ erlang:binary_to_list(_pipe@2)
+ end,
+ Erl_headers = gleam@list:map(erlang:element(3, Req), fun charlist_header/1),
+ Erl_http_options = [],
+ Erl_options = [{body_format, binary}],
+ gleam@result:then(case erlang:element(2, Req) of
+ options ->
+ Erl_req = {Erl_url, Erl_headers},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req,
+ Erl_http_options,
+ Erl_options
+ );
+
+ head ->
+ Erl_req = {Erl_url, Erl_headers},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req,
+ Erl_http_options,
+ Erl_options
+ );
+
+ get ->
+ Erl_req = {Erl_url, Erl_headers},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req,
+ Erl_http_options,
+ Erl_options
+ );
+
+ _ ->
+ Erl_content_type = begin
+ _pipe@3 = Req,
+ _pipe@4 = gleam@http@request:get_header(
+ _pipe@3,
+ <<"content-type"/utf8>>
+ ),
+ _pipe@5 = gleam@result:unwrap(
+ _pipe@4,
+ <<"application/octet-stream"/utf8>>
+ ),
+ erlang:binary_to_list(_pipe@5)
+ end,
+ Erl_req@1 = {Erl_url,
+ Erl_headers,
+ Erl_content_type,
+ erlang:element(4, Req)},
+ httpc:request(
+ erlang:element(2, Req),
+ Erl_req@1,
+ Erl_http_options,
+ Erl_options
+ )
+ end, fun(Response) ->
+ {{_, Status, _}, Headers, Resp_body} = Response,
+ {ok,
+ {response,
+ Status,
+ gleam@list:map(Headers, fun string_header/1),
+ Resp_body}}
+ end).
+
+-spec send(gleam@http@request:request(binary())) -> {ok,
+ gleam@http@response:response(binary())} |
+ {error, gleam@dynamic:dynamic_()}.
+send(Req) ->
+ gleam@result:then(
+ begin
+ _pipe = Req,
+ _pipe@1 = gleam@http@request:map(_pipe, fun gleam_stdlib:identity/1),
+ send_bits(_pipe@1)
+ end,
+ fun(Resp) -> case gleam@bit_array:to_string(erlang:element(4, Resp)) of
+ {ok, Body} ->
+ {ok, gleam@http@response:set_body(Resp, Body)};
+
+ {error, _} ->
+ {error,
+ gleam@dynamic:from(
+ <<"Response body was not valid UTF-8"/utf8>>
+ )}
+ end end
+ ).
diff --git a/aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src b/aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src
new file mode 100644
index 0000000..c0d2b20
--- /dev/null
+++ b/aoc2023/build/packages/gleam_httpc/src/gleam_httpc.app.src
@@ -0,0 +1,12 @@
+{application, gleam_httpc, [
+ {vsn, "2.1.1"},
+ {applications, [gleam_erlang,
+ gleam_http,
+ gleam_stdlib,
+ gleeunit,
+ inets,
+ ssl]},
+ {description, "Gleam bindings to Erlang's built in HTTP client, httpc"},
+ {modules, [gleam@httpc]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_otp/LICENCE b/aoc2023/build/packages/gleam_otp/LICENCE
new file mode 100644
index 0000000..619ec77
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/LICENCE
@@ -0,0 +1,191 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2019, Louis Pilfold <louis@lpil.uk>.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/aoc2023/build/packages/gleam_otp/README.md b/aoc2023/build/packages/gleam_otp/README.md
new file mode 100644
index 0000000..3c313a1
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/README.md
@@ -0,0 +1,91 @@
+# Gleam OTP
+
+<a href="https://github.com/gleam-lang/otp/releases"><img src="https://img.shields.io/github/release/gleam-lang/otp" alt="GitHub release"></a>
+<a href="https://discord.gg/Fm8Pwmy"><img src="https://img.shields.io/discord/768594524158427167?color=blue" alt="Discord chat"></a>
+![CI](https://github.com/gleam-lang/otp/workflows/test/badge.svg?branch=main)
+
+A Gleam library for building fault tolerant multi-core programs using the
+actor model. It is compatible with Erlang's OTP framework.
+
+This library is experimental and will likely have many breaking changes in the
+future!
+
+Gleam’s actor system is built with a few primary goals:
+
+- Full type safety of actors and messages.
+- Be compatible with Erlang’s OTP actor framework.
+- Provide fault tolerance and self-healing through supervisors.
+- Have equivalent performance to Erlang’s OTP.
+
+This library documents its abstractions and functionality, but you may also wish
+to read the documentation or other material on Erlang’s OTP framework to get a
+fuller understanding of OTP, the problems it solves, and and the motivations for
+its design.
+
+## Usage
+
+Add this library to your Gleam project.
+
+```shell
+gleam add gleam_otp
+```
+
+## Actor hierarchy
+
+This library provides several different types of actor that can be used in
+Gleam programs.
+
+### Process
+
+The process is the lowest level building block of OTP, all other actors are
+built on top of processes either directly or indirectly. Typically this
+abstraction would be not be used very often in Gleam applications, favour
+other actor types that provide more functionality.
+
+Gleam's process module is defined in the `gleam_erlang` library.
+
+[[Documentation]](https://hexdocs.pm/gleam_erlang/gleam/erlang/process.html)
+
+### Actor
+
+The `actor` is the most commonly used process type in Gleam and serves as a good
+building block for other abstractions. Like Erlang's `gen_server` it handles
+OTP's system messages automatically to enable OTP's debugging and tracing
+functionality.
+
+[[Documentation]](https://hexdocs.pm/gleam_otp/gleam/otp/actor.html)
+
+### Task
+
+A task is a kind of process that performs a single task and then shuts down.
+Commonly tasks are used to convert sequential code into concurrent code by
+performing computation in another process.
+
+[[Documentation]](https://hexdocs.pm/gleam_otp/gleam/otp/task.html)
+
+### Supervisor
+
+Supervisors is a process that starts and then supervises a group of processes,
+restarting them if they crash. Supervisors can start other supervisors,
+resulting in a hierarchical process structure called a supervision tree,
+providing fault tolerance to a Gleam application.
+
+[[Documentation]](https://hexdocs.pm/gleam_otp/gleam/otp/supervisor.html)
+
+## Limitations and known issues
+
+This library is experimental there are some limitations that not yet been resolved.
+
+- There is no support for named processes. They are untyped global mutable
+ variables which may be uninitialized, more research is needed to find a
+ suitable type safe alternative.
+- There are relatively few actor abstractions provided by this library. More
+ will be added in the future.
+- Actors do not yet support all OTP system messages. Unsupported messages are
+ dropped.
+- Supervisors do not yet support different shutdown periods per child. In
+ practice this means that children that are supervisors do not get an
+ unlimited amount of time to shut down, as is expected in Erlang or Elixir.
+- This library has not seen much testing compared to the Erlang OTP
+ libraries, both in terms of unit tests and real world testing in
+ applications.
diff --git a/aoc2023/build/packages/gleam_otp/gleam.toml b/aoc2023/build/packages/gleam_otp/gleam.toml
new file mode 100644
index 0000000..26e451b
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/gleam.toml
@@ -0,0 +1,19 @@
+name = "gleam_otp"
+version = "0.8.0"
+licences = ["Apache-2.0"]
+description = "Fault tolerant multicore Gleam programs with OTP"
+
+gleam = ">= 0.32.0"
+
+repository = { type = "github", user = "gleam-lang", repo = "otp" }
+links = [
+ { title = "Website", href = "https://gleam.run" },
+ { title = "Sponsor", href = "https://github.com/sponsors/lpil" },
+]
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+gleam_erlang = "~> 0.22"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl
new file mode 100644
index 0000000..85677d1
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Continue.hrl
@@ -0,0 +1,4 @@
+-record(continue, {
+ state :: any(),
+ selector :: gleam@option:option(gleam@erlang@process:selector(any()))
+}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl
new file mode 100644
index 0000000..75faa95
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Ready.hrl
@@ -0,0 +1 @@
+-record(ready, {state :: any(), selector :: gleam@erlang@process:selector(any())}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl
new file mode 100644
index 0000000..5287439
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@actor_Spec.hrl
@@ -0,0 +1,5 @@
+-record(spec, {
+ init :: fun(() -> gleam@otp@actor:init_result(any(), any())),
+ init_timeout :: integer(),
+ loop :: fun((any(), any()) -> gleam@otp@actor:next(any(), any()))
+}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl
new file mode 100644
index 0000000..3ed0b01
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@intensity_tracker_IntensityTracker.hrl
@@ -0,0 +1,5 @@
+-record(intensity_tracker, {
+ limit :: integer(),
+ period :: integer(),
+ events :: list(integer())
+}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl
new file mode 100644
index 0000000..7afd07f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_ChildSpec.hrl
@@ -0,0 +1,5 @@
+-record(child_spec, {
+ start :: fun((any()) -> {ok, gleam@erlang@process:subject(any())} |
+ {error, gleam@otp@actor:start_error()}),
+ returning :: fun((any(), gleam@erlang@process:subject(any())) -> any())
+}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl
new file mode 100644
index 0000000..b10bd9f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@supervisor_Spec.hrl
@@ -0,0 +1,6 @@
+-record(spec, {
+ argument :: any(),
+ max_frequency :: integer(),
+ frequency_period :: integer(),
+ init :: fun((gleam@otp@supervisor:children(any())) -> gleam@otp@supervisor:children(any()))
+}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl
new file mode 100644
index 0000000..99ab4cb
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@system_StatusInfo.hrl
@@ -0,0 +1,7 @@
+-record(status_info, {
+ module :: gleam@erlang@atom:atom_(),
+ parent :: gleam@erlang@process:pid_(),
+ mode :: gleam@otp@system:mode(),
+ debug_state :: gleam@otp@system:debug_state(),
+ state :: gleam@dynamic:dynamic_()
+}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl
new file mode 100644
index 0000000..7c83874
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Exit.hrl
@@ -0,0 +1 @@
+-record(exit, {reason :: gleam@dynamic:dynamic_()}).
diff --git a/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl
new file mode 100644
index 0000000..959bea8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/include/gleam@otp@task_Task.hrl
@@ -0,0 +1,6 @@
+-record(task, {
+ owner :: gleam@erlang@process:pid_(),
+ pid :: gleam@erlang@process:pid_(),
+ monitor :: gleam@erlang@process:process_monitor(),
+ selector :: gleam@erlang@process:selector(gleam@otp@task:message(any()))
+}).
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam
new file mode 100644
index 0000000..9f6a6c4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/actor.gleam
@@ -0,0 +1,504 @@
+//// This module provides the _Actor_ abstraction, one of the most common
+//// building blocks of Gleam OTP programs.
+////
+//// An Actor is a process like any other BEAM process and can be be used to hold
+//// state, execute code, and communicate with other processes by sending and
+//// receiving messages. The advantage of using the actor abstraction over a bare
+//// process is that it provides a single interface for commonly needed
+//// functionality, including support for the [tracing and debugging
+//// features in OTP](erlang-sys).
+////
+//// Gleam's Actor is similar to Erlang's `gen_server` and Elixir's `GenServer`
+//// but differs in that it offers a fully typed interface. This different API is
+//// why Gleam uses the name Actor rather than some variation of generic-server.
+////
+//// [erlang-sys]: https://www.erlang.org/doc/man/sys.html
+////
+//// ## Example
+////
+//// An Actor can be used to create a client-server interaction between an Actor
+//// (the server) and other processes (the clients). In this example we have an
+//// Actor that works as a stack, allowing clients to push and pop elements.
+////
+//// ```gleam
+//// pub fn main() {
+//// // Start the actor with initial state of an empty list, and the
+//// // `handle_message` callback function (defined below).
+//// // We assert that it starts successfully.
+//// //
+//// // In real-world Gleam OTP programs we would likely write a wrapper functions
+//// // called `start`, `push` `pop`, `shutdown` to start and interact with the
+//// // Actor. We are not doing that here for the sake of showing how the Actor
+//// // API works.
+//// let assert Ok(actor) = actor.start([], handle_message)
+////
+//// // We can send a message to the actor to push elements onto the stack.
+//// process.send(actor, Push("Joe"))
+//// process.send(actor, Push("Mike"))
+//// process.send(actor, Push("Robert"))
+////
+//// // The `Push` message expects no response, these messages are sent purely for
+//// // the side effect of mutating the state held by the actor.
+//// //
+//// // We can also send the `Pop` message to take a value off of the actor's
+//// // stack. This message expects a response, so we use `process.call` to send a
+//// // message and wait until a reply is received.
+//// //
+//// // In this instance we are giving the actor 10 milliseconds to reply, if the
+//// // `call` function doesn't get a reply within this time it will panic and
+//// // crash the client process.
+//// let assert Ok("Robert") = process.call(actor, Pop, 10)
+//// let assert Ok("Mike") = process.call(actor, Pop, 10)
+//// let assert Ok("Joe") = process.call(actor, Pop, 10)
+////
+//// // The stack is now empty, so if we pop again the actor replies with an error.
+//// let assert Error(Nil) = process.call(actor, Pop, 10)
+////
+//// // Lastly, we can send a message to the actor asking it to shut down.
+//// process.send(actor, Shutdown)
+//// }
+//// ```
+////
+//// Here is the code that is used to implement this actor:
+////
+//// ```gleam
+//// // First step of implementing the stack Actor is to define the message type that
+//// // it can receive.
+//// //
+//// // The type of the elements in the stack is no fixed so a type parameter is used
+//// // for it instead of a concrete type such as `String` or `Int`.
+//// pub type Message(element) {
+//// // The `Shutdown` message is used to tell the actor to stop.
+//// // It is the simplest message type, it contains no data.
+//// Shutdown
+////
+//// // The `Push` message is used to add a new element to the stack.
+//// // It contains the item to add, the type of which is the `element`
+//// // parameterised type.
+//// Push(push: element)
+////
+//// // The `Pop` message is used to remove an element from the stack.
+//// // It contains a `Subject`, which is used to send the response back to the
+//// // message sender. In this case the reply is of type `Result(element, Nil)`.
+//// Pop(reply_with: Subject(Result(element, Nil)))
+//// }
+////
+//// // The last part is to implement the `handle_message` callback function.
+//// //
+//// // This function is called by the Actor each for each message it receives.
+//// // Actor is single threaded only does one thing at a time, so it handles
+//// // messages sequentially and one at a time, in the order they are received.
+//// //
+//// // The function takes the message and the current state, and returns a data
+//// // structure that indicates what to do next, along with the new state.
+//// fn handle_message(
+//// message: Message(e),
+//// stack: List(e),
+//// ) -> actor.Next(Message(e), List(e)) {
+//// case message {
+//// // For the `Shutdown` message we return the `actor.Stop` value, which causes
+//// // the actor to discard any remaining messages and stop.
+//// Shutdown -> actor.Stop(process.Normal)
+////
+//// // For the `Push` message we add the new element to the stack and return
+//// // `actor.continue` with this new stack, causing the actor to process any
+//// // queued messages or wait for more.
+//// Push(value) -> {
+//// let new_state = [value, ..stack]
+//// actor.continue(new_state)
+//// }
+////
+//// // For the `Pop` message we attempt to remove an element from the stack,
+//// // sending it or an error back to the caller, before continuing.
+//// Pop(client) ->
+//// case stack {
+//// [] -> {
+//// // When the stack is empty we can't pop an element, so we send an
+//// // error back.
+//// process.send(client, Error(Nil))
+//// actor.continue([])
+//// }
+////
+//// [first, ..rest] -> {
+//// // Otherwise we send the first element back and use the remaining
+//// // elements as the new state.
+//// process.send(client, Ok(first))
+//// actor.continue(rest)
+//// }
+//// }
+//// }
+//// }
+//// ```
+
+import gleam/erlang/process.{
+ type ExitReason, type Pid, type Selector, type Subject, Abnormal,
+}
+import gleam/erlang/charlist.{type Charlist}
+import gleam/otp/system.{
+ type DebugState, type Mode, type StatusInfo, type SystemMessage, GetState,
+ GetStatus, Resume, Running, StatusInfo, Suspend, Suspended,
+}
+import gleam/string
+import gleam/dynamic.{type Dynamic}
+import gleam/erlang/atom
+import gleam/option.{type Option, None, Some}
+
+type Message(message) {
+ /// A regular message excepted by the process
+ Message(message)
+
+ /// An OTP system message, for debugging or maintenance
+ System(SystemMessage)
+
+ /// An unexpected message
+ Unexpected(Dynamic)
+}
+
+/// The type used to indicate what to do after handling a message.
+///
+pub type Next(message, state) {
+ /// Continue handling messages.
+ ///
+ Continue(state: state, selector: Option(Selector(message)))
+
+ /// Stop handling messages and shut down.
+ ///
+ Stop(ExitReason)
+}
+
+pub fn continue(state: state) -> Next(message, state) {
+ Continue(state, None)
+}
+
+pub fn with_selector(
+ value: Next(message, state),
+ selector: Selector(message),
+) -> Next(message, state) {
+ case value {
+ Continue(state, _) -> Continue(state, Some(selector))
+ _ -> value
+ }
+}
+
+/// The type used to indicate whether an actor has started successfully or not.
+///
+pub type InitResult(state, message) {
+ /// The actor has successfully initialised. The actor can start handling
+ /// messages and actor's channel sender can be returned to the parent
+ /// process.
+ ///
+ Ready(state: state, selector: Selector(message))
+
+ /// The actor has failed to initialise. The actor shuts down and an error is
+ /// returned to the parent process.
+ ///
+ Failed(String)
+}
+
+type Self(state, msg) {
+ Self(
+ mode: Mode,
+ parent: Pid,
+ state: state,
+ subject: Subject(msg),
+ selector: Selector(Message(msg)),
+ debug_state: DebugState,
+ message_handler: fn(msg, state) -> Next(msg, state),
+ )
+}
+
+/// This data structure holds all the values required by the `start_spec`
+/// function in order to create an actor.
+///
+/// If you do not need to configure the initialisation behaviour of your actor
+/// consider using the `start` function.
+///
+pub type Spec(state, msg) {
+ Spec(
+ /// The initialisation functionality for the actor. This function is called
+ /// just after the actor starts but before the channel sender is returned
+ /// to the parent.
+ ///
+ /// This function is used to ensure that any required data or state is
+ /// correct. If this function returns an error it means that the actor has
+ /// failed to start and an error is returned to the parent.
+ ///
+ init: fn() -> InitResult(state, msg),
+ /// How many milliseconds the `init` function has to return before it is
+ /// considered to have taken too long and failed.
+ ///
+ init_timeout: Int,
+ /// This function is called to handle each message that the actor receives.
+ ///
+ loop: fn(msg, state) -> Next(msg, state),
+ )
+}
+
+// TODO: Check needed functionality here to be OTP compatible
+fn exit_process(reason: ExitReason) -> ExitReason {
+ // TODO
+ reason
+}
+
+fn receive_message(self: Self(state, msg)) -> Message(msg) {
+ let selector = case self.mode {
+ // When suspended we only respond to system messages
+ Suspended ->
+ process.new_selector()
+ |> selecting_system_messages
+
+ // When running we respond to all messages
+ Running ->
+ // We add the handler for unexpected messages first so that the user
+ // supplied selector can override it if desired
+ process.new_selector()
+ |> process.selecting_anything(Unexpected)
+ |> process.merge_selector(self.selector)
+ |> selecting_system_messages
+ }
+
+ process.select_forever(selector)
+}
+
+fn selecting_system_messages(
+ selector: Selector(Message(msg)),
+) -> Selector(Message(msg)) {
+ selector
+ |> process.selecting_record3(
+ atom.create_from_string("system"),
+ convert_system_message,
+ )
+}
+
+@external(erlang, "gleam_otp_external", "convert_system_message")
+fn convert_system_message(a: Dynamic, b: Dynamic) -> Message(msg)
+
+fn process_status_info(self: Self(state, msg)) -> StatusInfo {
+ StatusInfo(
+ module: atom.create_from_string("gleam@otp@actor"),
+ parent: self.parent,
+ mode: self.mode,
+ debug_state: self.debug_state,
+ state: dynamic.from(self.state),
+ )
+}
+
+fn loop(self: Self(state, msg)) -> ExitReason {
+ case receive_message(self) {
+ System(system) ->
+ case system {
+ GetState(callback) -> {
+ callback(dynamic.from(self.state))
+ loop(self)
+ }
+ Resume(callback) -> {
+ callback()
+ loop(Self(..self, mode: Running))
+ }
+ Suspend(callback) -> {
+ callback()
+ loop(Self(..self, mode: Suspended))
+ }
+ GetStatus(callback) -> {
+ callback(process_status_info(self))
+ loop(self)
+ }
+ }
+
+ Unexpected(message) -> {
+ log_warning(
+ charlist.from_string("Actor discarding unexpected message: ~s"),
+ [charlist.from_string(string.inspect(message))],
+ )
+ loop(self)
+ }
+
+ Message(msg) ->
+ case self.message_handler(msg, self.state) {
+ Stop(reason) -> exit_process(reason)
+ Continue(state: state, selector: new_selector) -> {
+ let selector =
+ new_selector
+ |> option.map(init_selector(self.subject, _))
+ |> option.unwrap(self.selector)
+ loop(Self(..self, state: state, selector: selector))
+ }
+ }
+ }
+}
+
+// TODO: replace this when we have Gleam bindings to the logger
+@external(erlang, "logger", "warning")
+fn log_warning(a: Charlist, b: List(Charlist)) -> Nil
+
+fn initialise_actor(
+ spec: Spec(state, msg),
+ ack: Subject(Result(Subject(msg), ExitReason)),
+) {
+ let subject = process.new_subject()
+ case spec.init() {
+ Ready(state, selector) -> {
+ let selector = init_selector(subject, selector)
+ // Signal to parent that the process has initialised successfully
+ process.send(ack, Ok(subject))
+ // Start message receive loop
+ let self =
+ Self(
+ state: state,
+ parent: process.subject_owner(ack),
+ subject: subject,
+ selector: selector,
+ message_handler: spec.loop,
+ debug_state: system.debug_state([]),
+ mode: Running,
+ )
+ loop(self)
+ }
+
+ Failed(reason) -> {
+ process.send(ack, Error(Abnormal(reason)))
+ exit_process(Abnormal(reason))
+ }
+ }
+}
+
+fn init_selector(subject, selector) {
+ process.new_selector()
+ |> process.selecting(subject, Message)
+ |> process.merge_selector(process.map_selector(selector, Message))
+}
+
+pub type StartError {
+ InitTimeout
+ InitFailed(ExitReason)
+ InitCrashed(Dynamic)
+}
+
+/// The result of starting a Gleam actor.
+///
+/// This type is compatible with Gleam supervisors. If you wish to convert it
+/// to a type compatible with Erlang supervisors see the `ErlangStartResult`
+/// type and `erlang_start_result` function.
+///
+pub type StartResult(msg) =
+ Result(Subject(msg), StartError)
+
+/// An Erlang supervisor compatible process start result.
+///
+/// If you wish to convert this into a `StartResult` compatible with Gleam
+/// supervisors see the `from_erlang_start_result` and `wrap_erlang_starter`
+/// functions.
+///
+pub type ErlangStartResult =
+ Result(Pid, Dynamic)
+
+/// Convert a Gleam actor start result into an Erlang supervisor compatible
+/// process start result.
+///
+pub fn to_erlang_start_result(res: StartResult(msg)) -> ErlangStartResult {
+ case res {
+ Ok(x) -> Ok(process.subject_owner(x))
+ Error(x) -> Error(dynamic.from(x))
+ }
+}
+
+type StartInitMessage(msg) {
+ Ack(Result(Subject(msg), ExitReason))
+ Mon(process.ProcessDown)
+}
+
+// TODO: test init_timeout. Currently if we test it eunit prints an error from
+// the process death. How do we avoid this?
+//
+/// Start an actor from a given specification. If the actor's `init` function
+/// returns an error or does not return within `init_timeout` then an error is
+/// returned.
+///
+/// If you do not need to specify the initialisation behaviour of your actor
+/// consider using the `start` function.
+///
+pub fn start_spec(spec: Spec(state, msg)) -> Result(Subject(msg), StartError) {
+ let ack_subject = process.new_subject()
+
+ let child =
+ process.start(
+ linked: True,
+ running: fn() { initialise_actor(spec, ack_subject) },
+ )
+
+ let monitor = process.monitor_process(child)
+ let selector =
+ process.new_selector()
+ |> process.selecting(ack_subject, Ack)
+ |> process.selecting_process_down(monitor, Mon)
+
+ let result = case process.select(selector, spec.init_timeout) {
+ // Child started OK
+ Ok(Ack(Ok(channel))) -> Ok(channel)
+
+ // Child initialiser returned an error
+ Ok(Ack(Error(reason))) -> Error(InitFailed(reason))
+
+ // Child went down while initialising
+ Ok(Mon(down)) -> Error(InitCrashed(down.reason))
+
+ // Child did not finish initialising in time
+ Error(Nil) -> {
+ process.kill(child)
+ Error(InitTimeout)
+ }
+ }
+
+ // Remove the monitor used for the starting of the actor as to avoid an extra
+ // message arriving at the parent if the child dies later.
+ process.demonitor_process(monitor)
+
+ result
+}
+
+/// Start an actor with a given initial state and message handling loop
+/// function.
+///
+/// This function returns a `Result` but it will always be `Ok` so it is safe
+/// to use with `assert` if you are not starting this actor as part of a
+/// supervision tree.
+///
+/// If you wish to configure the initialisation behaviour of a new actor see
+/// the `Spec` record and the `start_spec` function.
+///
+pub fn start(
+ state: state,
+ loop: fn(msg, state) -> Next(msg, state),
+) -> Result(Subject(msg), StartError) {
+ start_spec(Spec(
+ init: fn() { Ready(state, process.new_selector()) },
+ loop: loop,
+ init_timeout: 5000,
+ ))
+}
+
+/// Send a message over a given channel.
+///
+/// This is a re-export of `process.send`, for the sake of convenience.
+///
+pub fn send(subject: Subject(msg), msg: msg) -> Nil {
+ process.send(subject, msg)
+}
+
+// TODO: test
+/// Send a synchronous message and wait for a response from the receiving
+/// process.
+///
+/// If a reply is not received within the given timeout then the sender process
+/// crashes. If you wish receive a `Result` rather than crashing see the
+/// `process.try_call` function.
+///
+/// This is a re-export of `process.call`, for the sake of convenience.
+///
+pub fn call(
+ selector: Subject(message),
+ make_message: fn(Subject(reply)) -> message,
+ timeout: Int,
+) -> reply {
+ process.call(selector, make_message, timeout)
+}
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam
new file mode 100644
index 0000000..2044be0
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/intensity_tracker.gleam
@@ -0,0 +1,46 @@
+//// The intensity tracker is used to monitor how frequently an event happens,
+//// erroring if it happens too many times within a period of time.
+
+import gleam/list
+
+// TODO: test
+pub opaque type IntensityTracker {
+ IntensityTracker(limit: Int, period: Int, events: List(Int))
+}
+
+pub type TooIntense {
+ TooIntense
+}
+
+pub fn new(limit limit: Int, period period: Int) -> IntensityTracker {
+ IntensityTracker(limit: limit, period: period, events: [])
+}
+
+@external(erlang, "erlang", "monotonic_time")
+fn monotonic_time(a: Int) -> Int
+
+fn now_seconds() -> Int {
+ monotonic_time(1)
+}
+
+pub fn trim_window(events: List(Int), now: Int, period: Int) -> List(Int) {
+ case events {
+ [] -> []
+ [event, ..events] ->
+ case now >= event + period {
+ True -> [event, ..trim_window(events, now, period)]
+ False -> []
+ }
+ }
+}
+
+pub fn add_event(
+ tracker: IntensityTracker,
+) -> Result(IntensityTracker, TooIntense) {
+ let now = now_seconds()
+ let events = trim_window([now, ..tracker.events], now, tracker.period)
+ case list.length(events) >= tracker.limit {
+ True -> Error(TooIntense)
+ False -> Ok(IntensityTracker(..tracker, events: events))
+ }
+}
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam
new file mode 100644
index 0000000..4e1b4d8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/port.gleam
@@ -0,0 +1,9 @@
+/// Ports are how code running on the Erlang virtual machine interacts with
+/// the outside world. Bytes of data can be sent to and read from ports,
+/// providing a form of message passing to an external program or resource.
+///
+/// For more information on ports see the [Erlang ports documentation][1].
+///
+/// [1]: https://erlang.org/doc/reference_manual/ports.html
+///
+pub type Port
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam
new file mode 100644
index 0000000..b99ad8e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/supervisor.gleam
@@ -0,0 +1,410 @@
+// TODO: specify amount of time permitted for shut-down
+import gleam/result
+import gleam/string
+import gleam/option.{type Option, None, Some}
+import gleam/erlang/process.{type Pid, type Subject}
+import gleam/otp/actor.{type StartError}
+import gleam/otp/intensity_tracker.{type IntensityTracker}
+import gleam/erlang/node.{type Node}
+
+/// This data structure holds all the values required by the `start_spec`
+/// function in order to create an supervisor.
+///
+/// If you do not need to configure the behaviour of your supervisor consider
+/// using the `start` function.
+///
+pub type Spec(argument, return) {
+ Spec(
+ argument: argument,
+ max_frequency: Int,
+ frequency_period: Int,
+ init: fn(Children(argument)) -> Children(return),
+ )
+}
+
+/// This type represents the starting children of a supervisor within the
+/// `init` function.
+///
+pub opaque type Children(argument) {
+ Ready(Starter(argument))
+ Failed(ChildStartError)
+}
+
+/// This type contains all the information required to start a new child and
+/// add it to the `Children`.
+///
+/// This is typically created with the `worker` function.
+///
+pub opaque type ChildSpec(msg, argument, returning) {
+ ChildSpec(
+ // TODO: merge this into one field
+ start: fn(argument) -> Result(Subject(msg), StartError),
+ returning: fn(argument, Subject(msg)) -> returning,
+ )
+}
+
+type ChildStartError {
+ ChildStartError(previous_pid: Option(Pid), error: StartError)
+}
+
+pub opaque type Message {
+ Exit(process.ExitMessage)
+ RetryRestart(Pid)
+}
+
+type Instruction {
+ StartAll
+ StartFrom(Pid)
+}
+
+type State(a) {
+ State(
+ restarts: IntensityTracker,
+ starter: Starter(a),
+ retry_restarts: Subject(Pid),
+ )
+}
+
+type Starter(argument) {
+ Starter(
+ argument: argument,
+ exec: Option(
+ fn(Instruction) ->
+ Result(#(Starter(argument), Instruction), ChildStartError),
+ ),
+ )
+}
+
+type Child(argument) {
+ Child(pid: Pid, argument: argument)
+}
+
+fn start_child(
+ child_spec: ChildSpec(msg, argument_in, argument_out),
+ argument: argument_in,
+) -> Result(Child(argument_out), ChildStartError) {
+ use subject <- result.then(
+ child_spec.start(argument)
+ |> result.map_error(ChildStartError(None, _)),
+ )
+
+ Ok(Child(
+ pid: process.subject_owner(subject),
+ // Merge the new child's pid into the argument to produce the new argument
+ // used to start any remaining children.
+ argument: child_spec.returning(argument, subject),
+ ))
+}
+
+// TODO: more sophsiticated stopping of processes. i.e. give supervisors
+// more time to shut down.
+fn shutdown_child(pid: Pid, _spec: ChildSpec(msg, arg_1, arg_2)) -> Nil {
+ process.send_exit(pid)
+}
+
+fn perform_instruction_for_child(
+ argument: argument_in,
+ instruction: Instruction,
+ child_spec: ChildSpec(msg, argument_in, argument_out),
+ child: Child(argument_out),
+) -> Result(#(Child(argument_out), Instruction), ChildStartError) {
+ let current = child.pid
+ case instruction {
+ // This child is older than the StartFrom target, we don't need to
+ // restart it
+ StartFrom(target) if target != current -> Ok(#(child, instruction))
+
+ // This pid either is the cause of the problem, or we have the StartAll
+ // instruction. Either way it and its younger siblings need to be restarted.
+ _ -> {
+ shutdown_child(current, child_spec)
+ use child <- result.then(start_child(child_spec, argument))
+ Ok(#(child, StartAll))
+ }
+ }
+}
+
+fn add_child_to_starter(
+ starter: Starter(argument_in),
+ child_spec: ChildSpec(msg, argument_in, argument_out),
+ child: Child(argument_out),
+) -> Starter(argument_out) {
+ let starter = fn(instruction) {
+ // Restart the older children. We use `try` to return early if the older
+ // children failed to start
+ use #(starter, instruction) <- result.then(case starter.exec {
+ Some(start) -> start(instruction)
+ None -> Ok(#(starter, instruction))
+ })
+
+ // Perform the instruction, restarting the child as required
+ use #(child, instruction) <- result.then(perform_instruction_for_child(
+ starter.argument,
+ instruction,
+ child_spec,
+ child,
+ ))
+
+ // Create a new starter for the next time the supervisor needs to restart
+ let starter = add_child_to_starter(starter, child_spec, child)
+
+ Ok(#(starter, instruction))
+ }
+
+ Starter(exec: Some(starter), argument: child.argument)
+}
+
+fn start_and_add_child(
+ state: Starter(argument_0),
+ child_spec: ChildSpec(msg, argument_0, argument_1),
+) -> Children(argument_1) {
+ case start_child(child_spec, state.argument) {
+ Ok(child) -> Ready(add_child_to_starter(state, child_spec, child))
+ Error(reason) -> Failed(reason)
+ }
+}
+
+/// Add a child to the collection of children of the supervisor
+///
+/// This function starts the child from the child spec.
+///
+pub fn add(
+ children: Children(argument),
+ child_spec: ChildSpec(msg, argument, new_argument),
+) -> Children(new_argument) {
+ case children {
+ // If one of the previous children has failed then we cannot continue
+ Failed(fail) -> Failed(fail)
+
+ // If everything is OK so far then we can add the child
+ Ready(state) -> start_and_add_child(state, child_spec)
+ }
+}
+
+// TODO: test
+// TODO: unlimitd shut down duration
+/// Prepare a new supervisor type child.
+///
+/// If you wish to prepare a new non-supervisor type child see the `worker`
+/// function.
+///
+/// If you wish to change the type of the argument for later children see the
+/// `returning` function.
+///
+/// Note: Gleam supervisors do not yet support different shutdown periods per
+/// child so this function is currently identical in behaviour to `worker`. It is
+/// recommended to use this function for supervisor children nevertheless so the
+/// correct shut down behaviour is used in later releases of this library.
+///
+pub fn supervisor(
+ start: fn(argument) -> Result(Subject(msg), StartError),
+) -> ChildSpec(msg, argument, argument) {
+ ChildSpec(start: start, returning: fn(argument, _channel) { argument })
+}
+
+/// Prepare a new worker type child.
+///
+/// If you wish to prepare a new supervisor type child see the `supervisor`
+/// function.
+///
+/// If you wish to change the type of the argument for later children see the
+/// `returning` function.
+///
+pub fn worker(
+ start: fn(argument) -> Result(Subject(msg), StartError),
+) -> ChildSpec(msg, argument, argument) {
+ ChildSpec(start: start, returning: fn(argument, _channel) { argument })
+}
+
+// TODO: test
+/// As each child is added to a supervisors children a new argument is prepared
+/// with which to start the next child. By default argument is the same as the
+/// previous argument, but this function can be used to change it to something
+/// else by passing a function that takes the previous argument and the sender
+/// of the previous child.
+///
+pub fn returning(
+ child: ChildSpec(msg, argument_a, argument_b),
+ updater: fn(argument_a, Subject(msg)) -> argument_c,
+) -> ChildSpec(msg, argument_a, argument_c) {
+ ChildSpec(start: child.start, returning: updater)
+}
+
+fn init(
+ spec: Spec(argument, return),
+) -> actor.InitResult(State(return), Message) {
+ // Create a subject so that we can asynchronously retry restarting when we
+ // fail to bring an exited child
+ let retry = process.new_subject()
+
+ // Trap exits so that we get a message when a child crashes
+ process.trap_exits(True)
+
+ // Combine selectors
+ let selector =
+ process.new_selector()
+ |> process.selecting(retry, RetryRestart)
+ |> process.selecting_trapped_exits(Exit)
+
+ // Start any children
+ let result =
+ Starter(argument: spec.argument, exec: None)
+ |> Ready
+ |> spec.init
+
+ // Pass back up the result
+ case result {
+ Ready(starter) -> {
+ let restarts =
+ intensity_tracker.new(
+ limit: spec.max_frequency,
+ period: spec.frequency_period,
+ )
+ let state =
+ State(starter: starter, restarts: restarts, retry_restarts: retry)
+ actor.Ready(state, selector)
+ }
+
+ Failed(error) ->
+ actor.Failed(case error.error {
+ actor.InitTimeout -> "Child initialisation timed out"
+ actor.InitCrashed(reason) ->
+ string.append(
+ "Child crashed during initialisation: ",
+ string.inspect(reason),
+ )
+ actor.InitFailed(reason) ->
+ string.append(
+ "Child failed to start during initialisation: ",
+ string.inspect(reason),
+ )
+ })
+ }
+}
+
+type HandleExitError {
+ RestartFailed(pid: Pid, restarts: IntensityTracker)
+ TooManyRestarts
+}
+
+fn handle_exit(pid: Pid, state: State(a)) -> actor.Next(Message, State(a)) {
+ let outcome = {
+ // If we are handling an exit then we must have some children
+ let assert Some(start) = state.starter.exec
+
+ // Check to see if there has been too many restarts in this period
+ use restarts <- result.then(
+ state.restarts
+ |> intensity_tracker.add_event
+ |> result.map_error(fn(_) { TooManyRestarts }),
+ )
+
+ // Restart the exited child and any following children
+ use #(starter, _) <- result.then(
+ start(StartFrom(pid))
+ |> result.map_error(fn(e: ChildStartError) {
+ RestartFailed(option.unwrap(e.previous_pid, pid), restarts)
+ }),
+ )
+
+ Ok(State(..state, starter: starter, restarts: restarts))
+ }
+
+ case outcome {
+ Ok(state) -> actor.continue(state)
+ Error(RestartFailed(failed_child, restarts)) -> {
+ // Asynchronously enqueue the restarting of this child again as we were
+ // unable to restart them this time. We do this asynchronously as we want
+ // to have a chance to handle any system messages that have come in.
+ process.send(state.retry_restarts, failed_child)
+ let state = State(..state, restarts: restarts)
+ actor.continue(state)
+ }
+ Error(TooManyRestarts) ->
+ actor.Stop(process.Abnormal(
+ "Child processes restarted too many times within allowed period",
+ ))
+ }
+}
+
+fn loop(
+ message: Message,
+ state: State(argument),
+) -> actor.Next(Message, State(argument)) {
+ case message {
+ Exit(exit_message) -> handle_exit(exit_message.pid, state)
+ RetryRestart(pid) -> handle_exit(pid, state)
+ }
+}
+
+/// Start a supervisor from a given specification.
+///
+pub fn start_spec(spec: Spec(a, b)) -> Result(Subject(Message), StartError) {
+ actor.start_spec(actor.Spec(
+ init: fn() { init(spec) },
+ loop: loop,
+ init_timeout: 60_000,
+ ))
+}
+
+/// Start a supervisor from a given `init` function.
+///
+/// The init argument passed to children will be `Nil` and the maximum restart
+/// intensity will be 1 restart per 5 seconds (the same as the default for
+/// [Erlang supervisors][erl-sup]). If you wish to specify these values, see
+/// the `start_spec` function and the `Spec` type.
+///
+/// [erl-sup]: https://www.erlang.org/doc/design_principles/sup_princ.html#maximum-restart-intensity
+///
+pub fn start(
+ init: fn(Children(Nil)) -> Children(a),
+) -> Result(Subject(Message), StartError) {
+ start_spec(Spec(
+ init: init,
+ argument: Nil,
+ max_frequency: 1,
+ frequency_period: 5,
+ ))
+}
+
+/// A type used to describe the situation in which an Erlang based application
+/// is starting.
+///
+/// For more information see the [Erlang distributed application
+/// documentation][1] and the Learn Your Some Erlang chapter on [distributed
+/// applications][2].
+///
+/// [1]: https://erlang.org/doc/design_principles/distributed_applications.html
+/// [2]: https://learnyousomeerlang.com/distributed-otp-applications
+///
+pub type ApplicationStartMode {
+ Normal
+ Takeover(Node)
+ Failover(Node)
+}
+
+pub type ApplicationStop
+
+@external(erlang, "gleam_otp_external", "application_stopped")
+pub fn application_stopped() -> ApplicationStop
+
+/// The result of starting a Gleam actor.
+///
+/// This type is compatible with Gleam supervisors. If you wish to convert it
+/// to a type compatible with Erlang supervisors see the `ErlangStartResult`
+/// type and `erlang_start_result` function.
+///
+pub type StartResult(msg) =
+ actor.StartResult(msg)
+
+/// An Erlang supervisor compatible process start result.
+///
+pub type ErlangStartResult =
+ actor.ErlangStartResult
+
+/// Convert a Gleam actor start result into an Erlang supervisor compatible
+/// process start result.
+///
+pub fn to_erlang_start_result(res: StartResult(msg)) -> ErlangStartResult {
+ actor.to_erlang_start_result(res)
+}
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam
new file mode 100644
index 0000000..c05646b
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/system.gleam
@@ -0,0 +1,89 @@
+import gleam/dynamic.{type Dynamic}
+import gleam/erlang/atom.{type Atom}
+import gleam/erlang/process.{type Pid}
+
+pub type Mode {
+ Running
+ Suspended
+}
+
+pub type DebugOption {
+ NoDebug
+}
+
+pub type DebugState
+
+@external(erlang, "sys", "debug_options")
+pub fn debug_state(a: List(DebugOption)) -> DebugState
+
+pub type StatusInfo {
+ StatusInfo(
+ module: Atom,
+ parent: Pid,
+ mode: Mode,
+ debug_state: DebugState,
+ state: Dynamic,
+ )
+}
+
+// TODO: document
+// TODO: implement remaining messages
+pub type SystemMessage {
+ // {replace_state, StateFn}
+ // {change_code, Mod, Vsn, Extra}
+ // {terminate, Reason}
+ // {debug, {log, Flag}}
+ // {debug, {trace, Flag}}
+ // {debug, {log_to_file, FileName}}
+ // {debug, {statistics, Flag}}
+ // {debug, no_debug}
+ // {debug, {install, {Func, FuncState}}}
+ // {debug, {install, {FuncId, Func, FuncState}}}
+ // {debug, {remove, FuncOrId}}
+ Resume(fn() -> Nil)
+ Suspend(fn() -> Nil)
+ GetState(fn(Dynamic) -> Nil)
+ GetStatus(fn(StatusInfo) -> Nil)
+}
+
+type DoNotLeak
+
+/// Get the state of a given OTP compatible process. This function is only
+/// intended for debugging.
+///
+/// For more information see the [Erlang documentation][1].
+///
+/// [1]: https://erlang.org/doc/man/sys.html#get_state-1
+///
+@external(erlang, "sys", "get_state")
+pub fn get_state(from from: Pid) -> Dynamic
+
+@external(erlang, "sys", "suspend")
+fn erl_suspend(a: Pid) -> DoNotLeak
+
+/// Request an OTP compatible process to suspend, causing it to only handle
+/// system messages.
+///
+/// For more information see the [Erlang documentation][1].
+///
+/// [1]: https://erlang.org/doc/man/sys.html#suspend-1
+///
+pub fn suspend(pid: Pid) -> Nil {
+ erl_suspend(pid)
+ Nil
+}
+
+@external(erlang, "sys", "resume")
+fn erl_resume(from from: Pid) -> DoNotLeak
+
+/// Request a suspended OTP compatible process to result, causing it to handle
+/// all messages rather than only system messages.
+///
+/// For more information see the [Erlang documentation][1].
+///
+/// [1]: https://erlang.org/doc/man/sys.html#resume-1
+///
+pub fn resume(pid: Pid) -> Nil {
+ erl_resume(pid)
+ Nil
+}
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam b/aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam
new file mode 100644
index 0000000..b2b2c5c
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam/otp/task.gleam
@@ -0,0 +1,151 @@
+//// A task is a kind of process that performs a single task and then shuts
+//// down. Commonly tasks are used to convert sequential code into concurrent
+//// code by performing computation in another process.
+////
+//// let task = task.async(fn() { do_some_work() })
+//// let value = do_some_other_work()
+//// value + task.await(task, 100)
+////
+//// Tasks spawned with async can be awaited on by their caller process (and
+//// only their caller) as shown in the example above. They are implemented by
+//// spawning a process that sends a message to the caller once the given
+//// computation is performed.
+////
+//// There are two important things to consider when using `async`:
+////
+//// 1. If you are using async tasks, you must await a reply as they are always
+//// sent.
+////
+//// 2. async tasks link the caller and the spawned process. This means that,
+//// if the caller crashes, the task will crash too and vice-versa. This is
+//// on purpose: if the process meant to receive the result no longer
+//// exists, there is no purpose in completing the computation.
+////
+//// This module is inspired by Elixir's [Task module][1].
+////
+//// [1]: https://hexdocs.pm/elixir/master/Task.html
+////
+
+// TODO: await_many
+import gleam/erlang/process.{type Pid, type ProcessMonitor, type Selector}
+import gleam/dynamic.{type Dynamic}
+
+pub opaque type Task(value) {
+ Task(
+ owner: Pid,
+ pid: Pid,
+ monitor: ProcessMonitor,
+ selector: Selector(Message(value)),
+ )
+}
+
+// TODO: test
+/// Spawn a task process that calls a given function in order to perform some
+/// work. The result of this function is send back to the parent and can be
+/// received using the `await` function.
+///
+/// See the top level module documentation for more information on async/await.
+///
+pub fn async(work: fn() -> value) -> Task(value) {
+ let owner = process.self()
+ let subject = process.new_subject()
+ let pid =
+ process.start(linked: True, running: fn() { process.send(subject, work()) })
+ let monitor = process.monitor_process(pid)
+ let selector =
+ process.new_selector()
+ |> process.selecting_process_down(monitor, FromMonitor)
+ |> process.selecting(subject, FromSubject)
+ Task(owner: owner, pid: pid, monitor: monitor, selector: selector)
+}
+
+pub type AwaitError {
+ Timeout
+ Exit(reason: Dynamic)
+}
+
+// We can only wait on a task if we are the owner of it so crash if we are
+// waiting on a task we don't own.
+fn assert_owner(task: Task(a)) -> Nil {
+ let self = process.self()
+ case task.owner == self {
+ True -> Nil
+ False ->
+ process.send_abnormal_exit(
+ self,
+ "awaited on a task that does not belong to this process",
+ )
+ }
+}
+
+type Message(value) {
+ FromMonitor(process.ProcessDown)
+ FromSubject(value)
+}
+
+// TODO: test
+/// Wait for the value computed by a task.
+///
+/// If the a value is not received before the timeout has elapsed or if the
+/// task process crashes then an error is returned.
+///
+pub fn try_await(task: Task(value), timeout: Int) -> Result(value, AwaitError) {
+ assert_owner(task)
+ case process.select(task.selector, timeout) {
+ // The task process has sent back a value
+ Ok(FromSubject(x)) -> {
+ process.demonitor_process(task.monitor)
+ Ok(x)
+ }
+
+ // The task process crashed without sending a value
+ Ok(FromMonitor(process.ProcessDown(reason: reason, ..))) ->
+ Error(Exit(reason))
+
+ // The task process is alive but has not sent a value yet
+ Error(Nil) -> Error(Timeout)
+ }
+}
+
+// TODO: test
+/// Wait for the value computed by a task.
+///
+/// If the a value is not received before the timeout has elapsed or if the
+/// task process crashes then this function crashes.
+///
+pub fn await(task: Task(value), timeout: Int) -> value {
+ let assert Ok(value) = try_await(task, timeout)
+ value
+}
+
+/// Wait endlessly for the value computed by a task.
+///
+/// Be Careful! This function does not return until there is a value to
+/// receive. If a value is not received then the process will be stuck waiting
+/// forever.
+///
+pub fn try_await_forever(task: Task(value)) -> Result(value, AwaitError) {
+ assert_owner(task)
+ case process.select_forever(task.selector) {
+ // The task process has sent back a value
+ FromSubject(x) -> {
+ process.demonitor_process(task.monitor)
+ Ok(x)
+ }
+
+ // The task process crashed without sending a value
+ FromMonitor(process.ProcessDown(reason: reason, ..)) -> Error(Exit(reason))
+ }
+}
+
+/// Wait endlessly for the value computed by a task.
+///
+/// Be Careful! Like `try_await_forever`, this function does not return until there is a value to
+/// receive.
+///
+/// If the task process crashes then this function crashes.
+///
+pub fn await_forever(task: Task(value)) -> value {
+ let assert Ok(value) = try_await_forever(task)
+ value
+}
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl
new file mode 100644
index 0000000..0606147
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@actor.erl
@@ -0,0 +1,273 @@
+-module(gleam@otp@actor).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([continue/1, with_selector/2, to_erlang_start_result/1, start_spec/1, start/2, send/2, call/3]).
+-export_type([message/1, next/2, init_result/2, self/2, spec/2, start_error/0, start_init_message/1]).
+
+-type message(GAS) :: {message, GAS} |
+ {system, gleam@otp@system:system_message()} |
+ {unexpected, gleam@dynamic:dynamic_()}.
+
+-type next(GAT, GAU) :: {continue,
+ GAU,
+ gleam@option:option(gleam@erlang@process:selector(GAT))} |
+ {stop, gleam@erlang@process:exit_reason()}.
+
+-type init_result(GAV, GAW) :: {ready, GAV, gleam@erlang@process:selector(GAW)} |
+ {failed, binary()}.
+
+-type self(GAX, GAY) :: {self,
+ gleam@otp@system:mode(),
+ gleam@erlang@process:pid_(),
+ GAX,
+ gleam@erlang@process:subject(GAY),
+ gleam@erlang@process:selector(message(GAY)),
+ gleam@otp@system:debug_state(),
+ fun((GAY, GAX) -> next(GAY, GAX))}.
+
+-type spec(GAZ, GBA) :: {spec,
+ fun(() -> init_result(GAZ, GBA)),
+ integer(),
+ fun((GBA, GAZ) -> next(GBA, GAZ))}.
+
+-type start_error() :: init_timeout |
+ {init_failed, gleam@erlang@process:exit_reason()} |
+ {init_crashed, gleam@dynamic:dynamic_()}.
+
+-type start_init_message(GBB) :: {ack,
+ {ok, gleam@erlang@process:subject(GBB)} |
+ {error, gleam@erlang@process:exit_reason()}} |
+ {mon, gleam@erlang@process:process_down()}.
+
+-spec continue(GBI) -> next(any(), GBI).
+continue(State) ->
+ {continue, State, none}.
+
+-spec with_selector(next(GBM, GBN), gleam@erlang@process:selector(GBM)) -> next(GBM, GBN).
+with_selector(Value, Selector) ->
+ case Value of
+ {continue, State, _} ->
+ {continue, State, {some, Selector}};
+
+ _ ->
+ Value
+ end.
+
+-spec exit_process(gleam@erlang@process:exit_reason()) -> gleam@erlang@process:exit_reason().
+exit_process(Reason) ->
+ Reason.
+
+-spec selecting_system_messages(gleam@erlang@process:selector(message(GBY))) -> gleam@erlang@process:selector(message(GBY)).
+selecting_system_messages(Selector) ->
+ _pipe = Selector,
+ gleam@erlang@process:selecting_record3(
+ _pipe,
+ erlang:binary_to_atom(<<"system"/utf8>>),
+ fun gleam_otp_external:convert_system_message/2
+ ).
+
+-spec receive_message(self(any(), GBU)) -> message(GBU).
+receive_message(Self) ->
+ Selector = case erlang:element(2, Self) of
+ suspended ->
+ _pipe = gleam_erlang_ffi:new_selector(),
+ selecting_system_messages(_pipe);
+
+ running ->
+ _pipe@1 = gleam_erlang_ffi:new_selector(),
+ _pipe@2 = gleam@erlang@process:selecting_anything(
+ _pipe@1,
+ fun(Field@0) -> {unexpected, Field@0} end
+ ),
+ _pipe@3 = gleam_erlang_ffi:merge_selector(
+ _pipe@2,
+ erlang:element(6, Self)
+ ),
+ selecting_system_messages(_pipe@3)
+ end,
+ gleam_erlang_ffi:select(Selector).
+
+-spec process_status_info(self(any(), any())) -> gleam@otp@system:status_info().
+process_status_info(Self) ->
+ {status_info,
+ erlang:binary_to_atom(<<"gleam@otp@actor"/utf8>>),
+ erlang:element(3, Self),
+ erlang:element(2, Self),
+ erlang:element(7, Self),
+ gleam@dynamic:from(erlang:element(4, Self))}.
+
+-spec init_selector(
+ gleam@erlang@process:subject(GGN),
+ gleam@erlang@process:selector(GGN)
+) -> gleam@erlang@process:selector(message(GGN)).
+init_selector(Subject, Selector) ->
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting(
+ _pipe,
+ Subject,
+ fun(Field@0) -> {message, Field@0} end
+ ),
+ gleam_erlang_ffi:merge_selector(
+ _pipe@1,
+ gleam_erlang_ffi:map_selector(
+ Selector,
+ fun(Field@0) -> {message, Field@0} end
+ )
+ ).
+
+-spec loop(self(any(), any())) -> gleam@erlang@process:exit_reason().
+loop(Self) ->
+ case receive_message(Self) of
+ {system, System} ->
+ case System of
+ {get_state, Callback} ->
+ Callback(gleam@dynamic:from(erlang:element(4, Self))),
+ loop(Self);
+
+ {resume, Callback@1} ->
+ Callback@1(),
+ loop(erlang:setelement(2, Self, running));
+
+ {suspend, Callback@2} ->
+ Callback@2(),
+ loop(erlang:setelement(2, Self, suspended));
+
+ {get_status, Callback@3} ->
+ Callback@3(process_status_info(Self)),
+ loop(Self)
+ end;
+
+ {unexpected, Message} ->
+ logger:warning(
+ unicode:characters_to_list(
+ <<"Actor discarding unexpected message: ~s"/utf8>>
+ ),
+ [unicode:characters_to_list(gleam@string:inspect(Message))]
+ ),
+ loop(Self);
+
+ {message, Msg} ->
+ case (erlang:element(8, Self))(Msg, erlang:element(4, Self)) of
+ {stop, Reason} ->
+ exit_process(Reason);
+
+ {continue, State, New_selector} ->
+ Selector = begin
+ _pipe = New_selector,
+ _pipe@1 = gleam@option:map(
+ _pipe,
+ fun(_capture) ->
+ init_selector(erlang:element(5, Self), _capture)
+ end
+ ),
+ gleam@option:unwrap(_pipe@1, erlang:element(6, Self))
+ end,
+ loop(
+ erlang:setelement(
+ 6,
+ erlang:setelement(4, Self, State),
+ Selector
+ )
+ )
+ end
+ end.
+
+-spec initialise_actor(
+ spec(any(), GCP),
+ gleam@erlang@process:subject({ok, gleam@erlang@process:subject(GCP)} |
+ {error, gleam@erlang@process:exit_reason()})
+) -> gleam@erlang@process:exit_reason().
+initialise_actor(Spec, Ack) ->
+ Subject = gleam@erlang@process:new_subject(),
+ case (erlang:element(2, Spec))() of
+ {ready, State, Selector} ->
+ Selector@1 = init_selector(Subject, Selector),
+ gleam@erlang@process:send(Ack, {ok, Subject}),
+ Self = {self,
+ running,
+ gleam@erlang@process:subject_owner(Ack),
+ State,
+ Subject,
+ Selector@1,
+ sys:debug_options([]),
+ erlang:element(4, Spec)},
+ loop(Self);
+
+ {failed, Reason} ->
+ gleam@erlang@process:send(Ack, {error, {abnormal, Reason}}),
+ exit_process({abnormal, Reason})
+ end.
+
+-spec to_erlang_start_result(
+ {ok, gleam@erlang@process:subject(any())} | {error, start_error()}
+) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}.
+to_erlang_start_result(Res) ->
+ case Res of
+ {ok, X} ->
+ {ok, gleam@erlang@process:subject_owner(X)};
+
+ {error, X@1} ->
+ {error, gleam@dynamic:from(X@1)}
+ end.
+
+-spec start_spec(spec(any(), GDD)) -> {ok, gleam@erlang@process:subject(GDD)} |
+ {error, start_error()}.
+start_spec(Spec) ->
+ Ack_subject = gleam@erlang@process:new_subject(),
+ Child = gleam@erlang@process:start(
+ fun() -> initialise_actor(Spec, Ack_subject) end,
+ true
+ ),
+ Monitor = gleam@erlang@process:monitor_process(Child),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting(
+ _pipe,
+ Ack_subject,
+ fun(Field@0) -> {ack, Field@0} end
+ ),
+ gleam@erlang@process:selecting_process_down(
+ _pipe@1,
+ Monitor,
+ fun(Field@0) -> {mon, Field@0} end
+ )
+ end,
+ Result = case gleam_erlang_ffi:select(Selector, erlang:element(3, Spec)) of
+ {ok, {ack, {ok, Channel}}} ->
+ {ok, Channel};
+
+ {ok, {ack, {error, Reason}}} ->
+ {error, {init_failed, Reason}};
+
+ {ok, {mon, Down}} ->
+ {error, {init_crashed, erlang:element(3, Down)}};
+
+ {error, nil} ->
+ gleam@erlang@process:kill(Child),
+ {error, init_timeout}
+ end,
+ gleam_erlang_ffi:demonitor(Monitor),
+ Result.
+
+-spec start(GDJ, fun((GDK, GDJ) -> next(GDK, GDJ))) -> {ok,
+ gleam@erlang@process:subject(GDK)} |
+ {error, start_error()}.
+start(State, Loop) ->
+ start_spec(
+ {spec,
+ fun() -> {ready, State, gleam_erlang_ffi:new_selector()} end,
+ 5000,
+ Loop}
+ ).
+
+-spec send(gleam@erlang@process:subject(GDQ), GDQ) -> nil.
+send(Subject, Msg) ->
+ gleam@erlang@process:send(Subject, Msg).
+
+-spec call(
+ gleam@erlang@process:subject(GDS),
+ fun((gleam@erlang@process:subject(GDU)) -> GDS),
+ integer()
+) -> GDU.
+call(Selector, Make_message, Timeout) ->
+ gleam@erlang@process:call(Selector, Make_message, Timeout).
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl
new file mode 100644
index 0000000..8792f14
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@intensity_tracker.erl
@@ -0,0 +1,53 @@
+-module(gleam@otp@intensity_tracker).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/2, trim_window/3, add_event/1]).
+-export_type([intensity_tracker/0, too_intense/0]).
+
+-opaque intensity_tracker() :: {intensity_tracker,
+ integer(),
+ integer(),
+ list(integer())}.
+
+-type too_intense() :: too_intense.
+
+-spec new(integer(), integer()) -> intensity_tracker().
+new(Limit, Period) ->
+ {intensity_tracker, Limit, Period, []}.
+
+-spec now_seconds() -> integer().
+now_seconds() ->
+ erlang:monotonic_time(1).
+
+-spec trim_window(list(integer()), integer(), integer()) -> list(integer()).
+trim_window(Events, Now, Period) ->
+ case Events of
+ [] ->
+ [];
+
+ [Event | Events@1] ->
+ case Now >= (Event + Period) of
+ true ->
+ [Event | trim_window(Events@1, Now, Period)];
+
+ false ->
+ []
+ end
+ end.
+
+-spec add_event(intensity_tracker()) -> {ok, intensity_tracker()} |
+ {error, too_intense()}.
+add_event(Tracker) ->
+ Now = now_seconds(),
+ Events = trim_window(
+ [Now | erlang:element(4, Tracker)],
+ Now,
+ erlang:element(3, Tracker)
+ ),
+ case gleam@list:length(Events) >= erlang:element(2, Tracker) of
+ true ->
+ {error, too_intense};
+
+ false ->
+ {ok, erlang:setelement(4, Tracker, Events)}
+ end.
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl
new file mode 100644
index 0000000..b205739
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@port.erl
@@ -0,0 +1,8 @@
+-module(gleam@otp@port).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export_type([port_/0]).
+
+-type port_() :: any().
+
+
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl
new file mode 100644
index 0000000..39118f1
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@supervisor.erl
@@ -0,0 +1,322 @@
+-module(gleam@otp@supervisor).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([add/2, supervisor/1, worker/1, returning/2, start_spec/1, start/1, application_stopped/0, to_erlang_start_result/1]).
+-export_type([spec/2, children/1, child_spec/3, child_start_error/0, message/0, instruction/0, state/1, starter/1, child/1, handle_exit_error/0, application_start_mode/0, application_stop/0]).
+
+-type spec(GLS, GLT) :: {spec,
+ GLS,
+ integer(),
+ integer(),
+ fun((children(GLS)) -> children(GLT))}.
+
+-opaque children(GLU) :: {ready, starter(GLU)} | {failed, child_start_error()}.
+
+-opaque child_spec(GLV, GLW, GLX) :: {child_spec,
+ fun((GLW) -> {ok, gleam@erlang@process:subject(GLV)} |
+ {error, gleam@otp@actor:start_error()}),
+ fun((GLW, gleam@erlang@process:subject(GLV)) -> GLX)}.
+
+-type child_start_error() :: {child_start_error,
+ gleam@option:option(gleam@erlang@process:pid_()),
+ gleam@otp@actor:start_error()}.
+
+-opaque message() :: {exit, gleam@erlang@process:exit_message()} |
+ {retry_restart, gleam@erlang@process:pid_()}.
+
+-type instruction() :: start_all | {start_from, gleam@erlang@process:pid_()}.
+
+-type state(GLY) :: {state,
+ gleam@otp@intensity_tracker:intensity_tracker(),
+ starter(GLY),
+ gleam@erlang@process:subject(gleam@erlang@process:pid_())}.
+
+-type starter(GLZ) :: {starter,
+ GLZ,
+ gleam@option:option(fun((instruction()) -> {ok,
+ {starter(GLZ), instruction()}} |
+ {error, child_start_error()}))}.
+
+-type child(GMA) :: {child, gleam@erlang@process:pid_(), GMA}.
+
+-type handle_exit_error() :: {restart_failed,
+ gleam@erlang@process:pid_(),
+ gleam@otp@intensity_tracker:intensity_tracker()} |
+ too_many_restarts.
+
+-type application_start_mode() :: normal |
+ {takeover, gleam@erlang@node:node_()} |
+ {failover, gleam@erlang@node:node_()}.
+
+-type application_stop() :: any().
+
+-spec start_child(child_spec(any(), GME, GMF), GME) -> {ok, child(GMF)} |
+ {error, child_start_error()}.
+start_child(Child_spec, Argument) ->
+ gleam@result:then(
+ begin
+ _pipe = (erlang:element(2, Child_spec))(Argument),
+ gleam@result:map_error(
+ _pipe,
+ fun(_capture) -> {child_start_error, none, _capture} end
+ )
+ end,
+ fun(Subject) ->
+ {ok,
+ {child,
+ gleam@erlang@process:subject_owner(Subject),
+ (erlang:element(3, Child_spec))(Argument, Subject)}}
+ end
+ ).
+
+-spec shutdown_child(
+ gleam@erlang@process:pid_(),
+ child_spec(any(), any(), any())
+) -> nil.
+shutdown_child(Pid, _) ->
+ gleam@erlang@process:send_exit(Pid).
+
+-spec perform_instruction_for_child(
+ GMS,
+ instruction(),
+ child_spec(any(), GMS, GMU),
+ child(GMU)
+) -> {ok, {child(GMU), instruction()}} | {error, child_start_error()}.
+perform_instruction_for_child(Argument, Instruction, Child_spec, Child) ->
+ Current = erlang:element(2, Child),
+ case Instruction of
+ {start_from, Target} when Target =/= Current ->
+ {ok, {Child, Instruction}};
+
+ _ ->
+ shutdown_child(Current, Child_spec),
+ gleam@result:then(
+ start_child(Child_spec, Argument),
+ fun(Child@1) -> {ok, {Child@1, start_all}} end
+ )
+ end.
+
+-spec add_child_to_starter(
+ starter(GNC),
+ child_spec(any(), GNC, GNF),
+ child(GNF)
+) -> starter(GNF).
+add_child_to_starter(Starter, Child_spec, Child) ->
+ Starter@3 = fun(Instruction) ->
+ gleam@result:then(case erlang:element(3, Starter) of
+ {some, Start} ->
+ Start(Instruction);
+
+ none ->
+ {ok, {Starter, Instruction}}
+ end, fun(_use0) ->
+ {Starter@1, Instruction@1} = _use0,
+ gleam@result:then(
+ perform_instruction_for_child(
+ erlang:element(2, Starter@1),
+ Instruction@1,
+ Child_spec,
+ Child
+ ),
+ fun(_use0@1) ->
+ {Child@1, Instruction@2} = _use0@1,
+ Starter@2 = add_child_to_starter(
+ Starter@1,
+ Child_spec,
+ Child@1
+ ),
+ {ok, {Starter@2, Instruction@2}}
+ end
+ )
+ end)
+ end,
+ {starter, erlang:element(3, Child), {some, Starter@3}}.
+
+-spec start_and_add_child(starter(GNL), child_spec(any(), GNL, GNO)) -> children(GNO).
+start_and_add_child(State, Child_spec) ->
+ case start_child(Child_spec, erlang:element(2, State)) of
+ {ok, Child} ->
+ {ready, add_child_to_starter(State, Child_spec, Child)};
+
+ {error, Reason} ->
+ {failed, Reason}
+ end.
+
+-spec add(children(GNT), child_spec(any(), GNT, GNW)) -> children(GNW).
+add(Children, Child_spec) ->
+ case Children of
+ {failed, Fail} ->
+ {failed, Fail};
+
+ {ready, State} ->
+ start_and_add_child(State, Child_spec)
+ end.
+
+-spec supervisor(
+ fun((GOB) -> {ok, gleam@erlang@process:subject(GOC)} |
+ {error, gleam@otp@actor:start_error()})
+) -> child_spec(GOC, GOB, GOB).
+supervisor(Start) ->
+ {child_spec, Start, fun(Argument, _) -> Argument end}.
+
+-spec worker(
+ fun((GOJ) -> {ok, gleam@erlang@process:subject(GOK)} |
+ {error, gleam@otp@actor:start_error()})
+) -> child_spec(GOK, GOJ, GOJ).
+worker(Start) ->
+ {child_spec, Start, fun(Argument, _) -> Argument end}.
+
+-spec returning(
+ child_spec(GOR, GOS, any()),
+ fun((GOS, gleam@erlang@process:subject(GOR)) -> GOY)
+) -> child_spec(GOR, GOS, GOY).
+returning(Child, Updater) ->
+ {child_spec, erlang:element(2, Child), Updater}.
+
+-spec init(spec(any(), GPD)) -> gleam@otp@actor:init_result(state(GPD), message()).
+init(Spec) ->
+ Retry = gleam@erlang@process:new_subject(),
+ gleam_erlang_ffi:trap_exits(true),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting(
+ _pipe,
+ Retry,
+ fun(Field@0) -> {retry_restart, Field@0} end
+ ),
+ gleam@erlang@process:selecting_trapped_exits(
+ _pipe@1,
+ fun(Field@0) -> {exit, Field@0} end
+ )
+ end,
+ Result = begin
+ _pipe@2 = {starter, erlang:element(2, Spec), none},
+ _pipe@3 = {ready, _pipe@2},
+ (erlang:element(5, Spec))(_pipe@3)
+ end,
+ case Result of
+ {ready, Starter} ->
+ Restarts = gleam@otp@intensity_tracker:new(
+ erlang:element(3, Spec),
+ erlang:element(4, Spec)
+ ),
+ State = {state, Restarts, Starter, Retry},
+ {ready, State, Selector};
+
+ {failed, Error} ->
+ {failed, case erlang:element(3, Error) of
+ init_timeout ->
+ <<"Child initialisation timed out"/utf8>>;
+
+ {init_crashed, Reason} ->
+ gleam@string:append(
+ <<"Child crashed during initialisation: "/utf8>>,
+ gleam@string:inspect(Reason)
+ );
+
+ {init_failed, Reason@1} ->
+ gleam@string:append(
+ <<"Child failed to start during initialisation: "/utf8>>,
+ gleam@string:inspect(Reason@1)
+ )
+ end}
+ end.
+
+-spec handle_exit(gleam@erlang@process:pid_(), state(GPJ)) -> gleam@otp@actor:next(message(), state(GPJ)).
+handle_exit(Pid, State) ->
+ Outcome = begin
+ _assert_subject = erlang:element(3, erlang:element(3, State)),
+ {some, Start} = case _assert_subject of
+ {some, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/otp/supervisor"/utf8>>,
+ function => <<"handle_exit"/utf8>>,
+ line => 293})
+ end,
+ gleam@result:then(
+ begin
+ _pipe = erlang:element(2, State),
+ _pipe@1 = gleam@otp@intensity_tracker:add_event(_pipe),
+ gleam@result:map_error(_pipe@1, fun(_) -> too_many_restarts end)
+ end,
+ fun(Restarts) ->
+ gleam@result:then(
+ begin
+ _pipe@2 = Start({start_from, Pid}),
+ gleam@result:map_error(
+ _pipe@2,
+ fun(E) ->
+ {restart_failed,
+ gleam@option:unwrap(
+ erlang:element(2, E),
+ Pid
+ ),
+ Restarts}
+ end
+ )
+ end,
+ fun(_use0) ->
+ {Starter, _} = _use0,
+ {ok,
+ erlang:setelement(
+ 2,
+ erlang:setelement(3, State, Starter),
+ Restarts
+ )}
+ end
+ )
+ end
+ )
+ end,
+ case Outcome of
+ {ok, State@1} ->
+ gleam@otp@actor:continue(State@1);
+
+ {error, {restart_failed, Failed_child, Restarts@1}} ->
+ gleam@erlang@process:send(erlang:element(4, State), Failed_child),
+ State@2 = erlang:setelement(2, State, Restarts@1),
+ gleam@otp@actor:continue(State@2);
+
+ {error, too_many_restarts} ->
+ {stop,
+ {abnormal,
+ <<"Child processes restarted too many times within allowed period"/utf8>>}}
+ end.
+
+-spec loop(message(), state(GPO)) -> gleam@otp@actor:next(message(), state(GPO)).
+loop(Message, State) ->
+ case Message of
+ {exit, Exit_message} ->
+ handle_exit(erlang:element(2, Exit_message), State);
+
+ {retry_restart, Pid} ->
+ handle_exit(Pid, State)
+ end.
+
+-spec start_spec(spec(any(), any())) -> {ok,
+ gleam@erlang@process:subject(message())} |
+ {error, gleam@otp@actor:start_error()}.
+start_spec(Spec) ->
+ gleam@otp@actor:start_spec(
+ {spec, fun() -> init(Spec) end, 60000, fun loop/2}
+ ).
+
+-spec start(fun((children(nil)) -> children(any()))) -> {ok,
+ gleam@erlang@process:subject(message())} |
+ {error, gleam@otp@actor:start_error()}.
+start(Init) ->
+ start_spec({spec, nil, 1, 5, Init}).
+
+-spec application_stopped() -> application_stop().
+application_stopped() ->
+ gleam_otp_external:application_stopped().
+
+-spec to_erlang_start_result(
+ {ok, gleam@erlang@process:subject(any())} |
+ {error, gleam@otp@actor:start_error()}
+) -> {ok, gleam@erlang@process:pid_()} | {error, gleam@dynamic:dynamic_()}.
+to_erlang_start_result(Res) ->
+ gleam@otp@actor:to_erlang_start_result(Res).
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl
new file mode 100644
index 0000000..622e5ea
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@system.erl
@@ -0,0 +1,43 @@
+-module(gleam@otp@system).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([debug_state/1, get_state/1, suspend/1, resume/1]).
+-export_type([mode/0, debug_option/0, debug_state/0, status_info/0, system_message/0, do_not_leak/0]).
+
+-type mode() :: running | suspended.
+
+-type debug_option() :: no_debug.
+
+-type debug_state() :: any().
+
+-type status_info() :: {status_info,
+ gleam@erlang@atom:atom_(),
+ gleam@erlang@process:pid_(),
+ mode(),
+ debug_state(),
+ gleam@dynamic:dynamic_()}.
+
+-type system_message() :: {resume, fun(() -> nil)} |
+ {suspend, fun(() -> nil)} |
+ {get_state, fun((gleam@dynamic:dynamic_()) -> nil)} |
+ {get_status, fun((status_info()) -> nil)}.
+
+-type do_not_leak() :: any().
+
+-spec debug_state(list(debug_option())) -> debug_state().
+debug_state(A) ->
+ sys:debug_options(A).
+
+-spec get_state(gleam@erlang@process:pid_()) -> gleam@dynamic:dynamic_().
+get_state(From) ->
+ sys:get_state(From).
+
+-spec suspend(gleam@erlang@process:pid_()) -> nil.
+suspend(Pid) ->
+ sys:suspend(Pid),
+ nil.
+
+-spec resume(gleam@erlang@process:pid_()) -> nil.
+resume(Pid) ->
+ sys:resume(Pid),
+ nil.
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl b/aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl
new file mode 100644
index 0000000..e004284
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam@otp@task.erl
@@ -0,0 +1,111 @@
+-module(gleam@otp@task).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([async/1, try_await/2, await/2, try_await_forever/1, await_forever/1]).
+-export_type([task/1, await_error/0, message/1]).
+
+-opaque task(FWJ) :: {task,
+ gleam@erlang@process:pid_(),
+ gleam@erlang@process:pid_(),
+ gleam@erlang@process:process_monitor(),
+ gleam@erlang@process:selector(message(FWJ))}.
+
+-type await_error() :: timeout | {exit, gleam@dynamic:dynamic_()}.
+
+-type message(FWK) :: {from_monitor, gleam@erlang@process:process_down()} |
+ {from_subject, FWK}.
+
+-spec async(fun(() -> FWL)) -> task(FWL).
+async(Work) ->
+ Owner = erlang:self(),
+ Subject = gleam@erlang@process:new_subject(),
+ Pid = gleam@erlang@process:start(
+ fun() -> gleam@erlang@process:send(Subject, Work()) end,
+ true
+ ),
+ Monitor = gleam@erlang@process:monitor_process(Pid),
+ Selector = begin
+ _pipe = gleam_erlang_ffi:new_selector(),
+ _pipe@1 = gleam@erlang@process:selecting_process_down(
+ _pipe,
+ Monitor,
+ fun(Field@0) -> {from_monitor, Field@0} end
+ ),
+ gleam@erlang@process:selecting(
+ _pipe@1,
+ Subject,
+ fun(Field@0) -> {from_subject, Field@0} end
+ )
+ end,
+ {task, Owner, Pid, Monitor, Selector}.
+
+-spec assert_owner(task(any())) -> nil.
+assert_owner(Task) ->
+ Self = erlang:self(),
+ case erlang:element(2, Task) =:= Self of
+ true ->
+ nil;
+
+ false ->
+ gleam@erlang@process:send_abnormal_exit(
+ Self,
+ <<"awaited on a task that does not belong to this process"/utf8>>
+ )
+ end.
+
+-spec try_await(task(FWP), integer()) -> {ok, FWP} | {error, await_error()}.
+try_await(Task, Timeout) ->
+ assert_owner(Task),
+ case gleam_erlang_ffi:select(erlang:element(5, Task), Timeout) of
+ {ok, {from_subject, X}} ->
+ gleam_erlang_ffi:demonitor(erlang:element(4, Task)),
+ {ok, X};
+
+ {ok, {from_monitor, {process_down, _, Reason}}} ->
+ {error, {exit, Reason}};
+
+ {error, nil} ->
+ {error, timeout}
+ end.
+
+-spec await(task(FWT), integer()) -> FWT.
+await(Task, Timeout) ->
+ _assert_subject = try_await(Task, Timeout),
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/otp/task"/utf8>>,
+ function => <<"await"/utf8>>,
+ line => 117})
+ end,
+ Value.
+
+-spec try_await_forever(task(FWV)) -> {ok, FWV} | {error, await_error()}.
+try_await_forever(Task) ->
+ assert_owner(Task),
+ case gleam_erlang_ffi:select(erlang:element(5, Task)) of
+ {from_subject, X} ->
+ gleam_erlang_ffi:demonitor(erlang:element(4, Task)),
+ {ok, X};
+
+ {from_monitor, {process_down, _, Reason}} ->
+ {error, {exit, Reason}}
+ end.
+
+-spec await_forever(task(FWZ)) -> FWZ.
+await_forever(Task) ->
+ _assert_subject = try_await_forever(Task),
+ {ok, Value} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"gleam/otp/task"/utf8>>,
+ function => <<"await_forever"/utf8>>,
+ line => 149})
+ end,
+ Value.
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src b/aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src
new file mode 100644
index 0000000..5c52295
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp.app.src
@@ -0,0 +1,15 @@
+{application, gleam_otp, [
+ {vsn, "0.8.0"},
+ {applications, [gleam_erlang,
+ gleam_stdlib,
+ gleeunit]},
+ {description, "Fault tolerant multicore Gleam programs with OTP"},
+ {modules, [gleam@otp@actor,
+ gleam@otp@intensity_tracker,
+ gleam@otp@port,
+ gleam@otp@supervisor,
+ gleam@otp@system,
+ gleam@otp@task,
+ gleam_otp]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp.erl b/aoc2023/build/packages/gleam_otp/src/gleam_otp.erl
new file mode 100644
index 0000000..9381ad2
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp.erl
@@ -0,0 +1,28 @@
+-module(gleam_otp).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([main/0]).
+
+-spec spawn_task(integer()) -> gleam@otp@task:task(nil).
+spawn_task(I) ->
+ gleam@otp@task:async(fun() -> case (I rem 500) =:= 0 of
+ true ->
+ gleam@io:println(
+ <<"Hello from "/utf8, (gleam@int:to_string(I))/binary>>
+ );
+
+ false ->
+ nil
+ end end).
+
+-spec main() -> integer().
+main() ->
+ gleam@io:debug(
+ gleam_otp_test_external:get_message_queue_length(erlang:self())
+ ),
+ _pipe = gleam@list:range(0, 1000000),
+ _pipe@1 = gleam@list:map(_pipe, fun spawn_task/1),
+ gleam@list:each(_pipe@1, fun gleam@otp@task:await_forever/1),
+ gleam@io:debug(
+ gleam_otp_test_external:get_message_queue_length(erlang:self())
+ ).
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam b/aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam
new file mode 100644
index 0000000..69cdd5b
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp.gleam
@@ -0,0 +1,27 @@
+import gleam/io
+import gleam/int
+import gleam/list
+import gleam/otp/task
+import gleam/erlang/process.{type Pid}
+
+@external(erlang, "gleam_otp_test_external", "get_message_queue_length")
+fn get_message_queue_length(pid pid: Pid) -> Int
+
+fn spawn_task(i) {
+ task.async(fn() {
+ case i % 500 == 0 {
+ True -> io.println("Hello from " <> int.to_string(i))
+ False -> Nil
+ }
+ })
+}
+
+pub fn main() {
+ io.debug(get_message_queue_length(process.self()))
+
+ list.range(0, 1_000_000)
+ |> list.map(spawn_task)
+ |> list.each(task.await_forever)
+
+ io.debug(get_message_queue_length(process.self()))
+}
diff --git a/aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl b/aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl
new file mode 100644
index 0000000..8910a67
--- /dev/null
+++ b/aoc2023/build/packages/gleam_otp/src/gleam_otp_external.erl
@@ -0,0 +1,43 @@
+-module(gleam_otp_external).
+
+-export([application_stopped/0, convert_system_message/2]).
+
+% TODO: support other system messages
+% {replace_state, StateFn}
+% {change_code, Mod, Vsn, Extra}
+% {terminate, Reason}
+% {debug, {log, Flag}}
+% {debug, {trace, Flag}}
+% {debug, {log_to_file, FileName}}
+% {debug, {statistics, Flag}}
+% {debug, no_debug}
+% {debug, {install, {Func, FuncState}}}
+% {debug, {install, {FuncId, Func, FuncState}}}
+% {debug, {remove, FuncOrId}}
+% GetStatus(Subject(StatusInfo))
+convert_system_message({From, Ref}, Request) when is_pid(From) ->
+ Reply = fun(Msg) ->
+ erlang:send(From, {Ref, Msg}),
+ nil
+ end,
+ System = fun(Callback) ->
+ {system, {Request, Callback}}
+ end,
+ case Request of
+ get_status -> System(fun(Status) -> Reply(process_status(Status)) end);
+ get_state -> System(Reply);
+ suspend -> System(fun() -> Reply(ok) end);
+ resume -> System(fun() -> Reply(ok) end);
+ Other -> {unexpeceted, Other}
+ end.
+
+process_status({status_info, Module, Parent, Mode, DebugState, State}) ->
+ Data = [
+ get(), Mode, Parent, DebugState,
+ [{header, "Status for Gleam process " ++ pid_to_list(self())},
+ {data, [{'Status', Mode}, {'Parent', Parent}, {'State', State}]}]
+ ],
+ {status, self(), {module, Module}, Data}.
+
+application_stopped() ->
+ ok.
diff --git a/aoc2023/build/packages/gleam_stdlib/LICENCE b/aoc2023/build/packages/gleam_stdlib/LICENCE
new file mode 100644
index 0000000..c1dabd0
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/LICENCE
@@ -0,0 +1,191 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2018, Louis Pilfold <louis@lpil.uk>.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/aoc2023/build/packages/gleam_stdlib/README.md b/aoc2023/build/packages/gleam_stdlib/README.md
new file mode 100644
index 0000000..05c68ca
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/README.md
@@ -0,0 +1,39 @@
+# stdlib
+
+<a href="https://github.com/gleam-lang/stdlib/releases"><img src="https://img.shields.io/github/release/gleam-lang/stdlib" alt="GitHub release"></a>
+<a href="https://discord.gg/Fm8Pwmy"><img src="https://img.shields.io/discord/768594524158427167?color=blue" alt="Discord chat"></a>
+![CI](https://github.com/gleam-lang/stdlib/workflows/CI/badge.svg?branch=main)
+
+Gleam's standard library!
+Documentation available on [HexDocs](https://hexdocs.pm/gleam_stdlib/).
+
+## Installation
+
+Add `gleam_stdlib` to your Gleam project.
+
+```sh
+gleam add gleam_stdlib
+```
+
+## Usage
+
+Import the modules you want to use and write some code!
+
+```gleam
+import gleam/string
+
+pub fn greet(name: String) -> String {
+ string.concat(["Hello ", name, "!"])
+}
+```
+
+## Targets
+
+Gleam's standard library supports both targets: Erlang and JavaScript.
+
+### Compatibility
+
+This library is compatible with all versions of Erlang/OTP, NodeJS, and
+major browsers that are currently supported by their maintainers. If you
+have a compatibility issue with any platform open an issue and we'll see
+what we can do to help.
diff --git a/aoc2023/build/packages/gleam_stdlib/gleam.toml b/aoc2023/build/packages/gleam_stdlib/gleam.toml
new file mode 100644
index 0000000..0cb0531
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/gleam.toml
@@ -0,0 +1,16 @@
+name = "gleam_stdlib"
+version = "0.33.0"
+gleam = ">= 0.32.0"
+licences = ["Apache-2.0"]
+description = "A standard library for the Gleam programming language"
+
+repository = { type = "github", user = "gleam-lang", repo = "stdlib" }
+links = [
+ { title = "Website", href = "https://gleam.run" },
+ { title = "Sponsor", href = "https://github.com/sponsors/lpil" },
+]
+
+[javascript.deno]
+allow_read = [
+ "./",
+]
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl
new file mode 100644
index 0000000..b1135f2
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@dynamic_DecodeError.hrl
@@ -0,0 +1,5 @@
+-record(decode_error, {
+ expected :: binary(),
+ found :: binary(),
+ path :: list(binary())
+}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl
new file mode 100644
index 0000000..b0d08dc
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Iterator.hrl
@@ -0,0 +1 @@
+-record(iterator, {continuation :: fun(() -> gleam@iterator:action(any()))}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl
new file mode 100644
index 0000000..1f61922
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@iterator_Next.hrl
@@ -0,0 +1 @@
+-record(next, {element :: any(), accumulator :: any()}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl
new file mode 100644
index 0000000..88ac25e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@queue_Queue.hrl
@@ -0,0 +1 @@
+-record(queue, {in :: list(any()), out :: list(any())}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl
new file mode 100644
index 0000000..ad5511e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_CompileError.hrl
@@ -0,0 +1 @@
+-record(compile_error, {error :: binary(), byte_index :: integer()}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl
new file mode 100644
index 0000000..4216619
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Match.hrl
@@ -0,0 +1,4 @@
+-record(match, {
+ content :: binary(),
+ submatches :: list(gleam@option:option(binary()))
+}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl
new file mode 100644
index 0000000..0074603
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@regex_Options.hrl
@@ -0,0 +1 @@
+-record(options, {case_insensitive :: boolean(), multi_line :: boolean()}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl
new file mode 100644
index 0000000..6e1e226
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@set_Set.hrl
@@ -0,0 +1 @@
+-record(set, {map :: gleam@dict:dict(any(), list(nil))}).
diff --git a/aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl b/aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl
new file mode 100644
index 0000000..50150f4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/include/gleam@uri_Uri.hrl
@@ -0,0 +1,9 @@
+-record(uri, {
+ scheme :: gleam@option:option(binary()),
+ userinfo :: gleam@option:option(binary()),
+ host :: gleam@option:option(binary()),
+ port :: gleam@option:option(integer()),
+ path :: binary(),
+ 'query' :: gleam@option:option(binary()),
+ fragment :: gleam@option:option(binary())
+}).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/dict.mjs b/aoc2023/build/packages/gleam_stdlib/src/dict.mjs
new file mode 100644
index 0000000..a8309e0
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/dict.mjs
@@ -0,0 +1,957 @@
+/**
+ * This file uses jsdoc to annotate types.
+ * These types can be checked using the typescript compiler with "checkjs" option.
+ */
+
+import { isEqual } from "./gleam.mjs";
+
+const referenceMap = new WeakMap();
+const tempDataView = new DataView(new ArrayBuffer(8));
+let referenceUID = 0;
+/**
+ * hash the object by reference using a weak map and incrementing uid
+ * @param {any} o
+ * @returns {number}
+ */
+function hashByReference(o) {
+ const known = referenceMap.get(o);
+ if (known !== undefined) {
+ return known;
+ }
+ const hash = referenceUID++;
+ if (referenceUID === 0x7fffffff) {
+ referenceUID = 0;
+ }
+ referenceMap.set(o, hash);
+ return hash;
+}
+/**
+ * merge two hashes in an order sensitive way
+ * @param {number} a
+ * @param {number} b
+ * @returns {number}
+ */
+function hashMerge(a, b) {
+ return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0;
+}
+/**
+ * standard string hash popularised by java
+ * @param {string} s
+ * @returns {number}
+ */
+function hashString(s) {
+ let hash = 0;
+ const len = s.length;
+ for (let i = 0; i < len; i++) {
+ hash = (Math.imul(31, hash) + s.charCodeAt(i)) | 0;
+ }
+ return hash;
+}
+/**
+ * hash a number by converting to two integers and do some jumbling
+ * @param {number} n
+ * @returns {number}
+ */
+function hashNumber(n) {
+ tempDataView.setFloat64(0, n);
+ const i = tempDataView.getInt32(0);
+ const j = tempDataView.getInt32(4);
+ return Math.imul(0x45d9f3b, (i >> 16) ^ i) ^ j;
+}
+/**
+ * hash a BigInt by converting it to a string and hashing that
+ * @param {BigInt} n
+ * @returns {number}
+ */
+function hashBigInt(n) {
+ return hashString(n.toString());
+}
+/**
+ * hash any js object
+ * @param {any} o
+ * @returns {number}
+ */
+function hashObject(o) {
+ const proto = Object.getPrototypeOf(o);
+ if (proto !== null && typeof proto.hashCode === "function") {
+ try {
+ const code = o.hashCode(o);
+ if (typeof code === "number") {
+ return code;
+ }
+ } catch {}
+ }
+ if (o instanceof Promise || o instanceof WeakSet || o instanceof WeakMap) {
+ return hashByReference(o);
+ }
+ if (o instanceof Date) {
+ return hashNumber(o.getTime());
+ }
+ let h = 0;
+ if (o instanceof ArrayBuffer) {
+ o = new Uint8Array(o);
+ }
+ if (Array.isArray(o) || o instanceof Uint8Array) {
+ for (let i = 0; i < o.length; i++) {
+ h = (Math.imul(31, h) + getHash(o[i])) | 0;
+ }
+ } else if (o instanceof Set) {
+ o.forEach((v) => {
+ h = (h + getHash(v)) | 0;
+ });
+ } else if (o instanceof Map) {
+ o.forEach((v, k) => {
+ h = (h + hashMerge(getHash(v), getHash(k))) | 0;
+ });
+ } else {
+ const keys = Object.keys(o);
+ for (let i = 0; i < keys.length; i++) {
+ const k = keys[i];
+ const v = o[k];
+ h = (h + hashMerge(getHash(v), hashString(k))) | 0;
+ }
+ }
+ return h;
+}
+/**
+ * hash any js value
+ * @param {any} u
+ * @returns {number}
+ */
+export function getHash(u) {
+ if (u === null) return 0x42108422;
+ if (u === undefined) return 0x42108423;
+ if (u === true) return 0x42108421;
+ if (u === false) return 0x42108420;
+ switch (typeof u) {
+ case "number":
+ return hashNumber(u);
+ case "string":
+ return hashString(u);
+ case "bigint":
+ return hashBigInt(u);
+ case "object":
+ return hashObject(u);
+ case "symbol":
+ return hashByReference(u);
+ case "function":
+ return hashByReference(u);
+ default:
+ return 0; // should be unreachable
+ }
+}
+/**
+ * @template K,V
+ * @typedef {ArrayNode<K,V> | IndexNode<K,V> | CollisionNode<K,V>} Node
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof ENTRY, k: K, v: V }} Entry
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof ARRAY_NODE, size: number, array: (undefined | Entry<K,V> | Node<K,V>)[] }} ArrayNode
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof INDEX_NODE, bitmap: number, array: (Entry<K,V> | Node<K,V>)[] }} IndexNode
+ */
+/**
+ * @template K,V
+ * @typedef {{ type: typeof COLLISION_NODE, hash: number, array: Entry<K, V>[] }} CollisionNode
+ */
+/**
+ * @typedef {{ val: boolean }} Flag
+ */
+const SHIFT = 5; // number of bits you need to shift by to get the next bucket
+const BUCKET_SIZE = Math.pow(2, SHIFT);
+const MASK = BUCKET_SIZE - 1; // used to zero out all bits not in the bucket
+const MAX_INDEX_NODE = BUCKET_SIZE / 2; // when does index node grow into array node
+const MIN_ARRAY_NODE = BUCKET_SIZE / 4; // when does array node shrink to index node
+const ENTRY = 0;
+const ARRAY_NODE = 1;
+const INDEX_NODE = 2;
+const COLLISION_NODE = 3;
+/** @type {IndexNode<any,any>} */
+const EMPTY = {
+ type: INDEX_NODE,
+ bitmap: 0,
+ array: [],
+};
+/**
+ * Mask the hash to get only the bucket corresponding to shift
+ * @param {number} hash
+ * @param {number} shift
+ * @returns {number}
+ */
+function mask(hash, shift) {
+ return (hash >>> shift) & MASK;
+}
+/**
+ * Set only the Nth bit where N is the masked hash
+ * @param {number} hash
+ * @param {number} shift
+ * @returns {number}
+ */
+function bitpos(hash, shift) {
+ return 1 << mask(hash, shift);
+}
+/**
+ * Count the number of 1 bits in a number
+ * @param {number} x
+ * @returns {number}
+ */
+function bitcount(x) {
+ x -= (x >> 1) & 0x55555555;
+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
+ x = (x + (x >> 4)) & 0x0f0f0f0f;
+ x += x >> 8;
+ x += x >> 16;
+ return x & 0x7f;
+}
+/**
+ * Calculate the array index of an item in a bitmap index node
+ * @param {number} bitmap
+ * @param {number} bit
+ * @returns {number}
+ */
+function index(bitmap, bit) {
+ return bitcount(bitmap & (bit - 1));
+}
+/**
+ * Efficiently copy an array and set one value at an index
+ * @template T
+ * @param {T[]} arr
+ * @param {number} at
+ * @param {T} val
+ * @returns {T[]}
+ */
+function cloneAndSet(arr, at, val) {
+ const len = arr.length;
+ const out = new Array(len);
+ for (let i = 0; i < len; ++i) {
+ out[i] = arr[i];
+ }
+ out[at] = val;
+ return out;
+}
+/**
+ * Efficiently copy an array and insert one value at an index
+ * @template T
+ * @param {T[]} arr
+ * @param {number} at
+ * @param {T} val
+ * @returns {T[]}
+ */
+function spliceIn(arr, at, val) {
+ const len = arr.length;
+ const out = new Array(len + 1);
+ let i = 0;
+ let g = 0;
+ while (i < at) {
+ out[g++] = arr[i++];
+ }
+ out[g++] = val;
+ while (i < len) {
+ out[g++] = arr[i++];
+ }
+ return out;
+}
+/**
+ * Efficiently copy an array and remove one value at an index
+ * @template T
+ * @param {T[]} arr
+ * @param {number} at
+ * @returns {T[]}
+ */
+function spliceOut(arr, at) {
+ const len = arr.length;
+ const out = new Array(len - 1);
+ let i = 0;
+ let g = 0;
+ while (i < at) {
+ out[g++] = arr[i++];
+ }
+ ++i;
+ while (i < len) {
+ out[g++] = arr[i++];
+ }
+ return out;
+}
+/**
+ * Create a new node containing two entries
+ * @template K,V
+ * @param {number} shift
+ * @param {K} key1
+ * @param {V} val1
+ * @param {number} key2hash
+ * @param {K} key2
+ * @param {V} val2
+ * @returns {Node<K,V>}
+ */
+function createNode(shift, key1, val1, key2hash, key2, val2) {
+ const key1hash = getHash(key1);
+ if (key1hash === key2hash) {
+ return {
+ type: COLLISION_NODE,
+ hash: key1hash,
+ array: [
+ { type: ENTRY, k: key1, v: val1 },
+ { type: ENTRY, k: key2, v: val2 },
+ ],
+ };
+ }
+ const addedLeaf = { val: false };
+ return assoc(
+ assocIndex(EMPTY, shift, key1hash, key1, val1, addedLeaf),
+ shift,
+ key2hash,
+ key2,
+ val2,
+ addedLeaf
+ );
+}
+/**
+ * @template T,K,V
+ * @callback AssocFunction
+ * @param {T} root
+ * @param {number} shift
+ * @param {number} hash
+ * @param {K} key
+ * @param {V} val
+ * @param {Flag} addedLeaf
+ * @returns {Node<K,V>}
+ */
+/**
+ * Associate a node with a new entry, creating a new node
+ * @template T,K,V
+ * @type {AssocFunction<Node<K,V>,K,V>}
+ */
+function assoc(root, shift, hash, key, val, addedLeaf) {
+ switch (root.type) {
+ case ARRAY_NODE:
+ return assocArray(root, shift, hash, key, val, addedLeaf);
+ case INDEX_NODE:
+ return assocIndex(root, shift, hash, key, val, addedLeaf);
+ case COLLISION_NODE:
+ return assocCollision(root, shift, hash, key, val, addedLeaf);
+ }
+}
+/**
+ * @template T,K,V
+ * @type {AssocFunction<ArrayNode<K,V>,K,V>}
+ */
+function assocArray(root, shift, hash, key, val, addedLeaf) {
+ const idx = mask(hash, shift);
+ const node = root.array[idx];
+ // if the corresponding index is empty set the index to a newly created node
+ if (node === undefined) {
+ addedLeaf.val = true;
+ return {
+ type: ARRAY_NODE,
+ size: root.size + 1,
+ array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }),
+ };
+ }
+ if (node.type === ENTRY) {
+ // if keys are equal replace the entry
+ if (isEqual(key, node.k)) {
+ if (val === node.v) {
+ return root;
+ }
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(root.array, idx, {
+ type: ENTRY,
+ k: key,
+ v: val,
+ }),
+ };
+ }
+ // otherwise upgrade the entry to a node and insert
+ addedLeaf.val = true;
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(
+ root.array,
+ idx,
+ createNode(shift + SHIFT, node.k, node.v, hash, key, val)
+ ),
+ };
+ }
+ // otherwise call assoc on the child node
+ const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf);
+ // if the child node hasn't changed just return the old root
+ if (n === node) {
+ return root;
+ }
+ // otherwise set the index to the new node
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(root.array, idx, n),
+ };
+}
+/**
+ * @template T,K,V
+ * @type {AssocFunction<IndexNode<K,V>,K,V>}
+ */
+function assocIndex(root, shift, hash, key, val, addedLeaf) {
+ const bit = bitpos(hash, shift);
+ const idx = index(root.bitmap, bit);
+ // if there is already a item at this hash index..
+ if ((root.bitmap & bit) !== 0) {
+ // if there is a node at the index (not an entry), call assoc on the child node
+ const node = root.array[idx];
+ if (node.type !== ENTRY) {
+ const n = assoc(node, shift + SHIFT, hash, key, val, addedLeaf);
+ if (n === node) {
+ return root;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(root.array, idx, n),
+ };
+ }
+ // otherwise there is an entry at the index
+ // if the keys are equal replace the entry with the updated value
+ const nodeKey = node.k;
+ if (isEqual(key, nodeKey)) {
+ if (val === node.v) {
+ return root;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(root.array, idx, {
+ type: ENTRY,
+ k: key,
+ v: val,
+ }),
+ };
+ }
+ // if the keys are not equal, replace the entry with a new child node
+ addedLeaf.val = true;
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(
+ root.array,
+ idx,
+ createNode(shift + SHIFT, nodeKey, node.v, hash, key, val)
+ ),
+ };
+ } else {
+ // else there is currently no item at the hash index
+ const n = root.array.length;
+ // if the number of nodes is at the maximum, expand this node into an array node
+ if (n >= MAX_INDEX_NODE) {
+ // create a 32 length array for the new array node (one for each bit in the hash)
+ const nodes = new Array(32);
+ // create and insert a node for the new entry
+ const jdx = mask(hash, shift);
+ nodes[jdx] = assocIndex(EMPTY, shift + SHIFT, hash, key, val, addedLeaf);
+ let j = 0;
+ let bitmap = root.bitmap;
+ // place each item in the index node into the correct spot in the array node
+ // loop through all 32 bits / array positions
+ for (let i = 0; i < 32; i++) {
+ if ((bitmap & 1) !== 0) {
+ const node = root.array[j++];
+ nodes[i] = node;
+ }
+ // shift the bitmap to process the next bit
+ bitmap = bitmap >>> 1;
+ }
+ return {
+ type: ARRAY_NODE,
+ size: n + 1,
+ array: nodes,
+ };
+ } else {
+ // else there is still space in this index node
+ // simply insert a new entry at the hash index
+ const newArray = spliceIn(root.array, idx, {
+ type: ENTRY,
+ k: key,
+ v: val,
+ });
+ addedLeaf.val = true;
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap | bit,
+ array: newArray,
+ };
+ }
+ }
+}
+/**
+ * @template T,K,V
+ * @type {AssocFunction<CollisionNode<K,V>,K,V>}
+ */
+function assocCollision(root, shift, hash, key, val, addedLeaf) {
+ // if there is a hash collision
+ if (hash === root.hash) {
+ const idx = collisionIndexOf(root, key);
+ // if this key already exists replace the entry with the new value
+ if (idx !== -1) {
+ const entry = root.array[idx];
+ if (entry.v === val) {
+ return root;
+ }
+ return {
+ type: COLLISION_NODE,
+ hash: hash,
+ array: cloneAndSet(root.array, idx, { type: ENTRY, k: key, v: val }),
+ };
+ }
+ // otherwise insert the entry at the end of the array
+ const size = root.array.length;
+ addedLeaf.val = true;
+ return {
+ type: COLLISION_NODE,
+ hash: hash,
+ array: cloneAndSet(root.array, size, { type: ENTRY, k: key, v: val }),
+ };
+ }
+ // if there is no hash collision, upgrade to an index node
+ return assoc(
+ {
+ type: INDEX_NODE,
+ bitmap: bitpos(root.hash, shift),
+ array: [root],
+ },
+ shift,
+ hash,
+ key,
+ val,
+ addedLeaf
+ );
+}
+/**
+ * Find the index of a key in the collision node's array
+ * @template K,V
+ * @param {CollisionNode<K,V>} root
+ * @param {K} key
+ * @returns {number}
+ */
+function collisionIndexOf(root, key) {
+ const size = root.array.length;
+ for (let i = 0; i < size; i++) {
+ if (isEqual(key, root.array[i].k)) {
+ return i;
+ }
+ }
+ return -1;
+}
+/**
+ * @template T,K,V
+ * @callback FindFunction
+ * @param {T} root
+ * @param {number} shift
+ * @param {number} hash
+ * @param {K} key
+ * @returns {undefined | Entry<K,V>}
+ */
+/**
+ * Return the found entry or undefined if not present in the root
+ * @template K,V
+ * @type {FindFunction<Node<K,V>,K,V>}
+ */
+function find(root, shift, hash, key) {
+ switch (root.type) {
+ case ARRAY_NODE:
+ return findArray(root, shift, hash, key);
+ case INDEX_NODE:
+ return findIndex(root, shift, hash, key);
+ case COLLISION_NODE:
+ return findCollision(root, key);
+ }
+}
+/**
+ * @template K,V
+ * @type {FindFunction<ArrayNode<K,V>,K,V>}
+ */
+function findArray(root, shift, hash, key) {
+ const idx = mask(hash, shift);
+ const node = root.array[idx];
+ if (node === undefined) {
+ return undefined;
+ }
+ if (node.type !== ENTRY) {
+ return find(node, shift + SHIFT, hash, key);
+ }
+ if (isEqual(key, node.k)) {
+ return node;
+ }
+ return undefined;
+}
+/**
+ * @template K,V
+ * @type {FindFunction<IndexNode<K,V>,K,V>}
+ */
+function findIndex(root, shift, hash, key) {
+ const bit = bitpos(hash, shift);
+ if ((root.bitmap & bit) === 0) {
+ return undefined;
+ }
+ const idx = index(root.bitmap, bit);
+ const node = root.array[idx];
+ if (node.type !== ENTRY) {
+ return find(node, shift + SHIFT, hash, key);
+ }
+ if (isEqual(key, node.k)) {
+ return node;
+ }
+ return undefined;
+}
+/**
+ * @template K,V
+ * @param {CollisionNode<K,V>} root
+ * @param {K} key
+ * @returns {undefined | Entry<K,V>}
+ */
+function findCollision(root, key) {
+ const idx = collisionIndexOf(root, key);
+ if (idx < 0) {
+ return undefined;
+ }
+ return root.array[idx];
+}
+/**
+ * @template T,K,V
+ * @callback WithoutFunction
+ * @param {T} root
+ * @param {number} shift
+ * @param {number} hash
+ * @param {K} key
+ * @returns {undefined | Node<K,V>}
+ */
+/**
+ * Remove an entry from the root, returning the updated root.
+ * Returns undefined if the node should be removed from the parent.
+ * @template K,V
+ * @type {WithoutFunction<Node<K,V>,K,V>}
+ * */
+function without(root, shift, hash, key) {
+ switch (root.type) {
+ case ARRAY_NODE:
+ return withoutArray(root, shift, hash, key);
+ case INDEX_NODE:
+ return withoutIndex(root, shift, hash, key);
+ case COLLISION_NODE:
+ return withoutCollision(root, key);
+ }
+}
+/**
+ * @template K,V
+ * @type {WithoutFunction<ArrayNode<K,V>,K,V>}
+ */
+function withoutArray(root, shift, hash, key) {
+ const idx = mask(hash, shift);
+ const node = root.array[idx];
+ if (node === undefined) {
+ return root; // already empty
+ }
+ let n = undefined;
+ // if node is an entry and the keys are not equal there is nothing to remove
+ // if node is not an entry do a recursive call
+ if (node.type === ENTRY) {
+ if (!isEqual(node.k, key)) {
+ return root; // no changes
+ }
+ } else {
+ n = without(node, shift + SHIFT, hash, key);
+ if (n === node) {
+ return root; // no changes
+ }
+ }
+ // if the recursive call returned undefined the node should be removed
+ if (n === undefined) {
+ // if the number of child nodes is at the minimum, pack into an index node
+ if (root.size <= MIN_ARRAY_NODE) {
+ const arr = root.array;
+ const out = new Array(root.size - 1);
+ let i = 0;
+ let j = 0;
+ let bitmap = 0;
+ while (i < idx) {
+ const nv = arr[i];
+ if (nv !== undefined) {
+ out[j] = nv;
+ bitmap |= 1 << i;
+ ++j;
+ }
+ ++i;
+ }
+ ++i; // skip copying the removed node
+ while (i < arr.length) {
+ const nv = arr[i];
+ if (nv !== undefined) {
+ out[j] = nv;
+ bitmap |= 1 << i;
+ ++j;
+ }
+ ++i;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: bitmap,
+ array: out,
+ };
+ }
+ return {
+ type: ARRAY_NODE,
+ size: root.size - 1,
+ array: cloneAndSet(root.array, idx, n),
+ };
+ }
+ return {
+ type: ARRAY_NODE,
+ size: root.size,
+ array: cloneAndSet(root.array, idx, n),
+ };
+}
+/**
+ * @template K,V
+ * @type {WithoutFunction<IndexNode<K,V>,K,V>}
+ */
+function withoutIndex(root, shift, hash, key) {
+ const bit = bitpos(hash, shift);
+ if ((root.bitmap & bit) === 0) {
+ return root; // already empty
+ }
+ const idx = index(root.bitmap, bit);
+ const node = root.array[idx];
+ // if the item is not an entry
+ if (node.type !== ENTRY) {
+ const n = without(node, shift + SHIFT, hash, key);
+ if (n === node) {
+ return root; // no changes
+ }
+ // if not undefined, the child node still has items, so update it
+ if (n !== undefined) {
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap,
+ array: cloneAndSet(root.array, idx, n),
+ };
+ }
+ // otherwise the child node should be removed
+ // if it was the only child node, remove this node from the parent
+ if (root.bitmap === bit) {
+ return undefined;
+ }
+ // otherwise just remove the child node
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap ^ bit,
+ array: spliceOut(root.array, idx),
+ };
+ }
+ // otherwise the item is an entry, remove it if the key matches
+ if (isEqual(key, node.k)) {
+ if (root.bitmap === bit) {
+ return undefined;
+ }
+ return {
+ type: INDEX_NODE,
+ bitmap: root.bitmap ^ bit,
+ array: spliceOut(root.array, idx),
+ };
+ }
+ return root;
+}
+/**
+ * @template K,V
+ * @param {CollisionNode<K,V>} root
+ * @param {K} key
+ * @returns {undefined | Node<K,V>}
+ */
+function withoutCollision(root, key) {
+ const idx = collisionIndexOf(root, key);
+ // if the key not found, no changes
+ if (idx < 0) {
+ return root;
+ }
+ // otherwise the entry was found, remove it
+ // if it was the only entry in this node, remove the whole node
+ if (root.array.length === 1) {
+ return undefined;
+ }
+ // otherwise just remove the entry
+ return {
+ type: COLLISION_NODE,
+ hash: root.hash,
+ array: spliceOut(root.array, idx),
+ };
+}
+/**
+ * @template K,V
+ * @param {undefined | Node<K,V>} root
+ * @param {(value:V,key:K)=>void} fn
+ * @returns {void}
+ */
+function forEach(root, fn) {
+ if (root === undefined) {
+ return;
+ }
+ const items = root.array;
+ const size = items.length;
+ for (let i = 0; i < size; i++) {
+ const item = items[i];
+ if (item === undefined) {
+ continue;
+ }
+ if (item.type === ENTRY) {
+ fn(item.v, item.k);
+ continue;
+ }
+ forEach(item, fn);
+ }
+}
+/**
+ * Extra wrapper to keep track of Dict size and clean up the API
+ * @template K,V
+ */
+export default class Dict {
+ /**
+ * @template V
+ * @param {Record<string,V>} o
+ * @returns {Dict<string,V>}
+ */
+ static fromObject(o) {
+ const keys = Object.keys(o);
+ /** @type Dict<string,V> */
+ let m = Dict.new();
+ for (let i = 0; i < keys.length; i++) {
+ const k = keys[i];
+ m = m.set(k, o[k]);
+ }
+ return m;
+ }
+ /**
+ * @template K,V
+ * @param {Map<K,V>} o
+ * @returns {Dict<K,V>}
+ */
+ static fromMap(o) {
+ /** @type Dict<K,V> */
+ let m = Dict.new();
+ o.forEach((v, k) => {
+ m = m.set(k, v);
+ });
+ return m;
+ }
+ static new() {
+ return new Dict(undefined, 0);
+ }
+ /**
+ * @param {undefined | Node<K,V>} root
+ * @param {number} size
+ */
+ constructor(root, size) {
+ this.root = root;
+ this.size = size;
+ }
+ /**
+ * @template NotFound
+ * @param {K} key
+ * @param {NotFound} notFound
+ * @returns {NotFound | V}
+ */
+ get(key, notFound) {
+ if (this.root === undefined) {
+ return notFound;
+ }
+ const found = find(this.root, 0, getHash(key), key);
+ if (found === undefined) {
+ return notFound;
+ }
+ return found.v;
+ }
+ /**
+ * @param {K} key
+ * @param {V} val
+ * @returns {Dict<K,V>}
+ */
+ set(key, val) {
+ const addedLeaf = { val: false };
+ const root = this.root === undefined ? EMPTY : this.root;
+ const newRoot = assoc(root, 0, getHash(key), key, val, addedLeaf);
+ if (newRoot === this.root) {
+ return this;
+ }
+ return new Dict(newRoot, addedLeaf.val ? this.size + 1 : this.size);
+ }
+ /**
+ * @param {K} key
+ * @returns {Dict<K,V>}
+ */
+ delete(key) {
+ if (this.root === undefined) {
+ return this;
+ }
+ const newRoot = without(this.root, 0, getHash(key), key);
+ if (newRoot === this.root) {
+ return this;
+ }
+ if (newRoot === undefined) {
+ return Dict.new();
+ }
+ return new Dict(newRoot, this.size - 1);
+ }
+ /**
+ * @param {K} key
+ * @returns {boolean}
+ */
+ has(key) {
+ if (this.root === undefined) {
+ return false;
+ }
+ return find(this.root, 0, getHash(key), key) !== undefined;
+ }
+ /**
+ * @returns {[K,V][]}
+ */
+ entries() {
+ if (this.root === undefined) {
+ return [];
+ }
+ /** @type [K,V][] */
+ const result = [];
+ this.forEach((v, k) => result.push([k, v]));
+ return result;
+ }
+ /**
+ *
+ * @param {(val:V,key:K)=>void} fn
+ */
+ forEach(fn) {
+ forEach(this.root, fn);
+ }
+ hashCode() {
+ let h = 0;
+ this.forEach((v, k) => {
+ h = (h + hashMerge(getHash(v), getHash(k))) | 0;
+ });
+ return h;
+ }
+ /**
+ * @param {unknown} o
+ * @returns {boolean}
+ */
+ equals(o) {
+ if (!(o instanceof Dict) || this.size !== o.size) {
+ return false;
+ }
+ let equal = true;
+ this.forEach((v, k) => {
+ equal = equal && isEqual(o.get(k, !v), v);
+ });
+ return equal;
+ }
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam
new file mode 100644
index 0000000..eab2f0b
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/base.gleam
@@ -0,0 +1,21 @@
+import gleam/bit_array
+
+@deprecated("Please use `base64_encode` in the `gleam/bit_array` module instead.")
+pub fn encode64(input: BitArray, padding: Bool) -> String {
+ bit_array.base64_encode(input, padding)
+}
+
+@deprecated("Please use `base64_decode` in the `gleam/bit_array` module instead.")
+pub fn decode64(encoded: String) -> Result(BitArray, Nil) {
+ bit_array.base64_decode(encoded)
+}
+
+@deprecated("Please use `base64_url_encode` in the `gleam/bit_array` module instead.")
+pub fn url_encode64(input: BitArray, padding: Bool) -> String {
+ bit_array.base64_url_encode(input, padding)
+}
+
+@deprecated("Please use `base64_url_decode` in the `gleam/bit_array` module instead.")
+pub fn url_decode64(encoded: String) -> Result(BitArray, Nil) {
+ bit_array.base64_url_decode(encoded)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam
new file mode 100644
index 0000000..79860e9
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_array.gleam
@@ -0,0 +1,157 @@
+//// BitArrays are a sequence of binary data of any length.
+
+import gleam/string
+
+/// Converts a UTF-8 `String` type into a `BitArray`.
+///
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "bit_array_from_string")
+pub fn from_string(x: String) -> BitArray
+
+/// Returns an integer which is the number of bytes in the bit array.
+///
+@external(erlang, "erlang", "byte_size")
+@external(javascript, "../gleam_stdlib.mjs", "length")
+pub fn byte_size(x: BitArray) -> Int
+
+/// Creates a new bit array by joining two bit arrays.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > append(to: from_string("butter"), suffix: from_string("fly"))
+/// from_string("butterfly")
+/// ```
+///
+pub fn append(to first: BitArray, suffix second: BitArray) -> BitArray {
+ concat([first, second])
+}
+
+/// Extracts a sub-section of a bit array.
+///
+/// The slice will start at given position and continue up to specified
+/// length.
+/// A negative length can be used to extract bytes at the end of a bit array.
+///
+/// This function runs in constant time.
+///
+@external(erlang, "gleam_stdlib", "bit_array_slice")
+@external(javascript, "../gleam_stdlib.mjs", "bit_array_slice")
+pub fn slice(
+ from string: BitArray,
+ at position: Int,
+ take length: Int,
+) -> Result(BitArray, Nil)
+
+/// Tests to see whether a bit array is valid UTF-8.
+///
+pub fn is_utf8(bits: BitArray) -> Bool {
+ do_is_utf8(bits)
+}
+
+@target(erlang)
+fn do_is_utf8(bits: BitArray) -> Bool {
+ case bits {
+ <<>> -> True
+ <<_:utf8, rest:bytes>> -> do_is_utf8(rest)
+ _ -> False
+ }
+}
+
+@target(javascript)
+fn do_is_utf8(bits: BitArray) -> Bool {
+ case to_string(bits) {
+ Ok(_) -> True
+ _ -> False
+ }
+}
+
+/// Converts a bit array to a string.
+///
+/// Returns an error if the bit array is invalid UTF-8 data.
+///
+pub fn to_string(bits: BitArray) -> Result(String, Nil) {
+ do_to_string(bits)
+}
+
+@target(erlang)
+@external(erlang, "gleam_stdlib", "identity")
+fn unsafe_to_string(a: BitArray) -> String
+
+@target(erlang)
+fn do_to_string(bits: BitArray) -> Result(String, Nil) {
+ case is_utf8(bits) {
+ True -> Ok(unsafe_to_string(bits))
+ False -> Error(Nil)
+ }
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "bit_array_to_string")
+fn do_to_string(a: BitArray) -> Result(String, Nil)
+
+/// Creates a new bit array by joining multiple binaries.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > concat([from_string("butter"), from_string("fly")])
+/// from_string("butterfly")
+/// ```
+///
+@external(erlang, "gleam_stdlib", "bit_array_concat")
+@external(javascript, "../gleam_stdlib.mjs", "bit_array_concat")
+pub fn concat(bit_arrays: List(BitArray)) -> BitArray
+
+/// Encodes a BitArray into a base 64 encoded string.
+///
+pub fn base64_encode(input: BitArray, padding: Bool) -> String {
+ let encoded = encode64(input)
+ case padding {
+ True -> encoded
+ False -> string.replace(encoded, "=", "")
+ }
+}
+
+@external(erlang, "base64", "encode")
+@external(javascript, "../gleam_stdlib.mjs", "encode64")
+fn encode64(a: BitArray) -> String
+
+/// Decodes a base 64 encoded string into a `BitArray`.
+///
+pub fn base64_decode(encoded: String) -> Result(BitArray, Nil) {
+ let padded = case byte_size(from_string(encoded)) % 4 {
+ 0 -> encoded
+ n -> string.append(encoded, string.repeat("=", 4 - n))
+ }
+ decode64(padded)
+}
+
+@external(erlang, "gleam_stdlib", "base_decode64")
+@external(javascript, "../gleam_stdlib.mjs", "decode64")
+fn decode64(a: String) -> Result(BitArray, Nil)
+
+/// Encodes a `BitArray` into a base 64 encoded string with URL and filename safe alphabet.
+///
+pub fn base64_url_encode(input: BitArray, padding: Bool) -> String {
+ base64_encode(input, padding)
+ |> string.replace("+", "-")
+ |> string.replace("/", "_")
+}
+
+/// Decodes a base 64 encoded string with URL and filename safe alphabet into a `BitArray`.
+///
+pub fn base64_url_decode(encoded: String) -> Result(BitArray, Nil) {
+ encoded
+ |> string.replace("-", "+")
+ |> string.replace("_", "/")
+ |> base64_decode()
+}
+
+@external(erlang, "binary", "encode_hex")
+@external(javascript, "../gleam_stdlib.mjs", "base16_encode")
+pub fn base16_encode(input: BitArray) -> String
+
+@external(erlang, "gleam_stdlib", "base16_decode")
+@external(javascript, "../gleam_stdlib.mjs", "base16_decode")
+pub fn base16_decode(input: String) -> Result(BitArray, Nil)
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam
new file mode 100644
index 0000000..ce6fe52
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_builder.gleam
@@ -0,0 +1,80 @@
+//// This module has been deprecated in favour of `gleam/bytes_builder`.
+
+import gleam/bytes_builder
+import gleam/string_builder.{type StringBuilder}
+
+pub type BitBuilder =
+ bytes_builder.BytesBuilder
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn new() -> BitBuilder {
+ bytes_builder.new()
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn prepend(to: BitBuilder, prefix: BitArray) -> BitBuilder {
+ bytes_builder.prepend(to, prefix)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn append(to: BitBuilder, suffix: BitArray) -> BitBuilder {
+ bytes_builder.append(to, suffix)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn prepend_builder(to: BitBuilder, prefix: BitBuilder) -> BitBuilder {
+ bytes_builder.prepend_builder(to, prefix)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn append_builder(
+ to first: BitBuilder,
+ suffix second: BitBuilder,
+) -> BitBuilder {
+ bytes_builder.append_builder(first, second)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn prepend_string(to: BitBuilder, prefix: String) -> BitBuilder {
+ bytes_builder.prepend_string(to, prefix)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn append_string(to: BitBuilder, suffix: String) -> BitBuilder {
+ bytes_builder.append_string(to, suffix)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn concat(builders: List(BitBuilder)) -> BitBuilder {
+ bytes_builder.concat(builders)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn concat_bit_strings(bits: List(BitArray)) -> BitBuilder {
+ bytes_builder.concat_bit_arrays(bits)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn from_string(string: String) -> BitBuilder {
+ bytes_builder.from_string(string)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn from_string_builder(builder: StringBuilder) -> BitBuilder {
+ bytes_builder.from_string_builder(builder)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn from_bit_string(bits: BitArray) -> BitBuilder {
+ bytes_builder.from_bit_array(bits)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn to_bit_string(builder: BitBuilder) -> BitArray {
+ bytes_builder.to_bit_array(builder)
+}
+
+@deprecated("Please use the `gleam/bytes_builder` module instead.")
+pub fn byte_size(builder: BitBuilder) -> Int {
+ bytes_builder.byte_size(builder)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam
new file mode 100644
index 0000000..b703da0
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bit_string.gleam
@@ -0,0 +1,43 @@
+//// This module has been deprecated. Please use the `gleam/bit_array` module
+//// instead.
+
+import gleam/bit_array
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn from_string(x: String) -> BitArray {
+ bit_array.from_string(x)
+}
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn byte_size(x: BitArray) -> Int {
+ bit_array.byte_size(x)
+}
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn append(to first: BitArray, suffix second: BitArray) -> BitArray {
+ bit_array.append(first, second)
+}
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn slice(
+ from string: BitArray,
+ at position: Int,
+ take length: Int,
+) -> Result(BitArray, Nil) {
+ bit_array.slice(string, position, length)
+}
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn is_utf8(bits: BitArray) -> Bool {
+ bit_array.is_utf8(bits)
+}
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn to_string(bits: BitArray) -> Result(String, Nil) {
+ bit_array.to_string(bits)
+}
+
+@deprecated("Please use the `gleam/bit_array` module instead.")
+pub fn concat(bit_strings: List(BitArray)) -> BitArray {
+ bit_array.concat(bit_strings)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam
new file mode 100644
index 0000000..91bd6b7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bool.gleam
@@ -0,0 +1,428 @@
+//// A type with two possible values, `True` and `False`. Used to indicate whether
+//// things are... true or false!
+////
+//// Often is it clearer and offers more type safety to define a custom type
+//// than to use `Bool`. For example, rather than having a `is_teacher: Bool`
+//// field consider having a `role: SchoolRole` field where `SchoolRole` is a custom
+//// type that can be either `Student` or `Teacher`.
+
+import gleam/order.{type Order}
+
+/// Returns the and of two bools, but it evaluates both arguments.
+///
+/// It's the function equivalent of the `&&` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > and(True, True)
+/// True
+/// ```
+///
+/// ```gleam
+/// > and(False, True)
+/// False
+/// ```
+///
+/// ```gleam
+/// > False |> and(True)
+/// False
+/// ```
+///
+pub fn and(a: Bool, b: Bool) -> Bool {
+ a && b
+}
+
+/// Returns the or of two bools, but it evaluates both arguments.
+///
+/// It's the function equivalent of the `||` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > or(True, True)
+/// True
+/// ```
+///
+/// ```gleam
+/// > or(False, True)
+/// True
+/// ```
+///
+/// ```gleam
+/// > False |> or(True)
+/// True
+/// ```
+///
+pub fn or(a: Bool, b: Bool) -> Bool {
+ a || b
+}
+
+/// Returns the opposite bool value.
+///
+/// This is the same as the `!` or `not` operators in some other languages.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > negate(True)
+/// False
+/// ```
+///
+/// ```gleam
+/// > negate(False)
+/// True
+/// ```
+///
+pub fn negate(bool: Bool) -> Bool {
+ case bool {
+ True -> False
+ False -> True
+ }
+}
+
+/// Returns the nor of two bools.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > nor(False, False)
+/// True
+/// ```
+///
+/// ```gleam
+/// > nor(False, True)
+/// False
+/// ```
+///
+/// ```gleam
+/// > nor(True, False)
+/// False
+/// ```
+///
+/// ```gleam
+/// > nor(True, True)
+/// False
+/// ```
+///
+pub fn nor(a: Bool, b: Bool) -> Bool {
+ case a, b {
+ False, False -> True
+ False, True -> False
+ True, False -> False
+ True, True -> False
+ }
+}
+
+/// Returns the nand of two bools.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > nand(False, False)
+/// True
+/// ```
+///
+/// ```gleam
+/// > nand(False, True)
+/// True
+/// ```
+///
+/// ```gleam
+/// > nand(True, False)
+/// True
+/// ```
+///
+/// ```gleam
+/// > nand(True, True)
+/// False
+/// ```
+///
+pub fn nand(a: Bool, b: Bool) -> Bool {
+ case a, b {
+ False, False -> True
+ False, True -> True
+ True, False -> True
+ True, True -> False
+ }
+}
+
+/// Returns the exclusive or of two bools.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > exclusive_or(False, False)
+/// False
+/// ```
+///
+/// ```gleam
+/// > exclusive_or(False, True)
+/// True
+/// ```
+///
+/// ```gleam
+/// > exclusive_or(True, False)
+/// True
+/// ```
+///
+/// ```gleam
+/// > exclusive_or(True, True)
+/// False
+/// ```
+///
+pub fn exclusive_or(a: Bool, b: Bool) -> Bool {
+ case a, b {
+ False, False -> False
+ False, True -> True
+ True, False -> True
+ True, True -> False
+ }
+}
+
+/// Returns the exclusive nor of two bools.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > exclusive_nor(False, False)
+/// True
+/// ```
+///
+/// ```gleam
+/// > exclusive_nor(False, True)
+/// False
+/// ```
+///
+/// ```gleam
+/// > exclusive_nor(True, False)
+/// False
+/// ```
+///
+/// ```gleam
+/// > exclusive_nor(True, True)
+/// True
+/// ```
+///
+pub fn exclusive_nor(a: Bool, b: Bool) -> Bool {
+ case a, b {
+ False, False -> True
+ False, True -> False
+ True, False -> False
+ True, True -> True
+ }
+}
+
+/// Compares two bools and returns the first value's `Order` to the second.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/order
+/// > compare(True, False)
+/// order.Gt
+/// ```
+///
+pub fn compare(a: Bool, with b: Bool) -> Order {
+ case a, b {
+ True, True -> order.Eq
+ True, False -> order.Gt
+ False, False -> order.Eq
+ False, True -> order.Lt
+ }
+}
+
+/// Returns `True` if either argument's value is `True`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > max(True, False)
+/// True
+/// ```
+///
+/// ```gleam
+/// > max(False, True)
+/// True
+/// ```
+///
+/// ```gleam
+/// > max(False, False)
+/// False
+/// ```
+///
+pub fn max(a: Bool, b: Bool) -> Bool {
+ case a {
+ True -> True
+ False -> b
+ }
+}
+
+/// Returns `False` if either bool value is `False`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > min(True, False)
+/// False
+/// ```
+///
+/// ```gleam
+/// > min(False, True)
+/// False
+///
+/// > min(False, False)
+/// False
+/// ```
+///
+pub fn min(a: Bool, b: Bool) -> Bool {
+ case a {
+ False -> False
+ True -> b
+ }
+}
+
+/// Returns a numeric representation of the given bool.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_int(True)
+/// 1
+///
+/// > to_int(False)
+/// 0
+/// ```
+///
+pub fn to_int(bool: Bool) -> Int {
+ case bool {
+ False -> 0
+ True -> 1
+ }
+}
+
+/// Returns a string representation of the given bool.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_string(True)
+/// "True"
+/// ```
+///
+/// ```gleam
+/// > to_string(False)
+/// "False"
+/// ```
+///
+pub fn to_string(bool: Bool) -> String {
+ case bool {
+ False -> "False"
+ True -> "True"
+ }
+}
+
+/// Run a callback function if the given bool is `False`, otherwise return a
+/// default value.
+///
+/// With a `use` expression this function can simulate the early-return pattern
+/// found in some other programming languages.
+///
+/// In a procedural language:
+///
+/// ```js
+/// if (predicate) return value;
+/// // ...
+/// ```
+///
+/// In Gleam with a `use` expression:
+///
+/// ```gleam
+/// use <- guard(when: predicate, return: value)
+/// // ...
+/// ```
+///
+/// Like everything in Gleam `use` is an expression, so it short circuits the
+/// current block, not the entire function. As a result you can assign the value
+/// to a variable:
+///
+/// ```gleam
+/// let x = {
+/// use <- guard(when: predicate, return: value)
+/// // ...
+/// }
+/// ```
+///
+/// Note that unlike in procedural languages the `return` value is evaluated
+/// even when the predicate is `False`, so it is advisable not to perform
+/// expensive computation there.
+///
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let name = ""
+/// > use <- guard(when: name == "", return: "Welcome!")
+/// > "Hello, " <> name
+/// "Welcome!"
+/// ```
+///
+/// ```gleam
+/// > let name = "Kamaka"
+/// > use <- guard(when: name == "", return: "Welcome!")
+/// > "Hello, " <> name
+/// "Hello, Kamaka"
+/// ```
+///
+pub fn guard(
+ when requirement: Bool,
+ return consequence: t,
+ otherwise alternative: fn() -> t,
+) -> t {
+ case requirement {
+ True -> consequence
+ False -> alternative()
+ }
+}
+
+/// Runs a callback function if the given bool is `True`, otherwise runs an
+/// alternative callback function.
+///
+/// Useful when further computation should be delayed regardless of the given
+/// bool's value.
+///
+/// See [`guard`](#guard) for more info.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let name = "Kamaka"
+/// > let inquiry = fn() { "How may we address you?" }
+/// > use <- lazy_guard(when: name == "", return: inquiry)
+/// > "Hello, " <> name
+/// "Hello, Kamaka"
+/// ```
+///
+/// ```gleam
+/// > import gleam/int
+/// > let name = ""
+/// > let greeting = fn() { "Hello, " <> name }
+/// > use <- lazy_guard(when: name == "", otherwise: greeting)
+/// > let number = int.random(1, 99)
+/// > let name = "User " <> int.to_string(number)
+/// > "Welcome, " <> name
+/// "Welcome, User 54"
+/// ```
+///
+pub fn lazy_guard(
+ when requirement: Bool,
+ return consequence: fn() -> a,
+ otherwise alternative: fn() -> a,
+) -> a {
+ case requirement {
+ True -> consequence()
+ False -> alternative()
+ }
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam
new file mode 100644
index 0000000..20c145d
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/bytes_builder.gleam
@@ -0,0 +1,197 @@
+//// BytesBuilder is a type used for efficiently concatenating bytes together
+//// without copying.
+////
+//// If we append one bit array to another the bit arrays must be copied to a
+//// new location in memory so that they can sit together. This behaviour
+//// enables efficient reading of the string but copying can be expensive,
+//// especially if we want to join many bit arrays together.
+////
+//// BytesBuilder is different in that it can be joined together in constant
+//// time using minimal memory, and then can be efficiently converted to a
+//// bit array using the `to_bit_array` function.
+////
+//// Byte builders are always byte aligned, so that a number of bits that is not
+//// divisible by 8 will be padded with 0s.
+////
+//// On Erlang this type is compatible with Erlang's iolists.
+
+// TODO: pad bit arrays to byte boundaries when adding to a builder.
+import gleam/string_builder.{type StringBuilder}
+import gleam/list
+import gleam/bit_array
+
+pub opaque type BytesBuilder {
+ Bytes(BitArray)
+ Text(StringBuilder)
+ Many(List(BytesBuilder))
+}
+
+/// Create an empty `BytesBuilder`. Useful as the start of a pipe chaining many
+/// builders together.
+///
+pub fn new() -> BytesBuilder {
+ concat([])
+}
+
+/// Prepends a bit array to the start of a builder.
+///
+/// Runs in constant time.
+///
+pub fn prepend(to second: BytesBuilder, prefix first: BitArray) -> BytesBuilder {
+ append_builder(from_bit_array(first), second)
+}
+
+/// Appends a bit array to the end of a builder.
+///
+/// Runs in constant time.
+///
+pub fn append(to first: BytesBuilder, suffix second: BitArray) -> BytesBuilder {
+ append_builder(first, from_bit_array(second))
+}
+
+/// Prepends a builder onto the start of another.
+///
+/// Runs in constant time.
+///
+pub fn prepend_builder(
+ to second: BytesBuilder,
+ prefix first: BytesBuilder,
+) -> BytesBuilder {
+ append_builder(first, second)
+}
+
+/// Appends a builder onto the end of another.
+///
+/// Runs in constant time.
+///
+@external(erlang, "gleam_stdlib", "iodata_append")
+pub fn append_builder(
+ to first: BytesBuilder,
+ suffix second: BytesBuilder,
+) -> BytesBuilder {
+ case second {
+ Many(builders) -> Many([first, ..builders])
+ _ -> Many([first, second])
+ }
+}
+
+/// Prepends a string onto the start of a builder.
+///
+/// Runs in constant time when running on Erlang.
+/// Runs in linear time with the length of the string otherwise.
+///
+pub fn prepend_string(
+ to second: BytesBuilder,
+ prefix first: String,
+) -> BytesBuilder {
+ append_builder(from_string(first), second)
+}
+
+/// Appends a string onto the end of a builder.
+///
+/// Runs in constant time when running on Erlang.
+/// Runs in linear time with the length of the string otherwise.
+///
+pub fn append_string(
+ to first: BytesBuilder,
+ suffix second: String,
+) -> BytesBuilder {
+ append_builder(first, from_string(second))
+}
+
+/// Joins a list of builders into a single builder.
+///
+/// Runs in constant time.
+///
+@external(erlang, "gleam_stdlib", "identity")
+pub fn concat(builders: List(BytesBuilder)) -> BytesBuilder {
+ Many(builders)
+}
+
+/// Joins a list of bit arrays into a single builder.
+///
+/// Runs in constant time.
+///
+@external(erlang, "gleam_stdlib", "identity")
+pub fn concat_bit_arrays(bits: List(BitArray)) -> BytesBuilder {
+ bits
+ |> list.map(fn(b) { from_bit_array(b) })
+ |> concat()
+}
+
+/// Creates a new builder from a string.
+///
+/// Runs in constant time when running on Erlang.
+/// Runs in linear time otherwise.
+///
+@external(erlang, "gleam_stdlib", "wrap_list")
+pub fn from_string(string: String) -> BytesBuilder {
+ Text(string_builder.from_string(string))
+}
+
+/// Creates a new builder from a string builder.
+///
+/// Runs in constant time when running on Erlang.
+/// Runs in linear time otherwise.
+///
+@external(erlang, "gleam_stdlib", "wrap_list")
+pub fn from_string_builder(builder: StringBuilder) -> BytesBuilder {
+ Text(builder)
+}
+
+/// Creates a new builder from a bit array.
+///
+/// Runs in constant time.
+///
+@external(erlang, "gleam_stdlib", "wrap_list")
+pub fn from_bit_array(bits: BitArray) -> BytesBuilder {
+ Bytes(bits)
+}
+
+/// Turns an builder into a bit array.
+///
+/// Runs in linear time.
+///
+/// When running on Erlang this function is implemented natively by the
+/// virtual machine and is highly optimised.
+///
+@external(erlang, "erlang", "list_to_bitstring")
+pub fn to_bit_array(builder: BytesBuilder) -> BitArray {
+ [[builder]]
+ |> to_list([])
+ |> list.reverse
+ |> bit_array.concat
+}
+
+fn to_list(
+ stack: List(List(BytesBuilder)),
+ acc: List(BitArray),
+) -> List(BitArray) {
+ case stack {
+ [] -> acc
+
+ [[], ..remaining_stack] -> to_list(remaining_stack, acc)
+
+ [[Bytes(bits), ..rest], ..remaining_stack] ->
+ to_list([rest, ..remaining_stack], [bits, ..acc])
+
+ [[Text(builder), ..rest], ..remaining_stack] -> {
+ let bits = bit_array.from_string(string_builder.to_string(builder))
+ to_list([rest, ..remaining_stack], [bits, ..acc])
+ }
+
+ [[Many(builders), ..rest], ..remaining_stack] ->
+ to_list([builders, rest, ..remaining_stack], acc)
+ }
+}
+
+/// Returns the size of the builder's content in bytes.
+///
+/// Runs in linear time.
+///
+@external(erlang, "erlang", "iolist_size")
+pub fn byte_size(builder: BytesBuilder) -> Int {
+ [[builder]]
+ |> to_list([])
+ |> list.fold(0, fn(acc, builder) { bit_array.byte_size(builder) + acc })
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam
new file mode 100644
index 0000000..280bf9d
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/dict.gleam
@@ -0,0 +1,544 @@
+import gleam/option.{type Option}
+
+/// A dictionary of keys and values.
+///
+/// Any type can be used for the keys and values of a dict, but all the keys
+/// must be of the same type and all the values must be of the same type.
+///
+/// Each key can only be present in a dict once.
+///
+/// Dicts are not ordered in any way, and any unintentional ordering is not to
+/// be relied upon in your code as it may change in future versions of Erlang
+/// or Gleam.
+///
+/// See [the Erlang map module](https://erlang.org/doc/man/maps.html) for more
+/// information.
+///
+pub type Dict(key, value)
+
+/// Determines the number of key-value pairs in the dict.
+/// This function runs in constant time and does not need to iterate the dict.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new() |> size()
+/// 0
+/// ```
+///
+/// ```gleam
+/// > new() |> insert("key", "value") |> size()
+/// 1
+/// ```
+///
+pub fn size(dict: Dict(k, v)) -> Int {
+ do_size(dict)
+}
+
+@external(erlang, "maps", "size")
+@external(javascript, "../gleam_stdlib.mjs", "map_size")
+fn do_size(a: Dict(k, v)) -> Int
+
+/// Converts the dict to a list of 2-element tuples `#(key, value)`, one for
+/// each key-value pair in the dict.
+///
+/// The tuples in the list have no specific order.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new() |> to_list()
+/// []
+/// ```
+///
+/// ```gleam
+/// > new() |> insert("key", 0) |> to_list()
+/// [#("key", 0)]
+/// ```
+///
+pub fn to_list(dict: Dict(key, value)) -> List(#(key, value)) {
+ do_to_list(dict)
+}
+
+@external(erlang, "maps", "to_list")
+@external(javascript, "../gleam_stdlib.mjs", "map_to_list")
+fn do_to_list(a: Dict(key, value)) -> List(#(key, value))
+
+/// Converts a list of 2-element tuples `#(key, value)` to a dict.
+///
+/// If two tuples have the same key the last one in the list will be the one
+/// that is present in the dict.
+///
+pub fn from_list(list: List(#(k, v))) -> Dict(k, v) {
+ do_from_list(list)
+}
+
+@target(erlang)
+@external(erlang, "maps", "from_list")
+fn do_from_list(a: List(#(key, value))) -> Dict(key, value)
+
+@target(javascript)
+fn fold_list_of_pair(
+ over list: List(#(k, v)),
+ from initial: Dict(k, v),
+) -> Dict(k, v) {
+ case list {
+ [] -> initial
+ [x, ..rest] -> fold_list_of_pair(rest, insert(initial, x.0, x.1))
+ }
+}
+
+@target(javascript)
+fn do_from_list(list: List(#(k, v))) -> Dict(k, v) {
+ fold_list_of_pair(list, new())
+}
+
+/// Determines whether or not a value present in the dict for a given key.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new() |> insert("a", 0) |> has_key("a")
+/// True
+/// ```
+///
+/// ```gleam
+/// > new() |> insert("a", 0) |> has_key("b")
+/// False
+/// ```
+///
+pub fn has_key(dict: Dict(k, v), key: k) -> Bool {
+ do_has_key(key, dict)
+}
+
+@target(erlang)
+@external(erlang, "maps", "is_key")
+fn do_has_key(a: key, b: Dict(key, v)) -> Bool
+
+@target(javascript)
+fn do_has_key(key: k, dict: Dict(k, v)) -> Bool {
+ get(dict, key) != Error(Nil)
+}
+
+/// Creates a fresh dict that contains no values.
+///
+pub fn new() -> Dict(key, value) {
+ do_new()
+}
+
+@external(erlang, "maps", "new")
+@external(javascript, "../gleam_stdlib.mjs", "new_map")
+fn do_new() -> Dict(key, value)
+
+/// Fetches a value from a dict for a given key.
+///
+/// The dict may not have a value for the key, so the value is wrapped in a
+/// `Result`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new() |> insert("a", 0) |> get("a")
+/// Ok(0)
+/// ```
+///
+/// ```gleam
+/// > new() |> insert("a", 0) |> get("b")
+/// Error(Nil)
+/// ```
+///
+pub fn get(from: Dict(key, value), get: key) -> Result(value, Nil) {
+ do_get(from, get)
+}
+
+@external(erlang, "gleam_stdlib", "map_get")
+@external(javascript, "../gleam_stdlib.mjs", "map_get")
+fn do_get(a: Dict(key, value), b: key) -> Result(value, Nil)
+
+/// Inserts a value into the dict with the given key.
+///
+/// If the dict already has a value for the given key then the value is
+/// replaced with the new value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new() |> insert("a", 0) |> to_list
+/// [#("a", 0)]
+/// ```
+///
+/// ```gleam
+/// > new() |> insert("a", 0) |> insert("a", 5) |> to_list
+/// [#("a", 5)]
+/// ```
+///
+pub fn insert(into dict: Dict(k, v), for key: k, insert value: v) -> Dict(k, v) {
+ do_insert(key, value, dict)
+}
+
+@external(erlang, "maps", "put")
+@external(javascript, "../gleam_stdlib.mjs", "map_insert")
+fn do_insert(a: key, b: value, c: Dict(key, value)) -> Dict(key, value)
+
+/// Updates all values in a given dict by calling a given function on each key
+/// and value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [#(3, 3), #(2, 4)]
+/// > |> from_list
+/// > |> map_values(fn(key, value) { key * value })
+/// [#(3, 9), #(2, 8)]
+/// ```
+///
+pub fn map_values(in dict: Dict(k, v), with fun: fn(k, v) -> w) -> Dict(k, w) {
+ do_map_values(fun, dict)
+}
+
+@target(erlang)
+@external(erlang, "maps", "map")
+fn do_map_values(a: fn(key, value) -> b, b: Dict(key, value)) -> Dict(key, b)
+
+@target(javascript)
+fn do_map_values(f: fn(key, value) -> b, dict: Dict(key, value)) -> Dict(key, b) {
+ let f = fn(dict, k, v) { insert(dict, k, f(k, v)) }
+ dict
+ |> fold(from: new(), with: f)
+}
+
+/// Gets a list of all keys in a given dict.
+///
+/// Dicts are not ordered so the keys are not returned in any specific order. Do
+/// not write code that relies on the order keys are returned by this function
+/// as it may change in later versions of Gleam or Erlang.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > keys([#("a", 0), #("b", 1)])
+/// ["a", "b"]
+/// ```
+///
+pub fn keys(dict: Dict(keys, v)) -> List(keys) {
+ do_keys(dict)
+}
+
+@target(erlang)
+@external(erlang, "maps", "keys")
+fn do_keys(a: Dict(keys, v)) -> List(keys)
+
+@target(javascript)
+fn reverse_and_concat(remaining, accumulator) {
+ case remaining {
+ [] -> accumulator
+ [item, ..rest] -> reverse_and_concat(rest, [item, ..accumulator])
+ }
+}
+
+@target(javascript)
+fn do_keys_acc(list: List(#(k, v)), acc: List(k)) -> List(k) {
+ case list {
+ [] -> reverse_and_concat(acc, [])
+ [x, ..xs] -> do_keys_acc(xs, [x.0, ..acc])
+ }
+}
+
+@target(javascript)
+fn do_keys(dict: Dict(k, v)) -> List(k) {
+ let list_of_pairs = to_list(dict)
+ do_keys_acc(list_of_pairs, [])
+}
+
+/// Gets a list of all values in a given dict.
+///
+/// Dicts are not ordered so the values are not returned in any specific order. Do
+/// not write code that relies on the order values are returned by this function
+/// as it may change in later versions of Gleam or Erlang.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > values(from_list([#("a", 0), #("b", 1)]))
+/// [0, 1]
+/// ```
+///
+pub fn values(dict: Dict(k, values)) -> List(values) {
+ do_values(dict)
+}
+
+@target(erlang)
+@external(erlang, "maps", "values")
+fn do_values(a: Dict(k, values)) -> List(values)
+
+@target(javascript)
+fn do_values_acc(list: List(#(k, v)), acc: List(v)) -> List(v) {
+ case list {
+ [] -> reverse_and_concat(acc, [])
+ [x, ..xs] -> do_values_acc(xs, [x.1, ..acc])
+ }
+}
+
+@target(javascript)
+fn do_values(dict: Dict(k, v)) -> List(v) {
+ let list_of_pairs = to_list(dict)
+ do_values_acc(list_of_pairs, [])
+}
+
+/// Creates a new dict from a given dict, minus any entries that a given function
+/// returns `False` for.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([#("a", 0), #("b", 1)])
+/// > |> filter(fn(key, value) { value != 0 })
+/// from_list([#("b", 1)])
+/// ```
+///
+/// ```gleam
+/// > from_list([#("a", 0), #("b", 1)])
+/// > |> filter(fn(key, value) { True })
+/// from_list([#("a", 0), #("b", 1)])
+/// ```
+///
+pub fn filter(
+ in dict: Dict(k, v),
+ keeping predicate: fn(k, v) -> Bool,
+) -> Dict(k, v) {
+ do_filter(predicate, dict)
+}
+
+@target(erlang)
+@external(erlang, "maps", "filter")
+fn do_filter(a: fn(key, value) -> Bool, b: Dict(key, value)) -> Dict(key, value)
+
+@target(javascript)
+fn do_filter(
+ f: fn(key, value) -> Bool,
+ dict: Dict(key, value),
+) -> Dict(key, value) {
+ let insert = fn(dict, k, v) {
+ case f(k, v) {
+ True -> insert(dict, k, v)
+ _ -> dict
+ }
+ }
+ dict
+ |> fold(from: new(), with: insert)
+}
+
+/// Creates a new dict from a given dict, only including any entries for which the
+/// keys are in a given list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([#("a", 0), #("b", 1)])
+/// > |> take(["b"])
+/// from_list([#("b", 1)])
+/// ```
+///
+/// ```gleam
+/// > from_list([#("a", 0), #("b", 1)])
+/// > |> take(["a", "b", "c"])
+/// from_list([#("a", 0), #("b", 1)])
+/// ```
+///
+pub fn take(from dict: Dict(k, v), keeping desired_keys: List(k)) -> Dict(k, v) {
+ do_take(desired_keys, dict)
+}
+
+@target(erlang)
+@external(erlang, "maps", "with")
+fn do_take(a: List(k), b: Dict(k, v)) -> Dict(k, v)
+
+@target(javascript)
+fn insert_taken(
+ dict: Dict(k, v),
+ desired_keys: List(k),
+ acc: Dict(k, v),
+) -> Dict(k, v) {
+ let insert = fn(taken, key) {
+ case get(dict, key) {
+ Ok(value) -> insert(taken, key, value)
+ _ -> taken
+ }
+ }
+ case desired_keys {
+ [] -> acc
+ [x, ..xs] -> insert_taken(dict, xs, insert(acc, x))
+ }
+}
+
+@target(javascript)
+fn do_take(desired_keys: List(k), dict: Dict(k, v)) -> Dict(k, v) {
+ insert_taken(dict, desired_keys, new())
+}
+
+/// Creates a new dict from a pair of given dicts by combining their entries.
+///
+/// If there are entries with the same keys in both dicts the entry from the
+/// second dict takes precedence.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let a = from_list([#("a", 0), #("b", 1)])
+/// > let b = from_list([#("b", 2), #("c", 3)])
+/// > merge(a, b)
+/// from_list([#("a", 0), #("b", 2), #("c", 3)])
+/// ```
+///
+pub fn merge(into dict: Dict(k, v), from new_entries: Dict(k, v)) -> Dict(k, v) {
+ do_merge(dict, new_entries)
+}
+
+@target(erlang)
+@external(erlang, "maps", "merge")
+fn do_merge(a: Dict(k, v), b: Dict(k, v)) -> Dict(k, v)
+
+@target(javascript)
+fn insert_pair(dict: Dict(k, v), pair: #(k, v)) -> Dict(k, v) {
+ insert(dict, pair.0, pair.1)
+}
+
+@target(javascript)
+fn fold_inserts(new_entries: List(#(k, v)), dict: Dict(k, v)) -> Dict(k, v) {
+ case new_entries {
+ [] -> dict
+ [x, ..xs] -> fold_inserts(xs, insert_pair(dict, x))
+ }
+}
+
+@target(javascript)
+fn do_merge(dict: Dict(k, v), new_entries: Dict(k, v)) -> Dict(k, v) {
+ new_entries
+ |> to_list
+ |> fold_inserts(dict)
+}
+
+/// Creates a new dict from a given dict with all the same entries except for the
+/// one with a given key, if it exists.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > delete([#("a", 0), #("b", 1)], "a")
+/// from_list([#("b", 1)])
+/// ```
+///
+/// ```gleam
+/// > delete([#("a", 0), #("b", 1)], "c")
+/// from_list([#("a", 0), #("b", 1)])
+/// ```
+///
+pub fn delete(from dict: Dict(k, v), delete key: k) -> Dict(k, v) {
+ do_delete(key, dict)
+}
+
+@external(erlang, "maps", "remove")
+@external(javascript, "../gleam_stdlib.mjs", "map_remove")
+fn do_delete(a: k, b: Dict(k, v)) -> Dict(k, v)
+
+/// Creates a new dict from a given dict with all the same entries except any with
+/// keys found in a given list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > drop([#("a", 0), #("b", 1)], ["a"])
+/// from_list([#("b", 2)])
+/// ```
+///
+/// ```gleam
+/// > delete([#("a", 0), #("b", 1)], ["c"])
+/// from_list([#("a", 0), #("b", 1)])
+/// ```
+///
+/// ```gleam
+/// > drop([#("a", 0), #("b", 1)], ["a", "b", "c"])
+/// from_list([])
+/// ```
+///
+pub fn drop(from dict: Dict(k, v), drop disallowed_keys: List(k)) -> Dict(k, v) {
+ case disallowed_keys {
+ [] -> dict
+ [x, ..xs] -> drop(delete(dict, x), xs)
+ }
+}
+
+/// Creates a new dict with one entry updated using a given function.
+///
+/// If there was not an entry in the dict for the given key then the function
+/// gets `None` as its argument, otherwise it gets `Some(value)`.
+///
+/// ## Example
+///
+/// ```gleam
+/// > let increment = fn(x) {
+/// > case x {
+/// > Some(i) -> i + 1
+/// > None -> 0
+/// > }
+/// > }
+/// > let dict = from_list([#("a", 0)])
+/// >
+/// > update(dict, "a", increment)
+/// from_list([#("a", 1)])
+/// ```
+///
+/// ```gleam
+/// > update(dict, "b", increment)
+/// from_list([#("a", 0), #("b", 0)])
+/// ```
+///
+pub fn update(
+ in dict: Dict(k, v),
+ update key: k,
+ with fun: fn(Option(v)) -> v,
+) -> Dict(k, v) {
+ dict
+ |> get(key)
+ |> option.from_result
+ |> fun
+ |> insert(dict, key, _)
+}
+
+fn do_fold(list: List(#(k, v)), initial: acc, fun: fn(acc, k, v) -> acc) -> acc {
+ case list {
+ [] -> initial
+ [#(k, v), ..rest] -> do_fold(rest, fun(initial, k, v), fun)
+ }
+}
+
+/// Combines all entries into a single value by calling a given function on each
+/// one.
+///
+/// Dicts are not ordered so the values are not returned in any specific order. Do
+/// not write code that relies on the order entries are used by this function
+/// as it may change in later versions of Gleam or Erlang.
+///
+/// # Examples
+///
+/// ```gleam
+/// > let dict = from_list([#("a", 1), #("b", 3), #("c", 9)])
+/// > fold(dict, 0, fn(accumulator, key, value) { accumulator + value })
+/// 13
+/// ```
+///
+/// ```gleam
+/// > import gleam/string.{append}
+/// > fold(dict, "", fn(accumulator, key, value) { append(accumulator, key) })
+/// "abc"
+/// ```
+///
+pub fn fold(
+ over dict: Dict(k, v),
+ from initial: acc,
+ with fun: fn(acc, k, v) -> acc,
+) -> acc {
+ dict
+ |> to_list
+ |> do_fold(initial, fun)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam
new file mode 100644
index 0000000..c71c6f3
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/dynamic.gleam
@@ -0,0 +1,1508 @@
+import gleam/int
+import gleam/list
+import gleam/dict.{type Dict}
+import gleam/option.{type Option}
+import gleam/result
+import gleam/string_builder
+@target(erlang)
+import gleam/bit_array
+
+/// `Dynamic` data is data that we don't know the type of yet.
+/// We likely get data like this from interop with Erlang, or from
+/// IO with the outside world.
+///
+pub type Dynamic
+
+/// Error returned when unexpected data is encountered
+///
+pub type DecodeError {
+ DecodeError(expected: String, found: String, path: List(String))
+}
+
+pub type DecodeErrors =
+ List(DecodeError)
+
+pub type Decoder(t) =
+ fn(Dynamic) -> Result(t, DecodeErrors)
+
+/// Converts any Gleam data into `Dynamic` data.
+///
+pub fn from(a) -> Dynamic {
+ do_from(a)
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "identity")
+fn do_from(a: anything) -> Dynamic
+
+/// Unsafely casts a Dynamic value into any other type.
+///
+/// This is an escape hatch for the type system that may be useful when wrapping
+/// native Erlang APIs. It is to be used as a last measure only!
+///
+/// If you can avoid using this function, do!
+///
+pub fn unsafe_coerce(a: Dynamic) -> anything {
+ do_unsafe_coerce(a)
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "identity")
+fn do_unsafe_coerce(a: Dynamic) -> a
+
+/// Decodes a `Dynamic` value from a `Dynamic` value.
+///
+/// This function doesn't seem very useful at first, but it can be convenient
+/// when you need to give a decoder function but you don't actually care what
+/// the to-decode value is.
+///
+pub fn dynamic(value: Dynamic) -> Result(Dynamic, List(DecodeError)) {
+ Ok(value)
+}
+
+/// Checks to see whether a `Dynamic` value is a bit array, and returns that bit
+/// array if it is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > bit_array(from("Hello")) == bit_array.from_string("Hello")
+/// True
+/// ```
+///
+/// ```gleam
+/// > bit_array(from(123))
+/// Error([DecodeError(expected: "BitArray", found: "Int", path: [])])
+/// ```
+///
+pub fn bit_array(from data: Dynamic) -> Result(BitArray, DecodeErrors) {
+ decode_bit_array(data)
+}
+
+@deprecated("Please use `bit_array` instead")
+pub fn bit_string(from data: Dynamic) -> Result(BitArray, DecodeErrors) {
+ bit_array(data)
+}
+
+@external(erlang, "gleam_stdlib", "decode_bit_array")
+@external(javascript, "../gleam_stdlib.mjs", "decode_bit_array")
+fn decode_bit_array(a: Dynamic) -> Result(BitArray, DecodeErrors)
+
+/// Checks to see whether a `Dynamic` value is a string, and returns that string if
+/// it is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > string(from("Hello"))
+/// Ok("Hello")
+/// ```
+///
+/// ```gleam
+/// > string(from(123))
+/// Error([DecodeError(expected: "String", found: "Int", path: [])])
+/// ```
+///
+pub fn string(from data: Dynamic) -> Result(String, DecodeErrors) {
+ decode_string(data)
+}
+
+fn map_errors(
+ result: Result(t, DecodeErrors),
+ f: fn(DecodeError) -> DecodeError,
+) -> Result(t, DecodeErrors) {
+ result.map_error(result, list.map(_, f))
+}
+
+@target(erlang)
+fn decode_string(data: Dynamic) -> Result(String, DecodeErrors) {
+ bit_array(data)
+ |> map_errors(put_expected(_, "String"))
+ |> result.try(fn(raw) {
+ case bit_array.to_string(raw) {
+ Ok(string) -> Ok(string)
+ Error(Nil) ->
+ Error([DecodeError(expected: "String", found: "BitArray", path: [])])
+ }
+ })
+}
+
+@target(erlang)
+fn put_expected(error: DecodeError, expected: String) -> DecodeError {
+ DecodeError(..error, expected: expected)
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "decode_string")
+fn decode_string(a: Dynamic) -> Result(String, DecodeErrors)
+
+/// Return a string indicating the type of the dynamic value.
+///
+/// ```gleam
+/// > classify(from("Hello"))
+/// "String"
+/// ```
+///
+pub fn classify(data: Dynamic) -> String {
+ do_classify(data)
+}
+
+@external(erlang, "gleam_stdlib", "classify_dynamic")
+@external(javascript, "../gleam_stdlib.mjs", "classify_dynamic")
+fn do_classify(a: Dynamic) -> String
+
+/// Checks to see whether a `Dynamic` value is an int, and returns that int if it
+/// is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > int(from(123))
+/// Ok(123)
+/// ```
+///
+/// ```gleam
+/// > int(from("Hello"))
+/// Error([DecodeError(expected: "Int", found: "String", path: [])])
+/// ```
+///
+pub fn int(from data: Dynamic) -> Result(Int, DecodeErrors) {
+ decode_int(data)
+}
+
+@external(erlang, "gleam_stdlib", "decode_int")
+@external(javascript, "../gleam_stdlib.mjs", "decode_int")
+fn decode_int(a: Dynamic) -> Result(Int, DecodeErrors)
+
+/// Checks to see whether a `Dynamic` value is a float, and returns that float if
+/// it is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > float(from(2.0))
+/// Ok(2.0)
+/// ```
+///
+/// ```gleam
+/// > float(from(123))
+/// Error([DecodeError(expected: "Float", found: "Int", path: [])])
+/// ```
+///
+pub fn float(from data: Dynamic) -> Result(Float, DecodeErrors) {
+ decode_float(data)
+}
+
+@external(erlang, "gleam_stdlib", "decode_float")
+@external(javascript, "../gleam_stdlib.mjs", "decode_float")
+fn decode_float(a: Dynamic) -> Result(Float, DecodeErrors)
+
+/// Checks to see whether a `Dynamic` value is a bool, and returns that bool if
+/// it is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > bool(from(True))
+/// Ok(True)
+/// ```
+///
+/// ```gleam
+/// > bool(from(123))
+/// Error([DecodeError(expected: "Bool", found: "Int", path: [])])
+/// ```
+///
+pub fn bool(from data: Dynamic) -> Result(Bool, DecodeErrors) {
+ decode_bool(data)
+}
+
+@external(erlang, "gleam_stdlib", "decode_bool")
+@external(javascript, "../gleam_stdlib.mjs", "decode_bool")
+fn decode_bool(a: Dynamic) -> Result(Bool, DecodeErrors)
+
+/// Checks to see whether a `Dynamic` value is a list, and returns that list if it
+/// is. The types of the elements are not checked.
+///
+/// If you wish to decode all the elements in the list use the `list` function
+/// instead.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > shallow_list(from(["a", "b", "c"]))
+/// Ok([from("a"), from("b"), from("c")])
+/// ```
+///
+/// ```gleam
+/// > shallow_list(1)
+/// Error([DecodeError(expected: "List", found: "Int", path: [])])
+/// ```
+///
+pub fn shallow_list(from value: Dynamic) -> Result(List(Dynamic), DecodeErrors) {
+ decode_list(value)
+}
+
+@external(erlang, "gleam_stdlib", "decode_list")
+@external(javascript, "../gleam_stdlib.mjs", "decode_list")
+fn decode_list(a: Dynamic) -> Result(List(Dynamic), DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "decode_result")
+@external(javascript, "../gleam_stdlib.mjs", "decode_result")
+fn decode_result(a: Dynamic) -> Result(Result(a, e), DecodeErrors)
+
+/// Checks to see whether a `Dynamic` value is a result of a particular type, and
+/// returns that result if it is.
+///
+/// The `ok` and `error` arguments are decoders for decoding the `Ok` and
+/// `Error` values of the result.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(Ok(1))
+/// > |> result(ok: int, error: string)
+/// Ok(Ok(1))
+/// ```
+///
+/// ```gleam
+/// > from(Error("boom"))
+/// > |> result(ok: int, error: string)
+/// Ok(Error("boom"))
+/// ```
+///
+/// ```gleam
+/// > from(123)
+/// > |> result(ok: int, error: string)
+/// Error([DecodeError(expected: "Result", found: "Int", path: [])])
+/// ```
+///
+pub fn result(
+ ok decode_ok: Decoder(a),
+ error decode_error: Decoder(e),
+) -> Decoder(Result(a, e)) {
+ fn(value) {
+ use inner_result <- result.try(decode_result(value))
+
+ case inner_result {
+ Ok(raw) -> {
+ use value <- result.try(
+ decode_ok(raw)
+ |> map_errors(push_path(_, "ok")),
+ )
+ Ok(Ok(value))
+ }
+ Error(raw) -> {
+ use value <- result.try(
+ decode_error(raw)
+ |> map_errors(push_path(_, "error")),
+ )
+ Ok(Error(value))
+ }
+ }
+ }
+}
+
+/// Checks to see whether a `Dynamic` value is a list of a particular type, and
+/// returns that list if it is.
+///
+/// The second argument is a decoder function used to decode the elements of
+/// the list. The list is only decoded if all elements in the list can be
+/// successfully decoded using this function.
+///
+/// If you do not wish to decode all the elements in the list use the `shallow_list`
+/// function instead.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(["a", "b", "c"])
+/// > |> list(of: string)
+/// Ok(["a", "b", "c"])
+/// ```
+///
+/// ```gleam
+/// > from([1, 2, 3])
+/// > |> list(of: string)
+/// Error([DecodeError(expected: "String", found: "Int", path: ["*"])])
+/// ```
+///
+/// ```gleam
+/// > from("ok")
+/// > |> list(of: string)
+/// Error([DecodeError(expected: "List", found: "String", path: [])])
+/// ```
+///
+pub fn list(
+ of decoder_type: fn(Dynamic) -> Result(inner, DecodeErrors),
+) -> Decoder(List(inner)) {
+ fn(dynamic) {
+ use list <- result.try(shallow_list(dynamic))
+ list
+ |> list.try_map(decoder_type)
+ |> map_errors(push_path(_, "*"))
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a nullable version of a particular
+/// type, and returns a corresponding `Option` if it is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from("Hello")
+/// > |> optional(string)
+/// Ok(Some("Hello"))
+/// ```
+///
+/// ```gleam
+/// > from("Hello")
+/// > |> optional(string)
+/// Ok(Some("Hello"))
+/// ```
+///
+/// ```gleam
+/// > from(atom.from_string("null"))
+/// > |> optional(string)
+/// Ok(None)
+/// ```
+///
+/// ```gleam
+/// > from(atom.from_string("nil"))
+/// > |> optional(string)
+/// Ok(None)
+/// ```
+///
+/// ```gleam
+/// > from(atom.from_string("undefined"))
+/// > |> optional(string)
+/// Ok(None)
+/// ```
+///
+/// ```gleam
+/// > from(123)
+/// > |> optional(string)
+/// Error([DecodeError(expected: "String", found: "Int", path: [])])
+/// ```
+///
+pub fn optional(of decode: Decoder(inner)) -> Decoder(Option(inner)) {
+ fn(value) { decode_optional(value, decode) }
+}
+
+@external(erlang, "gleam_stdlib", "decode_option")
+@external(javascript, "../gleam_stdlib.mjs", "decode_option")
+fn decode_optional(a: Dynamic, b: Decoder(a)) -> Result(Option(a), DecodeErrors)
+
+/// Checks to see if a `Dynamic` value is a map with a specific field, and returns
+/// the value of that field if it is.
+///
+/// This will not succeed on a record.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/dict
+/// > dict.new()
+/// > |> dict.insert("Hello", "World")
+/// > |> from
+/// > |> field(named: "Hello", of: string)
+/// Ok("World")
+/// ```
+///
+/// ```gleam
+/// > from(123)
+/// > |> field("Hello", string)
+/// Error([DecodeError(expected: "Map", found: "Int", path: [])])
+/// ```
+///
+pub fn field(named name: a, of inner_type: Decoder(t)) -> Decoder(t) {
+ fn(value) {
+ let missing_field_error =
+ DecodeError(expected: "field", found: "nothing", path: [])
+
+ use maybe_inner <- result.try(decode_field(value, name))
+ maybe_inner
+ |> option.to_result([missing_field_error])
+ |> result.try(inner_type)
+ |> map_errors(push_path(_, name))
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a map with a specific field.
+/// If the map does not have the specified field, returns an `Ok(None)` instead of failing; otherwise,
+/// returns the decoded field wrapped in `Some(_)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/dict
+/// > dict.new()
+/// > |> dict.insert("Hello", "World")
+/// > |> from
+/// > |> field(named: "Hello", of: string)
+/// Ok(Some("World"))
+/// ```
+///
+/// ```gleam
+/// > import gleam/dict
+/// > dict.new()
+/// > |> from
+/// > |> field(named: "Hello", of: string)
+/// Ok(None)
+/// ```
+///
+/// ```gleam
+/// > from(123)
+/// > |> field("Hello", string)
+/// Error([DecodeError(expected: "Map", found: "Int", path: [])])
+/// ```
+///
+pub fn optional_field(
+ named name: a,
+ of inner_type: Decoder(t),
+) -> Decoder(Option(t)) {
+ fn(value) {
+ use maybe_inner <- result.try(decode_field(value, name))
+ case maybe_inner {
+ option.None -> Ok(option.None)
+ option.Some(dynamic_inner) ->
+ dynamic_inner
+ |> decode_optional(inner_type)
+ |> map_errors(push_path(_, name))
+ }
+ }
+}
+
+@external(erlang, "gleam_stdlib", "decode_field")
+@external(javascript, "../gleam_stdlib.mjs", "decode_field")
+fn decode_field(a: Dynamic, b: name) -> Result(Option(Dynamic), DecodeErrors)
+
+/// Checks to see if a `Dynamic` value is a tuple large enough to have a certain
+/// index, and returns the value of that index if it is.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> element(0, int)
+/// Ok(from(1))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> element(2, int)
+/// Error([
+/// DecodeError(
+/// expected: "Tuple of at least 3 elements",
+/// found: "Tuple of 2 elements",
+/// path: [],
+/// ),
+/// ])
+/// ```
+///
+pub fn element(at index: Int, of inner_type: Decoder(t)) -> Decoder(t) {
+ fn(data: Dynamic) {
+ use tuple <- result.try(decode_tuple(data))
+ let size = tuple_size(tuple)
+ use data <- result.try(case index >= 0 {
+ True ->
+ case index < size {
+ True -> tuple_get(tuple, index)
+ False -> at_least_decode_tuple_error(index + 1, data)
+ }
+ False ->
+ case int.absolute_value(index) <= size {
+ True -> tuple_get(tuple, size + index)
+ False -> at_least_decode_tuple_error(int.absolute_value(index), data)
+ }
+ })
+ inner_type(data)
+ |> map_errors(push_path(_, index))
+ }
+}
+
+fn at_least_decode_tuple_error(
+ size: Int,
+ data: Dynamic,
+) -> Result(a, DecodeErrors) {
+ let s = case size {
+ 1 -> ""
+ _ -> "s"
+ }
+ let error =
+ ["Tuple of at least ", int.to_string(size), " element", s]
+ |> string_builder.from_strings
+ |> string_builder.to_string
+ |> DecodeError(found: classify(data), path: [])
+ Error([error])
+}
+
+// A tuple of unknown size
+type UnknownTuple
+
+@external(erlang, "gleam_stdlib", "decode_tuple")
+@external(javascript, "../gleam_stdlib.mjs", "decode_tuple")
+fn decode_tuple(a: Dynamic) -> Result(UnknownTuple, DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "decode_tuple2")
+@external(javascript, "../gleam_stdlib.mjs", "decode_tuple2")
+fn decode_tuple2(a: Dynamic) -> Result(#(Dynamic, Dynamic), DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "decode_tuple3")
+@external(javascript, "../gleam_stdlib.mjs", "decode_tuple3")
+fn decode_tuple3(
+ a: Dynamic,
+) -> Result(#(Dynamic, Dynamic, Dynamic), DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "decode_tuple4")
+@external(javascript, "../gleam_stdlib.mjs", "decode_tuple4")
+fn decode_tuple4(
+ a: Dynamic,
+) -> Result(#(Dynamic, Dynamic, Dynamic, Dynamic), DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "decode_tuple5")
+@external(javascript, "../gleam_stdlib.mjs", "decode_tuple5")
+fn decode_tuple5(
+ a: Dynamic,
+) -> Result(#(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic), DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "decode_tuple6")
+@external(javascript, "../gleam_stdlib.mjs", "decode_tuple6")
+fn decode_tuple6(
+ a: Dynamic,
+) -> Result(
+ #(Dynamic, Dynamic, Dynamic, Dynamic, Dynamic, Dynamic),
+ DecodeErrors,
+)
+
+@external(erlang, "gleam_stdlib", "tuple_get")
+@external(javascript, "../gleam_stdlib.mjs", "tuple_get")
+fn tuple_get(a: UnknownTuple, b: Int) -> Result(Dynamic, DecodeErrors)
+
+@external(erlang, "gleam_stdlib", "size_of_tuple")
+@external(javascript, "../gleam_stdlib.mjs", "length")
+fn tuple_size(a: UnknownTuple) -> Int
+
+fn tuple_errors(
+ result: Result(a, List(DecodeError)),
+ name: String,
+) -> List(DecodeError) {
+ case result {
+ Ok(_) -> []
+ Error(errors) -> list.map(errors, push_path(_, name))
+ }
+}
+
+fn push_path(error: DecodeError, name: t) -> DecodeError {
+ let name = from(name)
+ let decoder = any([string, fn(x) { result.map(int(x), int.to_string) }])
+ let name = case decoder(name) {
+ Ok(name) -> name
+ Error(_) ->
+ ["<", classify(name), ">"]
+ |> string_builder.from_strings
+ |> string_builder.to_string
+ }
+ DecodeError(..error, path: [name, ..error.path])
+}
+
+/// Checks to see if a `Dynamic` value is a 2-element tuple, list or array containing
+/// specifically typed elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> tuple2(int, int)
+/// Ok(#(1, 2))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2.0))
+/// > |> tuple2(int, float)
+/// Ok(#(1, 2.0))
+/// ```
+///
+/// ```gleam
+/// > from([1, 2])
+/// > |> tuple2(int, int)
+/// Ok(#(1, 2))
+/// ```
+///
+/// ```gleam
+/// > from([from(1), from(2.0)])
+/// > |> tuple2(int, float)
+/// Ok(#(1, 2.0))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2, 3))
+/// > |> tuple2(int, float)
+/// Error([
+/// DecodeError(expected: "Tuple of 2 elements", found: "Tuple of 3 elements", path: []),
+/// ])
+/// ```
+///
+/// ```gleam
+/// > from("")
+/// > |> tuple2(int, float)
+/// Error([DecodeError(expected: "Tuple of 2 elements", found: "String", path: [])])
+/// ```
+///
+pub fn tuple2(
+ first decode1: Decoder(a),
+ second decode2: Decoder(b),
+) -> Decoder(#(a, b)) {
+ fn(value) {
+ use #(a, b) <- result.try(decode_tuple2(value))
+ case decode1(a), decode2(b) {
+ Ok(a), Ok(b) -> Ok(#(a, b))
+ a, b ->
+ tuple_errors(a, "0")
+ |> list.append(tuple_errors(b, "1"))
+ |> Error
+ }
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a 3-element tuple, list or array containing
+/// specifically typed elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2, 3))
+/// > |> tuple3(int, int, int)
+/// Ok(#(1, 2, 3))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3"))
+/// > |> tuple3(int, float, string)
+/// Ok(#(1, 2.0, "3"))
+/// ```
+///
+/// ```gleam
+/// > from([1, 2, 3])
+/// > |> tuple3(int, int, int)
+/// Ok(#(1, 2, 3))
+/// ```
+///
+/// ```gleam
+/// > from([from(1), from(2.0), from("3")])
+/// > |> tuple3(int, float, string)
+/// Ok(#(1, 2.0, "3"))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> tuple3(int, float, string)
+/// Error([
+/// DecodeError(expected: "Tuple of 3 elements", found: "Tuple of 2 elements", path: [])),
+/// ])
+/// ```
+///
+/// ```gleam
+/// > from("")
+/// > |> tuple3(int, float, string)
+/// Error([
+/// DecodeError(expected: "Tuple of 3 elements", found: "String", path: []),
+/// ])
+/// ```
+///
+pub fn tuple3(
+ first decode1: Decoder(a),
+ second decode2: Decoder(b),
+ third decode3: Decoder(c),
+) -> Decoder(#(a, b, c)) {
+ fn(value) {
+ use #(a, b, c) <- result.try(decode_tuple3(value))
+ case decode1(a), decode2(b), decode3(c) {
+ Ok(a), Ok(b), Ok(c) -> Ok(#(a, b, c))
+ a, b, c ->
+ tuple_errors(a, "0")
+ |> list.append(tuple_errors(b, "1"))
+ |> list.append(tuple_errors(c, "2"))
+ |> Error
+ }
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a 4-element tuple, list or array containing
+/// specifically typed elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2, 3, 4))
+/// > |> tuple4(int, int, int, int)
+/// Ok(#(1, 2, 3, 4))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3", 4))
+/// > |> tuple4(int, float, string, int)
+/// Ok(#(1, 2.0, "3", 4))
+/// ```
+///
+/// ```gleam
+/// > from([1, 2, 3, 4])
+/// > |> tuple4(int, int, int, int)
+/// Ok(#(1, 2, 3, 4))
+/// ```
+///
+/// ```gleam
+/// > from([from(1), from(2.0), from("3"), from(4)])
+/// > |> tuple4(int, float, string, int)
+/// Ok(#(1, 2.0, "3", 4))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> tuple4(int, float, string, int)
+/// Error([
+/// DecodeError(expected: "Tuple of 4 elements", found: "Tuple of 2 elements", path: []),
+/// ])
+/// ```
+///
+/// ```gleam
+/// > from("")
+/// > |> tuple4(int, float, string, int)
+/// Error([
+/// DecodeError(expected: "Tuple of 4 elements", found: "String", path: []),
+/// ])
+/// ```
+///
+pub fn tuple4(
+ first decode1: Decoder(a),
+ second decode2: Decoder(b),
+ third decode3: Decoder(c),
+ fourth decode4: Decoder(d),
+) -> Decoder(#(a, b, c, d)) {
+ fn(value) {
+ use #(a, b, c, d) <- result.try(decode_tuple4(value))
+ case decode1(a), decode2(b), decode3(c), decode4(d) {
+ Ok(a), Ok(b), Ok(c), Ok(d) -> Ok(#(a, b, c, d))
+ a, b, c, d ->
+ tuple_errors(a, "0")
+ |> list.append(tuple_errors(b, "1"))
+ |> list.append(tuple_errors(c, "2"))
+ |> list.append(tuple_errors(d, "3"))
+ |> Error
+ }
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a 5-element tuple, list or array containing
+/// specifically typed elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2, 3, 4, 5))
+/// > |> tuple5(int, int, int, int, int)
+/// Ok(#(1, 2, 3, 4, 5))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3", 4, 5))
+/// > |> tuple5(int, float, string, int, int)
+/// Ok(#(1, 2.0, "3", 4, 5))
+/// ```
+///
+/// ```gleam
+/// > from([1, 2, 3, 4, 5])
+/// > |> tuple5(int, int, int, int, int)
+/// Ok(#(1, 2, 3, 4, 5))
+/// ```
+///
+/// ```gleam
+/// > from([from(1), from(2.0), from("3"), from(4), from(True)])
+/// > |> tuple5(int, float, string, int, bool)
+/// Ok(#(1, 2.0, "3", 4, True))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> tuple5(int, float, string, int, int)
+/// Error([
+/// DecodeError(expected: "Tuple of 5 elements", found: "Tuple of 2 elements", path: [])),
+/// ])
+/// ```
+///
+/// ```gleam
+/// > from("")
+/// > |> tuple5(int, float, string, int, int)
+/// Error([DecodeError(expected: "Tuple of 5 elements", found: "String", path: [])])
+/// ```
+///
+pub fn tuple5(
+ first decode1: Decoder(a),
+ second decode2: Decoder(b),
+ third decode3: Decoder(c),
+ fourth decode4: Decoder(d),
+ fifth decode5: Decoder(e),
+) -> Decoder(#(a, b, c, d, e)) {
+ fn(value) {
+ use #(a, b, c, d, e) <- result.try(decode_tuple5(value))
+ case decode1(a), decode2(b), decode3(c), decode4(d), decode5(e) {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e) -> Ok(#(a, b, c, d, e))
+ a, b, c, d, e ->
+ tuple_errors(a, "0")
+ |> list.append(tuple_errors(b, "1"))
+ |> list.append(tuple_errors(c, "2"))
+ |> list.append(tuple_errors(d, "3"))
+ |> list.append(tuple_errors(e, "4"))
+ |> Error
+ }
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a 6-element tuple, list or array containing
+/// specifically typed elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2, 3, 4, 5, 6))
+/// > |> tuple6(int, int, int, int, int, int)
+/// Ok(#(1, 2, 3, 4, 5, 6))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3", 4, 5, 6))
+/// > |> tuple6(int, float, string, int, int, int)
+/// Ok(#(1, 2.0, "3", 4, 5, 6))
+/// ```
+///
+/// ```gleam
+/// > from([1, 2, 3, 4, 5, 6])
+/// > |> tuple6(int, int, int, int, int, int)
+/// Ok(#(1, 2, 3, 4, 5, 6))
+/// ```
+///
+/// ```gleam
+/// > from([from(1), from(2.0), from("3"), from(4), from(True), from(False)])
+/// > |> tuple6(int, float, string, int, bool, bool)
+/// Ok(#(1, 2.0, "3", 4, True, False))
+/// ```
+///
+/// ```gleam
+/// > from(#(1, 2))
+/// > |> tuple6(int, float, string, int, int, int)
+/// Error([
+/// DecodeError(expected: "Tuple of 6 elements", found: "Tuple of 2 elements", path: []),
+/// ])
+/// ```
+///
+/// ```gleam
+/// > from("")
+/// > |> tuple6(int, float, string, int, int, int)
+/// Error([DecodeError(expected: "Tuple of 6 elements", found: "String", path: [])])
+/// ```
+///
+pub fn tuple6(
+ first decode1: Decoder(a),
+ second decode2: Decoder(b),
+ third decode3: Decoder(c),
+ fourth decode4: Decoder(d),
+ fifth decode5: Decoder(e),
+ sixth decode6: Decoder(f),
+) -> Decoder(#(a, b, c, d, e, f)) {
+ fn(value) {
+ use #(a, b, c, d, e, f) <- result.try(decode_tuple6(value))
+ case
+ decode1(a),
+ decode2(b),
+ decode3(c),
+ decode4(d),
+ decode5(e),
+ decode6(f)
+ {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f) -> Ok(#(a, b, c, d, e, f))
+ a, b, c, d, e, f ->
+ tuple_errors(a, "0")
+ |> list.append(tuple_errors(b, "1"))
+ |> list.append(tuple_errors(c, "2"))
+ |> list.append(tuple_errors(d, "3"))
+ |> list.append(tuple_errors(e, "4"))
+ |> list.append(tuple_errors(f, "5"))
+ |> Error
+ }
+ }
+}
+
+/// Checks to see if a `Dynamic` value is a dict.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/dict
+/// > dict.new() |> from |> map(string, int)
+/// Ok(dict.new())
+/// ```
+///
+/// ```gleam
+/// > from(1) |> map(string, int)
+/// Error(DecodeError(expected: "Map", found: "Int", path: []))
+/// ```
+///
+/// ```gleam
+/// > from("") |> map(string, int)
+/// Error(DecodeError(expected: "Map", found: "String", path: []))
+/// ```
+///
+pub fn dict(
+ of key_type: Decoder(k),
+ to value_type: Decoder(v),
+) -> Decoder(Dict(k, v)) {
+ fn(value) {
+ use map <- result.try(decode_map(value))
+ use pairs <- result.try(
+ map
+ |> dict.to_list
+ |> list.try_map(fn(pair) {
+ let #(k, v) = pair
+ use k <- result.try(
+ key_type(k)
+ |> map_errors(push_path(_, "keys")),
+ )
+ use v <- result.try(
+ value_type(v)
+ |> map_errors(push_path(_, "values")),
+ )
+ Ok(#(k, v))
+ }),
+ )
+ Ok(dict.from_list(pairs))
+ }
+}
+
+@deprecated("Use `dict` instead")
+pub fn map(
+ of key_type: Decoder(k),
+ to value_type: Decoder(v),
+) -> Decoder(Dict(k, v)) {
+ dict(key_type, value_type)
+}
+
+@external(erlang, "gleam_stdlib", "decode_map")
+@external(javascript, "../gleam_stdlib.mjs", "decode_map")
+fn decode_map(a: Dynamic) -> Result(Dict(Dynamic, Dynamic), DecodeErrors)
+
+/// Joins multiple decoders into one. When run they will each be tried in turn
+/// until one succeeds, or they all fail.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/result
+/// > let bool_or_string = any(of: [
+/// > string,
+/// > fn(x) { result.map(bool(x), fn(_) { "a bool" }) }
+/// > ])
+/// > bool_or_string(from("ok"))
+/// Ok("ok")
+/// ```
+///
+/// ```gleam
+/// > bool_or_string(from(True))
+/// Ok("a bool")
+/// ```
+///
+/// ```gleam
+/// > bool_or_string(from(1))
+/// Error(DecodeError(expected: "another type", found: "Int", path: []))
+/// ```
+///
+pub fn any(of decoders: List(Decoder(t))) -> Decoder(t) {
+ fn(data) {
+ case decoders {
+ [] ->
+ Error([
+ DecodeError(found: classify(data), expected: "another type", path: []),
+ ])
+
+ [decoder, ..decoders] ->
+ case decoder(data) {
+ Ok(decoded) -> Ok(decoded)
+ Error(_) -> any(decoders)(data)
+ }
+ }
+ }
+}
+
+/// Decode 1 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3"))
+/// > |> decode1(MyRecord, element(0, int))
+/// Ok(MyRecord(1))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", ""))
+/// > |> decode1(MyRecord, element(0, int))
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// ])
+/// ```
+///
+pub fn decode1(constructor: fn(t1) -> t, t1: Decoder(t1)) -> Decoder(t) {
+ fn(value) {
+ case t1(value) {
+ Ok(a) -> Ok(constructor(a))
+ a -> Error(all_errors(a))
+ }
+ }
+}
+
+/// Decode 2 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3"))
+/// > |> decode2(MyRecord, element(0, int), element(1, float))
+/// Ok(MyRecord(1, 2.0))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", ""))
+/// > |> decode2(MyRecord, element(0, int), element(1, float))
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode2(
+ constructor: fn(t1, t2) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+) -> Decoder(t) {
+ fn(value) {
+ case t1(value), t2(value) {
+ Ok(a), Ok(b) -> Ok(constructor(a, b))
+ a, b -> Error(list.concat([all_errors(a), all_errors(b)]))
+ }
+ }
+}
+
+/// Decode 3 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.0, "3"))
+/// > |> decode3(MyRecord, element(0, int), element(1, float), element(2, string))
+/// Ok(MyRecord(1, 2.0, "3"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", ""))
+/// > |> decode3(MyRecord, element(0, int), element(1, float), element(2, string))
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode3(
+ constructor: fn(t1, t2, t3) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+) -> Decoder(t) {
+ fn(value) {
+ case t1(value), t2(value), t3(value) {
+ Ok(a), Ok(b), Ok(c) -> Ok(constructor(a, b, c))
+ a, b, c ->
+ Error(list.concat([all_errors(a), all_errors(b), all_errors(c)]))
+ }
+ }
+}
+
+/// Decode 4 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.1, "3", "4"))
+/// > |> decode4(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > )
+/// Ok(MyRecord(1, 2.1, "3", "4"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", "", ""))
+/// > |> decode4(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > )
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode4(
+ constructor: fn(t1, t2, t3, t4) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+ t4: Decoder(t4),
+) -> Decoder(t) {
+ fn(x: Dynamic) {
+ case t1(x), t2(x), t3(x), t4(x) {
+ Ok(a), Ok(b), Ok(c), Ok(d) -> Ok(constructor(a, b, c, d))
+ a, b, c, d ->
+ Error(list.concat([
+ all_errors(a),
+ all_errors(b),
+ all_errors(c),
+ all_errors(d),
+ ]))
+ }
+ }
+}
+
+/// Decode 5 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.1, "3", "4", "5"))
+/// > |> decode5(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > )
+/// Ok(MyRecord(1, 2.1, "3", "4", "5"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", "", "", ""))
+/// > |> decode5(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > )
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode5(
+ constructor: fn(t1, t2, t3, t4, t5) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+ t4: Decoder(t4),
+ t5: Decoder(t5),
+) -> Decoder(t) {
+ fn(x: Dynamic) {
+ case t1(x), t2(x), t3(x), t4(x), t5(x) {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e) -> Ok(constructor(a, b, c, d, e))
+ a, b, c, d, e ->
+ Error(list.concat([
+ all_errors(a),
+ all_errors(b),
+ all_errors(c),
+ all_errors(d),
+ all_errors(e),
+ ]))
+ }
+ }
+}
+
+/// Decode 6 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.1, "3", "4", "5", "6"))
+/// > |> decode6(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > )
+/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", "", "", "", ""))
+/// > |> decode6(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > )
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode6(
+ constructor: fn(t1, t2, t3, t4, t5, t6) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+ t4: Decoder(t4),
+ t5: Decoder(t5),
+ t6: Decoder(t6),
+) -> Decoder(t) {
+ fn(x: Dynamic) {
+ case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x) {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f) ->
+ Ok(constructor(a, b, c, d, e, f))
+ a, b, c, d, e, f ->
+ Error(list.concat([
+ all_errors(a),
+ all_errors(b),
+ all_errors(c),
+ all_errors(d),
+ all_errors(e),
+ all_errors(f),
+ ]))
+ }
+ }
+}
+
+/// Decode 7 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.1, "3", "4", "5", "6"))
+/// > |> decode7(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > element(6, string),
+/// > )
+/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6", "7"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", "", "", "", "", ""))
+/// > |> decode7(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > element(6, string),
+/// > )
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode7(
+ constructor: fn(t1, t2, t3, t4, t5, t6, t7) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+ t4: Decoder(t4),
+ t5: Decoder(t5),
+ t6: Decoder(t6),
+ t7: Decoder(t7),
+) -> Decoder(t) {
+ fn(x: Dynamic) {
+ case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x), t7(x) {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f), Ok(g) ->
+ Ok(constructor(a, b, c, d, e, f, g))
+ a, b, c, d, e, f, g ->
+ Error(list.concat([
+ all_errors(a),
+ all_errors(b),
+ all_errors(c),
+ all_errors(d),
+ all_errors(e),
+ all_errors(f),
+ all_errors(g),
+ ]))
+ }
+ }
+}
+
+/// Decode 8 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.1, "3", "4", "5", "6", "7", "8"))
+/// > |> decode8(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > element(6, string),
+/// > element(7, string),
+/// > )
+/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6", "7", "8"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", "", "", "", "", "", ""))
+/// > |> decode8(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > element(6, string),
+/// > element(7, string),
+/// > )
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode8(
+ constructor: fn(t1, t2, t3, t4, t5, t6, t7, t8) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+ t4: Decoder(t4),
+ t5: Decoder(t5),
+ t6: Decoder(t6),
+ t7: Decoder(t7),
+ t8: Decoder(t8),
+) -> Decoder(t) {
+ fn(x: Dynamic) {
+ case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x), t7(x), t8(x) {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f), Ok(g), Ok(h) ->
+ Ok(constructor(a, b, c, d, e, f, g, h))
+ a, b, c, d, e, f, g, h ->
+ Error(list.concat([
+ all_errors(a),
+ all_errors(b),
+ all_errors(c),
+ all_errors(d),
+ all_errors(e),
+ all_errors(f),
+ all_errors(g),
+ all_errors(h),
+ ]))
+ }
+ }
+}
+
+/// Decode 9 values from a `Dynamic` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from(#(1, 2.1, "3", "4", "5", "6", "7", "8", "9"))
+/// > |> decode9(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > element(6, string),
+/// > element(7, string),
+/// > element(8, string),
+/// > )
+/// Ok(MyRecord(1, 2.1, "3", "4", "5", "6", "7", "8", "9"))
+/// ```
+///
+/// ```gleam
+/// > from(#("", "", "", "", "", "", "", "", ""))
+/// > |> decode9(
+/// > MyRecord,
+/// > element(0, int),
+/// > element(1, float),
+/// > element(2, string),
+/// > element(3, string),
+/// > element(4, string),
+/// > element(5, string),
+/// > element(6, string),
+/// > element(7, string),
+/// > element(8, string),
+/// > )
+/// Error([
+/// DecodeError(expected: "Int", found: "String", path: ["0"]),
+/// DecodeError(expected: "Float", found: "String", path: ["1"]),
+/// ])
+/// ```
+///
+pub fn decode9(
+ constructor: fn(t1, t2, t3, t4, t5, t6, t7, t8, t9) -> t,
+ t1: Decoder(t1),
+ t2: Decoder(t2),
+ t3: Decoder(t3),
+ t4: Decoder(t4),
+ t5: Decoder(t5),
+ t6: Decoder(t6),
+ t7: Decoder(t7),
+ t8: Decoder(t8),
+ t9: Decoder(t9),
+) -> Decoder(t) {
+ fn(x: Dynamic) {
+ case t1(x), t2(x), t3(x), t4(x), t5(x), t6(x), t7(x), t8(x), t9(x) {
+ Ok(a), Ok(b), Ok(c), Ok(d), Ok(e), Ok(f), Ok(g), Ok(h), Ok(i) ->
+ Ok(constructor(a, b, c, d, e, f, g, h, i))
+ a, b, c, d, e, f, g, h, i ->
+ Error(list.concat([
+ all_errors(a),
+ all_errors(b),
+ all_errors(c),
+ all_errors(d),
+ all_errors(e),
+ all_errors(f),
+ all_errors(g),
+ all_errors(h),
+ all_errors(i),
+ ]))
+ }
+ }
+}
+
+fn all_errors(result: Result(a, List(DecodeError))) -> List(DecodeError) {
+ case result {
+ Ok(_) -> []
+ Error(errors) -> errors
+ }
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam
new file mode 100644
index 0000000..5d62419
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/float.gleam
@@ -0,0 +1,546 @@
+//// Functions for working with floats.
+////
+//// ## Division by zero
+////
+//// Gleam runs on the Erlang virtual machine, which does not follow the IEEE
+//// 754 standard for floating point arithmetic and does not have an `Infinity`
+//// value. In Erlang division by zero results in a crash, however Gleam does
+//// not have partial functions and operators in core so instead division by zero
+//// returns zero, a behaviour taken from Pony, Coq, and Lean.
+////
+//// This may seem unexpected at first, but it is no less mathematically valid
+//// than crashing or returning a special value. Division by zero is undefined
+//// in mathematics.
+
+import gleam/order.{type Order}
+
+/// Attempts to parse a string as a `Float`, returning `Error(Nil)` if it was
+/// not possible.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > parse("2.3")
+/// Ok(2.3)
+/// ```
+///
+/// ```gleam
+/// > parse("ABC")
+/// Error(Nil)
+/// ```
+///
+pub fn parse(string: String) -> Result(Float, Nil) {
+ do_parse(string)
+}
+
+@external(erlang, "gleam_stdlib", "parse_float")
+@external(javascript, "../gleam_stdlib.mjs", "parse_float")
+fn do_parse(a: String) -> Result(Float, Nil)
+
+/// Returns the string representation of the provided `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_string(2.3)
+/// "2.3"
+/// ```
+///
+pub fn to_string(x: Float) -> String {
+ do_to_string(x)
+}
+
+@external(erlang, "gleam_stdlib", "float_to_string")
+@external(javascript, "../gleam_stdlib.mjs", "float_to_string")
+fn do_to_string(a: Float) -> String
+
+/// Restricts a `Float` between a lower and upper bound.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > clamp(1.2, min: 1.4, max: 1.6)
+/// 1.4
+/// ```
+///
+pub fn clamp(x: Float, min min_bound: Float, max max_bound: Float) -> Float {
+ x
+ |> min(max_bound)
+ |> max(min_bound)
+}
+
+/// Compares two `Float`s, returning an `Order`:
+/// `Lt` for lower than, `Eq` for equals, or `Gt` for greater than.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > compare(2.0, 2.3)
+/// Lt
+/// ```
+///
+/// To handle
+/// [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems)
+/// you may use [`loosely_compare`](#loosely_compare) instead.
+///
+pub fn compare(a: Float, with b: Float) -> Order {
+ case a == b {
+ True -> order.Eq
+ False ->
+ case a <. b {
+ True -> order.Lt
+ False -> order.Gt
+ }
+ }
+}
+
+/// Compares two `Float`s within a tolerance, returning an `Order`:
+/// `Lt` for lower than, `Eq` for equals, or `Gt` for greater than.
+///
+/// This function allows Float comparison while handling
+/// [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems).
+///
+/// Notice: For `Float`s the tolerance won't be exact:
+/// `5.3 - 5.0` is not exactly `0.3`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > loosely_compare(5.0, with: 5.3, tolerating: 0.5)
+/// Eq
+/// ```
+///
+/// If you want to check only for equality you may use
+/// [`loosely_equals`](#loosely_equals) instead.
+///
+pub fn loosely_compare(
+ a: Float,
+ with b: Float,
+ tolerating tolerance: Float,
+) -> Order {
+ let difference = absolute_value(a -. b)
+ case difference <=. tolerance {
+ True -> order.Eq
+ False -> compare(a, b)
+ }
+}
+
+/// Checks for equality of two `Float`s within a tolerance,
+/// returning an `Bool`.
+///
+/// This function allows Float comparison while handling
+/// [Floating Point Imprecision](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems).
+///
+/// Notice: For `Float`s the tolerance won't be exact:
+/// `5.3 - 5.0` is not exactly `0.3`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > loosely_equals(5.0, with: 5.3, tolerating: 0.5)
+/// True
+/// ```
+///
+/// ```gleam
+/// > loosely_equals(5.0, with: 5.1, tolerating: 0.1)
+/// False
+/// ```
+///
+pub fn loosely_equals(
+ a: Float,
+ with b: Float,
+ tolerating tolerance: Float,
+) -> Bool {
+ let difference = absolute_value(a -. b)
+ difference <=. tolerance
+}
+
+/// Compares two `Float`s, returning the smaller of the two.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > min(2.0, 2.3)
+/// 2.0
+/// ```
+///
+pub fn min(a: Float, b: Float) -> Float {
+ case a <. b {
+ True -> a
+ False -> b
+ }
+}
+
+/// Compares two `Float`s, returning the larger of the two.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > max(2.0, 2.3)
+/// 2.3
+/// ```
+///
+pub fn max(a: Float, b: Float) -> Float {
+ case a >. b {
+ True -> a
+ False -> b
+ }
+}
+
+/// Rounds the value to the next highest whole number as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > ceiling(2.3)
+/// 3.0
+/// ```
+///
+pub fn ceiling(x: Float) -> Float {
+ do_ceiling(x)
+}
+
+@external(erlang, "math", "ceil")
+@external(javascript, "../gleam_stdlib.mjs", "ceiling")
+fn do_ceiling(a: Float) -> Float
+
+/// Rounds the value to the next lowest whole number as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > floor(2.3)
+/// 2.0
+/// ```
+///
+pub fn floor(x: Float) -> Float {
+ do_floor(x)
+}
+
+@external(erlang, "math", "floor")
+@external(javascript, "../gleam_stdlib.mjs", "floor")
+fn do_floor(a: Float) -> Float
+
+/// Rounds the value to the nearest whole number as an `Int`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > round(2.3)
+/// 2
+/// ```
+///
+/// ```gleam
+/// > round(2.5)
+/// 3
+/// ```
+///
+pub fn round(x: Float) -> Int {
+ do_round(x)
+}
+
+@target(erlang)
+@external(erlang, "erlang", "round")
+fn do_round(a: Float) -> Int
+
+@target(javascript)
+fn do_round(x: Float) -> Int {
+ case x >=. 0.0 {
+ True -> js_round(x)
+ _ -> 0 - js_round(negate(x))
+ }
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "round")
+fn js_round(a: Float) -> Int
+
+/// Returns the value as an `Int`, truncating all decimal digits.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > truncate(2.4343434847383438)
+/// 2
+/// ```
+///
+pub fn truncate(x: Float) -> Int {
+ do_truncate(x)
+}
+
+@external(erlang, "erlang", "trunc")
+@external(javascript, "../gleam_stdlib.mjs", "truncate")
+fn do_truncate(a: Float) -> Int
+
+/// Returns the absolute value of the input as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > absolute_value(-12.5)
+/// 12.5
+/// ```
+///
+/// ```gleam
+/// > absolute_value(10.2)
+/// 10.2
+/// ```
+///
+pub fn absolute_value(x: Float) -> Float {
+ case x >=. 0.0 {
+ True -> x
+ _ -> 0.0 -. x
+ }
+}
+
+/// Returns the results of the base being raised to the power of the
+/// exponent, as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > power(2.0, -1.0)
+/// Ok(0.5)
+/// ```
+///
+/// ```gleam
+/// > power(2.0, 2.0)
+/// Ok(4.0)
+/// ```
+///
+/// ```gleam
+/// > power(8.0, 1.5)
+/// Ok(22.627416997969522)
+/// ```
+///
+/// ```gleam
+/// > 4.0 |> power(of: 2.0)
+/// Ok(16.0)
+/// ```
+///
+/// ```gleam
+/// > power(-1.0, 0.5)
+/// Error(Nil)
+/// ```
+///
+pub fn power(base: Float, of exponent: Float) -> Result(Float, Nil) {
+ let fractional: Bool = ceiling(exponent) -. exponent >. 0.0
+ // In the following check:
+ // 1. If the base is negative and the exponent is fractional then
+ // return an error as it will otherwise be an imaginary number
+ // 2. If the base is 0 and the exponent is negative then the expression
+ // is equivalent to the exponent divided by 0 and an error should be
+ // returned
+ case base <. 0.0 && fractional || base == 0.0 && exponent <. 0.0 {
+ True -> Error(Nil)
+ False -> Ok(do_power(base, exponent))
+ }
+}
+
+@external(erlang, "math", "pow")
+@external(javascript, "../gleam_stdlib.mjs", "power")
+fn do_power(a: Float, b: Float) -> Float
+
+/// Returns the square root of the input as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > square_root(4.0)
+/// Ok(2.0)
+/// ```
+///
+/// ```gleam
+/// > square_root(-16.0)
+/// Error(Nil)
+/// ```
+///
+pub fn square_root(x: Float) -> Result(Float, Nil) {
+ power(x, 0.5)
+}
+
+/// Returns the negative of the value provided.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > negate(1.0)
+/// -1.0
+/// ```
+///
+pub fn negate(x: Float) -> Float {
+ -1.0 *. x
+}
+
+/// Sums a list of `Float`s.
+///
+/// ## Example
+///
+/// ```gleam
+/// > sum([1.0, 2.2, 3.3])
+/// 6.5
+/// ```
+///
+pub fn sum(numbers: List(Float)) -> Float {
+ numbers
+ |> do_sum(0.0)
+}
+
+fn do_sum(numbers: List(Float), initial: Float) -> Float {
+ case numbers {
+ [] -> initial
+ [x, ..rest] -> do_sum(rest, x +. initial)
+ }
+}
+
+/// Multiplies a list of `Float`s and returns the product.
+///
+/// ## Example
+///
+/// ```gleam
+/// > product([2.5, 3.2, 4.2])
+/// 33.6
+/// ```
+///
+pub fn product(numbers: List(Float)) -> Float {
+ case numbers {
+ [] -> 1.0
+ _ -> do_product(numbers, 1.0)
+ }
+}
+
+fn do_product(numbers: List(Float), initial: Float) -> Float {
+ case numbers {
+ [] -> initial
+ [x, ..rest] -> do_product(rest, x *. initial)
+ }
+}
+
+/// Generates a random float between the given minimum and maximum values.
+///
+///
+/// ## Examples
+///
+/// ```gleam
+/// > random(1.0, 5.0)
+/// 2.646355926896028
+/// ```
+///
+pub fn random(min: Float, max: Float) -> Float {
+ do_random_uniform() *. { max -. min } +. min
+}
+
+/// Returns a random float uniformly distributed in the value range
+/// 0.0 =< X < 1.0 and updates the state in the process dictionary.
+/// See: <https://www.erlang.org/doc/man/rand.html#uniform-0>
+///
+@external(erlang, "rand", "uniform")
+@external(javascript, "../gleam_stdlib.mjs", "random_uniform")
+fn do_random_uniform() -> Float
+
+/// Returns division of the inputs as a `Result`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > divide(0.0, 1.0)
+/// Ok(1.0)
+/// ```
+///
+/// ```gleam
+/// > divide(1.0, 0.0)
+/// Error(Nil)
+/// ```
+///
+pub fn divide(a: Float, by b: Float) -> Result(Float, Nil) {
+ case b {
+ 0.0 -> Error(Nil)
+ b -> Ok(a /. b)
+ }
+}
+
+/// Adds two floats together.
+///
+/// It's the function equivalent of the `+.` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > add(1.0, 2.0)
+/// 3.0
+/// ```
+///
+/// ```gleam
+/// > import gleam/list
+/// > list.fold([1.0, 2.0, 3.0], 0.0, add)
+/// 6.0
+/// ```
+///
+/// ```gleam
+/// > 3.0 |> add(2.0)
+/// 5.0
+/// ```
+///
+pub fn add(a: Float, b: Float) -> Float {
+ a +. b
+}
+
+/// Multiplies two floats together.
+///
+/// It's the function equivalent of the `*.` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > multiply(2.0, 4.0)
+/// 8.0
+/// ```
+///
+/// ```gleam
+/// import gleam/list
+/// > list.fold([2.0, 3.0, 4.0], 1.0, multiply)
+/// 24.0
+/// ```
+///
+/// ```gleam
+/// > 3.0 |> multiply(2.0)
+/// 6.0
+/// ```
+///
+pub fn multiply(a: Float, b: Float) -> Float {
+ a *. b
+}
+
+/// Subtracts one float from another.
+///
+/// It's the function equivalent of the `-.` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > subtract(3.0, 1.0)
+/// 2.0
+/// ```
+///
+/// ```gleam
+/// > import gleam/list
+/// > list.fold([1.0, 2.0, 3.0], 10.0, subtract)
+/// 4.0
+/// ```
+///
+/// ```gleam
+/// > 3.0 |> subtract(_, 2.0)
+/// 1.0
+/// ```
+///
+/// ```gleam
+/// > 3.0 |> subtract(2.0, _)
+/// -1.0
+/// ```
+///
+pub fn subtract(a: Float, b: Float) -> Float {
+ a -. b
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam
new file mode 100644
index 0000000..daa997d
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/function.gleam
@@ -0,0 +1,162 @@
+/// Takes two functions and chains them together to form one function that
+/// takes the input from the first and returns the output of the second.
+///
+pub fn compose(fun1: fn(a) -> b, fun2: fn(b) -> c) -> fn(a) -> c {
+ fn(a) { fun2(fun1(a)) }
+}
+
+/// Takes a function with `2` arguments (an arity of `2`), and returns the
+/// curried equivalent.
+///
+/// `fn(a, b) -> c` becomes `fn(a) -> fn(b) -> c`.
+///
+/// ## Examples
+///
+/// *Currying* creates a new function that is identical to the given function
+/// except that arguments must now be supplied one by one over several function
+/// calls. It thus is the process of taking a function with `n` arguments
+/// and producing a sequence of `n` single-argument functions. Given:
+///
+/// ```gleam
+/// > fn my_fun(i: Int, s: String) -> String { ... }
+/// ```
+///
+/// …calling `curry2(my_fun)` would return the curried equivalent, like so:
+///
+/// ```gleam
+/// > curry2(my_fun)
+/// fn(Int) -> fn(String) -> String
+/// ```
+///
+/// Currying is useful when you want to partially apply a function with
+/// some arguments and then pass it somewhere else, for example:
+///
+/// ```gleam
+/// > import gleam/list
+/// > let multiply = curry2(fn(x, y) { x * y })
+/// > let doubles = list.map([1, 2, 3], multiply(2))
+/// [2, 4, 6]
+/// ```
+///
+pub fn curry2(fun: fn(a, b) -> value) {
+ fn(a) { fn(b) { fun(a, b) } }
+}
+
+/// Takes a function with `3` arguments (an arity of `3`), and returns the
+/// curried equivalent.
+///
+/// `fn(a, b, c) -> d` becomes `fn(a) -> fn(b) -> fn(c) -> d`.
+///
+/// See [`curry2`](#curry2) for a detailed explanation.
+///
+pub fn curry3(fun: fn(a, b, c) -> value) {
+ fn(a) { fn(b) { fn(c) { fun(a, b, c) } } }
+}
+
+/// Takes a function with `4` arguments (an arity of `4`), and returns the
+/// curried equivalent.
+///
+/// `fn(a, b, c, d) -> e` becomes `fn(a) -> fn(b) -> fn(c) -> fn(d) -> e`.
+///
+/// See [`curry2`](#curry2) for a detailed explanation.
+///
+pub fn curry4(fun: fn(a, b, c, d) -> value) {
+ fn(a) { fn(b) { fn(c) { fn(d) { fun(a, b, c, d) } } } }
+}
+
+/// Takes a function with `5` arguments (an arity of `5`), and returns the
+/// curried equivalent.
+///
+/// `fn(a, b, c, d, e) -> f` becomes
+/// `fn(a) -> fn(b) -> fn(c) -> fn(d) -> fn(e) -> f`.
+///
+/// See [`curry2`](#curry2) for a detailed explanation.
+///
+pub fn curry5(fun: fn(a, b, c, d, e) -> value) {
+ fn(a) { fn(b) { fn(c) { fn(d) { fn(e) { fun(a, b, c, d, e) } } } } }
+}
+
+/// Takes a function with `6` arguments (an arity of `6`), and returns the
+/// curried equivalent.
+///
+/// `fn(a, b, c, d, e, f) -> g` becomes
+/// `fn(a) -> fn(b) -> fn(c) -> fn(d) -> fn(e) -> fn(f) -> g`.
+///
+/// See [`curry2`](#curry2) for a detailed explanation.
+///
+pub fn curry6(fun: fn(a, b, c, d, e, f) -> value) {
+ fn(a) {
+ fn(b) { fn(c) { fn(d) { fn(e) { fn(f) { fun(a, b, c, d, e, f) } } } } }
+ }
+}
+
+/// Takes a function that takes two arguments and returns a new function that
+/// takes the same two arguments, but in reverse order.
+///
+pub fn flip(fun: fn(a, b) -> c) -> fn(b, a) -> c {
+ fn(b, a) { fun(a, b) }
+}
+
+/// Takes a single argument and always returns its input value.
+///
+pub fn identity(x: a) -> a {
+ x
+}
+
+/// Takes a single argument and returns a new function that
+/// ignores its argument and always returns the input value.
+///
+pub fn constant(value: a) -> fn(b) -> a {
+ fn(_) { value }
+}
+
+/// Takes an argument and a single function,
+/// calls that function with that argument
+/// and returns that argument instead of the function return value.
+/// Useful for running synchronous side effects in a pipeline.
+///
+pub fn tap(arg: a, effect: fn(a) -> b) -> a {
+ effect(arg)
+ arg
+}
+
+/// Takes a function with arity one and an argument,
+/// calls that function with the argument and returns the function return value.
+///
+/// Useful for concisely calling functions returned as a part of a pipeline.
+///
+/// ## Example
+///
+/// ```gleam
+/// > let doubler = fn() {
+/// > fn(x: Int) { x * 2 }
+/// > }
+/// >
+/// > doubler()
+/// > |> apply1(2)
+/// 4
+/// ```
+///
+pub fn apply1(fun: fn(a) -> value, arg1: a) -> value {
+ fun(arg1)
+}
+
+/// Takes a function with arity two and two arguments,
+/// calls that function with the arguments
+/// and returns the function return value.
+///
+/// See [`apply1`](#apply1) for more details.
+///
+pub fn apply2(fun: fn(a, b) -> value, arg1: a, arg2: b) -> value {
+ fun(arg1, arg2)
+}
+
+/// Takes a function with arity three and three arguments,
+/// calls that function with the arguments
+/// and returns the function return value.
+///
+/// See [`apply1`](#apply1) for more details.
+///
+pub fn apply3(fun: fn(a, b, c) -> value, arg1: a, arg2: b, arg3: c) -> value {
+ fun(arg1, arg2, arg3)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam
new file mode 100644
index 0000000..d93c16a
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/int.gleam
@@ -0,0 +1,874 @@
+//// Functions for working with integers.
+////
+//// ## Division by zero
+////
+//// In Erlang division by zero results in a crash, however Gleam does not have
+//// partial functions and operators in core so instead division by zero returns
+//// zero, a behaviour taken from Pony, Coq, and Lean.
+////
+//// This may seem unexpected at first, but it is no less mathematically valid
+//// than crashing or returning a special value. Division by zero is undefined
+//// in mathematics.
+
+import gleam/float
+import gleam/order.{type Order}
+
+/// Returns the absolute value of the input.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > absolute_value(-12)
+/// 12
+/// ```
+///
+/// ```gleam
+/// > absolute_value(10)
+/// 10
+/// ```
+///
+pub fn absolute_value(x: Int) -> Int {
+ case x >= 0 {
+ True -> x
+ False -> x * -1
+ }
+}
+
+/// Returns the results of the base being raised to the power of the
+/// exponent, as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > power(2, -1.0)
+/// Ok(0.5)
+/// ```
+///
+/// ```gleam
+/// > power(2, 2.0)
+/// Ok(4.0)
+/// ```
+///
+/// ```gleam
+/// > power(8, 1.5)
+/// Ok(22.627416997969522)
+/// ```
+///
+/// ```gleam
+/// > 4 |> power(of: 2.0)
+/// Ok(16.0)
+/// ```
+///
+/// ```gleam
+/// > power(-1, 0.5)
+/// Error(Nil)
+/// ```
+///
+pub fn power(base: Int, of exponent: Float) -> Result(Float, Nil) {
+ base
+ |> to_float()
+ |> float.power(exponent)
+}
+
+/// Returns the square root of the input as a `Float`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > square_root(4)
+/// Ok(2.0)
+/// ```
+///
+/// ```gleam
+/// > square_root(-16)
+/// Error(Nil)
+/// ```
+///
+pub fn square_root(x: Int) -> Result(Float, Nil) {
+ x
+ |> to_float()
+ |> float.square_root()
+}
+
+/// Parses a given string as an int if possible.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > parse("2")
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > parse("ABC")
+/// Error(Nil)
+/// ```
+///
+pub fn parse(string: String) -> Result(Int, Nil) {
+ do_parse(string)
+}
+
+@external(erlang, "gleam_stdlib", "parse_int")
+@external(javascript, "../gleam_stdlib.mjs", "parse_int")
+fn do_parse(a: String) -> Result(Int, Nil)
+
+/// Parses a given string as an int in a given base if possible.
+/// Supports only bases 2 to 36, for values outside of which this function returns an `Error(Nil)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > base_parse("10", 2)
+/// Ok(2)
+///
+/// > base_parse("30", 16)
+/// Ok(48)
+///
+/// > base_parse("1C", 36)
+/// Ok(48)
+///
+/// > base_parse("48", 1)
+/// Error(Nil)
+///
+/// > base_parse("48", 37)
+/// Error(Nil)
+/// ```
+///
+pub fn base_parse(string: String, base: Int) -> Result(Int, Nil) {
+ case base >= 2 && base <= 36 {
+ True -> do_base_parse(string, base)
+ False -> Error(Nil)
+ }
+}
+
+@external(erlang, "gleam_stdlib", "int_from_base_string")
+@external(javascript, "../gleam_stdlib.mjs", "int_from_base_string")
+fn do_base_parse(a: String, b: Int) -> Result(Int, Nil)
+
+/// Prints a given int to a string.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_string(2)
+/// "2"
+/// ```
+///
+pub fn to_string(x: Int) {
+ do_to_string(x)
+}
+
+@external(erlang, "erlang", "integer_to_binary")
+@external(javascript, "../gleam_stdlib.mjs", "to_string")
+fn do_to_string(a: Int) -> String
+
+/// Error value when trying to operate with a base out of the allowed range.
+///
+pub type InvalidBase {
+ InvalidBase
+}
+
+/// Prints a given int to a string using the base number provided.
+/// Supports only bases 2 to 36, for values outside of which this function returns an `Error(InvalidBase)`.
+/// For common bases (2, 8, 16, 36), use the `to_baseN` functions.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_base_string(2, 2)
+/// Ok("10")
+/// ```
+///
+/// ```gleam
+/// > to_base_string(48, 16)
+/// Ok("30")
+/// ```
+///
+/// ```gleam
+/// > to_base_string(48, 36)
+/// Ok("1C")
+/// ```
+///
+/// ```gleam
+/// > to_base_string(48, 1)
+/// Error(InvalidBase)
+/// ```
+///
+/// ```gleam
+/// > to_base_string(48, 37)
+/// Error(InvalidBase)
+/// ```
+///
+pub fn to_base_string(x: Int, base: Int) -> Result(String, InvalidBase) {
+ case base >= 2 && base <= 36 {
+ True -> Ok(do_to_base_string(x, base))
+ False -> Error(InvalidBase)
+ }
+}
+
+@external(erlang, "erlang", "integer_to_binary")
+@external(javascript, "../gleam_stdlib.mjs", "int_to_base_string")
+fn do_to_base_string(a: Int, b: Int) -> String
+
+/// Prints a given int to a string using base-2.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_base2(2)
+/// "10"
+/// ```
+///
+pub fn to_base2(x: Int) -> String {
+ do_to_base_string(x, 2)
+}
+
+/// Prints a given int to a string using base-8.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_base8(15)
+/// "17"
+/// ```
+///
+pub fn to_base8(x: Int) -> String {
+ do_to_base_string(x, 8)
+}
+
+/// Prints a given int to a string using base-16.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_base16(48)
+/// "30"
+/// ```
+///
+pub fn to_base16(x: Int) -> String {
+ do_to_base_string(x, 16)
+}
+
+/// Prints a given int to a string using base-36.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_base36(48)
+/// "1C"
+/// ```
+///
+pub fn to_base36(x: Int) -> String {
+ do_to_base_string(x, 36)
+}
+
+/// Takes an int and returns its value as a float.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_float(5)
+/// 5.0
+/// ```
+///
+/// ```gleam
+/// > to_float(0)
+/// 0.0
+/// ```
+///
+/// ```gleam
+/// > to_float(-3)
+/// -3.0
+/// ```
+///
+pub fn to_float(x: Int) -> Float {
+ do_to_float(x)
+}
+
+@external(erlang, "erlang", "float")
+@external(javascript, "../gleam_stdlib.mjs", "identity")
+fn do_to_float(a: Int) -> Float
+
+/// Restricts an int between a lower and upper bound.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > clamp(40, min: 50, max: 60)
+/// 50
+/// ```
+///
+pub fn clamp(x: Int, min min_bound: Int, max max_bound: Int) -> Int {
+ x
+ |> min(max_bound)
+ |> max(min_bound)
+}
+
+/// Compares two ints, returning an order.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > compare(2, 3)
+/// Lt
+/// ```
+///
+/// ```gleam
+/// > compare(4, 3)
+/// Gt
+/// ```
+///
+/// ```gleam
+/// > compare(3, 3)
+/// Eq
+/// ```
+///
+pub fn compare(a: Int, with b: Int) -> Order {
+ case a == b {
+ True -> order.Eq
+ False ->
+ case a < b {
+ True -> order.Lt
+ False -> order.Gt
+ }
+ }
+}
+
+/// Compares two ints, returning the smaller of the two.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > min(2, 3)
+/// 2
+/// ```
+///
+pub fn min(a: Int, b: Int) -> Int {
+ case a < b {
+ True -> a
+ False -> b
+ }
+}
+
+/// Compares two ints, returning the larger of the two.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > max(2, 3)
+/// 3
+/// ```
+///
+pub fn max(a: Int, b: Int) -> Int {
+ case a > b {
+ True -> a
+ False -> b
+ }
+}
+
+/// Returns whether the value provided is even.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_even(2)
+/// True
+/// ```
+///
+/// ```gleam
+/// > is_even(3)
+/// False
+/// ```
+///
+pub fn is_even(x: Int) -> Bool {
+ x % 2 == 0
+}
+
+/// Returns whether the value provided is odd.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_odd(3)
+/// True
+/// ```
+///
+/// ```gleam
+/// > is_odd(2)
+/// False
+/// ```
+///
+pub fn is_odd(x: Int) -> Bool {
+ x % 2 != 0
+}
+
+/// Returns the negative of the value provided.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > negate(1)
+/// -1
+/// ```
+///
+pub fn negate(x: Int) -> Int {
+ -1 * x
+}
+
+/// Sums a list of ints.
+///
+/// ## Example
+///
+/// ```gleam
+/// > sum([1, 2, 3])
+/// 6
+/// ```
+///
+pub fn sum(numbers: List(Int)) -> Int {
+ numbers
+ |> do_sum(0)
+}
+
+fn do_sum(numbers: List(Int), initial: Int) -> Int {
+ case numbers {
+ [] -> initial
+ [x, ..rest] -> do_sum(rest, x + initial)
+ }
+}
+
+/// Multiplies a list of ints and returns the product.
+///
+/// ## Example
+///
+/// ```gleam
+/// > product([2, 3, 4])
+/// 24
+/// ```
+///
+pub fn product(numbers: List(Int)) -> Int {
+ case numbers {
+ [] -> 1
+ _ -> do_product(numbers, 1)
+ }
+}
+
+fn do_product(numbers: List(Int), initial: Int) -> Int {
+ case numbers {
+ [] -> initial
+ [x, ..rest] -> do_product(rest, x * initial)
+ }
+}
+
+/// Splits an integer into its digit representation in the specified base
+///
+/// ## Examples
+///
+/// ```gleam
+/// > digits(234, 10)
+/// Ok([2,3,4])
+/// ```
+///
+/// ```gleam
+/// > digits(234, 1)
+/// Error(InvalidBase)
+/// ```
+///
+pub fn digits(x: Int, base: Int) -> Result(List(Int), InvalidBase) {
+ case base < 2 {
+ True -> Error(InvalidBase)
+ False -> Ok(do_digits(x, base, []))
+ }
+}
+
+fn do_digits(x: Int, base: Int, acc: List(Int)) -> List(Int) {
+ case absolute_value(x) < base {
+ True -> [x, ..acc]
+ False -> do_digits(x / base, base, [x % base, ..acc])
+ }
+}
+
+/// Joins a list of digits into a single value.
+/// Returns an error if the base is less than 2 or if the list contains a digit greater than or equal to the specified base.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > undigits([2,3,4], 10)
+/// Ok(234)
+/// ```
+///
+/// ```gleam
+/// > undigits([2,3,4], 1)
+/// Error(InvalidBase)
+/// ```
+///
+/// ```gleam
+/// > undigits([2,3,4], 2)
+/// Error(InvalidBase)
+/// ```
+///
+pub fn undigits(numbers: List(Int), base: Int) -> Result(Int, InvalidBase) {
+ case base < 2 {
+ True -> Error(InvalidBase)
+ False -> do_undigits(numbers, base, 0)
+ }
+}
+
+fn do_undigits(
+ numbers: List(Int),
+ base: Int,
+ acc: Int,
+) -> Result(Int, InvalidBase) {
+ case numbers {
+ [] -> Ok(acc)
+ [digit, ..] if digit >= base -> Error(InvalidBase)
+ [digit, ..rest] -> do_undigits(rest, base, acc * base + digit)
+ }
+}
+
+/// Generates a random int between the given minimum and maximum values.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > random(1, 5)
+/// 2
+/// ```
+///
+pub fn random(min: Int, max: Int) -> Int {
+ float.random(to_float(min), to_float(max))
+ |> float.floor()
+ |> float.round()
+}
+
+/// Performs a truncated integer division.
+///
+/// Returns division of the inputs as a `Result`: If the given divisor equals
+/// `0`, this function returns an `Error`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > divide(0, 1)
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > divide(1, 0)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > divide(5, 2)
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > divide(-99, 2)
+/// Ok(-49)
+/// ```
+///
+pub fn divide(dividend: Int, by divisor: Int) -> Result(Int, Nil) {
+ case divisor {
+ 0 -> Error(Nil)
+ divisor -> Ok(dividend / divisor)
+ }
+}
+
+/// Computes the remainder of an integer division of inputs as a `Result`.
+///
+/// Returns division of the inputs as a `Result`: If the given divisor equals
+/// `0`, this function returns an `Error`.
+///
+/// Most the time you will want to use the `%` operator instead of this
+/// function.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > remainder(3, 2)
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > remainder(1, 0)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > remainder(10, -1)
+/// Ok(0)
+/// ```
+///
+/// ```gleam
+/// > remainder(13, by: 3)
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > remainder(-13, by: 3)
+/// Ok(-1)
+/// ```
+///
+/// ```gleam
+/// > remainder(13, by: -3)
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > remainder(-13, by: -3)
+/// Ok(-1)
+/// ```
+///
+pub fn remainder(dividend: Int, by divisor: Int) -> Result(Int, Nil) {
+ case divisor {
+ 0 -> Error(Nil)
+ divisor -> Ok(dividend % divisor)
+ }
+}
+
+/// Computes the modulo of an integer division of inputs as a `Result`.
+///
+/// Returns division of the inputs as a `Result`: If the given divisor equals
+/// `0`, this function returns an `Error`.
+///
+/// Most the time you will want to use the `%` operator instead of this
+/// function.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > modulo(3, 2)
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > modulo(1, 0)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > modulo(10, -1)
+/// Ok(0)
+/// ```
+///
+/// ```gleam
+/// > modulo(13, by: 3)
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > modulo(-13, by: 3)
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > modulo(13, by: -3)
+/// Ok(-2)
+/// ```
+///
+/// ```gleam
+/// > modulo(-13, by: -3)
+/// Ok(-1)
+/// ```
+///
+pub fn modulo(dividend: Int, by divisor: Int) -> Result(Int, Nil) {
+ case divisor {
+ 0 -> Error(Nil)
+ _ -> {
+ let remainder = dividend % divisor
+ case remainder * divisor < 0 {
+ True -> Ok(remainder + divisor)
+ False -> Ok(remainder)
+ }
+ }
+ }
+}
+
+/// Performs a *floored* integer division, which means that the result will
+/// always be rounded towards negative infinity.
+///
+/// If you want to perform truncated integer division (rounding towards zero),
+/// use `int.divide()` or the `/` operator instead.
+///
+/// Returns division of the inputs as a `Result`: If the given divisor equals
+/// `0`, this function returns an `Error`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > floor_divide(1, 0)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > floor_divide(5, 2)
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > floor_divide(6, -4)
+/// Ok(-2)
+/// ```
+///
+/// ```gleam
+/// > floor_divide(-99, 2)
+/// Ok(-50)
+/// ```
+///
+pub fn floor_divide(dividend: Int, by divisor: Int) -> Result(Int, Nil) {
+ case divisor {
+ 0 -> Error(Nil)
+ divisor ->
+ case dividend * divisor < 0 && dividend % divisor != 0 {
+ True -> Ok(dividend / divisor - 1)
+ False -> Ok(dividend / divisor)
+ }
+ }
+}
+
+/// Adds two integers together.
+///
+/// It's the function equivalent of the `+` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > add(1, 2)
+/// 3
+/// ```
+///
+/// ```gleam
+/// import gleam/list
+/// > list.fold([1, 2, 3], 0, add)
+/// 6
+/// ```
+///
+/// ```gleam
+/// > 3 |> add(2)
+/// 5
+/// ```
+///
+pub fn add(a: Int, b: Int) -> Int {
+ a + b
+}
+
+/// Multiplies two integers together.
+///
+/// It's the function equivalent of the `*` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > multiply(2, 4)
+/// 8
+/// ```
+///
+/// ```gleam
+/// import gleam/list
+/// > list.fold([2, 3, 4], 1, multiply)
+/// 24
+/// ```
+///
+/// ```gleam
+/// > 3 |> multiply(2)
+/// 6
+/// ```
+///
+pub fn multiply(a: Int, b: Int) -> Int {
+ a * b
+}
+
+/// Subtracts one int from another.
+///
+/// It's the function equivalent of the `-` operator.
+/// This function is useful in higher order functions or pipes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > subtract(3, 1)
+/// 2.0
+/// ```
+///
+/// ```gleam
+/// import gleam/list
+/// > list.fold([1, 2, 3], 10, subtract)
+/// 4
+/// ```
+///
+/// ```gleam
+/// > 3 |> subtract(2)
+/// 1
+/// ```
+///
+/// ```gleam
+/// > 3 |> subtract(2, _)
+/// -1
+/// ```
+///
+pub fn subtract(a: Int, b: Int) -> Int {
+ a - b
+}
+
+/// Calculates the bitwise AND of its arguments.
+///
+/// The exact behaviour of this function depends on the target platform.
+/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it
+/// is equivalent to bitwise operations on big-ints.
+///
+@external(erlang, "erlang", "band")
+@external(javascript, "../gleam_stdlib.mjs", "bitwise_and")
+pub fn bitwise_and(x: Int, y: Int) -> Int
+
+/// Calculates the bitwise NOT of its argument.
+///
+/// The exact behaviour of this function depends on the target platform.
+/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it
+/// is equivalent to bitwise operations on big-ints.
+///
+@external(erlang, "erlang", "bnot")
+@external(javascript, "../gleam_stdlib.mjs", "bitwise_not")
+pub fn bitwise_not(x: Int) -> Int
+
+/// Calculates the bitwise OR of its arguments.
+///
+/// The exact behaviour of this function depends on the target platform.
+/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it
+/// is equivalent to bitwise operations on big-ints.
+///
+@external(erlang, "erlang", "bor")
+@external(javascript, "../gleam_stdlib.mjs", "bitwise_or")
+pub fn bitwise_or(x: Int, y: Int) -> Int
+
+/// Calculates the bitwise XOR of its arguments.
+///
+/// The exact behaviour of this function depends on the target platform.
+/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it
+/// is equivalent to bitwise operations on big-ints.
+///
+@external(erlang, "erlang", "bxor")
+@external(javascript, "../gleam_stdlib.mjs", "bitwise_exclusive_or")
+pub fn bitwise_exclusive_or(x: Int, y: Int) -> Int
+
+/// Calculates the result of an arithmetic left bitshift.
+///
+/// The exact behaviour of this function depends on the target platform.
+/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it
+/// is equivalent to bitwise operations on big-ints.
+///
+@external(erlang, "erlang", "bsl")
+@external(javascript, "../gleam_stdlib.mjs", "bitwise_shift_left")
+pub fn bitwise_shift_left(x: Int, y: Int) -> Int
+
+/// Calculates the result of an arithmetic right bitshift.
+///
+/// The exact behaviour of this function depends on the target platform.
+/// On Erlang it is equivalent to bitwise operations on ints, on JavaScript it
+/// is equivalent to bitwise operations on big-ints.
+///
+@external(erlang, "erlang", "bsr")
+@external(javascript, "../gleam_stdlib.mjs", "bitwise_shift_right")
+pub fn bitwise_shift_right(x: Int, y: Int) -> Int
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam
new file mode 100644
index 0000000..0c0a3ee
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/io.gleam
@@ -0,0 +1,117 @@
+import gleam/string
+
+/// Writes a string to standard output.
+///
+/// If you want your output to be printed on its own line see `println`.
+///
+/// ## Example
+///
+/// ```gleam
+/// > io.print("Hi mum")
+/// // -> Hi mum
+/// Nil
+/// ```
+///
+pub fn print(string: String) -> Nil {
+ do_print(string)
+}
+
+@external(erlang, "gleam_stdlib", "print")
+@external(javascript, "../gleam_stdlib.mjs", "print")
+fn do_print(string string: String) -> Nil
+
+/// Writes a string to standard error.
+///
+/// If you want your output to be printed on its own line see `println_error`.
+///
+/// ## Example
+///
+/// ```
+/// > io.print_error("Hi pop")
+/// // -> Hi pop
+/// Nil
+/// ```
+///
+pub fn print_error(string: String) -> Nil {
+ do_print_error(string)
+}
+
+@external(erlang, "gleam_stdlib", "print_error")
+@external(javascript, "../gleam_stdlib.mjs", "print_error")
+fn do_print_error(string string: String) -> Nil
+
+/// Writes a string to standard output, appending a newline to the end.
+///
+/// ## Example
+///
+/// ```gleam
+/// > io.println("Hi mum")
+/// // -> Hi mum
+/// Nil
+/// ```
+///
+pub fn println(string: String) -> Nil {
+ do_println(string)
+}
+
+@external(erlang, "gleam_stdlib", "println")
+@external(javascript, "../gleam_stdlib.mjs", "console_log")
+fn do_println(string string: String) -> Nil
+
+/// Writes a string to standard error, appending a newline to the end.
+///
+/// ## Example
+///
+/// ```gleam
+/// > io.println_error("Hi pop")
+/// // -> Hi mum
+/// Nil
+/// ```
+///
+pub fn println_error(string: String) -> Nil {
+ do_println_error(string)
+}
+
+@external(erlang, "gleam_stdlib", "println_error")
+@external(javascript, "../gleam_stdlib.mjs", "console_error")
+fn do_println_error(string string: String) -> Nil
+
+/// Prints a value to standard error (stderr) yielding Gleam syntax.
+///
+/// The value is returned after being printed so it can be used in pipelines.
+///
+/// ## Example
+///
+/// ```gleam
+/// > debug("Hi mum")
+/// // -> <<"Hi mum">>
+/// "Hi mum"
+/// ```
+///
+/// ```gleam
+/// > debug(Ok(1))
+/// // -> {ok, 1}
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > import list
+/// > [1, 2]
+/// > |> list.map(fn(x) { x + 1 })
+/// > |> debug
+/// > |> list.map(fn(x) { x * 2 })
+/// // -> [2, 3]
+/// [4, 6]
+/// ```
+///
+pub fn debug(term: anything) -> anything {
+ term
+ |> string.inspect
+ |> do_debug_println
+
+ term
+}
+
+@external(erlang, "gleam_stdlib", "println_error")
+@external(javascript, "../gleam_stdlib.mjs", "print_debug")
+fn do_debug_println(string string: String) -> Nil
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam
new file mode 100644
index 0000000..c57e7fd
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/iterator.gleam
@@ -0,0 +1,1530 @@
+import gleam/result
+import gleam/int
+import gleam/list
+import gleam/dict.{type Dict}
+import gleam/option.{type Option, None, Some}
+import gleam/order
+
+// Internal private representation of an Iterator
+type Action(element) {
+ // Dedicated to Electric Six
+ // https://youtu.be/_30t2dzEgiw?t=162
+ Stop
+ Continue(element, fn() -> Action(element))
+}
+
+/// An iterator is a lazily evaluated sequence of element.
+///
+/// Iterators are useful when working with collections that are too large to
+/// fit in memory (or those that are infinite in size) as they only require the
+/// elements currently being processed to be in memory.
+///
+/// As a lazy data structure no work is done when an iterator is filters,
+/// mapped, etc, instead a new iterator is returned with these transformations
+/// applied to the stream. Once the stream has all the required transformations
+/// applied it can be evaluated using functions such as `fold` and `to_list`.
+///
+pub opaque type Iterator(element) {
+ Iterator(continuation: fn() -> Action(element))
+}
+
+// Public API for iteration
+pub type Step(element, accumulator) {
+ Next(element: element, accumulator: accumulator)
+ Done
+}
+
+// Shortcut for an empty iterator.
+fn stop() -> Action(element) {
+ Stop
+}
+
+// Creating Iterators
+fn do_unfold(
+ initial: acc,
+ f: fn(acc) -> Step(element, acc),
+) -> fn() -> Action(element) {
+ fn() {
+ case f(initial) {
+ Next(x, acc) -> Continue(x, do_unfold(acc, f))
+ Done -> Stop
+ }
+ }
+}
+
+/// Creates an iterator from a given function and accumulator.
+///
+/// The function is called on the accumulator and returns either `Done`,
+/// indicating the iterator has no more elements, or `Next` which contains a
+/// new element and accumulator. The element is yielded by the iterator and the
+/// new accumulator is used with the function to compute the next element in
+/// the sequence.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unfold(from: 5, with: fn(n) {
+/// > case n {
+/// > 0 -> Done
+/// > n -> Next(element: n, accumulator: n - 1)
+/// > }
+/// > })
+/// > |> to_list
+/// [5, 4, 3, 2, 1]
+/// ```
+///
+pub fn unfold(
+ from initial: acc,
+ with f: fn(acc) -> Step(element, acc),
+) -> Iterator(element) {
+ initial
+ |> do_unfold(f)
+ |> Iterator
+}
+
+// TODO: test
+/// Creates an iterator that yields values created by calling a given function
+/// repeatedly.
+///
+pub fn repeatedly(f: fn() -> element) -> Iterator(element) {
+ unfold(Nil, fn(_) { Next(f(), Nil) })
+}
+
+/// Creates an iterator that returns the same value infinitely.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > repeat(10)
+/// > |> take(4)
+/// > |> to_list
+/// [10, 10, 10, 10]
+/// ```
+///
+pub fn repeat(x: element) -> Iterator(element) {
+ repeatedly(fn() { x })
+}
+
+/// Creates an iterator that yields each element from the given list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4])
+/// > |> to_list
+/// [1, 2, 3, 4]
+/// ```
+///
+pub fn from_list(list: List(element)) -> Iterator(element) {
+ let yield = fn(acc) {
+ case acc {
+ [] -> Done
+ [head, ..tail] -> Next(head, tail)
+ }
+ }
+ unfold(list, yield)
+}
+
+// Consuming Iterators
+fn do_transform(
+ continuation: fn() -> Action(a),
+ state: acc,
+ f: fn(acc, a) -> Step(b, acc),
+) -> fn() -> Action(b) {
+ fn() {
+ case continuation() {
+ Stop -> Stop
+ Continue(el, next) ->
+ case f(state, el) {
+ Done -> Stop
+ Next(yield, next_state) ->
+ Continue(yield, do_transform(next, next_state, f))
+ }
+ }
+ }
+}
+
+/// Creates an iterator from an existing iterator
+/// and a stateful function that may short-circuit.
+///
+/// `f` takes arguments `acc` for current state and `el` for current element from underlying iterator,
+/// and returns either `Next` with yielded element and new state value, or `Done` to halt the iterator.
+///
+/// ## Examples
+///
+/// Approximate implementation of `index` in terms of `transform`:
+///
+/// ```gleam
+/// > from_list(["a", "b", "c"])
+/// > |> transform(0, fn(i, el) { Next(#(i, el), i + 1) })
+/// > |> to_list
+/// [#(0, "a"), #(1, "b"), #(2, "c")]
+/// ```
+pub fn transform(
+ over iterator: Iterator(a),
+ from initial: acc,
+ with f: fn(acc, a) -> Step(b, acc),
+) -> Iterator(b) {
+ do_transform(iterator.continuation, initial, f)
+ |> Iterator
+}
+
+fn do_fold(
+ continuation: fn() -> Action(e),
+ f: fn(acc, e) -> acc,
+ accumulator: acc,
+) -> acc {
+ case continuation() {
+ Continue(elem, next) -> do_fold(next, f, f(accumulator, elem))
+ Stop -> accumulator
+ }
+}
+
+/// Reduces an iterator of elements into a single value by calling a given
+/// function on each element in turn.
+///
+/// If called on an iterator of infinite length then this function will never
+/// return.
+///
+/// If you do not care about the end value and only wish to evaluate the
+/// iterator for side effects consider using the `run` function instead.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3, 4]
+/// > |> from_list
+/// > |> fold(from: 0, with: fn(acc, element) { element + acc })
+/// 10
+/// ```
+///
+pub fn fold(
+ over iterator: Iterator(e),
+ from initial: acc,
+ with f: fn(acc, e) -> acc,
+) -> acc {
+ iterator.continuation
+ |> do_fold(f, initial)
+}
+
+// TODO: test
+/// Evaluates all elements emitted by the given iterator. This function is useful for when
+/// you wish to trigger any side effects that would occur when evaluating
+/// the iterator.
+///
+pub fn run(iterator: Iterator(e)) -> Nil {
+ fold(iterator, Nil, fn(_, _) { Nil })
+}
+
+/// Evaluates an iterator and returns all the elements as a list.
+///
+/// If called on an iterator of infinite length then this function will never
+/// return.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3]
+/// > |> from_list
+/// > |> map(fn(x) { x * 2 })
+/// > |> to_list
+/// [2, 4, 6]
+/// ```
+///
+pub fn to_list(iterator: Iterator(element)) -> List(element) {
+ iterator
+ |> fold([], fn(acc, e) { [e, ..acc] })
+ |> list.reverse
+}
+
+/// Eagerly accesses the first value of an iterator, returning a `Next`
+/// that contains the first value and the rest of the iterator.
+///
+/// If called on an empty iterator, `Done` is returned.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert Next(first, rest) = [1, 2, 3, 4]
+/// > |> from_list
+/// > |> step
+/// > first
+/// 1
+/// ```
+///
+/// ```gleam
+/// > rest |> to_list
+/// [2, 3, 4]
+/// ```
+///
+/// ```gleam
+/// > empty() |> step
+/// Done
+/// ```
+///
+pub fn step(iterator: Iterator(e)) -> Step(e, Iterator(e)) {
+ case iterator.continuation() {
+ Stop -> Done
+ Continue(e, a) -> Next(e, Iterator(a))
+ }
+}
+
+fn do_take(continuation: fn() -> Action(e), desired: Int) -> fn() -> Action(e) {
+ fn() {
+ case desired > 0 {
+ False -> Stop
+ True ->
+ case continuation() {
+ Stop -> Stop
+ Continue(e, next) -> Continue(e, do_take(next, desired - 1))
+ }
+ }
+ }
+}
+
+/// Creates an iterator that only yields the first `desired` elements.
+///
+/// If the iterator does not have enough elements all of them are yielded.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3, 4, 5]
+/// > |> from_list
+/// > |> take(up_to: 3)
+/// > |> to_list
+/// [1, 2, 3]
+/// ```
+///
+/// ```gleam
+/// > [1, 2]
+/// > |> from_list
+/// > |> take(up_to: 3)
+/// > |> to_list
+/// [1, 2]
+/// ```
+///
+pub fn take(from iterator: Iterator(e), up_to desired: Int) -> Iterator(e) {
+ iterator.continuation
+ |> do_take(desired)
+ |> Iterator
+}
+
+fn do_drop(continuation: fn() -> Action(e), desired: Int) -> Action(e) {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, next) ->
+ case desired > 0 {
+ True -> do_drop(next, desired - 1)
+ False -> Continue(e, next)
+ }
+ }
+}
+
+/// Evaluates and discards the first N elements in an iterator, returning a new
+/// iterator.
+///
+/// If the iterator does not have enough elements an empty iterator is
+/// returned.
+///
+/// This function does not evaluate the elements of the iterator, the
+/// computation is performed when the iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3, 4, 5]
+/// > |> from_list
+/// > |> drop(up_to: 3)
+/// > |> to_list
+/// [4, 5]
+/// ```
+///
+/// ```gleam
+/// > [1, 2]
+/// > |> from_list
+/// > |> drop(up_to: 3)
+/// > |> to_list
+/// []
+/// ```
+///
+pub fn drop(from iterator: Iterator(e), up_to desired: Int) -> Iterator(e) {
+ fn() { do_drop(iterator.continuation, desired) }
+ |> Iterator
+}
+
+fn do_map(continuation: fn() -> Action(a), f: fn(a) -> b) -> fn() -> Action(b) {
+ fn() {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, continuation) -> Continue(f(e), do_map(continuation, f))
+ }
+ }
+}
+
+/// Creates an iterator from an existing iterator and a transformation function.
+///
+/// Each element in the new iterator will be the result of calling the given
+/// function on the elements in the given iterator.
+///
+/// This function does not evaluate the elements of the iterator, the
+/// computation is performed when the iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3]
+/// > |> from_list
+/// > |> map(fn(x) { x * 2 })
+/// > |> to_list
+/// [2, 4, 6]
+/// ```
+///
+pub fn map(over iterator: Iterator(a), with f: fn(a) -> b) -> Iterator(b) {
+ iterator.continuation
+ |> do_map(f)
+ |> Iterator
+}
+
+fn do_map2(
+ continuation1: fn() -> Action(a),
+ continuation2: fn() -> Action(b),
+ with fun: fn(a, b) -> c,
+) -> fn() -> Action(c) {
+ fn() {
+ case continuation1() {
+ Stop -> Stop
+ Continue(a, next_a) ->
+ case continuation2() {
+ Stop -> Stop
+ Continue(b, next_b) ->
+ Continue(fun(a, b), do_map2(next_a, next_b, fun))
+ }
+ }
+ }
+}
+
+/// Combines two interators into a single one using the given function.
+///
+/// If an iterator is longer than the other the extra elements are dropped.
+///
+/// This function does not evaluate the elements of the two iterators, the
+/// computation is performed when the resulting iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let first = from_list([1, 2, 3])
+/// let second = from_list([4, 5, 6])
+/// map2(first, second, fn(x, y) { x + y }) |> to_list
+/// // -> [5, 7, 9]
+/// ```
+///
+/// ```gleam
+/// let first = from_list([1, 2])
+/// let second = from_list(["a", "b", "c"])
+/// map2(first, second, fn(i, x) { #(i, x) }) |> to_list
+/// // -> [#(1, "a"), #(2, "b")]
+/// ```
+///
+pub fn map2(
+ iterator1: Iterator(a),
+ iterator2: Iterator(b),
+ with fun: fn(a, b) -> c,
+) -> Iterator(c) {
+ do_map2(iterator1.continuation, iterator2.continuation, fun)
+ |> Iterator
+}
+
+fn do_append(first: fn() -> Action(a), second: fn() -> Action(a)) -> Action(a) {
+ case first() {
+ Continue(e, first) -> Continue(e, fn() { do_append(first, second) })
+ Stop -> second()
+ }
+}
+
+/// Appends two iterators, producing a new iterator.
+///
+/// This function does not evaluate the elements of the iterators, the
+/// computation is performed when the resulting iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2]
+/// > |> from_list
+/// > |> append([3, 4] |> from_list)
+/// > |> to_list
+/// [1, 2, 3, 4]
+/// ```
+///
+pub fn append(to first: Iterator(a), suffix second: Iterator(a)) -> Iterator(a) {
+ fn() { do_append(first.continuation, second.continuation) }
+ |> Iterator
+}
+
+fn do_flatten(flattened: fn() -> Action(Iterator(a))) -> Action(a) {
+ case flattened() {
+ Stop -> Stop
+ Continue(it, next_iterator) ->
+ do_append(it.continuation, fn() { do_flatten(next_iterator) })
+ }
+}
+
+/// Flattens an iterator of iterators, creating a new iterator.
+///
+/// This function does not evaluate the elements of the iterator, the
+/// computation is performed when the iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([[1, 2], [3, 4]])
+/// > |> map(from_list)
+/// > |> flatten
+/// > |> to_list
+/// [1, 2, 3, 4]
+/// ```
+///
+pub fn flatten(iterator: Iterator(Iterator(a))) -> Iterator(a) {
+ fn() { do_flatten(iterator.continuation) }
+ |> Iterator
+}
+
+/// Joins a list of iterators into a single iterator.
+///
+/// This function does not evaluate the elements of the iterator, the
+/// computation is performed when the iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [[1, 2], [3, 4]]
+/// > |> map(from_list)
+/// > |> concat
+/// > |> to_list
+/// [1, 2, 3, 4]
+/// ```
+///
+pub fn concat(iterators: List(Iterator(a))) -> Iterator(a) {
+ flatten(from_list(iterators))
+}
+
+/// Creates an iterator from an existing iterator and a transformation function.
+///
+/// Each element in the new iterator will be the result of calling the given
+/// function on the elements in the given iterator and then flattening the
+/// results.
+///
+/// This function does not evaluate the elements of the iterator, the
+/// computation is performed when the iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2]
+/// > |> from_list
+/// > |> flat_map(fn(x) { from_list([x, x + 1]) })
+/// > |> to_list
+/// [1, 2, 2, 3]
+/// ```
+///
+pub fn flat_map(
+ over iterator: Iterator(a),
+ with f: fn(a) -> Iterator(b),
+) -> Iterator(b) {
+ iterator
+ |> map(f)
+ |> flatten
+}
+
+fn do_filter(
+ continuation: fn() -> Action(e),
+ predicate: fn(e) -> Bool,
+) -> Action(e) {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, iterator) ->
+ case predicate(e) {
+ True -> Continue(e, fn() { do_filter(iterator, predicate) })
+ False -> do_filter(iterator, predicate)
+ }
+ }
+}
+
+/// Creates an iterator from an existing iterator and a predicate function.
+///
+/// The new iterator will contain elements from the first iterator for which
+/// the given function returns `True`.
+///
+/// This function does not evaluate the elements of the iterator, the
+/// computation is performed when the iterator is later run.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/int
+/// > [1, 2, 3, 4]
+/// > |> from_list
+/// > |> filter(int.is_even)
+/// > |> to_list
+/// [2, 4]
+/// ```
+///
+pub fn filter(
+ iterator: Iterator(a),
+ keeping predicate: fn(a) -> Bool,
+) -> Iterator(a) {
+ fn() { do_filter(iterator.continuation, predicate) }
+ |> Iterator
+}
+
+/// Creates an iterator that repeats a given iterator infinitely.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2]
+/// > |> from_list
+/// > |> cycle
+/// > |> take(6)
+/// > |> to_list
+/// [1, 2, 1, 2, 1, 2]
+/// ```
+///
+pub fn cycle(iterator: Iterator(a)) -> Iterator(a) {
+ repeat(iterator)
+ |> flatten
+}
+
+/// Creates an iterator of ints, starting at a given start int and stepping by
+/// one to a given end int.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > range(from: 1, to: 5) |> to_list
+/// [1, 2, 3, 4, 5]
+/// ```
+///
+/// ```gleam
+/// > range(from: 1, to: -2) |> to_list
+/// [1, 0, -1, -2]
+/// ```
+///
+/// ```gleam
+/// > range(from: 0, to: 0) |> to_list
+/// [0]
+/// ```
+///
+pub fn range(from start: Int, to stop: Int) -> Iterator(Int) {
+ case int.compare(start, stop) {
+ order.Eq -> once(fn() { start })
+ order.Gt ->
+ unfold(
+ from: start,
+ with: fn(current) {
+ case current < stop {
+ False -> Next(current, current - 1)
+ True -> Done
+ }
+ },
+ )
+
+ order.Lt ->
+ unfold(
+ from: start,
+ with: fn(current) {
+ case current > stop {
+ False -> Next(current, current + 1)
+ True -> Done
+ }
+ },
+ )
+ }
+}
+
+fn do_find(continuation: fn() -> Action(a), f: fn(a) -> Bool) -> Result(a, Nil) {
+ case continuation() {
+ Stop -> Error(Nil)
+ Continue(e, next) ->
+ case f(e) {
+ True -> Ok(e)
+ False -> do_find(next, f)
+ }
+ }
+}
+
+/// Finds the first element in a given iterator for which the given function returns
+/// `True`.
+///
+/// Returns `Error(Nil)` if the function does not return `True` for any of the
+/// elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > find(from_list([1, 2, 3]), fn(x) { x > 2 })
+/// Ok(3)
+/// ```
+///
+/// ```gleam
+/// > find(from_list([1, 2, 3]), fn(x) { x > 4 })
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > find(empty(), fn(_) { True })
+/// Error(Nil)
+/// ```
+///
+pub fn find(
+ in haystack: Iterator(a),
+ one_that is_desired: fn(a) -> Bool,
+) -> Result(a, Nil) {
+ haystack.continuation
+ |> do_find(is_desired)
+}
+
+fn do_index(
+ continuation: fn() -> Action(element),
+ next: Int,
+) -> fn() -> Action(#(Int, element)) {
+ fn() {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, continuation) ->
+ Continue(#(next, e), do_index(continuation, next + 1))
+ }
+ }
+}
+
+/// Wraps values yielded from an iterator with indices, starting from 0.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list(["a", "b", "c"]) |> index |> to_list
+/// [#(0, "a"), #(1, "b"), #(2, "c")]
+/// ```
+///
+pub fn index(over iterator: Iterator(element)) -> Iterator(#(Int, element)) {
+ iterator.continuation
+ |> do_index(0)
+ |> Iterator
+}
+
+/// Creates an iterator that inifinitely applies a function to a value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > iterate(1, fn(n) { n * 3 }) |> take(5) |> to_list
+/// [1, 3, 9, 27, 81]
+/// ```
+///
+pub fn iterate(
+ from initial: element,
+ with f: fn(element) -> element,
+) -> Iterator(element) {
+ unfold(initial, fn(element) { Next(element, f(element)) })
+}
+
+fn do_take_while(
+ continuation: fn() -> Action(element),
+ predicate: fn(element) -> Bool,
+) -> fn() -> Action(element) {
+ fn() {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, next) ->
+ case predicate(e) {
+ False -> Stop
+ True -> Continue(e, do_take_while(next, predicate))
+ }
+ }
+ }
+}
+
+/// Creates an iterator that yields elements while the predicate returns `True`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 2, 4])
+/// > |> take_while(satisfying: fn(x) { x < 3 })
+/// > |> to_list
+/// [1, 2]
+/// ```
+///
+pub fn take_while(
+ in iterator: Iterator(element),
+ satisfying predicate: fn(element) -> Bool,
+) -> Iterator(element) {
+ iterator.continuation
+ |> do_take_while(predicate)
+ |> Iterator
+}
+
+fn do_drop_while(
+ continuation: fn() -> Action(element),
+ predicate: fn(element) -> Bool,
+) -> Action(element) {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, next) ->
+ case predicate(e) {
+ False -> Continue(e, next)
+ True -> do_drop_while(next, predicate)
+ }
+ }
+}
+
+/// Creates an iterator that drops elements while the predicate returns `True`,
+/// and then yields the remaining elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4, 2, 5])
+/// > |> drop_while(satisfying: fn(x) { x < 4 })
+/// > |> to_list
+/// [4, 2, 5]
+/// ```
+///
+pub fn drop_while(
+ in iterator: Iterator(element),
+ satisfying predicate: fn(element) -> Bool,
+) -> Iterator(element) {
+ fn() { do_drop_while(iterator.continuation, predicate) }
+ |> Iterator
+}
+
+fn do_scan(
+ continuation: fn() -> Action(element),
+ f: fn(acc, element) -> acc,
+ accumulator: acc,
+) -> fn() -> Action(acc) {
+ fn() {
+ case continuation() {
+ Stop -> Stop
+ Continue(el, next) -> {
+ let accumulated = f(accumulator, el)
+ Continue(accumulated, do_scan(next, f, accumulated))
+ }
+ }
+ }
+}
+
+/// Creates an iterator from an existing iterator and a stateful function.
+///
+/// Specifically, this behaves like `fold`, but yields intermediate results.
+///
+/// ## Examples
+///
+/// ```gleam
+/// // Generate a sequence of partial sums
+/// > from_list([1, 2, 3, 4, 5])
+/// > |> scan(from: 0, with: fn(acc, el) { acc + el })
+/// > |> to_list
+/// [1, 3, 6, 10, 15]
+/// ```
+///
+pub fn scan(
+ over iterator: Iterator(element),
+ from initial: acc,
+ with f: fn(acc, element) -> acc,
+) -> Iterator(acc) {
+ iterator.continuation
+ |> do_scan(f, initial)
+ |> Iterator
+}
+
+fn do_zip(
+ left: fn() -> Action(a),
+ right: fn() -> Action(b),
+) -> fn() -> Action(#(a, b)) {
+ fn() {
+ case left() {
+ Stop -> Stop
+ Continue(el_left, next_left) ->
+ case right() {
+ Stop -> Stop
+ Continue(el_right, next_right) ->
+ Continue(#(el_left, el_right), do_zip(next_left, next_right))
+ }
+ }
+ }
+}
+
+/// Zips two iterators together, emitting values from both
+/// until the shorter one runs out.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list(["a", "b", "c"])
+/// > |> zip(range(20, 30))
+/// > |> to_list
+/// [#("a", 20), #("b", 21), #("c", 22)]
+/// ```
+///
+pub fn zip(left: Iterator(a), right: Iterator(b)) -> Iterator(#(a, b)) {
+ do_zip(left.continuation, right.continuation)
+ |> Iterator
+}
+
+// Result of collecting a single chunk by key
+type Chunk(element, key) {
+ AnotherBy(List(element), key, element, fn() -> Action(element))
+ LastBy(List(element))
+}
+
+fn next_chunk(
+ continuation: fn() -> Action(element),
+ f: fn(element) -> key,
+ previous_key: key,
+ current_chunk: List(element),
+) -> Chunk(element, key) {
+ case continuation() {
+ Stop -> LastBy(list.reverse(current_chunk))
+ Continue(e, next) -> {
+ let key = f(e)
+ case key == previous_key {
+ True -> next_chunk(next, f, key, [e, ..current_chunk])
+ False -> AnotherBy(list.reverse(current_chunk), key, e, next)
+ }
+ }
+ }
+}
+
+fn do_chunk(
+ continuation: fn() -> Action(element),
+ f: fn(element) -> key,
+ previous_key: key,
+ previous_element: element,
+) -> Action(List(element)) {
+ case next_chunk(continuation, f, previous_key, [previous_element]) {
+ LastBy(chunk) -> Continue(chunk, stop)
+ AnotherBy(chunk, key, el, next) ->
+ Continue(chunk, fn() { do_chunk(next, f, key, el) })
+ }
+}
+
+/// Creates an iterator that emits chunks of elements
+/// for which `f` returns the same value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 2, 3, 4, 4, 6, 7, 7])
+/// > |> chunk(by: fn(n) { n % 2 })
+/// > |> to_list
+/// [[1], [2, 2], [3], [4, 4, 6], [7, 7]]
+/// ```
+///
+pub fn chunk(
+ over iterator: Iterator(element),
+ by f: fn(element) -> key,
+) -> Iterator(List(element)) {
+ fn() {
+ case iterator.continuation() {
+ Stop -> Stop
+ Continue(e, next) -> do_chunk(next, f, f(e), e)
+ }
+ }
+ |> Iterator
+}
+
+// Result of collecting a single sized chunk
+type SizedChunk(element) {
+ Another(List(element), fn() -> Action(element))
+ Last(List(element))
+ NoMore
+}
+
+fn next_sized_chunk(
+ continuation: fn() -> Action(element),
+ left: Int,
+ current_chunk: List(element),
+) -> SizedChunk(element) {
+ case continuation() {
+ Stop ->
+ case current_chunk {
+ [] -> NoMore
+ remaining -> Last(list.reverse(remaining))
+ }
+ Continue(e, next) -> {
+ let chunk = [e, ..current_chunk]
+ case left > 1 {
+ False -> Another(list.reverse(chunk), next)
+ True -> next_sized_chunk(next, left - 1, chunk)
+ }
+ }
+ }
+}
+
+fn do_sized_chunk(
+ continuation: fn() -> Action(element),
+ count: Int,
+) -> fn() -> Action(List(element)) {
+ fn() {
+ case next_sized_chunk(continuation, count, []) {
+ NoMore -> Stop
+ Last(chunk) -> Continue(chunk, stop)
+ Another(chunk, next_element) ->
+ Continue(chunk, do_sized_chunk(next_element, count))
+ }
+ }
+}
+
+/// Creates an iterator that emits chunks of given size.
+///
+/// If the last chunk does not have `count` elements, it is yielded
+/// as a partial chunk, with less than `count` elements.
+///
+/// For any `count` less than 1 this function behaves as if it was set to 1.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4, 5, 6])
+/// > |> sized_chunk(into: 2)
+/// > |> to_list
+/// [[1, 2], [3, 4], [5, 6]]
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4, 5, 6, 7, 8])
+/// > |> sized_chunk(into: 3)
+/// > |> to_list
+/// [[1, 2, 3], [4, 5, 6], [7, 8]]
+/// ```
+///
+pub fn sized_chunk(
+ over iterator: Iterator(element),
+ into count: Int,
+) -> Iterator(List(element)) {
+ iterator.continuation
+ |> do_sized_chunk(count)
+ |> Iterator
+}
+
+fn do_intersperse(
+ continuation: fn() -> Action(element),
+ separator: element,
+) -> Action(element) {
+ case continuation() {
+ Stop -> Stop
+ Continue(e, next) -> {
+ let next_interspersed = fn() { do_intersperse(next, separator) }
+ Continue(separator, fn() { Continue(e, next_interspersed) })
+ }
+ }
+}
+
+/// Creates an iterator that yields the given `elem` element
+/// between elements emitted by the underlying iterator.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty()
+/// > |> intersperse(with: 0)
+/// > |> to_list
+/// []
+///
+/// > from_list([1])
+/// > |> intersperse(with: 0)
+/// > |> to_list
+/// [1]
+///
+/// > from_list([1, 2, 3, 4, 5])
+/// > |> intersperse(with: 0)
+/// > |> to_list
+/// [1, 0, 2, 0, 3, 0, 4, 0, 5]
+/// ```
+///
+pub fn intersperse(
+ over iterator: Iterator(element),
+ with elem: element,
+) -> Iterator(element) {
+ fn() {
+ case iterator.continuation() {
+ Stop -> Stop
+ Continue(e, next) -> Continue(e, fn() { do_intersperse(next, elem) })
+ }
+ }
+ |> Iterator
+}
+
+fn do_any(
+ continuation: fn() -> Action(element),
+ predicate: fn(element) -> Bool,
+) -> Bool {
+ case continuation() {
+ Stop -> False
+ Continue(e, next) ->
+ case predicate(e) {
+ True -> True
+ False -> do_any(next, predicate)
+ }
+ }
+}
+
+/// Returns `True` if any element emitted by the iterator satisfies the given predicate,
+/// `False` otherwise.
+///
+/// This function short-circuits once it finds a satisfying element.
+///
+/// An empty iterator results in `False`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty() |> any(fn(n) { n % 2 == 0 })
+/// False
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 2, 5, 7, 9]) |> any(fn(n) { n % 2 == 0 })
+/// True
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 3, 5, 7, 9]) |> any(fn(n) { n % 2 == 0 })
+/// False
+/// ```
+///
+pub fn any(
+ in iterator: Iterator(element),
+ satisfying predicate: fn(element) -> Bool,
+) -> Bool {
+ iterator.continuation
+ |> do_any(predicate)
+}
+
+fn do_all(
+ continuation: fn() -> Action(element),
+ predicate: fn(element) -> Bool,
+) -> Bool {
+ case continuation() {
+ Stop -> True
+ Continue(e, next) ->
+ case predicate(e) {
+ True -> do_all(next, predicate)
+ False -> False
+ }
+ }
+}
+
+/// Returns `True` if all elements emitted by the iterator satisfy the given predicate,
+/// `False` otherwise.
+///
+/// This function short-circuits once it finds a non-satisfying element.
+///
+/// An empty iterator results in `True`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty() |> all(fn(n) { n % 2 == 0 })
+/// True
+/// ```
+///
+/// ```gleam
+/// > from_list([2, 4, 6, 8]) |> all(fn(n) { n % 2 == 0 })
+/// True
+/// ```
+///
+/// ```gleam
+/// > from_list([2, 4, 5, 8]) |> all(fn(n) { n % 2 == 0 })
+/// False
+/// ```
+///
+pub fn all(
+ in iterator: Iterator(element),
+ satisfying predicate: fn(element) -> Bool,
+) -> Bool {
+ iterator.continuation
+ |> do_all(predicate)
+}
+
+fn update_group_with(el: element) -> fn(Option(List(element))) -> List(element) {
+ fn(maybe_group) {
+ case maybe_group {
+ Some(group) -> [el, ..group]
+ None -> [el]
+ }
+ }
+}
+
+fn group_updater(
+ f: fn(element) -> key,
+) -> fn(Dict(key, List(element)), element) -> Dict(key, List(element)) {
+ fn(groups, elem) {
+ groups
+ |> dict.update(f(elem), update_group_with(elem))
+ }
+}
+
+/// Returns a `Dict(k, List(element))` of elements from the given iterator
+/// grouped with the given key function.
+///
+/// The order within each group is preserved from the iterator.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4, 5, 6]) |> group(by: fn(n) { n % 3 })
+/// dict.from_list([#(0, [3, 6]), #(1, [1, 4]), #(2, [2, 5])])
+/// ```
+///
+pub fn group(
+ in iterator: Iterator(element),
+ by key: fn(element) -> key,
+) -> Dict(key, List(element)) {
+ iterator
+ |> fold(dict.new(), group_updater(key))
+ |> dict.map_values(fn(_, group) { list.reverse(group) })
+}
+
+/// This function acts similar to fold, but does not take an initial state.
+/// Instead, it starts from the first yielded element
+/// and combines it with each subsequent element in turn using the given function.
+/// The function is called as `f(accumulator, current_element)`.
+///
+/// Returns `Ok` to indicate a successful run, and `Error` if called on an empty iterator.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([]) |> reduce(fn(acc, x) { acc + x })
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4, 5]) |> reduce(fn(acc, x) { acc + x })
+/// Ok(15)
+/// ```
+///
+pub fn reduce(
+ over iterator: Iterator(e),
+ with f: fn(e, e) -> e,
+) -> Result(e, Nil) {
+ case iterator.continuation() {
+ Stop -> Error(Nil)
+ Continue(e, next) ->
+ do_fold(next, f, e)
+ |> Ok
+ }
+}
+
+/// Returns the last element in the given iterator.
+///
+/// Returns `Error(Nil)` if the iterator is empty.
+///
+/// This function runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty() |> last
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > range(1, 10) |> last
+/// Ok(9)
+/// ```
+///
+pub fn last(iterator: Iterator(element)) -> Result(element, Nil) {
+ iterator
+ |> reduce(fn(_, elem) { elem })
+}
+
+/// Creates an iterator that yields no elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty() |> to_list
+/// []
+/// ```
+///
+pub fn empty() -> Iterator(element) {
+ Iterator(stop)
+}
+
+/// Creates an iterator that yields exactly one element provided by calling the given function.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > once(fn() { 1 }) |> to_list
+/// [1]
+/// ```
+///
+pub fn once(f: fn() -> element) -> Iterator(element) {
+ fn() { Continue(f(), stop) }
+ |> Iterator
+}
+
+/// Creates an iterator that yields the given element exactly once.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > single(1) |> to_list
+/// [1]
+/// ```
+///
+pub fn single(elem: element) -> Iterator(element) {
+ once(fn() { elem })
+}
+
+fn do_interleave(
+ current: fn() -> Action(element),
+ next: fn() -> Action(element),
+) -> Action(element) {
+ case current() {
+ Stop -> next()
+ Continue(e, next_other) ->
+ Continue(e, fn() { do_interleave(next, next_other) })
+ }
+}
+
+/// Creates an iterator that alternates between the two given iterators
+/// until both have run out.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4]) |> interleave(from_list([11, 12, 13, 14])) |> to_list
+/// [1, 11, 2, 12, 3, 13, 4, 14]
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4]) |> interleave(from_list([100])) |> to_list
+/// [1, 100, 2, 3, 4]
+/// ```
+///
+pub fn interleave(
+ left: Iterator(element),
+ with right: Iterator(element),
+) -> Iterator(element) {
+ fn() { do_interleave(left.continuation, right.continuation) }
+ |> Iterator
+}
+
+fn do_fold_until(
+ continuation: fn() -> Action(e),
+ f: fn(acc, e) -> list.ContinueOrStop(acc),
+ accumulator: acc,
+) -> acc {
+ case continuation() {
+ Stop -> accumulator
+ Continue(elem, next) ->
+ case f(accumulator, elem) {
+ list.Continue(accumulator) -> do_fold_until(next, f, accumulator)
+ list.Stop(accumulator) -> accumulator
+ }
+ }
+}
+
+/// Like `fold`, `fold_until` reduces an iterator of elements into a single value by calling a given
+/// function on each element in turn, but uses `list.ContinueOrStop` to determine
+/// whether or not to keep iterating.
+///
+/// If called on an iterator of infinite length then this function will only ever
+/// return if the function returns `list.Stop`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/list
+/// > let f = fn(acc, e) {
+/// > case e {
+/// > _ if e < 4 -> list.Continue(e + acc)
+/// > _ -> list.Stop(acc)
+/// > }
+/// > }
+/// >
+/// > [1, 2, 3, 4]
+/// > |> from_list
+/// > |> fold_until(from: acc, with: f)
+/// 6
+/// ```
+///
+pub fn fold_until(
+ over iterator: Iterator(e),
+ from initial: acc,
+ with f: fn(acc, e) -> list.ContinueOrStop(acc),
+) -> acc {
+ iterator.continuation
+ |> do_fold_until(f, initial)
+}
+
+fn do_try_fold(
+ over continuation: fn() -> Action(a),
+ with f: fn(acc, a) -> Result(acc, err),
+ from accumulator: acc,
+) -> Result(acc, err) {
+ case continuation() {
+ Stop -> Ok(accumulator)
+ Continue(elem, next) -> {
+ use accumulator <- result.try(f(accumulator, elem))
+ do_try_fold(next, f, accumulator)
+ }
+ }
+}
+
+/// A variant of fold that might fail.
+///
+/// The folding function should return `Result(accumulator, error)`.
+/// If the returned value is `Ok(accumulator)` try_fold will try the next value in the iterator.
+/// If the returned value is `Error(error)` try_fold will stop and return that error.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3, 4]
+/// > |> iterator.from_list()
+/// > |> try_fold(0, fn(acc, i) {
+/// > case i < 3 {
+/// > True -> Ok(acc + i)
+/// > False -> Error(Nil)
+/// > }
+/// > })
+/// Error(Nil)
+/// ```
+///
+pub fn try_fold(
+ over iterator: Iterator(e),
+ from initial: acc,
+ with f: fn(acc, e) -> Result(acc, err),
+) -> Result(acc, err) {
+ iterator.continuation
+ |> do_try_fold(f, initial)
+}
+
+/// Returns the first element yielded by the given iterator, if it exists,
+/// or `Error(Nil)` otherwise.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3]) |> first
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > empty() |> first
+/// Error(Nil)
+/// ```
+pub fn first(from iterator: Iterator(e)) -> Result(e, Nil) {
+ case iterator.continuation() {
+ Stop -> Error(Nil)
+ Continue(e, _) -> Ok(e)
+ }
+}
+
+/// Returns nth element yielded by the given iterator, where `0` means the first element.
+///
+/// If there are not enough elements in the iterator, `Error(Nil)` is returned.
+///
+/// For any `index` less than `0` this function behaves as if it was set to `0`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4]) |> at(2)
+/// Ok(3)
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4]) |> at(4)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > empty() |> at(0)
+/// Error(Nil)
+/// ```
+///
+pub fn at(in iterator: Iterator(e), get index: Int) -> Result(e, Nil) {
+ iterator
+ |> drop(index)
+ |> first
+}
+
+fn do_length(over continuation: fn() -> Action(e), with length: Int) -> Int {
+ case continuation() {
+ Stop -> length
+ Continue(_, next) -> do_length(next, length + 1)
+ }
+}
+
+/// Counts the number of elements in the given iterator.
+///
+/// This function has to traverse the entire iterator to count its elements,
+/// so it runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty() |> length
+/// 0
+/// ```
+///
+/// ```gleam
+/// > from_list([1, 2, 3, 4]) |> length
+/// 4
+/// ```
+///
+pub fn length(over iterator: Iterator(e)) -> Int {
+ iterator.continuation
+ |> do_length(0)
+}
+
+/// Traverse an iterator, calling a function on each element.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > empty() |> each(io.println)
+/// Nil
+/// ```
+///
+/// ```gleam
+/// > from_list(["Tom", "Malory", "Louis"]) |> each(io.println)
+/// // -> Tom
+/// // -> Malory
+/// // -> Louis
+/// Nil
+/// ```
+///
+pub fn each(over iterator: Iterator(a), with f: fn(a) -> b) -> Nil {
+ iterator
+ |> map(f)
+ |> run
+}
+
+/// Add a new element to the start of an iterator.
+///
+/// This function is for use with `use` expressions, to replicate the behaviour
+/// of the `yield` keyword found in other languages.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > use <- iterator.yield(1)
+/// > use <- iterator.yield(2)
+/// > use <- iterator.yield(3)
+/// > iterator.empty()
+/// iterator.from_list([1, 2, 3])
+/// ```
+///
+pub fn yield(element: a, next: fn() -> Iterator(a)) -> Iterator(a) {
+ Iterator(fn() { Continue(element, next().continuation) })
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam
new file mode 100644
index 0000000..a5cffa9
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/list.gleam
@@ -0,0 +1,2154 @@
+//// Lists are an ordered sequence of elements and are one of the most common
+//// data types in Gleam.
+////
+//// New elements can be added and removed from the front of a list in
+//// constant time, while adding and removing from the end requires traversing
+//// the copying the whole list, so keep this in mind when designing your
+//// programs.
+////
+//// There is a dedicated syntax for prefixing to a list:
+////
+//// ```gleam
+//// let new_list = [1, 2, ..existing_list]
+//// ```
+////
+//// And a matching syntax for getting the first elements of a list:
+////
+//// ```gleam
+//// case list {
+//// [first_element, ..rest] -> first_element
+//// _ -> "this pattern matches when the list is empty"
+//// }
+//// ```
+////
+
+import gleam/int
+import gleam/float
+import gleam/order.{type Order}
+import gleam/pair
+import gleam/dict.{type Dict}
+
+/// An error value returned by the `strict_zip` function.
+///
+pub type LengthMismatch {
+ LengthMismatch
+}
+
+/// Counts the number of elements in a given list.
+///
+/// This function has to traverse the list to determine the number of elements,
+/// so it runs in linear time.
+///
+/// This function is natively implemented by the virtual machine and is highly
+/// optimised.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > length([])
+/// 0
+/// ```
+///
+/// ```gleam
+/// > length([1])
+/// 1
+/// ```
+///
+/// ```gleam
+/// > length([1, 2])
+/// 2
+/// ```
+///
+pub fn length(of list: List(a)) -> Int {
+ do_length(list)
+}
+
+@target(erlang)
+@external(erlang, "erlang", "length")
+fn do_length(a: List(a)) -> Int
+
+@target(javascript)
+fn do_length(list: List(a)) -> Int {
+ do_length_acc(list, 0)
+}
+
+@target(javascript)
+fn do_length_acc(list: List(a), count: Int) -> Int {
+ case list {
+ [_, ..list] -> do_length_acc(list, count + 1)
+ _ -> count
+ }
+}
+
+/// Creates a new list from a given list containing the same elements but in the
+/// opposite order.
+///
+/// This function has to traverse the list to create the new reversed list, so
+/// it runs in linear time.
+///
+/// This function is natively implemented by the virtual machine and is highly
+/// optimised.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > reverse([])
+/// []
+/// ```
+///
+/// ```gleam
+/// > reverse([1])
+/// [1]
+/// ```
+///
+/// ```gleam
+/// > reverse([1, 2])
+/// [2, 1]
+/// ```
+///
+pub fn reverse(xs: List(a)) -> List(a) {
+ do_reverse(xs)
+}
+
+@target(erlang)
+@external(erlang, "lists", "reverse")
+fn do_reverse(a: List(a)) -> List(a)
+
+@target(javascript)
+fn do_reverse(list) {
+ do_reverse_acc(list, [])
+}
+
+@target(javascript)
+fn do_reverse_acc(remaining, accumulator) {
+ case remaining {
+ [] -> accumulator
+ [item, ..rest] -> do_reverse_acc(rest, [item, ..accumulator])
+ }
+}
+
+/// Determines whether or not the list is empty.
+///
+/// This function runs in constant time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_empty([])
+/// True
+/// ```
+///
+/// ```gleam
+/// > is_empty([1])
+/// False
+/// ```
+///
+/// ```gleam
+/// > is_empty([1, 1])
+/// False
+/// ```
+///
+pub fn is_empty(list: List(a)) -> Bool {
+ list == []
+}
+
+/// Determines whether or not a given element exists within a given list.
+///
+/// This function traverses the list to find the element, so it runs in linear
+/// time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [] |> contains(any: 0)
+/// False
+/// ```
+///
+/// ```gleam
+/// > [0] |> contains(any: 0)
+/// True
+/// ```
+///
+/// ```gleam
+/// > [1] |> contains(any: 0)
+/// False
+/// ```
+///
+/// ```gleam
+/// > [1, 1] |> contains(any: 0)
+/// False
+/// ```
+///
+/// ```gleam
+/// > [1, 0] |> contains(any: 0)
+/// True
+/// ```
+///
+pub fn contains(list: List(a), any elem: a) -> Bool {
+ case list {
+ [] -> False
+ [first, ..] if first == elem -> True
+ [_, ..rest] -> contains(rest, elem)
+ }
+}
+
+/// Gets the first element from the start of the list, if there is one.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > first([])
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > first([0])
+/// Ok(0)
+/// ```
+///
+/// ```gleam
+/// > first([1, 2])
+/// Ok(1)
+/// ```
+///
+pub fn first(list: List(a)) -> Result(a, Nil) {
+ case list {
+ [] -> Error(Nil)
+ [x, ..] -> Ok(x)
+ }
+}
+
+/// Returns the list minus the first element. If the list is empty, `Error(Nil)` is
+/// returned.
+///
+/// This function runs in constant time and does not make a copy of the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > rest([])
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > rest([0])
+/// Ok([])
+/// ```
+///
+/// ```gleam
+/// > rest([1, 2])
+/// Ok([2])
+/// ```
+///
+pub fn rest(list: List(a)) -> Result(List(a), Nil) {
+ case list {
+ [] -> Error(Nil)
+ [_, ..xs] -> Ok(xs)
+ }
+}
+
+fn update_group(
+ f: fn(element) -> key,
+) -> fn(Dict(key, List(element)), element) -> Dict(key, List(element)) {
+ fn(groups, elem) {
+ case dict.get(groups, f(elem)) {
+ Ok(existing) -> dict.insert(groups, f(elem), [elem, ..existing])
+ Error(_) -> dict.insert(groups, f(elem), [elem])
+ }
+ }
+}
+
+/// Takes a list and groups the values by a key
+/// which is built from a key function.
+///
+/// Does not preserve the initial value order.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [Ok(3), Error("Wrong"), Ok(200), Ok(73)]
+/// |> group(by: fn(i) {
+/// case i {
+/// Ok(_) -> "Successful"
+/// Error(_) -> "Failed"
+/// }
+/// })
+/// |> dict.to_list
+///
+/// [
+/// #("Failed", [Error("Wrong")]),
+/// #("Successful", [Ok(73), Ok(200), Ok(3)])
+/// ]
+///
+/// > group([1,2,3,4,5], by: fn(i) { i - i / 3 * 3 })
+/// |> dict.to_list
+/// [#(0, [3]), #(1, [4, 1]), #(2, [5, 2])]
+/// ```
+///
+pub fn group(list: List(v), by key: fn(v) -> k) -> Dict(k, List(v)) {
+ fold(list, dict.new(), update_group(key))
+}
+
+fn do_filter(list: List(a), fun: fn(a) -> Bool, acc: List(a)) -> List(a) {
+ case list {
+ [] -> reverse(acc)
+ [x, ..xs] -> {
+ let new_acc = case fun(x) {
+ True -> [x, ..acc]
+ False -> acc
+ }
+ do_filter(xs, fun, new_acc)
+ }
+ }
+}
+
+/// Returns a new list containing only the elements from the first list for
+/// which the given functions returns `True`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > filter([2, 4, 6, 1], fn(x) { x > 2 })
+/// [4, 6]
+/// ```
+///
+/// ```gleam
+/// > filter([2, 4, 6, 1], fn(x) { x > 6 })
+/// []
+/// ```
+///
+pub fn filter(list: List(a), keeping predicate: fn(a) -> Bool) -> List(a) {
+ do_filter(list, predicate, [])
+}
+
+fn do_filter_map(
+ list: List(a),
+ fun: fn(a) -> Result(b, e),
+ acc: List(b),
+) -> List(b) {
+ case list {
+ [] -> reverse(acc)
+ [x, ..xs] -> {
+ let new_acc = case fun(x) {
+ Ok(x) -> [x, ..acc]
+ Error(_) -> acc
+ }
+ do_filter_map(xs, fun, new_acc)
+ }
+ }
+}
+
+/// Returns a new list containing only the elements from the first list for
+/// which the given functions returns `Ok(_)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > filter_map([2, 4, 6, 1], Error)
+/// []
+/// ```
+///
+/// ```gleam
+/// > filter_map([2, 4, 6, 1], fn(x) { Ok(x + 1) })
+/// [3, 5, 7, 2]
+/// ```
+///
+pub fn filter_map(list: List(a), with fun: fn(a) -> Result(b, e)) -> List(b) {
+ do_filter_map(list, fun, [])
+}
+
+fn do_map(list: List(a), fun: fn(a) -> b, acc: List(b)) -> List(b) {
+ case list {
+ [] -> reverse(acc)
+ [x, ..xs] -> do_map(xs, fun, [fun(x), ..acc])
+ }
+}
+
+/// Returns a new list containing only the elements of the first list after the
+/// function has been applied to each one.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > map([2, 4, 6], fn(x) { x * 2 })
+/// [4, 8, 12]
+/// ```
+///
+pub fn map(list: List(a), with fun: fn(a) -> b) -> List(b) {
+ do_map(list, fun, [])
+}
+
+/// Combines two lists into a single list using the given function.
+///
+/// If a list is longer than the other the extra elements are dropped.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > map2([1, 2, 3], [4, 5, 6], fn(x, y) { x + y })
+/// [5, 7, 9]
+/// ```
+///
+/// ```gleam
+/// > map2([1, 2], ["a", "b", "c"], fn(i, x) { #(i, x) })
+/// [#(1, "a"), #(2, "b")]
+/// ```
+///
+pub fn map2(list1: List(a), list2: List(b), with fun: fn(a, b) -> c) -> List(c) {
+ do_map2(list1, list2, fun, [])
+}
+
+fn do_map2(
+ list1: List(a),
+ list2: List(b),
+ fun: fn(a, b) -> c,
+ acc: List(c),
+) -> List(c) {
+ case list1, list2 {
+ [], _ | _, [] -> reverse(acc)
+ [a, ..as_], [b, ..bs] -> do_map2(as_, bs, fun, [fun(a, b), ..acc])
+ }
+}
+
+/// Similar to `map` but also lets you pass around an accumulated value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > map_fold(
+/// over: [1, 2, 3],
+/// from: 100,
+/// with: fn(memo, i) { #(memo + i, i * 2) }
+/// )
+/// #(106, [2, 4, 6])
+/// ```
+///
+pub fn map_fold(
+ over list: List(a),
+ from acc: acc,
+ with fun: fn(acc, a) -> #(acc, b),
+) -> #(acc, List(b)) {
+ fold(
+ over: list,
+ from: #(acc, []),
+ with: fn(acc, item) {
+ let #(current_acc, items) = acc
+ let #(next_acc, next_item) = fun(current_acc, item)
+ #(next_acc, [next_item, ..items])
+ },
+ )
+ |> pair.map_second(reverse)
+}
+
+fn do_index_map(
+ list: List(a),
+ fun: fn(Int, a) -> b,
+ index: Int,
+ acc: List(b),
+) -> List(b) {
+ case list {
+ [] -> reverse(acc)
+ [x, ..xs] -> {
+ let acc = [fun(index, x), ..acc]
+ do_index_map(xs, fun, index + 1, acc)
+ }
+ }
+}
+
+/// Returns a new list containing only the elements of the first list after the
+/// function has been applied to each one and their index.
+///
+/// The index starts at 0, so the first element is 0, the second is 1, and so
+/// on.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > index_map(["a", "b"], fn(i, x) { #(i, x) })
+/// [#(0, "a"), #(1, "b")]
+/// ```
+///
+pub fn index_map(list: List(a), with fun: fn(Int, a) -> b) -> List(b) {
+ do_index_map(list, fun, 0, [])
+}
+
+fn do_try_map(
+ list: List(a),
+ fun: fn(a) -> Result(b, e),
+ acc: List(b),
+) -> Result(List(b), e) {
+ case list {
+ [] -> Ok(reverse(acc))
+ [x, ..xs] ->
+ case fun(x) {
+ Ok(y) -> do_try_map(xs, fun, [y, ..acc])
+ Error(error) -> Error(error)
+ }
+ }
+}
+
+/// Takes a function that returns a `Result` and applies it to each element in a
+/// given list in turn.
+///
+/// If the function returns `Ok(new_value)` for all elements in the list then a
+/// list of the new values is returned.
+///
+/// If the function returns `Error(reason)` for any of the elements then it is
+/// returned immediately. None of the elements in the list are processed after
+/// one returns an `Error`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > try_map([1, 2, 3], fn(x) { Ok(x + 2) })
+/// Ok([3, 4, 5])
+/// ```
+///
+/// ```gleam
+/// > try_map([1, 2, 3], fn(_) { Error(0) })
+/// Error(0)
+/// ```
+///
+/// ```gleam
+/// > try_map([[1], [2, 3]], first)
+/// Ok([1, 2])
+/// ```
+///
+/// ```gleam
+/// > try_map([[1], [], [2]], first)
+/// Error(Nil)
+/// ```
+///
+pub fn try_map(
+ over list: List(a),
+ with fun: fn(a) -> Result(b, e),
+) -> Result(List(b), e) {
+ do_try_map(list, fun, [])
+}
+
+/// Returns a list that is the given list with up to the given number of
+/// elements removed from the front of the list.
+///
+/// If the element has less than the number of elements an empty list is
+/// returned.
+///
+/// This function runs in linear time but does not copy the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > drop([1, 2, 3, 4], 2)
+/// [3, 4]
+/// ```
+///
+/// ```gleam
+/// > drop([1, 2, 3, 4], 9)
+/// []
+/// ```
+///
+pub fn drop(from list: List(a), up_to n: Int) -> List(a) {
+ case n <= 0 {
+ True -> list
+ False ->
+ case list {
+ [] -> []
+ [_, ..xs] -> drop(xs, n - 1)
+ }
+ }
+}
+
+fn do_take(list: List(a), n: Int, acc: List(a)) -> List(a) {
+ case n <= 0 {
+ True -> reverse(acc)
+ False ->
+ case list {
+ [] -> reverse(acc)
+ [x, ..xs] -> do_take(xs, n - 1, [x, ..acc])
+ }
+ }
+}
+
+/// Returns a list containing the first given number of elements from the given
+/// list.
+///
+/// If the element has less than the number of elements then the full list is
+/// returned.
+///
+/// This function runs in linear time but does not copy the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > take([1, 2, 3, 4], 2)
+/// [1, 2]
+/// ```
+///
+/// ```gleam
+/// > take([1, 2, 3, 4], 9)
+/// [1, 2, 3, 4]
+/// ```
+///
+pub fn take(from list: List(a), up_to n: Int) -> List(a) {
+ do_take(list, n, [])
+}
+
+/// Returns a new empty list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new()
+/// []
+/// ```
+///
+pub fn new() -> List(a) {
+ []
+}
+
+/// Joins one list onto the end of another.
+///
+/// This function runs in linear time, and it traverses and copies the first
+/// list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > append([1, 2], [3])
+/// [1, 2, 3]
+/// ```
+///
+pub fn append(first: List(a), second: List(a)) -> List(a) {
+ do_append(first, second)
+}
+
+@target(erlang)
+@external(erlang, "lists", "append")
+fn do_append(a: List(a), b: List(a)) -> List(a)
+
+@target(javascript)
+fn do_append(first: List(a), second: List(a)) -> List(a) {
+ do_append_acc(reverse(first), second)
+}
+
+@target(javascript)
+fn do_append_acc(first: List(a), second: List(a)) -> List(a) {
+ case first {
+ [] -> second
+ [item, ..rest] -> do_append_acc(rest, [item, ..second])
+ }
+}
+
+/// Prefixes an item to a list. This can also be done using the dedicated
+/// syntax instead
+///
+/// ```gleam
+/// let new_list = [1, ..existing_list]
+/// ```
+///
+pub fn prepend(to list: List(a), this item: a) -> List(a) {
+ [item, ..list]
+}
+
+// Reverses a list and prepends it to another list
+fn reverse_and_prepend(list prefix: List(a), to suffix: List(a)) -> List(a) {
+ case prefix {
+ [] -> suffix
+ [first, ..rest] -> reverse_and_prepend(list: rest, to: [first, ..suffix])
+ }
+}
+
+fn do_concat(lists: List(List(a)), acc: List(a)) -> List(a) {
+ case lists {
+ [] -> reverse(acc)
+ [list, ..further_lists] ->
+ do_concat(further_lists, reverse_and_prepend(list: list, to: acc))
+ }
+}
+
+/// Joins a list of lists into a single list.
+///
+/// This function traverses all elements twice.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > concat([[1], [2, 3], []])
+/// [1, 2, 3]
+/// ```
+///
+pub fn concat(lists: List(List(a))) -> List(a) {
+ do_concat(lists, [])
+}
+
+/// This is the same as `concat`: it joins a list of lists into a single
+/// list.
+///
+/// This function traverses all elements twice.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > flatten([[1], [2, 3], []])
+/// [1, 2, 3]
+/// ```
+///
+pub fn flatten(lists: List(List(a))) -> List(a) {
+ do_concat(lists, [])
+}
+
+/// Maps the list with the given function into a list of lists, and then flattens it.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > flat_map([2, 4, 6], fn(x) { [x, x + 1] })
+/// [2, 3, 4, 5, 6, 7]
+/// ```
+///
+pub fn flat_map(over list: List(a), with fun: fn(a) -> List(b)) -> List(b) {
+ map(list, fun)
+ |> concat
+}
+
+/// Reduces a list of elements into a single value by calling a given function
+/// on each element, going from left to right.
+///
+/// `fold([1, 2, 3], 0, add)` is the equivalent of
+/// `add(add(add(0, 1), 2), 3)`.
+///
+/// This function runs in linear time.
+///
+pub fn fold(
+ over list: List(a),
+ from initial: acc,
+ with fun: fn(acc, a) -> acc,
+) -> acc {
+ case list {
+ [] -> initial
+ [x, ..rest] -> fold(rest, fun(initial, x), fun)
+ }
+}
+
+/// Reduces a list of elements into a single value by calling a given function
+/// on each element, going from right to left.
+///
+/// `fold_right([1, 2, 3], 0, add)` is the equivalent of
+/// `add(add(add(0, 3), 2), 1)`.
+///
+/// This function runs in linear time.
+///
+/// Unlike `fold` this function is not tail recursive. Where possible use
+/// `fold` instead as it will use less memory.
+///
+pub fn fold_right(
+ over list: List(a),
+ from initial: acc,
+ with fun: fn(acc, a) -> acc,
+) -> acc {
+ case list {
+ [] -> initial
+ [x, ..rest] -> fun(fold_right(rest, initial, fun), x)
+ }
+}
+
+fn do_index_fold(
+ over: List(a),
+ acc: acc,
+ with: fn(acc, a, Int) -> acc,
+ index: Int,
+) -> acc {
+ case over {
+ [] -> acc
+ [first, ..rest] ->
+ do_index_fold(rest, with(acc, first, index), with, index + 1)
+ }
+}
+
+/// Like fold but the folding function also receives the index of the current element.
+///
+/// ## Examples
+///
+/// ```gleam
+/// ["a", "b", "c"]
+/// |> index_fold([], fn(acc, item, index) { ... })
+/// ```
+///
+pub fn index_fold(
+ over over: List(a),
+ from initial: acc,
+ with fun: fn(acc, a, Int) -> acc,
+) -> acc {
+ do_index_fold(over, initial, fun, 0)
+}
+
+/// A variant of fold that might fail.
+///
+/// The folding function should return `Result(accumulator, error)`.
+/// If the returned value is `Ok(accumulator)` try_fold will try the next value in the list.
+/// If the returned value is `Error(error)` try_fold will stop and return that error.
+///
+/// ## Examples
+///
+/// ```gleam
+/// [1, 2, 3, 4]
+/// |> try_fold(0, fn(acc, i) {
+/// case i < 3 {
+/// True -> Ok(acc + i)
+/// False -> Error(Nil)
+/// }
+/// })
+/// ```
+///
+pub fn try_fold(
+ over collection: List(a),
+ from accumulator: acc,
+ with fun: fn(acc, a) -> Result(acc, e),
+) -> Result(acc, e) {
+ case collection {
+ [] -> Ok(accumulator)
+ [first, ..rest] ->
+ case fun(accumulator, first) {
+ Ok(result) -> try_fold(rest, result, fun)
+ Error(_) as error -> error
+ }
+ }
+}
+
+pub type ContinueOrStop(a) {
+ Continue(a)
+ Stop(a)
+}
+
+/// A variant of fold that allows to stop folding earlier.
+///
+/// The folding function should return `ContinueOrStop(accumulator)`.
+/// If the returned value is `Continue(accumulator)` fold_until will try the next value in the list.
+/// If the returned value is `Stop(accumulator)` fold_until will stop and return that accumulator.
+///
+/// ## Examples
+///
+/// ```gleam
+/// [1, 2, 3, 4]
+/// |> fold_until(0, fn(acc, i) {
+/// case i < 3 {
+/// True -> Continue(acc + i)
+/// False -> Stop(acc)
+/// }
+/// })
+/// ```
+///
+pub fn fold_until(
+ over collection: List(a),
+ from accumulator: acc,
+ with fun: fn(acc, a) -> ContinueOrStop(acc),
+) -> acc {
+ case collection {
+ [] -> accumulator
+ [first, ..rest] ->
+ case fun(accumulator, first) {
+ Continue(next_accumulator) -> fold_until(rest, next_accumulator, fun)
+ Stop(b) -> b
+ }
+ }
+}
+
+/// Finds the first element in a given list for which the given function returns
+/// `True`.
+///
+/// Returns `Error(Nil)` if no such element is found.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > find([1, 2, 3], fn(x) { x > 2 })
+/// Ok(3)
+/// ```
+///
+/// ```gleam
+/// > find([1, 2, 3], fn(x) { x > 4 })
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > find([], fn(_) { True })
+/// Error(Nil)
+/// ```
+///
+pub fn find(
+ in haystack: List(a),
+ one_that is_desired: fn(a) -> Bool,
+) -> Result(a, Nil) {
+ case haystack {
+ [] -> Error(Nil)
+ [x, ..rest] ->
+ case is_desired(x) {
+ True -> Ok(x)
+ _ -> find(in: rest, one_that: is_desired)
+ }
+ }
+}
+
+/// Finds the first element in a given list for which the given function returns
+/// `Ok(new_value)`, then returns the wrapped `new_value`.
+///
+/// Returns `Error(Nil)` if no such element is found.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > find_map([[], [2], [3]], first)
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > find_map([[], []], first)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > find_map([], first)
+/// Error(Nil)
+/// ```
+///
+pub fn find_map(
+ in haystack: List(a),
+ with fun: fn(a) -> Result(b, c),
+) -> Result(b, Nil) {
+ case haystack {
+ [] -> Error(Nil)
+ [x, ..rest] ->
+ case fun(x) {
+ Ok(x) -> Ok(x)
+ _ -> find_map(in: rest, with: fun)
+ }
+ }
+}
+
+/// Returns `True` if the given function returns `True` for all the elements in
+/// the given list. If the function returns `False` for any of the elements it
+/// immediately returns `False` without checking the rest of the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > all([], fn(x) { x > 3 })
+/// True
+/// ```
+///
+/// ```gleam
+/// > all([4, 5], fn(x) { x > 3 })
+/// True
+/// ```
+///
+/// ```gleam
+/// > all([4, 3], fn(x) { x > 3 })
+/// False
+/// ```
+///
+pub fn all(in list: List(a), satisfying predicate: fn(a) -> Bool) -> Bool {
+ case list {
+ [] -> True
+ [first, ..rest] ->
+ case predicate(first) {
+ True -> all(rest, predicate)
+ False -> False
+ }
+ }
+}
+
+/// Returns `True` if the given function returns `True` for any the elements in
+/// the given list. If the function returns `True` for any of the elements it
+/// immediately returns `True` without checking the rest of the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > any([], fn(x) { x > 3 })
+/// False
+/// ```
+///
+/// ```gleam
+/// > any([4, 5], fn(x) { x > 3 })
+/// True
+/// ```
+///
+/// ```gleam
+/// > any([4, 3], fn(x) { x > 4 })
+/// False
+/// ```
+///
+/// ```gleam
+/// > any([3, 4], fn(x) { x > 3 })
+/// True
+/// ```
+///
+pub fn any(in list: List(a), satisfying predicate: fn(a) -> Bool) -> Bool {
+ case list {
+ [] -> False
+ [first, ..rest] ->
+ case predicate(first) {
+ True -> True
+ False -> any(rest, predicate)
+ }
+ }
+}
+
+fn do_zip(xs: List(a), ys: List(b), acc: List(#(a, b))) -> List(#(a, b)) {
+ case xs, ys {
+ [x, ..xs], [y, ..ys] -> do_zip(xs, ys, [#(x, y), ..acc])
+ _, _ -> reverse(acc)
+ }
+}
+
+/// Takes two lists and returns a single list of 2-element tuples.
+///
+/// If one of the lists is longer than the other, the remaining elements from
+/// the longer list are not used.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > zip([], [])
+/// []
+/// ```
+///
+/// ```gleam
+/// > zip([1, 2], [3])
+/// [#(1, 3)]
+/// ```
+///
+/// ```gleam
+/// > zip([1], [3, 4])
+/// [#(1, 3)]
+/// ```
+///
+/// ```gleam
+/// > zip([1, 2], [3, 4])
+/// [#(1, 3), #(2, 4)]
+/// ```
+///
+pub fn zip(list: List(a), with other: List(b)) -> List(#(a, b)) {
+ do_zip(list, other, [])
+}
+
+/// Takes two lists and returns a single list of 2-element tuples.
+///
+/// If one of the lists is longer than the other, an `Error` is returned.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > strict_zip([], [])
+/// Ok([])
+/// ```
+///
+/// ```gleam
+/// > strict_zip([1, 2], [3])
+/// Error(LengthMismatch)
+/// ```
+///
+/// ```gleam
+/// > strict_zip([1], [3, 4])
+/// Error(LengthMismatch)
+/// ```
+///
+/// ```gleam
+/// > strict_zip([1, 2], [3, 4])
+/// Ok([#(1, 3), #(2, 4)])
+/// ```
+///
+pub fn strict_zip(
+ list: List(a),
+ with other: List(b),
+) -> Result(List(#(a, b)), LengthMismatch) {
+ case length(of: list) == length(of: other) {
+ True -> Ok(zip(list, other))
+ False -> Error(LengthMismatch)
+ }
+}
+
+fn do_unzip(input, xs, ys) {
+ case input {
+ [] -> #(reverse(xs), reverse(ys))
+ [#(x, y), ..rest] -> do_unzip(rest, [x, ..xs], [y, ..ys])
+ }
+}
+
+/// Takes a single list of 2-element tuples and returns two lists.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unzip([#(1, 2), #(3, 4)])
+/// #([1, 3], [2, 4])
+/// ```
+///
+/// ```gleam
+/// > unzip([])
+/// #([], [])
+/// ```
+///
+pub fn unzip(input: List(#(a, b))) -> #(List(a), List(b)) {
+ do_unzip(input, [], [])
+}
+
+fn do_intersperse(list: List(a), separator: a, acc: List(a)) -> List(a) {
+ case list {
+ [] -> reverse(acc)
+ [x, ..rest] -> do_intersperse(rest, separator, [x, separator, ..acc])
+ }
+}
+
+/// Inserts a given value between each existing element in a given list.
+///
+/// This function runs in linear time and copies the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > intersperse([1, 1, 1], 2)
+/// [1, 2, 1, 2, 1]
+/// ```
+///
+/// ```gleam
+/// > intersperse([], 2)
+/// []
+/// ```
+///
+pub fn intersperse(list: List(a), with elem: a) -> List(a) {
+ case list {
+ [] | [_] -> list
+ [x, ..rest] -> do_intersperse(rest, elem, [x])
+ }
+}
+
+/// Returns the element in the Nth position in the list, with 0 being the first
+/// position.
+///
+/// `Error(Nil)` is returned if the list is not long enough for the given index
+/// or if the index is less than 0.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > at([1, 2, 3], 1)
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > at([1, 2, 3], 5)
+/// Error(Nil)
+/// ```
+///
+pub fn at(in list: List(a), get index: Int) -> Result(a, Nil) {
+ case index >= 0 {
+ True ->
+ list
+ |> drop(index)
+ |> first
+ False -> Error(Nil)
+ }
+}
+
+/// Removes any duplicate elements from a given list.
+///
+/// This function returns in loglinear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unique([1, 1, 1, 4, 7, 3, 3, 4])
+/// [1, 4, 7, 3]
+/// ```
+///
+pub fn unique(list: List(a)) -> List(a) {
+ case list {
+ [] -> []
+ [x, ..rest] -> [x, ..unique(filter(rest, fn(y) { y != x }))]
+ }
+}
+
+/// Merge lists `a` and `b` in ascending order
+/// but only up to `na` and `nb` number of items respectively.
+///
+fn merge_up(
+ na: Int,
+ nb: Int,
+ a: List(a),
+ b: List(a),
+ acc: List(a),
+ compare: fn(a, a) -> Order,
+) {
+ case na, nb, a, b {
+ 0, 0, _, _ -> acc
+ _, 0, [ax, ..ar], _ -> merge_up(na - 1, nb, ar, b, [ax, ..acc], compare)
+ 0, _, _, [bx, ..br] -> merge_up(na, nb - 1, a, br, [bx, ..acc], compare)
+ _, _, [ax, ..ar], [bx, ..br] ->
+ case compare(ax, bx) {
+ order.Gt -> merge_up(na, nb - 1, a, br, [bx, ..acc], compare)
+ _ -> merge_up(na - 1, nb, ar, b, [ax, ..acc], compare)
+ }
+ _, _, _, _ -> acc
+ }
+}
+
+/// Merge lists `a` and `b` in descending order
+/// but only up to `na` and `nb` number of items respectively.
+///
+fn merge_down(
+ na: Int,
+ nb: Int,
+ a: List(a),
+ b: List(a),
+ acc: List(a),
+ compare: fn(a, a) -> Order,
+) {
+ case na, nb, a, b {
+ 0, 0, _, _ -> acc
+ _, 0, [ax, ..ar], _ -> merge_down(na - 1, nb, ar, b, [ax, ..acc], compare)
+ 0, _, _, [bx, ..br] -> merge_down(na, nb - 1, a, br, [bx, ..acc], compare)
+ _, _, [ax, ..ar], [bx, ..br] ->
+ case compare(bx, ax) {
+ order.Lt -> merge_down(na - 1, nb, ar, b, [ax, ..acc], compare)
+ _ -> merge_down(na, nb - 1, a, br, [bx, ..acc], compare)
+ }
+ _, _, _, _ -> acc
+ }
+}
+
+/// Merge sort that alternates merging in ascending and descending order
+/// because the merge process also reverses the list.
+///
+/// Some copying is avoided by merging only a subset of the lists
+/// instead of creating and merging new smaller lists.
+///
+fn merge_sort(
+ l: List(a),
+ ln: Int,
+ compare: fn(a, a) -> Order,
+ down: Bool,
+) -> List(a) {
+ let n = ln / 2
+ let a = l
+ let b = drop(l, n)
+ case ln < 3 {
+ True ->
+ case down {
+ True -> merge_down(n, ln - n, a, b, [], compare)
+ False -> merge_up(n, ln - n, a, b, [], compare)
+ }
+ False ->
+ case down {
+ True ->
+ merge_down(
+ n,
+ ln - n,
+ merge_sort(a, n, compare, False),
+ merge_sort(b, ln - n, compare, False),
+ [],
+ compare,
+ )
+ False ->
+ merge_up(
+ n,
+ ln - n,
+ merge_sort(a, n, compare, True),
+ merge_sort(b, ln - n, compare, True),
+ [],
+ compare,
+ )
+ }
+ }
+}
+
+/// Sorts from smallest to largest based upon the ordering specified by a given
+/// function.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/int
+/// > list.sort([4, 3, 6, 5, 4, 1, 2], by: int.compare)
+/// [1, 2, 3, 4, 4, 5, 6]
+/// ```
+///
+pub fn sort(list: List(a), by compare: fn(a, a) -> Order) -> List(a) {
+ merge_sort(list, length(list), compare, True)
+}
+
+/// Creates a list of ints ranging from a given start and finish.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > range(0, 0)
+/// [0]
+/// ```
+///
+/// ```gleam
+/// > range(0, 5)
+/// [0, 1, 2, 3, 4, 5]
+/// ```
+///
+/// ```gleam
+/// > range(1, -5)
+/// [1, 0, -1, -2, -3, -4, -5]
+/// ```
+///
+pub fn range(from start: Int, to stop: Int) -> List(Int) {
+ tail_recursive_range(start, stop, [])
+}
+
+fn tail_recursive_range(start: Int, stop: Int, acc: List(Int)) -> List(Int) {
+ case int.compare(start, stop) {
+ order.Eq -> [stop, ..acc]
+ order.Gt -> tail_recursive_range(start, stop + 1, [stop, ..acc])
+ order.Lt -> tail_recursive_range(start, stop - 1, [stop, ..acc])
+ }
+}
+
+fn do_repeat(a: a, times: Int, acc: List(a)) -> List(a) {
+ case times <= 0 {
+ True -> acc
+ False -> do_repeat(a, times - 1, [a, ..acc])
+ }
+}
+
+/// Builds a list of a given value a given number of times.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > repeat("a", times: 0)
+/// []
+/// ```
+///
+/// ```gleam
+/// > repeat("a", times: 5)
+/// ["a", "a", "a", "a", "a"]
+/// ```
+///
+pub fn repeat(item a: a, times times: Int) -> List(a) {
+ do_repeat(a, times, [])
+}
+
+fn do_split(list: List(a), n: Int, taken: List(a)) -> #(List(a), List(a)) {
+ case n <= 0 {
+ True -> #(reverse(taken), list)
+ False ->
+ case list {
+ [] -> #(reverse(taken), [])
+ [x, ..xs] -> do_split(xs, n - 1, [x, ..taken])
+ }
+ }
+}
+
+/// Splits a list in two before the given index.
+///
+/// If the list is not long enough to have the given index the before list will
+/// be the input list, and the after list will be empty.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > split([6, 7, 8, 9], 0)
+/// #([], [6, 7, 8, 9])
+/// ```
+///
+/// ```gleam
+/// > split([6, 7, 8, 9], 2)
+/// #([6, 7], [8, 9])
+/// ```
+///
+/// ```gleam
+/// > split([6, 7, 8, 9], 4)
+/// #([6, 7, 8, 9], [])
+/// ```
+///
+pub fn split(list list: List(a), at index: Int) -> #(List(a), List(a)) {
+ do_split(list, index, [])
+}
+
+fn do_split_while(
+ list: List(a),
+ f: fn(a) -> Bool,
+ acc: List(a),
+) -> #(List(a), List(a)) {
+ case list {
+ [] -> #(reverse(acc), [])
+ [x, ..xs] ->
+ case f(x) {
+ False -> #(reverse(acc), list)
+ _ -> do_split_while(xs, f, [x, ..acc])
+ }
+ }
+}
+
+/// Splits a list in two before the first element that a given function returns
+/// `False` for.
+///
+/// If the function returns `True` for all elements the first list will be the
+/// input list, and the second list will be empty.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > split_while([1, 2, 3, 4, 5], fn(x) { x <= 3 })
+/// #([1, 2, 3], [4, 5])
+/// ```
+///
+/// ```gleam
+/// > split_while([1, 2, 3, 4, 5], fn(x) { x <= 5 })
+/// #([1, 2, 3, 4, 5], [])
+/// ```
+///
+pub fn split_while(
+ list list: List(a),
+ satisfying predicate: fn(a) -> Bool,
+) -> #(List(a), List(a)) {
+ do_split_while(list, predicate, [])
+}
+
+/// Given a list of 2-element tuples, finds the first tuple that has a given
+/// key as the first element and returns the second element.
+///
+/// If no tuple is found with the given key then `Error(Nil)` is returned.
+///
+/// This function may be useful for interacting with Erlang code where lists of
+/// tuples are common.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > key_find([#("a", 0), #("b", 1)], "a")
+/// Ok(0)
+/// ```
+///
+/// ```gleam
+/// > key_find([#("a", 0), #("b", 1)], "b")
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > key_find([#("a", 0), #("b", 1)], "c")
+/// Error(Nil)
+/// ```
+///
+pub fn key_find(
+ in keyword_list: List(#(k, v)),
+ find desired_key: k,
+) -> Result(v, Nil) {
+ find_map(
+ keyword_list,
+ fn(keyword) {
+ let #(key, value) = keyword
+ case key == desired_key {
+ True -> Ok(value)
+ False -> Error(Nil)
+ }
+ },
+ )
+}
+
+/// Given a list of 2-element tuples, finds all tuples that have a given
+/// key as the first element and returns the second element.
+///
+/// This function may be useful for interacting with Erlang code where lists of
+/// tuples are common.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > key_filter([#("a", 0), #("b", 1), #("a", 2)], "a")
+/// [0, 2]
+/// ```
+///
+/// ```gleam
+/// > key_filter([#("a", 0), #("b", 1)], "c")
+/// []
+/// ```
+///
+pub fn key_filter(
+ in keyword_list: List(#(k, v)),
+ find desired_key: k,
+) -> List(v) {
+ filter_map(
+ keyword_list,
+ fn(keyword) {
+ let #(key, value) = keyword
+ case key == desired_key {
+ True -> Ok(value)
+ False -> Error(Nil)
+ }
+ },
+ )
+}
+
+fn do_pop(haystack, predicate, checked) {
+ case haystack {
+ [] -> Error(Nil)
+ [x, ..rest] ->
+ case predicate(x) {
+ True -> Ok(#(x, append(reverse(checked), rest)))
+ False -> do_pop(rest, predicate, [x, ..checked])
+ }
+ }
+}
+
+/// Removes the first element in a given list for which the predicate function returns `True`.
+///
+/// Returns `Error(Nil)` if no such element is found.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > pop([1, 2, 3], fn(x) { x > 2 })
+/// Ok(#(3, [1, 2]))
+/// ```
+///
+/// ```gleam
+/// > pop([1, 2, 3], fn(x) { x > 4 })
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > pop([], fn(_) { True })
+/// Error(Nil)
+/// ```
+///
+pub fn pop(
+ in haystack: List(a),
+ one_that is_desired: fn(a) -> Bool,
+) -> Result(#(a, List(a)), Nil) {
+ do_pop(haystack, is_desired, [])
+}
+
+fn do_pop_map(haystack, mapper, checked) {
+ case haystack {
+ [] -> Error(Nil)
+ [x, ..rest] ->
+ case mapper(x) {
+ Ok(y) -> Ok(#(y, append(reverse(checked), rest)))
+ Error(_) -> do_pop_map(rest, mapper, [x, ..checked])
+ }
+ }
+}
+
+/// Removes the first element in a given list for which the given function returns
+/// `Ok(new_value)`, then returns the wrapped `new_value` as well as list with the value removed.
+///
+/// Returns `Error(Nil)` if no such element is found.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > pop_map([[], [2], [3]], first)
+/// Ok(#(2, [[], [3]]))
+/// ```
+///
+/// ```gleam
+/// > pop_map([[], []], first)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > pop_map([], first)
+/// Error(Nil)
+/// ```
+///
+pub fn pop_map(
+ in haystack: List(a),
+ one_that is_desired: fn(a) -> Result(b, c),
+) -> Result(#(b, List(a)), Nil) {
+ do_pop_map(haystack, is_desired, [])
+}
+
+/// Given a list of 2-element tuples, finds the first tuple that has a given
+/// key as the first element. This function will return the second element
+/// of the found tuple and list with tuple removed.
+///
+/// If no tuple is found with the given key then `Error(Nil)` is returned.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > key_pop([#("a", 0), #("b", 1)], "a")
+/// Ok(#(0, [#("b", 1)]))
+/// ```
+///
+/// ```gleam
+/// > key_pop([#("a", 0), #("b", 1)], "b")
+/// Ok(#(1, [#("a", 0)]))
+/// ```
+///
+/// ```gleam
+/// > key_pop([#("a", 0), #("b", 1)], "c")
+/// Error(Nil)
+/// ```
+///
+pub fn key_pop(
+ haystack: List(#(k, v)),
+ key: k,
+) -> Result(#(v, List(#(k, v))), Nil) {
+ pop_map(
+ haystack,
+ fn(entry) {
+ let #(k, v) = entry
+ case k {
+ k if k == key -> Ok(v)
+ _ -> Error(Nil)
+ }
+ },
+ )
+}
+
+/// Given a list of 2-element tuples, inserts a key and value into the list.
+///
+/// If there was already a tuple with the key then it is replaced, otherwise it
+/// is added to the end of the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > key_set([#(5, 0), #(4, 1)], 4, 100)
+/// [#(5, 0), #(4, 100)]
+/// ```
+///
+/// ```gleam
+/// > key_set([#(5, 0), #(4, 1)], 1, 100)
+/// [#(5, 0), #(4, 1), #(1, 100)]
+/// ```
+///
+pub fn key_set(list: List(#(a, b)), key: a, value: b) -> List(#(a, b)) {
+ case list {
+ [] -> [#(key, value)]
+ [#(k, _), ..rest] if k == key -> [#(key, value), ..rest]
+ [first, ..rest] -> [first, ..key_set(rest, key, value)]
+ }
+}
+
+/// Calls a function for each element in a list, discarding the return value.
+///
+/// Useful for calling a side effect for every item of a list.
+///
+/// ```gleam
+/// > list.each([1, 2, 3], io.println)
+/// Nil
+/// ```
+///
+pub fn each(list: List(a), f: fn(a) -> b) -> Nil {
+ case list {
+ [] -> Nil
+ [x, ..xs] -> {
+ f(x)
+ each(xs, f)
+ }
+ }
+}
+
+/// Calls a `Result` returning function for each element in a list, discarding
+/// the return value. If the function returns `Error` then the iteration is
+/// stopped and the error is returned.
+///
+/// Useful for calling a side effect for every item of a list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > try_each(
+/// > over: [1, 2, 3],
+/// > with: function_that_might_fail,
+/// > )
+/// Ok(Nil)
+/// ```
+///
+pub fn try_each(
+ over list: List(a),
+ with fun: fn(a) -> Result(b, e),
+) -> Result(Nil, e) {
+ case list {
+ [] -> Ok(Nil)
+ [x, ..xs] ->
+ case fun(x) {
+ Ok(_) -> try_each(over: xs, with: fun)
+ Error(e) -> Error(e)
+ }
+ }
+}
+
+fn do_partition(list, categorise, trues, falses) {
+ case list {
+ [] -> #(reverse(trues), reverse(falses))
+ [x, ..xs] ->
+ case categorise(x) {
+ True -> do_partition(xs, categorise, [x, ..trues], falses)
+ False -> do_partition(xs, categorise, trues, [x, ..falses])
+ }
+ }
+}
+
+/// Partitions a list into a tuple/pair of lists
+/// by a given categorisation function.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3, 4, 5] |> list.partition(int.is_odd)
+/// #([1, 3, 5], [2, 4])
+/// ```
+///
+pub fn partition(
+ list: List(a),
+ with categorise: fn(a) -> Bool,
+) -> #(List(a), List(a)) {
+ do_partition(list, categorise, [], [])
+}
+
+/// Returns all the permutations of a list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > permutations([1, 2])
+/// [[1, 2], [2, 1]]
+/// ```
+///
+pub fn permutations(l: List(a)) -> List(List(a)) {
+ case l {
+ [] -> [[]]
+ _ ->
+ l
+ |> index_map(fn(i_idx, i) {
+ l
+ |> index_fold(
+ [],
+ fn(acc, j, j_idx) {
+ case i_idx == j_idx {
+ True -> acc
+ False -> [j, ..acc]
+ }
+ },
+ )
+ |> reverse
+ |> permutations
+ |> map(fn(permutation) { [i, ..permutation] })
+ })
+ |> concat
+ }
+}
+
+fn do_window(acc: List(List(a)), l: List(a), n: Int) -> List(List(a)) {
+ let window = take(l, n)
+
+ case length(window) == n {
+ True -> do_window([window, ..acc], drop(l, 1), n)
+ False -> acc
+ }
+}
+
+/// Returns a list of sliding windows.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > window([1,2,3,4,5], 3)
+/// [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
+/// ```
+///
+/// ```gleam
+/// > window([1, 2], 4)
+/// []
+/// ```
+///
+pub fn window(l: List(a), by n: Int) -> List(List(a)) {
+ do_window([], l, n)
+ |> reverse
+}
+
+/// Returns a list of tuples containing two contiguous elements.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > window_by_2([1,2,3,4])
+/// [#(1, 2), #(2, 3), #(3, 4)]
+/// ```
+///
+/// ```gleam
+/// > window_by_2([1])
+/// []
+/// ```
+///
+pub fn window_by_2(l: List(a)) -> List(#(a, a)) {
+ zip(l, drop(l, 1))
+}
+
+/// Drops the first elements in a given list for which the predicate function returns `True`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > drop_while([1, 2, 3, 4], fn (x) { x < 3 })
+/// [3, 4]
+/// ```
+///
+pub fn drop_while(
+ in list: List(a),
+ satisfying predicate: fn(a) -> Bool,
+) -> List(a) {
+ case list {
+ [] -> []
+ [x, ..xs] ->
+ case predicate(x) {
+ True -> drop_while(xs, predicate)
+ False -> [x, ..xs]
+ }
+ }
+}
+
+fn do_take_while(
+ list: List(a),
+ predicate: fn(a) -> Bool,
+ acc: List(a),
+) -> List(a) {
+ case list {
+ [] -> reverse(acc)
+ [first, ..rest] ->
+ case predicate(first) {
+ True -> do_take_while(rest, predicate, [first, ..acc])
+ False -> reverse(acc)
+ }
+ }
+}
+
+/// Takes the first elements in a given list for which the predicate function returns `True`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > take_while([1, 2, 3, 2, 4], fn (x) { x < 3 })
+/// [1, 2]
+/// ```
+///
+pub fn take_while(
+ in list: List(a),
+ satisfying predicate: fn(a) -> Bool,
+) -> List(a) {
+ do_take_while(list, predicate, [])
+}
+
+fn do_chunk(
+ list: List(a),
+ f: fn(a) -> key,
+ previous_key: key,
+ current_chunk: List(a),
+ acc: List(List(a)),
+) -> List(List(a)) {
+ case list {
+ [first, ..rest] -> {
+ let key = f(first)
+ case key == previous_key {
+ False -> {
+ let new_acc = [reverse(current_chunk), ..acc]
+ do_chunk(rest, f, key, [first], new_acc)
+ }
+ _true -> do_chunk(rest, f, key, [first, ..current_chunk], acc)
+ }
+ }
+ _empty -> reverse([reverse(current_chunk), ..acc])
+ }
+}
+
+/// Returns a list of chunks in which
+/// the return value of calling `f` on each element is the same.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 2, 3, 4, 4, 6, 7, 7] |> chunk(by: fn(n) { n % 2 })
+/// [[1], [2, 2], [3], [4, 4, 6], [7, 7]]
+/// ```
+///
+pub fn chunk(in list: List(a), by f: fn(a) -> key) -> List(List(a)) {
+ case list {
+ [] -> []
+ [first, ..rest] -> do_chunk(rest, f, f(first), [first], [])
+ }
+}
+
+fn do_sized_chunk(
+ list: List(a),
+ count: Int,
+ left: Int,
+ current_chunk: List(a),
+ acc: List(List(a)),
+) -> List(List(a)) {
+ case list {
+ [] ->
+ case current_chunk {
+ [] -> reverse(acc)
+ remaining -> reverse([reverse(remaining), ..acc])
+ }
+ [first, ..rest] -> {
+ let chunk = [first, ..current_chunk]
+ case left > 1 {
+ False -> do_sized_chunk(rest, count, count, [], [reverse(chunk), ..acc])
+ True -> do_sized_chunk(rest, count, left - 1, chunk, acc)
+ }
+ }
+ }
+}
+
+/// Returns a list of chunks containing `count` elements each.
+///
+/// If the last chunk does not have `count` elements, it is instead
+/// a partial chunk, with less than `count` elements.
+///
+/// For any `count` less than 1 this function behaves as if it was set to 1.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [1, 2, 3, 4, 5, 6] |> sized_chunk(into: 2)
+/// [[1, 2], [3, 4], [5, 6]]
+/// ```
+///
+/// ```gleam
+/// > [1, 2, 3, 4, 5, 6, 7, 8] |> sized_chunk(into: 3)
+/// [[1, 2, 3], [4, 5, 6], [7, 8]]
+/// ```
+///
+pub fn sized_chunk(in list: List(a), into count: Int) -> List(List(a)) {
+ do_sized_chunk(list, count, count, [], [])
+}
+
+/// This function acts similar to fold, but does not take an initial state.
+/// Instead, it starts from the first element in the list
+/// and combines it with each subsequent element in turn using the given
+/// function. The function is called as `fun(accumulator, current_element)`.
+///
+/// Returns `Ok` to indicate a successful run, and `Error` if called on an
+/// empty list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [] |> reduce(fn(acc, x) { acc + x })
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > [1, 2, 3, 4, 5] |> reduce(fn(acc, x) { acc + x })
+/// Ok(15)
+/// ```
+///
+pub fn reduce(over list: List(a), with fun: fn(a, a) -> a) -> Result(a, Nil) {
+ case list {
+ [] -> Error(Nil)
+ [first, ..rest] -> Ok(fold(rest, first, fun))
+ }
+}
+
+fn do_scan(
+ list: List(a),
+ accumulator: acc,
+ accumulated: List(acc),
+ fun: fn(acc, a) -> acc,
+) -> List(acc) {
+ case list {
+ [] -> reverse(accumulated)
+ [x, ..xs] -> {
+ let next = fun(accumulator, x)
+ do_scan(xs, next, [next, ..accumulated], fun)
+ }
+ }
+}
+
+/// Similar to `fold`, but yields the state of the accumulator at each stage.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > scan(over: [1, 2, 3], from: 100, with: fn(acc, i) { acc + i })
+/// [101, 103, 106]
+/// ```
+///
+pub fn scan(
+ over list: List(a),
+ from initial: acc,
+ with fun: fn(acc, a) -> acc,
+) -> List(acc) {
+ do_scan(list, initial, [], fun)
+}
+
+/// Returns the last element in the given list.
+///
+/// Returns `Error(Nil)` if the list is empty.
+///
+/// This function runs in linear time.
+/// For a collection oriented around performant access at either end,
+/// see `gleam/queue.Queue`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > last([])
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > last([1, 2, 3, 4, 5])
+/// Ok(5)
+/// ```
+///
+pub fn last(list: List(a)) -> Result(a, Nil) {
+ list
+ |> reduce(fn(_, elem) { elem })
+}
+
+/// Return unique combinations of elements in the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > combinations([1, 2, 3], 2)
+/// [[1, 2], [1, 3], [2, 3]]
+/// ```
+///
+/// ```gleam
+/// > combinations([1, 2, 3, 4], 3)
+/// [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
+/// ```
+///
+pub fn combinations(items: List(a), by n: Int) -> List(List(a)) {
+ case n {
+ 0 -> [[]]
+ _ ->
+ case items {
+ [] -> []
+ [x, ..xs] -> {
+ let first_combinations =
+ map(combinations(xs, n - 1), with: fn(com) { [x, ..com] })
+ |> reverse
+ fold(
+ first_combinations,
+ combinations(xs, n),
+ fn(acc, c) { [c, ..acc] },
+ )
+ }
+ }
+ }
+}
+
+fn do_combination_pairs(items: List(a)) -> List(List(#(a, a))) {
+ case items {
+ [] -> []
+ [x, ..xs] -> {
+ let first_combinations = map(xs, with: fn(other) { #(x, other) })
+ [first_combinations, ..do_combination_pairs(xs)]
+ }
+ }
+}
+
+/// Return unique pair combinations of elements in the list
+///
+/// ## Examples
+///
+/// ```gleam
+/// > combination_pairs([1, 2, 3])
+/// [#(1, 2), #(1, 3), #(2, 3)]
+/// ```
+///
+pub fn combination_pairs(items: List(a)) -> List(#(a, a)) {
+ do_combination_pairs(items)
+ |> concat
+}
+
+/// Make a list alternating the elements from the given lists
+///
+/// ## Examples
+///
+/// ```gleam
+/// > list.interleave([[1, 2], [101, 102], [201, 202]])
+/// [1, 101, 201, 2, 102, 202]
+/// ```
+///
+pub fn interleave(list: List(List(a))) -> List(a) {
+ transpose(list)
+ |> concat
+}
+
+/// Transpose rows and columns of the list of lists.
+///
+/// Notice: This function is not tail recursive,
+/// and thus may exceed stack size if called,
+/// with large lists (on target JavaScript).
+///
+/// ## Examples
+///
+/// ```gleam
+/// > transpose([[1, 2, 3], [101, 102, 103]])
+/// [[1, 101], [2, 102], [3, 103]]
+/// ```
+///
+pub fn transpose(list_of_list: List(List(a))) -> List(List(a)) {
+ let take_first = fn(list) {
+ case list {
+ [] -> []
+ [f] -> [f]
+ [f, ..] -> [f]
+ }
+ }
+
+ case list_of_list {
+ [] -> []
+ [[], ..xss] -> transpose(xss)
+ rows -> {
+ let firsts =
+ rows
+ |> map(take_first)
+ |> concat
+ let rest = transpose(map(rows, drop(_, 1)))
+ [firsts, ..rest]
+ }
+ }
+}
+
+fn do_shuffle_pair_unwrap(list: List(#(Float, a)), acc: List(a)) -> List(a) {
+ case list {
+ [] -> acc
+ [elem_pair, ..enumerable] ->
+ do_shuffle_pair_unwrap(enumerable, [elem_pair.1, ..acc])
+ }
+}
+
+fn do_shuffle_by_pair_indexes(
+ list_of_pairs: List(#(Float, a)),
+) -> List(#(Float, a)) {
+ sort(
+ list_of_pairs,
+ fn(a_pair: #(Float, a), b_pair: #(Float, a)) -> Order {
+ float.compare(a_pair.0, b_pair.0)
+ },
+ )
+}
+
+/// Takes a list, randomly sorts all items and returns the shuffled list.
+///
+/// This function uses Erlang's `:rand` module or Javascript's
+/// `Math.random()` to calculate the index shuffling.
+///
+/// ## Example
+///
+/// ```gleam
+/// > range(1, 10)
+/// > |> shuffle()
+/// [1, 6, 9, 10, 3, 8, 4, 2, 7, 5]
+/// ```
+///
+pub fn shuffle(list: List(a)) -> List(a) {
+ list
+ |> fold(from: [], with: fn(acc, a) { [#(float.random(0.0, 1.0), a), ..acc] })
+ |> do_shuffle_by_pair_indexes()
+ |> do_shuffle_pair_unwrap([])
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam
new file mode 100644
index 0000000..1f8b228
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/map.gleam
@@ -0,0 +1,127 @@
+import gleam/option.{type Option}
+import gleam/dict
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub type Map(key, value) =
+ dict.Dict(key, value)
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn size(map) -> Int {
+ dict.size(map)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn to_list(map) -> List(#(key, value)) {
+ dict.to_list(map)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn from_list(list: List(#(k, v))) {
+ dict.from_list(list)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn has_key(map, key: k) -> Bool {
+ dict.has_key(map, key)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn new() {
+ dict.new()
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn get(from, get: key) -> Result(value, Nil) {
+ dict.get(from, get)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn insert(into map, for key: k, insert value: v) {
+ dict.insert(map, key, value)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn map_values(in map, with fun: fn(k, v) -> w) {
+ dict.map_values(map, fun)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn keys(map) -> List(keys) {
+ dict.keys(map)
+}
+
+@target(javascript)
+fn reverse_and_concat(remaining, accumulator) {
+ case remaining {
+ [] -> accumulator
+ [item, ..rest] -> reverse_and_concat(rest, [item, ..accumulator])
+ }
+}
+
+@target(javascript)
+fn do_keys_acc(list: List(#(k, v)), acc: List(k)) -> List(k) {
+ case list {
+ [] -> reverse_and_concat(acc, [])
+ [x, ..xs] -> do_keys_acc(xs, [x.0, ..acc])
+ }
+}
+
+@target(javascript)
+fn do_keys(map) -> List(k) {
+ let list_of_pairs =
+ map
+ |> to_list
+ do_keys_acc(list_of_pairs, [])
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn values(map) -> List(values) {
+ dict.values(map)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn filter(in map, keeping predicate: fn(k, v) -> Bool) {
+ dict.filter(map, predicate)
+}
+
+@target(javascript)
+fn do_filter(f: fn(key, value) -> Bool, map) {
+ let insert = fn(map, k, v) {
+ case f(k, v) {
+ True -> insert(map, k, v)
+ _ -> map
+ }
+ }
+ map
+ |> fold(from: new(), with: insert)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn take(from map, keeping desired_keys: List(k)) {
+ dict.take(map, desired_keys)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn merge(into map, from new_entries) {
+ dict.merge(map, new_entries)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn delete(from map, delete key: k) {
+ dict.delete(map, key)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn drop(from map, drop disallowed_keys: List(k)) {
+ dict.drop(map, disallowed_keys)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn update(in map, update key: k, with fun: fn(Option(v)) -> v) {
+ dict.update(map, key, fun)
+}
+
+@deprecated("Please use the `gleam/dict` module instead")
+pub fn fold(over map, from initial: acc, with fun: fn(acc, k, v) -> acc) -> acc {
+ dict.fold(map, initial, fun)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam
new file mode 100644
index 0000000..6015c0f
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/option.gleam
@@ -0,0 +1,346 @@
+/// `Option` represents a value that may be present or not. `Some` means the value is
+/// present, `None` means the value is not.
+///
+/// This is Gleam's alternative to having a value that could be Null, as is
+/// possible in some other languages.
+///
+pub type Option(a) {
+ Some(a)
+ None
+}
+
+fn do_all(list: List(Option(a)), acc: List(a)) -> Option(List(a)) {
+ case list {
+ [] -> Some(acc)
+ [x, ..rest] -> {
+ let accumulate = fn(acc, item) {
+ case acc, item {
+ Some(values), Some(value) -> Some([value, ..values])
+ _, _ -> None
+ }
+ }
+ accumulate(do_all(rest, acc), x)
+ }
+ }
+}
+
+/// Combines a list of `Option`s into a single `Option`.
+/// If all elements in the list are `Some` then returns a `Some` holding the list of values.
+/// If any element is `None` then returns`None`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > all([Some(1), Some(2)])
+/// Some([1, 2])
+/// ```
+///
+/// ```gleam
+/// > all([Some(1), None])
+/// None
+/// ```
+///
+pub fn all(list: List(Option(a))) -> Option(List(a)) {
+ do_all(list, [])
+}
+
+/// Checks whether the `Option` is a `Some` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_some(Some(1))
+/// True
+/// ```
+///
+/// ```gleam
+/// > is_some(None)
+/// False
+/// ```
+///
+pub fn is_some(option: Option(a)) -> Bool {
+ option != None
+}
+
+/// Checks whether the `Option` is a `None` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_none(Some(1))
+/// False
+/// ```
+///
+/// ```gleam
+/// > is_none(None)
+/// True
+/// ```
+///
+pub fn is_none(option: Option(a)) -> Bool {
+ option == None
+}
+
+/// Converts an `Option` type to a `Result` type.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_result(Some(1), "some_error")
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > to_result(None, "some_error")
+/// Error("some_error")
+/// ```
+///
+pub fn to_result(option: Option(a), e) -> Result(a, e) {
+ case option {
+ Some(a) -> Ok(a)
+ _ -> Error(e)
+ }
+}
+
+/// Converts a `Result` type to an `Option` type.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_result(Ok(1))
+/// Some(1)
+/// ```
+///
+/// ```gleam
+/// > from_result(Error("some_error"))
+/// None
+/// ```
+///
+pub fn from_result(result: Result(a, e)) -> Option(a) {
+ case result {
+ Ok(a) -> Some(a)
+ _ -> None
+ }
+}
+
+/// Extracts the value from an `Option`, returning a default value if there is none.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unwrap(Some(1), 0)
+/// 1
+/// ```
+///
+/// ```gleam
+/// > unwrap(None, 0)
+/// 0
+/// ```
+///
+pub fn unwrap(option: Option(a), or default: a) -> a {
+ case option {
+ Some(x) -> x
+ None -> default
+ }
+}
+
+/// Extracts the value from an `Option`, evaluating the default function if the option is `None`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > lazy_unwrap(Some(1), fn() { 0 })
+/// 1
+/// ```
+///
+/// ```gleam
+/// > lazy_unwrap(None, fn() { 0 })
+/// 0
+/// ```
+///
+pub fn lazy_unwrap(option: Option(a), or default: fn() -> a) -> a {
+ case option {
+ Some(x) -> x
+ None -> default()
+ }
+}
+
+/// Updates a value held within the `Some` of an `Option` by calling a given function
+/// on it.
+///
+/// If the `Option` is a `None` rather than `Some`, the function is not called and the
+/// `Option` stays the same.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > map(over: Some(1), with: fn(x) { x + 1 })
+/// Some(2)
+/// ```
+///
+/// ```gleam
+/// > map(over: None, with: fn(x) { x + 1 })
+/// None
+/// ```
+///
+pub fn map(over option: Option(a), with fun: fn(a) -> b) -> Option(b) {
+ case option {
+ Some(x) -> Some(fun(x))
+ None -> None
+ }
+}
+
+/// Merges a nested `Option` into a single layer.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > flatten(Some(Some(1)))
+/// Some(1)
+/// ```
+///
+/// ```gleam
+/// > flatten(Some(None))
+/// None
+/// ```
+///
+/// ```gleam
+/// > flatten(None)
+/// None
+/// ```
+///
+pub fn flatten(option: Option(Option(a))) -> Option(a) {
+ case option {
+ Some(x) -> x
+ None -> None
+ }
+}
+
+/// Updates a value held within the `Some` of an `Option` by calling a given function
+/// on it, where the given function also returns an `Option`. The two options are
+/// then merged together into one `Option`.
+///
+/// If the `Option` is a `None` rather than `Some` the function is not called and the
+/// option stays the same.
+///
+/// This function is the equivalent of calling `map` followed by `flatten`, and
+/// it is useful for chaining together multiple functions that return `Option`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > then(Some(1), fn(x) { Some(x + 1) })
+/// Some(2)
+/// ```
+///
+/// ```gleam
+/// > then(Some(1), fn(x) { Some(#("a", x)) })
+/// Some(#("a", 1))
+/// ```
+///
+/// ```gleam
+/// > then(Some(1), fn(_) { None })
+/// None
+/// ```
+///
+/// ```gleam
+/// > then(None, fn(x) { Some(x + 1) })
+/// None
+/// ```
+///
+pub fn then(option: Option(a), apply fun: fn(a) -> Option(b)) -> Option(b) {
+ case option {
+ Some(x) -> fun(x)
+ None -> None
+ }
+}
+
+/// Returns the first value if it is `Some`, otherwise returns the second value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > or(Some(1), Some(2))
+/// Some(1)
+/// ```
+///
+/// ```gleam
+/// > or(Some(1), None)
+/// Some(1)
+/// ```
+///
+/// ```gleam
+/// > or(None, Some(2))
+/// Some(2)
+/// ```
+///
+/// ```gleam
+/// > or(None, None)
+/// None
+/// ```
+///
+pub fn or(first: Option(a), second: Option(a)) -> Option(a) {
+ case first {
+ Some(_) -> first
+ None -> second
+ }
+}
+
+/// Returns the first value if it is `Some`, otherwise evaluates the given function for a fallback value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > lazy_or(Some(1), fn() { Some(2) })
+/// Some(1)
+/// ```
+///
+/// ```gleam
+/// > lazy_or(Some(1), fn() { None })
+/// Some(1)
+/// ```
+///
+/// ```gleam
+/// > lazy_or(None, fn() { Some(2) })
+/// Some(2)
+/// ```
+///
+/// ```gleam
+/// > lazy_or(None, fn() { None })
+/// None
+/// ```
+///
+pub fn lazy_or(first: Option(a), second: fn() -> Option(a)) -> Option(a) {
+ case first {
+ Some(_) -> first
+ None -> second()
+ }
+}
+
+fn do_values(list: List(Option(a)), acc: List(a)) -> List(a) {
+ case list {
+ [] -> acc
+ [x, ..xs] -> {
+ let accumulate = fn(acc, item) {
+ case item {
+ Some(value) -> [value, ..acc]
+ None -> acc
+ }
+ }
+ accumulate(do_values(xs, acc), x)
+ }
+ }
+}
+
+/// Given a list of `Option`s,
+/// returns only the values inside `Some`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > values([Some(1), None, Some(3)])
+/// [1, 3]
+/// ```
+///
+pub fn values(options: List(Option(a))) -> List(a) {
+ do_values(options, [])
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam
new file mode 100644
index 0000000..12ce011
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/order.gleam
@@ -0,0 +1,133 @@
+/// Represents the result of a single comparison to determine the precise
+/// ordering of two values.
+///
+pub type Order {
+ /// Less-than
+ Lt
+
+ /// Equal
+ Eq
+
+ /// Greater than
+ Gt
+}
+
+/// Inverts an order, so less-than becomes greater-than and greater-than
+/// becomes less-than.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > negate(Lt)
+/// Gt
+/// ```
+///
+/// ```gleam
+/// > negate(Eq)
+/// Eq
+/// ```
+///
+/// ```gleam
+/// > negate(Lt)
+/// Gt
+/// ```
+///
+pub fn negate(order: Order) -> Order {
+ case order {
+ Lt -> Gt
+ Eq -> Eq
+ Gt -> Lt
+ }
+}
+
+/// Produces a numeric representation of the order.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_int(Lt)
+/// -1
+/// ```
+///
+/// ```gleam
+/// > to_int(Eq)
+/// 0
+/// ```
+///
+/// ```gleam
+/// > to_int(Gt)
+/// 1
+/// ```
+///
+pub fn to_int(order: Order) -> Int {
+ case order {
+ Lt -> -1
+ Eq -> 0
+ Gt -> 1
+ }
+}
+
+/// Compares two `Order` values to one another, producing a new `Order`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > compare(Eq, with: Lt)
+/// Gt
+/// ```
+///
+pub fn compare(a: Order, with b: Order) -> Order {
+ case a, b {
+ x, y if x == y -> Eq
+ Lt, _ | Eq, Gt -> Lt
+ _, _ -> Gt
+ }
+}
+
+/// Returns the largest of two orders given that `Gt > Eq > Lt`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > max(Eq, Lt)
+/// Eq
+/// ```
+///
+pub fn max(a: Order, b: Order) -> Order {
+ case a, b {
+ Gt, _ -> Gt
+ Eq, Lt -> Eq
+ _, _ -> b
+ }
+}
+
+/// Returns the smallest of two orders given that `Gt > Eq > Lt`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > min(Eq, Lt)
+/// Lt
+/// ```
+///
+pub fn min(a: Order, b: Order) -> Order {
+ case a, b {
+ Lt, _ -> Lt
+ Eq, Gt -> Eq
+ _, _ -> b
+ }
+}
+
+/// Inverts an ordering function, so less-than becomes greater-than and greater-than
+/// becomes less-than.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > list.sort([1, 5, 4], by: reverse(int.compare))
+/// [5, 4, 1]
+/// ```
+///
+pub fn reverse(orderer: fn(a, a) -> Order) -> fn(a, a) -> Order {
+ fn(a, b) { orderer(b, a) }
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam
new file mode 100644
index 0000000..894e6a8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam
@@ -0,0 +1,85 @@
+/// Returns the first element in a pair.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > first(#(1, 2))
+/// 1
+/// ```
+///
+pub fn first(pair: #(a, b)) -> a {
+ let #(a, _) = pair
+ a
+}
+
+/// Returns the second element in a pair.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > second(#(1, 2))
+/// 2
+/// ```
+///
+pub fn second(pair: #(a, b)) -> b {
+ let #(_, a) = pair
+ a
+}
+
+/// Returns a new pair with the elements swapped.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > swap(#(1, 2))
+/// #(2, 1)
+/// ```
+///
+pub fn swap(pair: #(a, b)) -> #(b, a) {
+ let #(a, b) = pair
+ #(b, a)
+}
+
+/// Returns a new pair with the first element having had `with` applied to
+/// it.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > #(1, 2) |> map_first(fn(n) { n * 2 })
+/// #(2, 2)
+/// ```
+///
+pub fn map_first(of pair: #(a, b), with fun: fn(a) -> c) -> #(c, b) {
+ let #(a, b) = pair
+ #(fun(a), b)
+}
+
+/// Returns a new pair with the second element having had `with` applied to
+/// it.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > #(1, 2) |> map_second(fn(n) { n * 2 })
+/// #(1, 4)
+/// ```
+///
+pub fn map_second(of pair: #(a, b), with fun: fn(b) -> c) -> #(a, c) {
+ let #(a, b) = pair
+ #(a, fun(b))
+}
+
+/// Returns a new pair with the given elements. This can also be done using the dedicated
+/// syntax instead: `new(1, 2) == #(1, 2)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new(1, 2)
+/// #(1, 2)
+/// ```
+///
+pub fn new(first: a, second: b) -> #(a, b) {
+ #(first, second)
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam
new file mode 100644
index 0000000..5bf60c8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/queue.gleam
@@ -0,0 +1,292 @@
+import gleam/list
+
+/// A queue is an ordered collection of elements. It is similar to a list, but
+/// unlike a list elements can be added to or removed from either the front or
+/// the back in a performant fashion.
+///
+/// The internal representation may be different for two queues with the same
+/// elements in the same order if the queues were constructed in different
+/// ways. This is the price paid for a queue's fast access at both the front
+/// and the back.
+///
+/// Because of unpredictable internal representation the equality operator `==`
+/// may return surprising results, and the `is_equal` and `is_logically_equal`
+/// functions are the recommended way to test queues for equality.
+///
+pub opaque type Queue(element) {
+ Queue(in: List(element), out: List(element))
+}
+
+/// Creates a fresh queue that contains no values.
+///
+pub fn new() -> Queue(a) {
+ Queue(in: [], out: [])
+}
+
+/// Converts a list of elements into a queue of the same elements in the same
+/// order. The first element in the list becomes the front element in the queue.
+///
+/// This function runs in constant time.
+///
+/// # Examples
+///
+/// ```gleam
+/// > [1, 2, 3] |> from_list |> length
+/// 3
+/// ```
+///
+pub fn from_list(list: List(a)) -> Queue(a) {
+ Queue(in: [], out: list)
+}
+
+/// Converts a queue of elements into a list of the same elements in the same
+/// order. The front element in the queue becomes the first element in the list.
+///
+/// This function runs in linear time.
+///
+/// # Examples
+///
+/// ```gleam
+/// > new() |> push_back(1) |> push_back(2) |> to_list
+/// [1, 2]
+/// ```
+///
+pub fn to_list(queue: Queue(a)) -> List(a) {
+ queue.out
+ |> list.append(list.reverse(queue.in))
+}
+
+/// Determines whether or not the queue is empty.
+///
+/// This function runs in constant time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [] |> from_list |> is_empty
+/// True
+/// ```
+///
+/// ```gleam
+/// > [1] |> from_list |> is_empty
+/// False
+/// ```
+///
+/// ```gleam
+/// > [1, 2] |> from_list |> is_empty
+/// False
+/// ```
+///
+pub fn is_empty(queue: Queue(a)) -> Bool {
+ queue.in == [] && queue.out == []
+}
+
+/// Counts the number of elements in a given queue.
+///
+/// This function has to traverse the queue to determine the number of elements,
+/// so it runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > length(from_list([]))
+/// 0
+/// ```
+///
+/// ```gleam
+/// > length(from_list([1]))
+/// 1
+/// ```
+///
+/// ```gleam
+/// > length(from_list([1, 2]))
+/// 2
+/// ```
+///
+pub fn length(queue: Queue(a)) -> Int {
+ list.length(queue.in) + list.length(queue.out)
+}
+
+/// Pushes an element onto the back of the queue.
+///
+/// # Examples
+///
+/// ```gleam
+/// > [1, 2] |> from_list |> push_back(3) |> to_list
+/// [1, 2, 3]
+/// ```
+///
+pub fn push_back(onto queue: Queue(a), this item: a) -> Queue(a) {
+ Queue(in: [item, ..queue.in], out: queue.out)
+}
+
+/// Pushes an element onto the front of the queue.
+///
+/// # Examples
+///
+/// ```gleam
+/// > [0, 0] |> from_list |> push_front(1) |> to_list
+/// [1, 0, 0]
+/// ```
+///
+pub fn push_front(onto queue: Queue(a), this item: a) -> Queue(a) {
+ Queue(in: queue.in, out: [item, ..queue.out])
+}
+
+/// Gets the last element from the queue, returning the
+/// element and a new queue without that element.
+///
+/// This function typically runs in constant time, but will occasionally run in
+/// linear time.
+///
+/// # Examples
+///
+/// ```gleam
+/// > new()
+/// > |> push_back(0)
+/// > |> push_back(1)
+/// > |> pop_back()
+/// Ok(#(1, push_front(new(), 0)))
+/// ```
+///
+/// ```gleam
+/// > new()
+/// > |> push_front(0)
+/// > |> pop_back()
+/// Ok(#(0, new()))
+/// ```
+///
+/// ```gleam
+/// > new()
+/// > |> pop_back()
+/// Error(Nil)
+/// ```
+///
+pub fn pop_back(from queue: Queue(a)) -> Result(#(a, Queue(a)), Nil) {
+ case queue {
+ Queue(in: [], out: []) -> Error(Nil)
+ Queue(in: [], out: out) -> pop_back(Queue(in: list.reverse(out), out: []))
+ Queue(in: [first, ..rest], out: out) -> {
+ let queue = Queue(in: rest, out: out)
+ Ok(#(first, queue))
+ }
+ }
+}
+
+/// Gets the first element from the queue, returning the
+/// element and a new queue without that element.
+///
+/// This function typically runs in constant time, but will occasionally run in
+/// linear time.
+///
+/// # Examples
+///
+/// ```gleam
+/// > queue.new()
+/// > |> queue.push_front(1)
+/// > |> queue.push_front(0)
+/// > |> queue.pop_front()
+/// Ok(#(0, queue.push_back(queue.new(), 1)))
+/// ```
+///
+/// ```gleam
+/// > queue.new()
+/// > |> queue.push_back(0)
+/// > |> queue.pop_front()
+/// Ok(#(0, queue.new()))
+/// ```
+///
+/// ```gleam
+/// > queue.new()
+/// > |> queue.pop_back()
+/// Error(Nil)
+/// ```
+///
+pub fn pop_front(from queue: Queue(a)) -> Result(#(a, Queue(a)), Nil) {
+ case queue {
+ Queue(in: [], out: []) -> Error(Nil)
+ Queue(in: in, out: []) -> pop_front(Queue(in: [], out: list.reverse(in)))
+ Queue(in: in, out: [first, ..rest]) -> {
+ let queue = Queue(in: in, out: rest)
+ Ok(#(first, queue))
+ }
+ }
+}
+
+/// Creates a new queue from a given queue containing the same elements, but in
+/// the opposite order.
+///
+/// This function runs in constant time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > [] |> from_list |> reverse |> to_list
+/// []
+/// ```
+///
+/// ```gleam
+/// > [1] |> from_list |> reverse |> to_list
+/// [1]
+/// ```
+///
+/// ```gleam
+/// > [1, 2] |> from_list |> reverse |> to_list
+/// [2, 1]
+/// ```
+///
+pub fn reverse(queue: Queue(a)) -> Queue(a) {
+ Queue(in: queue.out, out: queue.in)
+}
+
+fn check_equal(
+ xs: List(t),
+ x_tail: List(t),
+ ys: List(t),
+ y_tail: List(t),
+ eq: fn(t, t) -> Bool,
+) -> Bool {
+ case xs, x_tail, ys, y_tail {
+ [], [], [], [] -> True
+ [x, ..xs], _, [y, ..ys], _ ->
+ case eq(x, y) {
+ False -> False
+ True -> check_equal(xs, x_tail, ys, y_tail, eq)
+ }
+ [], [_, ..], _, _ -> check_equal(list.reverse(x_tail), [], ys, y_tail, eq)
+ _, _, [], [_, ..] -> check_equal(xs, x_tail, list.reverse(y_tail), [], eq)
+ _, _, _, _ -> False
+ }
+}
+
+/// Checks whether two queues have equal elements in the same order, where the
+/// equality of elements is determined by a given equality checking function.
+///
+/// This function is useful as the internal representation may be different for
+/// two queues with the same elements in the same order depending on how they
+/// were constructed, so the equality operator `==` may return surprising
+/// results.
+///
+/// This function runs in linear time multiplied by the time taken by the
+/// element equality checking function.
+///
+pub fn is_logically_equal(
+ a: Queue(t),
+ to b: Queue(t),
+ checking element_is_equal: fn(t, t) -> Bool,
+) -> Bool {
+ check_equal(a.out, a.in, b.out, b.in, element_is_equal)
+}
+
+/// Checks whether two queues have the same elements in the same order.
+///
+/// This function is useful as the internal representation may be different for
+/// two queues with the same elements in the same order depending on how they
+/// were constructed, so the equality operator `==` may return surprising
+/// results.
+///
+/// This function runs in linear time.
+///
+pub fn is_equal(a: Queue(t), to b: Queue(t)) -> Bool {
+ check_equal(a.out, a.in, b.out, b.in, fn(a, b) { a == b })
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam
new file mode 100644
index 0000000..9ffda78
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/regex.gleam
@@ -0,0 +1,214 @@
+//// This module contains regular expression matching functions for strings.
+//// The matching algorithms of the library are based on the PCRE library, but not
+//// all of the PCRE library is interfaced and some parts of the library go beyond
+//// what PCRE offers. Currently PCRE version 8.40 (release date 2017-01-11) is used.
+
+import gleam/option.{type Option}
+
+pub type Regex
+
+/// The details about a particular match:
+///
+pub type Match {
+ Match(
+ /// The full string of the match.
+ content: String,
+ /// A `Regex` can have subpatterns, sup-parts that are in parentheses.
+ submatches: List(Option(String)),
+ )
+}
+
+/// When a regular expression fails to compile:
+///
+pub type CompileError {
+ CompileError(
+ /// The problem encountered that caused the compilation to fail
+ error: String,
+ /// The byte index into the string to where the problem was found
+ /// This value may not be correct in JavaScript environments.
+ byte_index: Int,
+ )
+}
+
+pub type Options {
+ Options(case_insensitive: Bool, multi_line: Bool)
+}
+
+/// Creates a `Regex` with some additional options.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let options = Options(case_insensitive: False, multi_line: True)
+/// > let assert Ok(re) = compile("^[0-9]", with: options)
+/// > check(re, "abc\n123")
+/// True
+/// ```
+///
+/// ```gleam
+/// > let options = Options(case_insensitive: True, multi_line: False)
+/// > let assert Ok(re) = compile("[A-Z]", with: options)
+/// > check(re, "abc123")
+/// True
+/// ```
+///
+pub fn compile(
+ pattern: String,
+ with options: Options,
+) -> Result(Regex, CompileError) {
+ do_compile(pattern, options)
+}
+
+@external(erlang, "gleam_stdlib", "compile_regex")
+@external(javascript, "../gleam_stdlib.mjs", "compile_regex")
+fn do_compile(a: String, with with: Options) -> Result(Regex, CompileError)
+
+/// Creates a new `Regex`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert Ok(re) = from_string("[0-9]")
+/// > check(re, "abc123")
+/// True
+/// ```
+///
+/// ```gleam
+/// > check(re, "abcxyz")
+/// False
+/// ```
+///
+/// ```gleam
+/// > from_string("[0-9")
+/// Error(
+/// CompileError(
+/// error: "missing terminating ] for character class",
+/// byte_index: 4
+/// )
+/// )
+/// ```
+///
+pub fn from_string(pattern: String) -> Result(Regex, CompileError) {
+ compile(pattern, Options(case_insensitive: False, multi_line: False))
+}
+
+/// Returns a boolean indicating whether there was a match or not.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert Ok(re) = from_string("^f.o.?")
+/// > check(with: re, content: "foo")
+/// True
+/// ```
+///
+/// ```gleam
+/// > check(with: re, content: "boo")
+/// False
+/// ```
+///
+pub fn check(with regex: Regex, content content: String) -> Bool {
+ do_check(regex, content)
+}
+
+@external(erlang, "gleam_stdlib", "regex_check")
+@external(javascript, "../gleam_stdlib.mjs", "regex_check")
+fn do_check(a: Regex, b: String) -> Bool
+
+/// Splits a string.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert Ok(re) = from_string(" *, *")
+/// > split(with: re, content: "foo,32, 4, 9 ,0")
+/// ["foo", "32", "4", "9", "0"]
+/// ```
+///
+pub fn split(with regex: Regex, content string: String) -> List(String) {
+ do_split(regex, string)
+}
+
+@target(erlang)
+@external(erlang, "gleam_stdlib", "regex_split")
+fn do_split(a: Regex, b: String) -> List(String)
+
+@target(javascript)
+fn do_split(regex, string) -> List(String) {
+ js_split(string, regex)
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "split")
+fn js_split(a: String, b: Regex) -> List(String)
+
+/// Collects all matches of the regular expression.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert Ok(re) = from_string("[oi]n a (\\w+)")
+/// > scan(with: re, content: "I am on a boat in a lake.")
+/// [
+/// Match(
+/// content: "on a boat",
+/// submatches: [Some("boat")]
+/// ),
+/// Match(
+/// content: "in a lake",
+/// submatches: [Some("lake")]
+/// )
+/// ]
+/// ```
+///
+/// ```gleam
+/// > let assert Ok(re) = regex.from_string("([+|\\-])?(\\d+)(\\w+)?")
+/// > scan(with: re, content: "-36")
+/// [
+/// Match(
+/// content: "-36",
+/// submatches: [Some("-"), Some("36")]
+/// )
+/// ]
+///
+/// > scan(with: re, content: "36")
+/// [
+/// Match(
+/// content: "36",
+/// submatches: [None, Some("36")]
+/// )
+/// ]
+/// ```
+///
+/// ```gleam
+/// > let assert Ok(re) = regex.from_string("var\\s*(\\w+)\\s*(int|string)?\\s*=\\s*(.*)")
+/// > scan(with: re, content: "var age = 32")
+/// [
+/// Match(
+/// content: "var age = 32",
+/// submatches: [Some("age"), None, Some("32")]
+/// )
+/// ]
+/// ```
+///
+/// ```gleam
+/// > let assert Ok(re) = regex.from_string("let (\\w+) = (\\w+)")
+/// > scan(with: re, content: "let age = 32")
+/// [
+/// Match(
+/// content: "let age = 32",
+/// submatches: [Some("age"), Some("32")]
+/// )
+/// ]
+///
+/// > scan(with: re, content: "const age = 32")
+/// []
+/// ```
+///
+pub fn scan(with regex: Regex, content string: String) -> List(Match) {
+ do_scan(regex, string)
+}
+
+@external(erlang, "gleam_stdlib", "regex_scan")
+@external(javascript, "../gleam_stdlib.mjs", "regex_scan")
+fn do_scan(a: Regex, b: String) -> List(Match)
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam
new file mode 100644
index 0000000..fb6dddb
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/result.gleam
@@ -0,0 +1,482 @@
+//// Result represents the result of something that may succeed or not.
+//// `Ok` means it was successful, `Error` means it was not successful.
+
+import gleam/list
+
+/// Checks whether the result is an `Ok` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_ok(Ok(1))
+/// True
+/// ```
+///
+/// ```gleam
+/// > is_ok(Error(Nil))
+/// False
+/// ```
+///
+pub fn is_ok(result: Result(a, e)) -> Bool {
+ case result {
+ Error(_) -> False
+ Ok(_) -> True
+ }
+}
+
+/// Checks whether the result is an `Error` value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_error(Ok(1))
+/// False
+/// ```
+///
+/// ```gleam
+/// > is_error(Error(Nil))
+/// True
+/// ```
+///
+pub fn is_error(result: Result(a, e)) -> Bool {
+ case result {
+ Ok(_) -> False
+ Error(_) -> True
+ }
+}
+
+/// Updates a value held within the `Ok` of a result by calling a given function
+/// on it.
+///
+/// If the result is an `Error` rather than `Ok` the function is not called and the
+/// result stays the same.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > map(over: Ok(1), with: fn(x) { x + 1 })
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > map(over: Error(1), with: fn(x) { x + 1 })
+/// Error(1)
+/// ```
+///
+pub fn map(over result: Result(a, e), with fun: fn(a) -> b) -> Result(b, e) {
+ case result {
+ Ok(x) -> Ok(fun(x))
+ Error(e) -> Error(e)
+ }
+}
+
+/// Updates a value held within the `Error` of a result by calling a given function
+/// on it.
+///
+/// If the result is `Ok` rather than `Error` the function is not called and the
+/// result stays the same.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > map_error(over: Error(1), with: fn(x) { x + 1 })
+/// Error(2)
+/// ```
+///
+/// ```gleam
+/// > map_error(over: Ok(1), with: fn(x) { x + 1 })
+/// Ok(1)
+/// ```
+///
+pub fn map_error(
+ over result: Result(a, e),
+ with fun: fn(e) -> f,
+) -> Result(a, f) {
+ case result {
+ Ok(x) -> Ok(x)
+ Error(error) -> Error(fun(error))
+ }
+}
+
+/// Merges a nested `Result` into a single layer.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > flatten(Ok(Ok(1)))
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > flatten(Ok(Error("")))
+/// Error("")
+/// ```
+///
+/// ```gleam
+/// > flatten(Error(Nil))
+/// Error(Nil)
+/// ```
+///
+pub fn flatten(result: Result(Result(a, e), e)) -> Result(a, e) {
+ case result {
+ Ok(x) -> x
+ Error(error) -> Error(error)
+ }
+}
+
+/// "Updates" an `Ok` result by passing its value to a function that yields a result,
+/// and returning the yielded result. (This may "replace" the `Ok` with an `Error`.)
+///
+/// If the input is an `Error` rather than an `Ok`, the function is not called and
+/// the original `Error` is returned.
+///
+/// This function is the equivalent of calling `map` followed by `flatten`, and
+/// it is useful for chaining together multiple functions that may fail.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > try(Ok(1), fn(x) { Ok(x + 1) })
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > try(Ok(1), fn(x) { Ok(#("a", x)) })
+/// Ok(#("a", 1))
+/// ```
+///
+/// ```gleam
+/// > try(Ok(1), fn(_) { Error("Oh no") })
+/// Error("Oh no")
+/// ```
+///
+/// ```gleam
+/// > try(Error(Nil), fn(x) { Ok(x + 1) })
+/// Error(Nil)
+/// ```
+///
+pub fn try(
+ result: Result(a, e),
+ apply fun: fn(a) -> Result(b, e),
+) -> Result(b, e) {
+ case result {
+ Ok(x) -> fun(x)
+ Error(e) -> Error(e)
+ }
+}
+
+/// An alias for `try`. See the documentation for that function for more information.
+///
+pub fn then(
+ result: Result(a, e),
+ apply fun: fn(a) -> Result(b, e),
+) -> Result(b, e) {
+ try(result, fun)
+}
+
+/// Extracts the `Ok` value from a result, returning a default value if the result
+/// is an `Error`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unwrap(Ok(1), 0)
+/// 1
+/// ```
+///
+/// ```gleam
+/// > unwrap(Error(""), 0)
+/// 0
+/// ```
+///
+pub fn unwrap(result: Result(a, e), or default: a) -> a {
+ case result {
+ Ok(v) -> v
+ Error(_) -> default
+ }
+}
+
+/// Extracts the `Ok` value from a result, evaluating the default function if the result
+/// is an `Error`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > lazy_unwrap(Ok(1), fn() { 0 })
+/// 1
+/// ```
+///
+/// ```gleam
+/// > lazy_unwrap(Error(""), fn() { 0 })
+/// 0
+/// ```
+///
+pub fn lazy_unwrap(result: Result(a, e), or default: fn() -> a) -> a {
+ case result {
+ Ok(v) -> v
+ Error(_) -> default()
+ }
+}
+
+/// Extracts the `Error` value from a result, returning a default value if the result
+/// is an `Ok`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unwrap_error(Error(1), 0)
+/// 1
+/// ```
+///
+/// ```gleam
+/// > unwrap_error(Ok(""), 0)
+/// 0
+/// ```
+///
+pub fn unwrap_error(result: Result(a, e), or default: e) -> e {
+ case result {
+ Ok(_) -> default
+ Error(e) -> e
+ }
+}
+
+/// Extracts the inner value from a result. Both the value and error must be of
+/// the same type.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > unwrap_both(Error(1))
+/// 1
+/// ```
+///
+/// ```gleam
+/// > unwrap_both(Ok(2))
+/// 2
+/// ```
+///
+pub fn unwrap_both(result: Result(a, a)) -> a {
+ case result {
+ Ok(a) -> a
+ Error(a) -> a
+ }
+}
+
+/// Transforms any error into `Error(Nil)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > nil_error(Error(1))
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > nil_error(Ok(1))
+/// Ok(1)
+/// ```
+///
+pub fn nil_error(result: Result(a, e)) -> Result(a, Nil) {
+ map_error(result, fn(_) { Nil })
+}
+
+/// Returns the first value if it is `Ok`, otherwise returns the second value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > or(Ok(1), Ok(2))
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > or(Ok(1), Error("Error 2"))
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > or(Error("Error 1"), Ok(2))
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > or(Error("Error 1"), Error("Error 2"))
+/// Error("Error 2")
+/// ```
+///
+pub fn or(first: Result(a, e), second: Result(a, e)) -> Result(a, e) {
+ case first {
+ Ok(_) -> first
+ Error(_) -> second
+ }
+}
+
+/// Returns the first value if it is `Ok`, otherwise evaluates the given function for a fallback value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > lazy_or(Ok(1), fn() { Ok(2) })
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > lazy_or(Ok(1), fn() { Error("Error 2") })
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > lazy_or(Error("Error 1"), fn() { Ok(2) })
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > lazy_or(Error("Error 1"), fn() { Error("Error 2") })
+/// Error("Error 2")
+/// ```
+///
+pub fn lazy_or(
+ first: Result(a, e),
+ second: fn() -> Result(a, e),
+) -> Result(a, e) {
+ case first {
+ Ok(_) -> first
+ Error(_) -> second()
+ }
+}
+
+/// Combines a list of results into a single result.
+/// If all elements in the list are `Ok` then returns an `Ok` holding the list of values.
+/// If any element is `Error` then returns the first error.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > all([Ok(1), Ok(2)])
+/// Ok([1, 2])
+/// ```
+///
+/// ```gleam
+/// > all([Ok(1), Error("e")])
+/// Error("e")
+/// ```
+///
+pub fn all(results: List(Result(a, e))) -> Result(List(a), e) {
+ list.try_map(results, fn(x) { x })
+}
+
+/// Given a list of results, returns a pair where the first element is a list
+/// of all the values inside `Ok` and the second element is a list with all the
+/// values inside `Error`. The values in both lists appear in reverse order with
+/// respect to their position in the original list of results.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > partition([Ok(1), Error("a"), Error("b"), Ok(2)])
+/// #([2, 1], ["b", "a"])
+/// ```
+///
+pub fn partition(results: List(Result(a, e))) -> #(List(a), List(e)) {
+ do_partition(results, [], [])
+}
+
+fn do_partition(results: List(Result(a, e)), oks: List(a), errors: List(e)) {
+ case results {
+ [] -> #(oks, errors)
+ [Ok(a), ..rest] -> do_partition(rest, [a, ..oks], errors)
+ [Error(e), ..rest] -> do_partition(rest, oks, [e, ..errors])
+ }
+}
+
+/// Replace the value within a result
+///
+/// ## Examples
+///
+/// ```gleam
+/// > replace(Ok(1), Nil)
+/// Ok(Nil)
+/// ```
+///
+/// ```gleam
+/// > replace(Error(1), Nil)
+/// Error(1)
+/// ```
+///
+pub fn replace(result: Result(a, e), value: b) -> Result(b, e) {
+ case result {
+ Ok(_) -> Ok(value)
+ Error(error) -> Error(error)
+ }
+}
+
+/// Replace the error within a result
+///
+/// ## Examples
+///
+/// ```gleam
+/// > replace_error(Error(1), Nil)
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > replace_error(Ok(1), Nil)
+/// Ok(1)
+/// ```
+///
+pub fn replace_error(result: Result(a, e1), error: e2) -> Result(a, e2) {
+ case result {
+ Ok(x) -> Ok(x)
+ Error(_) -> Error(error)
+ }
+}
+
+/// Given a list of results, returns only the values inside `Ok`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > values([Ok(1), Error("a"), Ok(3)])
+/// [1, 3]
+/// ```
+///
+pub fn values(results: List(Result(a, e))) -> List(a) {
+ list.filter_map(results, fn(r) { r })
+}
+
+/// Updates a value held within the `Error` of a result by calling a given function
+/// on it, where the given function also returns a result. The two results are
+/// then merged together into one result.
+///
+/// If the result is an `Ok` rather than `Error` the function is not called and the
+/// result stays the same.
+///
+/// This function is useful for chaining together computations that may fail
+/// and trying to recover from possible errors.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > Ok(1) |> try_recover(with: fn(_) { Error("failed to recover") })
+/// Ok(1)
+/// ```
+///
+/// ```gleam
+/// > Error(1) |> try_recover(with: fn(error) { Ok(error + 1) })
+/// Ok(2)
+/// ```
+///
+/// ```gleam
+/// > Error(1) |> try_recover(with: fn(error) { Error("failed to recover") })
+/// Error("failed to recover")
+/// ```
+///
+pub fn try_recover(
+ result: Result(a, e),
+ with fun: fn(e) -> Result(a, f),
+) -> Result(a, f) {
+ case result {
+ Ok(value) -> Ok(value)
+ Error(error) -> fun(error)
+ }
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam
new file mode 100644
index 0000000..df8d500
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/set.gleam
@@ -0,0 +1,264 @@
+import gleam/list
+import gleam/dict.{type Dict}
+import gleam/result
+
+// A list is used as the map value as an empty list has the smallest
+// representation in Erlang's binary format
+@target(erlang)
+type Token =
+ List(Nil)
+
+@target(erlang)
+const token = []
+
+@target(javascript)
+type Token =
+ Nil
+
+@target(javascript)
+const token = Nil
+
+/// A set is a collection of unique members of the same type.
+///
+/// It is implemented using the `gleam/map` module, so inserts and lookups have
+/// logarithmic time complexity.
+///
+pub opaque type Set(member) {
+ Set(map: Dict(member, Token))
+}
+
+/// Creates a new empty set.
+///
+pub fn new() -> Set(member) {
+ Set(dict.new())
+}
+
+/// Gets the number of members in a set.
+///
+/// This function runs in constant time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new()
+/// > |> insert(1)
+/// > |> insert(2)
+/// > |> size
+/// 2
+/// ```
+///
+pub fn size(set: Set(member)) -> Int {
+ dict.size(set.map)
+}
+
+/// Inserts an member into the set.
+///
+/// This function runs in logarithmic time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new()
+/// > |> insert(1)
+/// > |> insert(2)
+/// > |> size
+/// 2
+/// ```
+///
+pub fn insert(into set: Set(member), this member: member) -> Set(member) {
+ Set(map: dict.insert(set.map, member, token))
+}
+
+/// Checks whether a set contains a given member.
+///
+/// This function runs in logarithmic time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new()
+/// > |> insert(2)
+/// > |> contains(2)
+/// True
+/// ```
+///
+/// ```gleam
+/// > new()
+/// > |> insert(2)
+/// > |> contains(1)
+/// False
+/// ```
+///
+pub fn contains(in set: Set(member), this member: member) -> Bool {
+ set.map
+ |> dict.get(member)
+ |> result.is_ok
+}
+
+/// Removes a member from a set. If the set does not contain the member then
+/// the set is returned unchanged.
+///
+/// This function runs in logarithmic time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new()
+/// > |> insert(2)
+/// > |> delete(2)
+/// > |> contains(1)
+/// False
+/// ```
+///
+pub fn delete(from set: Set(member), this member: member) -> Set(member) {
+ Set(map: dict.delete(set.map, member))
+}
+
+/// Converts the set into a list of the contained members.
+///
+/// The list has no specific ordering, any unintentional ordering may change in
+/// future versions of Gleam or Erlang.
+///
+/// This function runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > new() |> insert(2) |> to_list
+/// [2]
+/// ```
+///
+pub fn to_list(set: Set(member)) -> List(member) {
+ dict.keys(set.map)
+}
+
+/// Creates a new set of the members in a given list.
+///
+/// This function runs in loglinear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/list
+/// > [1, 1, 2, 4, 3, 2] |> from_list |> to_list |> list.sort
+/// [1, 3, 3, 4]
+/// ```
+///
+pub fn from_list(members: List(member)) -> Set(member) {
+ let map =
+ list.fold(
+ over: members,
+ from: dict.new(),
+ with: fn(m, k) { dict.insert(m, k, token) },
+ )
+ Set(map)
+}
+
+/// Combines all entries into a single value by calling a given function on each
+/// one.
+///
+/// Sets are not ordered so the values are not returned in any specific order.
+/// Do not write code that relies on the order entries are used by this
+/// function as it may change in later versions of Gleam or Erlang.
+///
+/// # Examples
+///
+/// ```gleam
+/// > from_list([1, 3, 9])
+/// > |> fold(0, fn(member, accumulator) { accumulator + member })
+/// 13
+/// ```
+///
+pub fn fold(
+ over set: Set(member),
+ from initial: acc,
+ with reducer: fn(acc, member) -> acc,
+) -> acc {
+ dict.fold(over: set.map, from: initial, with: fn(a, k, _) { reducer(a, k) })
+}
+
+/// Creates a new set from an existing set, minus any members that a given
+/// function returns `False` for.
+///
+/// This function runs in loglinear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > import gleam/int
+/// > from_list([1, 4, 6, 3, 675, 44, 67])
+/// > |> filter(for: int.is_even)
+/// > |> to_list
+/// [4, 6, 44]
+/// ```
+///
+pub fn filter(
+ in set: Set(member),
+ keeping predicate: fn(member) -> Bool,
+) -> Set(member) {
+ Set(dict.filter(in: set.map, keeping: fn(m, _) { predicate(m) }))
+}
+
+pub fn drop(from set: Set(member), drop disallowed: List(member)) -> Set(member) {
+ list.fold(over: disallowed, from: set, with: delete)
+}
+
+/// Creates a new map from a given map, only including any members which are in
+/// a given list.
+///
+/// This function runs in loglinear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_list([1, 2, 3])
+/// > |> take([1, 3, 5])
+/// > |> to_list
+/// [1, 3]
+/// ```
+///
+pub fn take(from set: Set(member), keeping desired: List(member)) -> Set(member) {
+ Set(dict.take(from: set.map, keeping: desired))
+}
+
+fn order(first: Set(member), second: Set(member)) -> #(Set(member), Set(member)) {
+ case dict.size(first.map) > dict.size(second.map) {
+ True -> #(first, second)
+ False -> #(second, first)
+ }
+}
+
+/// Creates a new set that contains all members of both given sets.
+///
+/// This function runs in loglinear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > union(from_list([1, 2]), from_list([2, 3])) |> to_list
+/// [1, 2, 3]
+/// ```
+///
+pub fn union(of first: Set(member), and second: Set(member)) -> Set(member) {
+ let #(larger, smaller) = order(first, second)
+ fold(over: smaller, from: larger, with: insert)
+}
+
+/// Creates a new set that contains members that are present in both given sets.
+///
+/// This function runs in loglinear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > intersection(from_list([1, 2]), from_list([2, 3])) |> to_list
+/// [2]
+/// ```
+///
+pub fn intersection(
+ of first: Set(member),
+ and second: Set(member),
+) -> Set(member) {
+ let #(larger, smaller) = order(first, second)
+ take(from: larger, keeping: to_list(smaller))
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam
new file mode 100644
index 0000000..d4496f3
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/string.gleam
@@ -0,0 +1,906 @@
+//// Strings in Gleam are UTF-8 binaries. They can be written in your code as
+//// text surrounded by `"double quotes"`.
+
+import gleam/iterator.{type Iterator}
+import gleam/list
+import gleam/option.{type Option, None, Some}
+import gleam/order
+import gleam/string_builder.{type StringBuilder}
+
+/// Determines if a `String` is empty.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > is_empty("")
+/// True
+/// ```
+///
+/// ```gleam
+/// > is_empty("the world")
+/// False
+/// ```
+///
+pub fn is_empty(str: String) -> Bool {
+ str == ""
+}
+
+/// Gets the number of grapheme clusters in a given `String`.
+///
+/// This function has to iterate across the whole string to count the number of
+/// graphemes, so it runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > length("Gleam")
+/// 5
+/// ```
+///
+/// ```gleam
+/// > length("ß↑e̊")
+/// 3
+/// ```
+///
+/// ```gleam
+/// > length("")
+/// 0
+/// ```
+///
+pub fn length(string: String) -> Int {
+ do_length(string)
+}
+
+@external(erlang, "string", "length")
+@external(javascript, "../gleam_stdlib.mjs", "string_length")
+fn do_length(a: String) -> Int
+
+/// Reverses a `String`.
+///
+/// This function has to iterate across the whole `String` so it runs in linear
+/// time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > reverse("stressed")
+/// "desserts"
+/// ```
+///
+pub fn reverse(string: String) -> String {
+ do_reverse(string)
+}
+
+@target(erlang)
+fn do_reverse(string: String) -> String {
+ string
+ |> string_builder.from_string
+ |> string_builder.reverse
+ |> string_builder.to_string
+}
+
+@target(javascript)
+fn do_reverse(string: String) -> String {
+ string
+ |> to_graphemes
+ |> list.reverse
+ |> concat
+}
+
+/// Creates a new `String` by replacing all occurrences of a given substring.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > replace("www.example.com", each: ".", with: "-")
+/// "www-example-com"
+/// ```
+///
+/// ```gleam
+/// > replace("a,b,c,d,e", each: ",", with: "/")
+/// "a/b/c/d/e"
+/// ```
+///
+pub fn replace(
+ in string: String,
+ each pattern: String,
+ with substitute: String,
+) -> String {
+ string
+ |> string_builder.from_string
+ |> string_builder.replace(each: pattern, with: substitute)
+ |> string_builder.to_string
+}
+
+/// Creates a new `String` with all the graphemes in the input `String` converted to
+/// lowercase.
+///
+/// Useful for case-insensitive comparisons.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > lowercase("X-FILES")
+/// "x-files"
+/// ```
+///
+pub fn lowercase(string: String) -> String {
+ do_lowercase(string)
+}
+
+@external(erlang, "string", "lowercase")
+@external(javascript, "../gleam_stdlib.mjs", "lowercase")
+fn do_lowercase(a: String) -> String
+
+/// Creates a new `String` with all the graphemes in the input `String` converted to
+/// uppercase.
+///
+/// Useful for case-insensitive comparisons and VIRTUAL YELLING.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > uppercase("skinner")
+/// "SKINNER"
+/// ```
+///
+pub fn uppercase(string: String) -> String {
+ do_uppercase(string)
+}
+
+@external(erlang, "string", "uppercase")
+@external(javascript, "../gleam_stdlib.mjs", "uppercase")
+fn do_uppercase(a: String) -> String
+
+/// Compares two `String`s to see which is "larger" by comparing their graphemes.
+///
+/// This does not compare the size or length of the given `String`s.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > compare("Anthony", "Anthony")
+/// order.Eq
+/// ```
+///
+/// ```gleam
+/// > compare("A", "B")
+/// order.Lt
+/// ```
+///
+pub fn compare(a: String, b: String) -> order.Order {
+ case a == b {
+ True -> order.Eq
+ _ ->
+ case less_than(a, b) {
+ True -> order.Lt
+ _ -> order.Gt
+ }
+ }
+}
+
+@external(erlang, "gleam_stdlib", "less_than")
+@external(javascript, "../gleam_stdlib.mjs", "less_than")
+fn less_than(a: String, b: String) -> Bool
+
+/// Takes a substring given a start grapheme index and a length. Negative indexes
+/// are taken starting from the *end* of the list.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > slice(from: "gleam", at_index: 1, length: 2)
+/// "le"
+/// ```
+///
+/// ```gleam
+/// > slice(from: "gleam", at_index: 1, length: 10)
+/// "leam"
+/// ```
+///
+/// ```gleam
+/// > slice(from: "gleam", at_index: 10, length: 3)
+/// ""
+/// ```
+///
+/// ```gleam
+/// > slice(from: "gleam", at_index: -2, length: 2)
+/// "am"
+/// ```
+///
+/// ```gleam
+/// > slice(from: "gleam", at_index: -12, length: 2)
+/// ""
+/// ```
+///
+pub fn slice(from string: String, at_index idx: Int, length len: Int) -> String {
+ case len < 0 {
+ True -> ""
+ False ->
+ case idx < 0 {
+ True -> {
+ let translated_idx = length(string) + idx
+ case translated_idx < 0 {
+ True -> ""
+ False -> do_slice(string, translated_idx, len)
+ }
+ }
+ False -> do_slice(string, idx, len)
+ }
+ }
+}
+
+@target(erlang)
+@external(erlang, "string", "slice")
+fn do_slice(a: String, b: Int, c: Int) -> String
+
+@target(javascript)
+fn do_slice(string: String, idx: Int, len: Int) -> String {
+ string
+ |> to_graphemes
+ |> list.drop(idx)
+ |> list.take(len)
+ |> concat
+}
+
+/// Drops contents of the first `String` that occur before the second `String`.
+/// If the `from` string does not contain the `before` string, `from` is returned unchanged.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > crop(from: "The Lone Gunmen", before: "Lone")
+/// "Lone Gunmen"
+/// ```
+///
+@external(erlang, "gleam_stdlib", "crop_string")
+@external(javascript, "../gleam_stdlib.mjs", "crop_string")
+pub fn crop(from string: String, before substring: String) -> String
+
+/// Drops *n* graphemes from the left side of a `String`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > drop_left(from: "The Lone Gunmen", up_to: 2)
+/// "e Lone Gunmen"
+/// ```
+///
+pub fn drop_left(from string: String, up_to num_graphemes: Int) -> String {
+ case num_graphemes < 0 {
+ True -> string
+ False -> slice(string, num_graphemes, length(string) - num_graphemes)
+ }
+}
+
+/// Drops *n* graphemes from the right side of a `String`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > drop_right(from: "Cigarette Smoking Man", up_to: 2)
+/// "Cigarette Smoking M"
+/// ```
+///
+pub fn drop_right(from string: String, up_to num_graphemes: Int) -> String {
+ case num_graphemes < 0 {
+ True -> string
+ False -> slice(string, 0, length(string) - num_graphemes)
+ }
+}
+
+/// Checks if the first `String` contains the second.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > contains(does: "theory", contain: "ory")
+/// True
+/// ```
+///
+/// ```gleam
+/// > contains(does: "theory", contain: "the")
+/// True
+/// ```
+///
+/// ```gleam
+/// > contains(does: "theory", contain: "THE")
+/// False
+/// ```
+///
+@external(erlang, "gleam_stdlib", "contains_string")
+@external(javascript, "../gleam_stdlib.mjs", "contains_string")
+pub fn contains(does haystack: String, contain needle: String) -> Bool
+
+/// Checks whether the first `String` starts with the second one.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > starts_with("theory", "ory")
+/// False
+/// ```
+///
+pub fn starts_with(string: String, prefix: String) -> Bool {
+ do_starts_with(string, prefix)
+}
+
+@external(erlang, "gleam_stdlib", "string_starts_with")
+@external(javascript, "../gleam_stdlib.mjs", "starts_with")
+fn do_starts_with(a: String, b: String) -> Bool
+
+/// Checks whether the first `String` ends with the second one.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > ends_with("theory", "ory")
+/// True
+/// ```
+///
+pub fn ends_with(string: String, suffix: String) -> Bool {
+ do_ends_with(string, suffix)
+}
+
+@external(erlang, "gleam_stdlib", "string_ends_with")
+@external(javascript, "../gleam_stdlib.mjs", "ends_with")
+fn do_ends_with(a: String, b: String) -> Bool
+
+/// Creates a list of `String`s by splitting a given string on a given substring.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > split("home/gleam/desktop/", on: "/")
+/// ["home", "gleam", "desktop", ""]
+/// ```
+///
+pub fn split(x: String, on substring: String) -> List(String) {
+ case substring {
+ "" -> to_graphemes(x)
+ _ ->
+ x
+ |> string_builder.from_string
+ |> string_builder.split(on: substring)
+ |> list.map(with: string_builder.to_string)
+ }
+}
+
+/// Splits a `String` a single time on the given substring.
+///
+/// Returns an `Error` if substring not present.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > split_once("home/gleam/desktop/", on: "/")
+/// Ok(#("home", "gleam/desktop/"))
+/// ```
+///
+/// ```gleam
+/// > split_once("home/gleam/desktop/", on: "?")
+/// Error(Nil)
+/// ```
+///
+pub fn split_once(
+ x: String,
+ on substring: String,
+) -> Result(#(String, String), Nil) {
+ do_split_once(x, substring)
+}
+
+@target(erlang)
+@external(erlang, "string", "split")
+fn erl_split(a: String, b: String) -> List(String)
+
+@target(erlang)
+fn do_split_once(x: String, substring: String) -> Result(#(String, String), Nil) {
+ case erl_split(x, substring) {
+ [first, rest] -> Ok(#(first, rest))
+ _ -> Error(Nil)
+ }
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "split_once")
+fn do_split_once(
+ x x: String,
+ substring substring: String,
+) -> Result(#(String, String), Nil)
+
+/// Creates a new `String` by joining two `String`s together.
+///
+/// This function copies both `String`s and runs in linear time. If you find
+/// yourself joining `String`s frequently consider using the [`string_builder`](../gleam/string_builder.html)
+/// module as it can append `String`s much faster!
+///
+/// ## Examples
+///
+/// ```gleam
+/// > append(to: "butter", suffix: "fly")
+/// "butterfly"
+/// ```
+///
+pub fn append(to first: String, suffix second: String) -> String {
+ first
+ |> string_builder.from_string
+ |> string_builder.append(second)
+ |> string_builder.to_string
+}
+
+/// Creates a new `String` by joining many `String`s together.
+///
+/// This function copies both `String`s and runs in linear time. If you find
+/// yourself joining `String`s frequently consider using the [`string_builder`](../gleam/string_builder.html)
+/// module as it can append `String`s much faster!
+///
+/// ## Examples
+///
+/// ```gleam
+/// > concat(["never", "the", "less"])
+/// "nevertheless"
+/// ```
+///
+pub fn concat(strings: List(String)) -> String {
+ strings
+ |> string_builder.from_strings
+ |> string_builder.to_string
+}
+
+/// Creates a new `String` by repeating a `String` a given number of times.
+///
+/// This function runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > repeat("ha", times: 3)
+/// "hahaha"
+/// ```
+///
+pub fn repeat(string: String, times times: Int) -> String {
+ iterator.repeat(string)
+ |> iterator.take(times)
+ |> iterator.to_list
+ |> concat
+}
+
+/// Joins many `String`s together with a given separator.
+///
+/// This function runs in linear time.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > join(["home","evan","Desktop"], with: "/")
+/// "home/evan/Desktop"
+/// ```
+///
+pub fn join(strings: List(String), with separator: String) -> String {
+ do_join(strings, separator)
+}
+
+@target(erlang)
+fn do_join(strings: List(String), separator: String) -> String {
+ strings
+ |> list.intersperse(with: separator)
+ |> concat
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "join")
+fn do_join(strings strings: List(String), string string: String) -> String
+
+/// Pads a `String` on the left until it has at least given number of graphemes.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > pad_left("121", to: 5, with: ".")
+/// "..121"
+/// ```
+///
+/// ```gleam
+/// > pad_left("121", to: 3, with: ".")
+/// "121"
+/// ```
+///
+/// ```gleam
+/// > pad_left("121", to: 2, with: ".")
+/// "121"
+/// ```
+///
+pub fn pad_left(string: String, to desired_length: Int, with pad_string: String) {
+ let current_length = length(string)
+ let to_pad_length = desired_length - current_length
+ padding(to_pad_length, pad_string)
+ |> iterator.append(iterator.single(string))
+ |> iterator.to_list
+ |> concat
+}
+
+/// Pads a `String` on the right until it has a given length.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > pad_right("123", to: 5, with: ".")
+/// "123.."
+/// ```
+///
+/// ```gleam
+/// > pad_right("123", to: 3, with: ".")
+/// "123"
+/// ```
+///
+/// ```gleam
+/// > pad_right("123", to: 2, with: ".")
+/// "123"
+/// ```
+///
+pub fn pad_right(
+ string: String,
+ to desired_length: Int,
+ with pad_string: String,
+) {
+ let current_length = length(string)
+ let to_pad_length = desired_length - current_length
+ iterator.single(string)
+ |> iterator.append(padding(to_pad_length, pad_string))
+ |> iterator.to_list
+ |> concat
+}
+
+fn padding(size: Int, pad_string: String) -> Iterator(String) {
+ let pad_length = length(pad_string)
+ let num_pads = size / pad_length
+ let extra = size % pad_length
+ iterator.repeat(pad_string)
+ |> iterator.take(num_pads)
+ |> iterator.append(iterator.single(slice(pad_string, 0, extra)))
+}
+
+/// Removes whitespace on both sides of a `String`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > trim(" hats \n")
+/// "hats"
+/// ```
+///
+pub fn trim(string: String) -> String {
+ do_trim(string)
+}
+
+@target(erlang)
+fn do_trim(string: String) -> String {
+ erl_trim(string, Both)
+}
+
+@target(erlang)
+type Direction {
+ Leading
+ Trailing
+ Both
+}
+
+@target(erlang)
+@external(erlang, "string", "trim")
+fn erl_trim(a: String, b: Direction) -> String
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "trim")
+fn do_trim(string string: String) -> String
+
+/// Removes whitespace on the left of a `String`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > trim_left(" hats \n")
+/// "hats \n"
+/// ```
+///
+pub fn trim_left(string: String) -> String {
+ do_trim_left(string)
+}
+
+@target(erlang)
+fn do_trim_left(string: String) -> String {
+ erl_trim(string, Leading)
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "trim_left")
+fn do_trim_left(string string: String) -> String
+
+/// Removes whitespace on the right of a `String`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > trim_right(" hats \n")
+/// " hats"
+/// ```
+///
+pub fn trim_right(string: String) -> String {
+ do_trim_right(string)
+}
+
+@target(erlang)
+fn do_trim_right(string: String) -> String {
+ erl_trim(string, Trailing)
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "trim_right")
+fn do_trim_right(string string: String) -> String
+
+/// Splits a non-empty `String` into its first element (head) and rest (tail).
+/// This lets you pattern match on `String`s exactly as you would with lists.
+///
+/// Note on JavaScript using the function to iterate over a string will likely
+/// be slower than using `to_graphemes` due to string slicing being more
+/// expensive on JavaScript than Erlang.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > pop_grapheme("gleam")
+/// Ok(#("g", "leam"))
+/// ```
+///
+/// ```gleam
+/// > pop_grapheme("")
+/// Error(Nil)
+/// ```
+///
+pub fn pop_grapheme(string: String) -> Result(#(String, String), Nil) {
+ do_pop_grapheme(string)
+}
+
+@external(erlang, "gleam_stdlib", "string_pop_grapheme")
+@external(javascript, "../gleam_stdlib.mjs", "pop_grapheme")
+fn do_pop_grapheme(string string: String) -> Result(#(String, String), Nil)
+
+/// Converts a `String` to a list of
+/// [graphemes](https://en.wikipedia.org/wiki/Grapheme).
+///
+/// ```gleam
+/// > to_graphemes("abc")
+/// ["a", "b", "c"]
+/// ```
+///
+@external(javascript, "../gleam_stdlib.mjs", "graphemes")
+pub fn to_graphemes(string: String) -> List(String) {
+ do_to_graphemes(string, [])
+ |> list.reverse
+}
+
+fn do_to_graphemes(string: String, acc: List(String)) -> List(String) {
+ case pop_grapheme(string) {
+ Ok(#(grapheme, rest)) -> do_to_graphemes(rest, [grapheme, ..acc])
+ _ -> acc
+ }
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "codepoint")
+fn unsafe_int_to_utf_codepoint(a: Int) -> UtfCodepoint
+
+/// Converts a `String` to a `List` of `UtfCodepoint`.
+///
+/// See <https://en.wikipedia.org/wiki/Code_point> and
+/// <https://en.wikipedia.org/wiki/Unicode#Codespace_and_Code_Points> for an
+/// explanation on code points.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > "a" |> to_utf_codepoints
+/// [UtfCodepoint(97)]
+/// ```
+///
+/// ```gleam
+/// // Semantically the same as:
+/// // ["🏳", "️", "‍", "🌈"] or:
+/// // [waving_white_flag, variant_selector_16, zero_width_joiner, rainbow]
+/// > "🏳️‍🌈" |> to_utf_codepoints
+/// [UtfCodepoint(127987), UtfCodepoint(65039), UtfCodepoint(8205), UtfCodepoint(127752)]
+/// ```
+///
+pub fn to_utf_codepoints(string: String) -> List(UtfCodepoint) {
+ do_to_utf_codepoints(string)
+}
+
+@target(erlang)
+fn do_to_utf_codepoints(string: String) -> List(UtfCodepoint) {
+ do_to_utf_codepoints_impl(<<string:utf8>>, [])
+ |> list.reverse
+}
+
+@target(erlang)
+fn do_to_utf_codepoints_impl(
+ bit_array: BitArray,
+ acc: List(UtfCodepoint),
+) -> List(UtfCodepoint) {
+ case bit_array {
+ <<first:utf8_codepoint, rest:bytes>> ->
+ do_to_utf_codepoints_impl(rest, [first, ..acc])
+ _ -> acc
+ }
+}
+
+@target(javascript)
+fn do_to_utf_codepoints(string: String) -> List(UtfCodepoint) {
+ string
+ |> string_to_codepoint_integer_list
+ |> list.map(unsafe_int_to_utf_codepoint)
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "string_to_codepoint_integer_list")
+fn string_to_codepoint_integer_list(a: String) -> List(Int)
+
+/// Converts a `List` of `UtfCodepoint`s to a `String`.
+///
+/// See <https://en.wikipedia.org/wiki/Code_point> and
+/// <https://en.wikipedia.org/wiki/Unicode#Codespace_and_Code_Points> for an
+/// explanation on code points.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > {
+/// > let assert #(Ok(a), Ok(b), Ok(c)) = #(
+/// > utf_codepoint(97),
+/// > utf_codepoint(98),
+/// > utf_codepoint(99),
+/// > )
+/// > [a, b, c]
+/// > }
+/// > |> from_utf_codepoints
+/// "abc"
+/// ```
+///
+@external(erlang, "gleam_stdlib", "utf_codepoint_list_to_string")
+@external(javascript, "../gleam_stdlib.mjs", "utf_codepoint_list_to_string")
+pub fn from_utf_codepoints(utf_codepoints: List(UtfCodepoint)) -> String
+
+/// Converts an integer to a `UtfCodepoint`.
+///
+/// Returns an `Error` if the integer does not represent a valid UTF codepoint.
+///
+pub fn utf_codepoint(value: Int) -> Result(UtfCodepoint, Nil) {
+ case value {
+ i if i > 1_114_111 -> Error(Nil)
+ 65_534 | 65_535 -> Error(Nil)
+ i if i >= 55_296 && i <= 57_343 -> Error(Nil)
+ i -> Ok(unsafe_int_to_utf_codepoint(i))
+ }
+}
+
+/// Converts an UtfCodepoint to its ordinal code point value.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert [utf_codepoint, ..] = to_utf_codepoints("💜")
+/// > utf_codepoint_to_int(utf_codepoint)
+/// 128156
+/// ```
+///
+pub fn utf_codepoint_to_int(cp: UtfCodepoint) -> Int {
+ do_utf_codepoint_to_int(cp)
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "utf_codepoint_to_int")
+fn do_utf_codepoint_to_int(cp cp: UtfCodepoint) -> Int
+
+/// Converts a `String` into `Option(String)` where an empty `String` becomes
+/// `None`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > to_option("")
+/// None
+/// ```
+///
+/// ```gleam
+/// > to_option("hats")
+/// Some("hats")
+/// ```
+///
+pub fn to_option(s: String) -> Option(String) {
+ case s {
+ "" -> None
+ _ -> Some(s)
+ }
+}
+
+/// Returns the first grapheme cluster in a given `String` and wraps it in a
+/// `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`.
+/// Otherwise, it returns `Ok(String)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > first("")
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > first("icecream")
+/// Ok("i")
+/// ```
+///
+pub fn first(s: String) -> Result(String, Nil) {
+ case pop_grapheme(s) {
+ Ok(#(first, _)) -> Ok(first)
+ Error(e) -> Error(e)
+ }
+}
+
+/// Returns the last grapheme cluster in a given `String` and wraps it in a
+/// `Result(String, Nil)`. If the `String` is empty, it returns `Error(Nil)`.
+/// Otherwise, it returns `Ok(String)`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > last("")
+/// Error(Nil)
+/// ```
+///
+/// ```gleam
+/// > last("icecream")
+/// Ok("m")
+/// ```
+///
+pub fn last(s: String) -> Result(String, Nil) {
+ case pop_grapheme(s) {
+ Ok(#(first, "")) -> Ok(first)
+ Ok(#(_, rest)) -> Ok(slice(rest, -1, 1))
+ Error(e) -> Error(e)
+ }
+}
+
+/// Creates a new `String` with the first grapheme in the input `String`
+/// converted to uppercase and the remaining graphemes to lowercase.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > capitalise("mamouna")
+/// "Mamouna"
+/// ```
+///
+pub fn capitalise(s: String) -> String {
+ case pop_grapheme(s) {
+ Ok(#(first, rest)) -> append(to: uppercase(first), suffix: lowercase(rest))
+ _ -> ""
+ }
+}
+
+/// Returns a `String` representation of a term in Gleam syntax.
+///
+pub fn inspect(term: anything) -> String {
+ do_inspect(term)
+ |> string_builder.to_string
+}
+
+@external(erlang, "gleam_stdlib", "inspect")
+@external(javascript, "../gleam_stdlib.mjs", "inspect")
+fn do_inspect(term term: anything) -> StringBuilder
+
+/// Returns the number of bytes in a `String`.
+///
+/// This function runs in constant time on Erlang and in linear time on
+/// JavaScript.
+///
+@external(erlang, "erlang", "byte_size")
+@external(javascript, "../gleam_stdlib.mjs", "byte_size")
+pub fn byte_size(string: String) -> Int
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam
new file mode 100644
index 0000000..5792ca8
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/string_builder.gleam
@@ -0,0 +1,298 @@
+import gleam/list
+
+/// `StringBuilder` is a type used for efficiently building strings.
+///
+/// When we append one string to another the strings must be copied to a
+/// new location in memory so that they can sit together. This behaviour
+/// enables efficient reading of the string but copying can be expensive,
+/// especially if we want to join many strings together.
+///
+/// `StringBuilder` is different in that it can be joined together in constant time
+/// using minimal memory, and then can be efficiently converted to a string
+/// using the `to_string` function.
+///
+/// On Erlang this type is compatible with Erlang's iodata. On JavaScript this
+/// type is compatible with normal strings.
+///
+pub type StringBuilder
+
+/// Create an empty `StringBuilder`. Useful as the start of a pipe chaining many
+/// builders together.
+///
+pub fn new() -> StringBuilder {
+ do_from_strings([])
+}
+
+/// Prepends a `String` onto the start of some `StringBuilder`.
+///
+/// Runs in constant time.
+///
+pub fn prepend(
+ to builder: StringBuilder,
+ prefix prefix: String,
+) -> StringBuilder {
+ append_builder(from_string(prefix), builder)
+}
+
+/// Appends a `String` onto the end of some `StringBuilder`.
+///
+/// Runs in constant time.
+///
+pub fn append(to builder: StringBuilder, suffix second: String) -> StringBuilder {
+ append_builder(builder, from_string(second))
+}
+
+/// Prepends some `StringBuilder` onto the start of another.
+///
+/// Runs in constant time.
+///
+pub fn prepend_builder(
+ to builder: StringBuilder,
+ prefix prefix: StringBuilder,
+) -> StringBuilder {
+ do_append(prefix, builder)
+}
+
+/// Appends some `StringBuilder` onto the end of another.
+///
+/// Runs in constant time.
+///
+pub fn append_builder(
+ to builder: StringBuilder,
+ suffix suffix: StringBuilder,
+) -> StringBuilder {
+ do_append(builder, suffix)
+}
+
+@external(erlang, "gleam_stdlib", "iodata_append")
+@external(javascript, "../gleam_stdlib.mjs", "add")
+fn do_append(a: StringBuilder, b: StringBuilder) -> StringBuilder
+
+/// Converts a list of strings into a builder.
+///
+/// Runs in constant time.
+///
+pub fn from_strings(strings: List(String)) -> StringBuilder {
+ do_from_strings(strings)
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "concat")
+fn do_from_strings(a: List(String)) -> StringBuilder
+
+/// Joins a list of builders into a single builder.
+///
+/// Runs in constant time.
+///
+pub fn concat(builders: List(StringBuilder)) -> StringBuilder {
+ do_concat(builders)
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "concat")
+fn do_concat(a: List(StringBuilder)) -> StringBuilder
+
+/// Converts a string into a builder.
+///
+/// Runs in constant time.
+///
+pub fn from_string(string: String) -> StringBuilder {
+ do_from_string(string)
+}
+
+@external(erlang, "gleam_stdlib", "identity")
+@external(javascript, "../gleam_stdlib.mjs", "identity")
+fn do_from_string(a: String) -> StringBuilder
+
+/// Turns an `StringBuilder` into a `String`
+///
+/// This function is implemented natively by the virtual machine and is highly
+/// optimised.
+///
+pub fn to_string(builder: StringBuilder) -> String {
+ do_to_string(builder)
+}
+
+@external(erlang, "unicode", "characters_to_binary")
+@external(javascript, "../gleam_stdlib.mjs", "identity")
+fn do_to_string(a: StringBuilder) -> String
+
+/// Returns the size of the `StringBuilder` in bytes.
+///
+pub fn byte_size(builder: StringBuilder) -> Int {
+ do_byte_size(builder)
+}
+
+@external(erlang, "erlang", "iolist_size")
+@external(javascript, "../gleam_stdlib.mjs", "length")
+fn do_byte_size(a: StringBuilder) -> Int
+
+/// Joins the given builders into a new builder separated with the given string
+///
+pub fn join(builders: List(StringBuilder), with sep: String) -> StringBuilder {
+ builders
+ |> list.intersperse(from_string(sep))
+ |> concat
+}
+
+/// Converts a builder to a new builder where the contents have been
+/// lowercased.
+///
+pub fn lowercase(builder: StringBuilder) -> StringBuilder {
+ do_lowercase(builder)
+}
+
+@external(erlang, "string", "lowercase")
+@external(javascript, "../gleam_stdlib.mjs", "lowercase")
+fn do_lowercase(a: StringBuilder) -> StringBuilder
+
+/// Converts a builder to a new builder where the contents have been
+/// uppercased.
+///
+pub fn uppercase(builder: StringBuilder) -> StringBuilder {
+ do_uppercase(builder)
+}
+
+@external(erlang, "string", "uppercase")
+@external(javascript, "../gleam_stdlib.mjs", "uppercase")
+fn do_uppercase(a: StringBuilder) -> StringBuilder
+
+/// Converts a builder to a new builder with the contents reversed.
+///
+pub fn reverse(builder: StringBuilder) -> StringBuilder {
+ do_reverse(builder)
+}
+
+@target(erlang)
+@external(erlang, "string", "reverse")
+fn do_reverse(a: StringBuilder) -> StringBuilder
+
+@target(javascript)
+fn do_reverse(builder: StringBuilder) -> StringBuilder {
+ builder
+ |> to_string
+ |> do_to_graphemes
+ |> list.reverse
+ |> from_strings
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "graphemes")
+fn do_to_graphemes(string string: String) -> List(String)
+
+/// Splits a builder on a given pattern into a list of builders.
+///
+pub fn split(iodata: StringBuilder, on pattern: String) -> List(StringBuilder) {
+ do_split(iodata, pattern)
+}
+
+@target(erlang)
+type Direction {
+ All
+}
+
+@target(erlang)
+@external(erlang, "string", "split")
+fn erl_split(a: StringBuilder, b: String, c: Direction) -> List(StringBuilder)
+
+@target(erlang)
+fn do_split(iodata: StringBuilder, pattern: String) -> List(StringBuilder) {
+ erl_split(iodata, pattern, All)
+}
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "split")
+fn do_split(
+ builder builder: StringBuilder,
+ pattern pattern: String,
+) -> List(StringBuilder)
+
+/// Replaces all instances of a pattern with a given string substitute.
+///
+pub fn replace(
+ in builder: StringBuilder,
+ each pattern: String,
+ with substitute: String,
+) -> StringBuilder {
+ do_replace(builder, pattern, substitute)
+}
+
+@target(erlang)
+fn do_replace(
+ iodata: StringBuilder,
+ pattern: String,
+ substitute: String,
+) -> StringBuilder {
+ erl_replace(iodata, pattern, substitute, All)
+}
+
+@target(erlang)
+@external(erlang, "string", "replace")
+fn erl_replace(
+ a: StringBuilder,
+ b: String,
+ c: String,
+ d: Direction,
+) -> StringBuilder
+
+@target(javascript)
+@external(javascript, "../gleam_stdlib.mjs", "string_replace")
+fn do_replace(a: StringBuilder, b: String, c: String) -> StringBuilder
+
+/// Compares two builders to determine if they have the same textual content.
+///
+/// Comparing two iodata using the `==` operator may return `False` even if they
+/// have the same content as they may have been build in different ways, so
+/// using this function is often preferred.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_strings(["a", "b"]) == from_string("ab")
+/// False
+/// ```
+///
+/// ```gleam
+/// > is_equal(from_strings(["a", "b"]), from_string("ab"))
+/// True
+/// ```
+///
+pub fn is_equal(a: StringBuilder, b: StringBuilder) -> Bool {
+ do_is_equal(a, b)
+}
+
+@external(erlang, "string", "equal")
+@external(javascript, "../gleam_stdlib.mjs", "equal")
+fn do_is_equal(a: StringBuilder, b: StringBuilder) -> Bool
+
+/// Inspects a builder to determine if it is equivalent to an empty string.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > from_string("ok") |> is_empty
+/// False
+/// ```
+///
+/// ```gleam
+/// > from_string("") |> is_empty
+/// True
+/// ```
+///
+/// ```gleam
+/// > from_strings([]) |> is_empty
+/// True
+/// ```
+///
+pub fn is_empty(builder: StringBuilder) -> Bool {
+ do_is_empty(builder)
+}
+
+@target(erlang)
+@external(erlang, "string", "is_empty")
+fn do_is_empty(a: StringBuilder) -> Bool
+
+@target(javascript)
+fn do_is_empty(builder: StringBuilder) -> Bool {
+ from_string("") == builder
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam b/aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam
new file mode 100644
index 0000000..11f6ea6
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam/uri.gleam
@@ -0,0 +1,462 @@
+//// Utilities for working with URIs
+////
+//// This module provides functions for working with URIs (for example, parsing
+//// URIs or encoding query strings). The functions in this module are implemented
+//// according to [RFC 3986](https://tools.ietf.org/html/rfc3986).
+////
+//// Query encoding (Form encoding) is defined in the
+//// [W3C specification](https://www.w3.org/TR/html52/sec-forms.html#urlencoded-form-data).
+
+import gleam/int
+import gleam/list
+import gleam/option.{type Option, None, Some}
+import gleam/string
+import gleam/string_builder.{type StringBuilder}
+@target(javascript)
+import gleam/pair
+@target(javascript)
+import gleam/regex
+@target(javascript)
+import gleam/result
+
+/// Type representing holding the parsed components of an URI.
+/// All components of a URI are optional, except the path.
+///
+pub type Uri {
+ Uri(
+ scheme: Option(String),
+ userinfo: Option(String),
+ host: Option(String),
+ port: Option(Int),
+ path: String,
+ query: Option(String),
+ fragment: Option(String),
+ )
+}
+
+/// Parses a compliant URI string into the `Uri` Type.
+/// If the string is not a valid URI string then an error is returned.
+///
+/// The opposite operation is `uri.to_string`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > parse("https://example.com:1234/a/b?query=true#fragment")
+/// Ok(
+/// Uri(
+/// scheme: Some("https"),
+/// userinfo: None,
+/// host: Some("example.com"),
+/// port: Some(1234),
+/// path: "/a/b",
+/// query: Some("query=true"),
+/// fragment: Some("fragment")
+/// )
+/// )
+/// ```
+///
+pub fn parse(uri_string: String) -> Result(Uri, Nil) {
+ do_parse(uri_string)
+}
+
+@target(erlang)
+@external(erlang, "gleam_stdlib", "uri_parse")
+fn do_parse(a: String) -> Result(Uri, Nil)
+
+@target(javascript)
+fn do_parse(uri_string: String) -> Result(Uri, Nil) {
+ // From https://tools.ietf.org/html/rfc3986#appendix-B
+ let pattern =
+ // 12 3 4 5 6 7 8
+ "^(([a-z][a-z0-9\\+\\-\\.]*):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#.*)?"
+ let matches =
+ pattern
+ |> regex_submatches(uri_string)
+ |> pad_list(8)
+
+ let #(scheme, authority, path, query, fragment) = case matches {
+ [
+ _scheme_with_colon,
+ scheme,
+ authority_with_slashes,
+ _authority,
+ path,
+ query_with_question_mark,
+ _query,
+ fragment,
+ ] -> #(
+ scheme,
+ authority_with_slashes,
+ path,
+ query_with_question_mark,
+ fragment,
+ )
+ _ -> #(None, None, None, None, None)
+ }
+
+ let scheme = noneify_empty_string(scheme)
+ let path = option.unwrap(path, "")
+ let query = noneify_query(query)
+ let #(userinfo, host, port) = split_authority(authority)
+ let fragment =
+ fragment
+ |> option.to_result(Nil)
+ |> result.try(string.pop_grapheme)
+ |> result.map(pair.second)
+ |> option.from_result
+ let scheme =
+ scheme
+ |> noneify_empty_string
+ |> option.map(string.lowercase)
+ Ok(Uri(
+ scheme: scheme,
+ userinfo: userinfo,
+ host: host,
+ port: port,
+ path: path,
+ query: query,
+ fragment: fragment,
+ ))
+}
+
+@target(javascript)
+fn regex_submatches(pattern: String, string: String) -> List(Option(String)) {
+ pattern
+ |> regex.compile(regex.Options(case_insensitive: True, multi_line: False))
+ |> result.nil_error
+ |> result.map(regex.scan(_, string))
+ |> result.try(list.first)
+ |> result.map(fn(m: regex.Match) { m.submatches })
+ |> result.unwrap([])
+}
+
+@target(javascript)
+fn noneify_query(x: Option(String)) -> Option(String) {
+ case x {
+ None -> None
+ Some(x) ->
+ case string.pop_grapheme(x) {
+ Ok(#("?", query)) -> Some(query)
+ _ -> None
+ }
+ }
+}
+
+@target(javascript)
+fn noneify_empty_string(x: Option(String)) -> Option(String) {
+ case x {
+ Some("") | None -> None
+ Some(_) -> x
+ }
+}
+
+// Split an authority into its userinfo, host and port parts.
+@target(javascript)
+fn split_authority(
+ authority: Option(String),
+) -> #(Option(String), Option(String), Option(Int)) {
+ case option.unwrap(authority, "") {
+ "" -> #(None, None, None)
+ "//" -> #(None, Some(""), None)
+ authority -> {
+ let matches =
+ "^(//)?((.*)@)?(\\[[a-zA-Z0-9:.]*\\]|[^:]*)(:(\\d*))?"
+ |> regex_submatches(authority)
+ |> pad_list(6)
+ case matches {
+ [_, _, userinfo, host, _, port] -> {
+ let userinfo = noneify_empty_string(userinfo)
+ let host = noneify_empty_string(host)
+ let port =
+ port
+ |> option.unwrap("")
+ |> int.parse
+ |> option.from_result
+ #(userinfo, host, port)
+ }
+ _ -> #(None, None, None)
+ }
+ }
+ }
+}
+
+@target(javascript)
+fn pad_list(list: List(Option(a)), size: Int) -> List(Option(a)) {
+ list
+ |> list.append(list.repeat(None, extra_required(list, size)))
+}
+
+@target(javascript)
+fn extra_required(list: List(a), remaining: Int) -> Int {
+ case list {
+ _ if remaining == 0 -> 0
+ [] -> remaining
+ [_, ..xs] -> extra_required(xs, remaining - 1)
+ }
+}
+
+/// Parses an urlencoded query string into a list of key value pairs.
+/// Returns an error for invalid encoding.
+///
+/// The opposite operation is `uri.query_to_string`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > parse_query("a=1&b=2")
+/// Ok([#("a", "1"), #("b", "2")])
+/// ```
+///
+pub fn parse_query(query: String) -> Result(List(#(String, String)), Nil) {
+ do_parse_query(query)
+}
+
+@external(erlang, "gleam_stdlib", "parse_query")
+@external(javascript, "../gleam_stdlib.mjs", "parse_query")
+fn do_parse_query(a: String) -> Result(List(#(String, String)), Nil)
+
+/// Encodes a list of key value pairs as a URI query string.
+///
+/// The opposite operation is `uri.parse_query`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > query_to_string([#("a", "1"), #("b", "2")])
+/// "a=1&b=2"
+/// ```
+///
+pub fn query_to_string(query: List(#(String, String))) -> String {
+ query
+ |> list.map(query_pair)
+ |> list.intersperse(string_builder.from_string("&"))
+ |> string_builder.concat
+ |> string_builder.to_string
+}
+
+fn query_pair(pair: #(String, String)) -> StringBuilder {
+ string_builder.from_strings([
+ percent_encode(pair.0),
+ "=",
+ percent_encode(pair.1),
+ ])
+}
+
+/// Encodes a string into a percent encoded representation.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > percent_encode("100% great")
+/// "100%25%20great"
+/// ```
+///
+pub fn percent_encode(value: String) -> String {
+ do_percent_encode(value)
+}
+
+@external(erlang, "gleam_stdlib", "percent_encode")
+@external(javascript, "../gleam_stdlib.mjs", "percent_encode")
+fn do_percent_encode(a: String) -> String
+
+/// Decodes a percent encoded string.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > percent_decode("100%25+great")
+/// Ok("100% great")
+/// ```
+///
+pub fn percent_decode(value: String) -> Result(String, Nil) {
+ do_percent_decode(value)
+}
+
+@external(erlang, "gleam_stdlib", "percent_decode")
+@external(javascript, "../gleam_stdlib.mjs", "percent_decode")
+fn do_percent_decode(a: String) -> Result(String, Nil)
+
+fn do_remove_dot_segments(
+ input: List(String),
+ accumulator: List(String),
+) -> List(String) {
+ case input {
+ [] -> list.reverse(accumulator)
+ [segment, ..rest] -> {
+ let accumulator = case segment, accumulator {
+ "", accumulator -> accumulator
+ ".", accumulator -> accumulator
+ "..", [] -> []
+ "..", [_, ..accumulator] -> accumulator
+ segment, accumulator -> [segment, ..accumulator]
+ }
+ do_remove_dot_segments(rest, accumulator)
+ }
+ }
+}
+
+fn remove_dot_segments(input: List(String)) -> List(String) {
+ do_remove_dot_segments(input, [])
+}
+
+/// Splits the path section of a URI into it's constituent segments.
+///
+/// Removes empty segments and resolves dot-segments as specified in
+/// [section 5.2](https://www.ietf.org/rfc/rfc3986.html#section-5.2) of the RFC.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > path_segments("/users/1")
+/// ["users" ,"1"]
+/// ```
+///
+pub fn path_segments(path: String) -> List(String) {
+ remove_dot_segments(string.split(path, "/"))
+}
+
+/// Encodes a `Uri` value as a URI string.
+///
+/// The opposite operation is `uri.parse`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let uri = Uri(Some("http"), None, Some("example.com"), ...)
+/// > to_string(uri)
+/// "http://example.com"
+/// ```
+///
+pub fn to_string(uri: Uri) -> String {
+ let parts = case uri.fragment {
+ Some(fragment) -> ["#", fragment]
+ _ -> []
+ }
+ let parts = case uri.query {
+ Some(query) -> ["?", query, ..parts]
+ _ -> parts
+ }
+ let parts = [uri.path, ..parts]
+ let parts = case uri.host, string.starts_with(uri.path, "/") {
+ Some(host), False if host != "" -> ["/", ..parts]
+ _, _ -> parts
+ }
+ let parts = case uri.host, uri.port {
+ Some(_), Some(port) -> [":", int.to_string(port), ..parts]
+ _, _ -> parts
+ }
+ let parts = case uri.scheme, uri.userinfo, uri.host {
+ Some(s), Some(u), Some(h) -> [s, "://", u, "@", h, ..parts]
+ Some(s), None, Some(h) -> [s, "://", h, ..parts]
+ Some(s), Some(_), None | Some(s), None, None -> [s, ":", ..parts]
+ None, None, Some(h) -> ["//", h, ..parts]
+ _, _, _ -> parts
+ }
+ string.concat(parts)
+}
+
+/// Fetches the origin of a URI.
+///
+/// Returns the origin of a uri as defined in
+/// [RFC 6454](https://tools.ietf.org/html/rfc6454)
+///
+/// The supported URI schemes are `http` and `https`.
+/// URLs without a scheme will return `Error`.
+///
+/// ## Examples
+///
+/// ```gleam
+/// > let assert Ok(uri) = parse("http://example.com/path?foo#bar")
+/// > origin(uri)
+/// Ok("http://example.com")
+/// ```
+///
+pub fn origin(uri: Uri) -> Result(String, Nil) {
+ let Uri(scheme: scheme, host: host, port: port, ..) = uri
+ case scheme {
+ Some("https") if port == Some(443) -> {
+ let origin = Uri(scheme, None, host, None, "", None, None)
+ Ok(to_string(origin))
+ }
+ Some("http") if port == Some(80) -> {
+ let origin = Uri(scheme, None, host, None, "", None, None)
+ Ok(to_string(origin))
+ }
+ Some(s) if s == "http" || s == "https" -> {
+ let origin = Uri(scheme, None, host, port, "", None, None)
+ Ok(to_string(origin))
+ }
+ _ -> Error(Nil)
+ }
+}
+
+fn drop_last(elements: List(a)) -> List(a) {
+ list.take(from: elements, up_to: list.length(elements) - 1)
+}
+
+fn join_segments(segments: List(String)) -> String {
+ string.join(["", ..segments], "/")
+}
+
+/// Resolves a URI with respect to the given base URI.
+///
+/// The base URI must be an absolute URI or this function will return an error.
+/// The algorithm for merging uris is described in
+/// [RFC 3986](https://tools.ietf.org/html/rfc3986#section-5.2).
+///
+pub fn merge(base: Uri, relative: Uri) -> Result(Uri, Nil) {
+ case base {
+ Uri(scheme: Some(_), host: Some(_), ..) ->
+ case relative {
+ Uri(host: Some(_), ..) -> {
+ let path =
+ string.split(relative.path, "/")
+ |> remove_dot_segments()
+ |> join_segments()
+ let resolved =
+ Uri(
+ option.or(relative.scheme, base.scheme),
+ None,
+ relative.host,
+ option.or(relative.port, base.port),
+ path,
+ relative.query,
+ relative.fragment,
+ )
+ Ok(resolved)
+ }
+ _ -> {
+ let #(new_path, new_query) = case relative.path {
+ "" -> #(base.path, option.or(relative.query, base.query))
+ _ -> {
+ let path_segments = case string.starts_with(relative.path, "/") {
+ True -> string.split(relative.path, "/")
+ False ->
+ string.split(base.path, "/")
+ |> drop_last()
+ |> list.append(string.split(relative.path, "/"))
+ }
+ let path =
+ path_segments
+ |> remove_dot_segments()
+ |> join_segments()
+ #(path, relative.query)
+ }
+ }
+ let resolved =
+ Uri(
+ base.scheme,
+ None,
+ base.host,
+ base.port,
+ new_path,
+ new_query,
+ relative.fragment,
+ )
+ Ok(resolved)
+ }
+ }
+ _ -> Error(Nil)
+ }
+}
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl
new file mode 100644
index 0000000..65bc3f6
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@base.erl
@@ -0,0 +1,20 @@
+-module(gleam@base).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([encode64/2, decode64/1, url_encode64/2, url_decode64/1]).
+
+-spec encode64(bitstring(), boolean()) -> binary().
+encode64(Input, Padding) ->
+ gleam@bit_array:base64_encode(Input, Padding).
+
+-spec decode64(binary()) -> {ok, bitstring()} | {error, nil}.
+decode64(Encoded) ->
+ gleam@bit_array:base64_decode(Encoded).
+
+-spec url_encode64(bitstring(), boolean()) -> binary().
+url_encode64(Input, Padding) ->
+ gleam@bit_array:base64_url_encode(Input, Padding).
+
+-spec url_decode64(binary()) -> {ok, bitstring()} | {error, nil}.
+url_decode64(Encoded) ->
+ gleam@bit_array:base64_url_decode(Encoded).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl
new file mode 100644
index 0000000..ba18dfa
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_array.erl
@@ -0,0 +1,102 @@
+-module(gleam@bit_array).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_string/1, byte_size/1, slice/3, is_utf8/1, to_string/1, concat/1, append/2, base64_encode/2, base64_decode/1, base64_url_encode/2, base64_url_decode/1, base16_encode/1, base16_decode/1]).
+
+-spec from_string(binary()) -> bitstring().
+from_string(X) ->
+ gleam_stdlib:identity(X).
+
+-spec byte_size(bitstring()) -> integer().
+byte_size(X) ->
+ erlang:byte_size(X).
+
+-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} |
+ {error, nil}.
+slice(String, Position, Length) ->
+ gleam_stdlib:bit_array_slice(String, Position, Length).
+
+-spec do_is_utf8(bitstring()) -> boolean().
+do_is_utf8(Bits) ->
+ case Bits of
+ <<>> ->
+ true;
+
+ <<_/utf8, Rest/binary>> ->
+ do_is_utf8(Rest);
+
+ _ ->
+ false
+ end.
+
+-spec is_utf8(bitstring()) -> boolean().
+is_utf8(Bits) ->
+ do_is_utf8(Bits).
+
+-spec do_to_string(bitstring()) -> {ok, binary()} | {error, nil}.
+do_to_string(Bits) ->
+ case is_utf8(Bits) of
+ true ->
+ {ok, gleam_stdlib:identity(Bits)};
+
+ false ->
+ {error, nil}
+ end.
+
+-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}.
+to_string(Bits) ->
+ do_to_string(Bits).
+
+-spec concat(list(bitstring())) -> bitstring().
+concat(Bit_arrays) ->
+ gleam_stdlib:bit_array_concat(Bit_arrays).
+
+-spec append(bitstring(), bitstring()) -> bitstring().
+append(First, Second) ->
+ gleam_stdlib:bit_array_concat([First, Second]).
+
+-spec base64_encode(bitstring(), boolean()) -> binary().
+base64_encode(Input, Padding) ->
+ Encoded = base64:encode(Input),
+ case Padding of
+ true ->
+ Encoded;
+
+ false ->
+ gleam@string:replace(Encoded, <<"="/utf8>>, <<""/utf8>>)
+ end.
+
+-spec base64_decode(binary()) -> {ok, bitstring()} | {error, nil}.
+base64_decode(Encoded) ->
+ Padded = case erlang:byte_size(gleam_stdlib:identity(Encoded)) rem 4 of
+ 0 ->
+ Encoded;
+
+ N ->
+ gleam@string:append(
+ Encoded,
+ gleam@string:repeat(<<"="/utf8>>, 4 - N)
+ )
+ end,
+ gleam_stdlib:base_decode64(Padded).
+
+-spec base64_url_encode(bitstring(), boolean()) -> binary().
+base64_url_encode(Input, Padding) ->
+ _pipe = base64_encode(Input, Padding),
+ _pipe@1 = gleam@string:replace(_pipe, <<"+"/utf8>>, <<"-"/utf8>>),
+ gleam@string:replace(_pipe@1, <<"/"/utf8>>, <<"_"/utf8>>).
+
+-spec base64_url_decode(binary()) -> {ok, bitstring()} | {error, nil}.
+base64_url_decode(Encoded) ->
+ _pipe = Encoded,
+ _pipe@1 = gleam@string:replace(_pipe, <<"-"/utf8>>, <<"+"/utf8>>),
+ _pipe@2 = gleam@string:replace(_pipe@1, <<"_"/utf8>>, <<"/"/utf8>>),
+ base64_decode(_pipe@2).
+
+-spec base16_encode(bitstring()) -> binary().
+base16_encode(Input) ->
+ binary:encode_hex(Input).
+
+-spec base16_decode(binary()) -> {ok, bitstring()} | {error, nil}.
+base16_decode(Input) ->
+ gleam_stdlib:base16_decode(Input).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl
new file mode 100644
index 0000000..284c6d4
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_builder.erl
@@ -0,0 +1,66 @@
+-module(gleam@bit_builder).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, prepend/2, append/2, prepend_builder/2, append_builder/2, prepend_string/2, append_string/2, concat/1, concat_bit_strings/1, from_string/1, from_string_builder/1, from_bit_string/1, to_bit_string/1, byte_size/1]).
+
+-spec new() -> gleam@bytes_builder:bytes_builder().
+new() ->
+ gleam@bytes_builder:new().
+
+-spec prepend(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder().
+prepend(To, Prefix) ->
+ gleam@bytes_builder:prepend(To, Prefix).
+
+-spec append(gleam@bytes_builder:bytes_builder(), bitstring()) -> gleam@bytes_builder:bytes_builder().
+append(To, Suffix) ->
+ gleam@bytes_builder:append(To, Suffix).
+
+-spec prepend_builder(
+ gleam@bytes_builder:bytes_builder(),
+ gleam@bytes_builder:bytes_builder()
+) -> gleam@bytes_builder:bytes_builder().
+prepend_builder(To, Prefix) ->
+ gleam@bytes_builder:prepend_builder(To, Prefix).
+
+-spec append_builder(
+ gleam@bytes_builder:bytes_builder(),
+ gleam@bytes_builder:bytes_builder()
+) -> gleam@bytes_builder:bytes_builder().
+append_builder(First, Second) ->
+ gleam_stdlib:iodata_append(First, Second).
+
+-spec prepend_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder().
+prepend_string(To, Prefix) ->
+ gleam@bytes_builder:prepend_string(To, Prefix).
+
+-spec append_string(gleam@bytes_builder:bytes_builder(), binary()) -> gleam@bytes_builder:bytes_builder().
+append_string(To, Suffix) ->
+ gleam@bytes_builder:append_string(To, Suffix).
+
+-spec concat(list(gleam@bytes_builder:bytes_builder())) -> gleam@bytes_builder:bytes_builder().
+concat(Builders) ->
+ gleam_stdlib:identity(Builders).
+
+-spec concat_bit_strings(list(bitstring())) -> gleam@bytes_builder:bytes_builder().
+concat_bit_strings(Bits) ->
+ gleam_stdlib:identity(Bits).
+
+-spec from_string(binary()) -> gleam@bytes_builder:bytes_builder().
+from_string(String) ->
+ gleam_stdlib:wrap_list(String).
+
+-spec from_string_builder(gleam@string_builder:string_builder()) -> gleam@bytes_builder:bytes_builder().
+from_string_builder(Builder) ->
+ gleam_stdlib:wrap_list(Builder).
+
+-spec from_bit_string(bitstring()) -> gleam@bytes_builder:bytes_builder().
+from_bit_string(Bits) ->
+ gleam_stdlib:wrap_list(Bits).
+
+-spec to_bit_string(gleam@bytes_builder:bytes_builder()) -> bitstring().
+to_bit_string(Builder) ->
+ erlang:list_to_bitstring(Builder).
+
+-spec byte_size(gleam@bytes_builder:bytes_builder()) -> integer().
+byte_size(Builder) ->
+ erlang:iolist_size(Builder).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl
new file mode 100644
index 0000000..7dabaa3
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bit_string.erl
@@ -0,0 +1,33 @@
+-module(gleam@bit_string).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from_string/1, byte_size/1, append/2, slice/3, is_utf8/1, to_string/1, concat/1]).
+
+-spec from_string(binary()) -> bitstring().
+from_string(X) ->
+ gleam_stdlib:identity(X).
+
+-spec byte_size(bitstring()) -> integer().
+byte_size(X) ->
+ erlang:byte_size(X).
+
+-spec append(bitstring(), bitstring()) -> bitstring().
+append(First, Second) ->
+ gleam@bit_array:append(First, Second).
+
+-spec slice(bitstring(), integer(), integer()) -> {ok, bitstring()} |
+ {error, nil}.
+slice(String, Position, Length) ->
+ gleam_stdlib:bit_array_slice(String, Position, Length).
+
+-spec is_utf8(bitstring()) -> boolean().
+is_utf8(Bits) ->
+ gleam@bit_array:is_utf8(Bits).
+
+-spec to_string(bitstring()) -> {ok, binary()} | {error, nil}.
+to_string(Bits) ->
+ gleam@bit_array:to_string(Bits).
+
+-spec concat(list(bitstring())) -> bitstring().
+concat(Bit_strings) ->
+ gleam_stdlib:bit_array_concat(Bit_strings).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl
new file mode 100644
index 0000000..cd55358
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bool.erl
@@ -0,0 +1,162 @@
+-module(gleam@bool).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export(['and'/2, 'or'/2, negate/1, nor/2, nand/2, exclusive_or/2, exclusive_nor/2, compare/2, max/2, min/2, to_int/1, to_string/1, guard/3, lazy_guard/3]).
+
+-spec 'and'(boolean(), boolean()) -> boolean().
+'and'(A, B) ->
+ A andalso B.
+
+-spec 'or'(boolean(), boolean()) -> boolean().
+'or'(A, B) ->
+ A orelse B.
+
+-spec negate(boolean()) -> boolean().
+negate(Bool) ->
+ case Bool of
+ true ->
+ false;
+
+ false ->
+ true
+ end.
+
+-spec nor(boolean(), boolean()) -> boolean().
+nor(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ true;
+
+ {false, true} ->
+ false;
+
+ {true, false} ->
+ false;
+
+ {true, true} ->
+ false
+ end.
+
+-spec nand(boolean(), boolean()) -> boolean().
+nand(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ true;
+
+ {false, true} ->
+ true;
+
+ {true, false} ->
+ true;
+
+ {true, true} ->
+ false
+ end.
+
+-spec exclusive_or(boolean(), boolean()) -> boolean().
+exclusive_or(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ false;
+
+ {false, true} ->
+ true;
+
+ {true, false} ->
+ true;
+
+ {true, true} ->
+ false
+ end.
+
+-spec exclusive_nor(boolean(), boolean()) -> boolean().
+exclusive_nor(A, B) ->
+ case {A, B} of
+ {false, false} ->
+ true;
+
+ {false, true} ->
+ false;
+
+ {true, false} ->
+ false;
+
+ {true, true} ->
+ true
+ end.
+
+-spec compare(boolean(), boolean()) -> gleam@order:order().
+compare(A, B) ->
+ case {A, B} of
+ {true, true} ->
+ eq;
+
+ {true, false} ->
+ gt;
+
+ {false, false} ->
+ eq;
+
+ {false, true} ->
+ lt
+ end.
+
+-spec max(boolean(), boolean()) -> boolean().
+max(A, B) ->
+ case A of
+ true ->
+ true;
+
+ false ->
+ B
+ end.
+
+-spec min(boolean(), boolean()) -> boolean().
+min(A, B) ->
+ case A of
+ false ->
+ false;
+
+ true ->
+ B
+ end.
+
+-spec to_int(boolean()) -> integer().
+to_int(Bool) ->
+ case Bool of
+ false ->
+ 0;
+
+ true ->
+ 1
+ end.
+
+-spec to_string(boolean()) -> binary().
+to_string(Bool) ->
+ case Bool of
+ false ->
+ <<"False"/utf8>>;
+
+ true ->
+ <<"True"/utf8>>
+ end.
+
+-spec guard(boolean(), DDZ, fun(() -> DDZ)) -> DDZ.
+guard(Requirement, Consequence, Alternative) ->
+ case Requirement of
+ true ->
+ Consequence;
+
+ false ->
+ Alternative()
+ end.
+
+-spec lazy_guard(boolean(), fun(() -> DEA), fun(() -> DEA)) -> DEA.
+lazy_guard(Requirement, Consequence, Alternative) ->
+ case Requirement of
+ true ->
+ Consequence();
+
+ false ->
+ Alternative()
+ end.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl
new file mode 100644
index 0000000..2f6dd93
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@bytes_builder.erl
@@ -0,0 +1,87 @@
+-module(gleam@bytes_builder).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([append_builder/2, prepend_builder/2, concat/1, new/0, from_string/1, prepend_string/2, append_string/2, from_string_builder/1, from_bit_array/1, prepend/2, append/2, concat_bit_arrays/1, to_bit_array/1, byte_size/1]).
+-export_type([bytes_builder/0]).
+
+-opaque bytes_builder() :: {bytes, bitstring()} |
+ {text, gleam@string_builder:string_builder()} |
+ {many, list(bytes_builder())}.
+
+-spec append_builder(bytes_builder(), bytes_builder()) -> bytes_builder().
+append_builder(First, Second) ->
+ gleam_stdlib:iodata_append(First, Second).
+
+-spec prepend_builder(bytes_builder(), bytes_builder()) -> bytes_builder().
+prepend_builder(Second, First) ->
+ gleam_stdlib:iodata_append(First, Second).
+
+-spec concat(list(bytes_builder())) -> bytes_builder().
+concat(Builders) ->
+ gleam_stdlib:identity(Builders).
+
+-spec new() -> bytes_builder().
+new() ->
+ gleam_stdlib:identity([]).
+
+-spec from_string(binary()) -> bytes_builder().
+from_string(String) ->
+ gleam_stdlib:wrap_list(String).
+
+-spec prepend_string(bytes_builder(), binary()) -> bytes_builder().
+prepend_string(Second, First) ->
+ gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second).
+
+-spec append_string(bytes_builder(), binary()) -> bytes_builder().
+append_string(First, Second) ->
+ gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)).
+
+-spec from_string_builder(gleam@string_builder:string_builder()) -> bytes_builder().
+from_string_builder(Builder) ->
+ gleam_stdlib:wrap_list(Builder).
+
+-spec from_bit_array(bitstring()) -> bytes_builder().
+from_bit_array(Bits) ->
+ gleam_stdlib:wrap_list(Bits).
+
+-spec prepend(bytes_builder(), bitstring()) -> bytes_builder().
+prepend(Second, First) ->
+ gleam_stdlib:iodata_append(gleam_stdlib:wrap_list(First), Second).
+
+-spec append(bytes_builder(), bitstring()) -> bytes_builder().
+append(First, Second) ->
+ gleam_stdlib:iodata_append(First, gleam_stdlib:wrap_list(Second)).
+
+-spec concat_bit_arrays(list(bitstring())) -> bytes_builder().
+concat_bit_arrays(Bits) ->
+ gleam_stdlib:identity(Bits).
+
+-spec to_list(list(list(bytes_builder())), list(bitstring())) -> list(bitstring()).
+to_list(Stack, Acc) ->
+ case Stack of
+ [] ->
+ Acc;
+
+ [[] | Remaining_stack] ->
+ to_list(Remaining_stack, Acc);
+
+ [[{bytes, Bits} | Rest] | Remaining_stack@1] ->
+ to_list([Rest | Remaining_stack@1], [Bits | Acc]);
+
+ [[{text, Builder} | Rest@1] | Remaining_stack@2] ->
+ Bits@1 = gleam_stdlib:identity(
+ gleam@string_builder:to_string(Builder)
+ ),
+ to_list([Rest@1 | Remaining_stack@2], [Bits@1 | Acc]);
+
+ [[{many, Builders} | Rest@2] | Remaining_stack@3] ->
+ to_list([Builders, Rest@2 | Remaining_stack@3], Acc)
+ end.
+
+-spec to_bit_array(bytes_builder()) -> bitstring().
+to_bit_array(Builder) ->
+ erlang:list_to_bitstring(Builder).
+
+-spec byte_size(bytes_builder()) -> integer().
+byte_size(Builder) ->
+ erlang:iolist_size(Builder).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl
new file mode 100644
index 0000000..44b89ea
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@dict.erl
@@ -0,0 +1,97 @@
+-module(gleam@dict).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
+-export_type([dict/2]).
+
+-type dict(KS, KT) :: any() | {gleam_phantom, KS, KT}.
+
+-spec size(dict(any(), any())) -> integer().
+size(Dict) ->
+ maps:size(Dict).
+
+-spec to_list(dict(LC, LD)) -> list({LC, LD}).
+to_list(Dict) ->
+ maps:to_list(Dict).
+
+-spec from_list(list({LM, LN})) -> dict(LM, LN).
+from_list(List) ->
+ maps:from_list(List).
+
+-spec has_key(dict(LW, any()), LW) -> boolean().
+has_key(Dict, Key) ->
+ maps:is_key(Key, Dict).
+
+-spec new() -> dict(any(), any()).
+new() ->
+ maps:new().
+
+-spec get(dict(MM, MN), MM) -> {ok, MN} | {error, nil}.
+get(From, Get) ->
+ gleam_stdlib:map_get(From, Get).
+
+-spec insert(dict(MY, MZ), MY, MZ) -> dict(MY, MZ).
+insert(Dict, Key, Value) ->
+ maps:put(Key, Value, Dict).
+
+-spec map_values(dict(NK, NL), fun((NK, NL) -> NO)) -> dict(NK, NO).
+map_values(Dict, Fun) ->
+ maps:map(Fun, Dict).
+
+-spec keys(dict(NY, any())) -> list(NY).
+keys(Dict) ->
+ maps:keys(Dict).
+
+-spec values(dict(any(), OJ)) -> list(OJ).
+values(Dict) ->
+ maps:values(Dict).
+
+-spec filter(dict(OS, OT), fun((OS, OT) -> boolean())) -> dict(OS, OT).
+filter(Dict, Predicate) ->
+ maps:filter(Predicate, Dict).
+
+-spec take(dict(PE, PF), list(PE)) -> dict(PE, PF).
+take(Dict, Desired_keys) ->
+ maps:with(Desired_keys, Dict).
+
+-spec merge(dict(PS, PT), dict(PS, PT)) -> dict(PS, PT).
+merge(Dict, New_entries) ->
+ maps:merge(Dict, New_entries).
+
+-spec delete(dict(QI, QJ), QI) -> dict(QI, QJ).
+delete(Dict, Key) ->
+ maps:remove(Key, Dict).
+
+-spec drop(dict(QU, QV), list(QU)) -> dict(QU, QV).
+drop(Dict, Disallowed_keys) ->
+ case Disallowed_keys of
+ [] ->
+ Dict;
+
+ [X | Xs] ->
+ drop(delete(Dict, X), Xs)
+ end.
+
+-spec update(dict(RB, RC), RB, fun((gleam@option:option(RC)) -> RC)) -> dict(RB, RC).
+update(Dict, Key, Fun) ->
+ _pipe = Dict,
+ _pipe@1 = get(_pipe, Key),
+ _pipe@2 = gleam@option:from_result(_pipe@1),
+ _pipe@3 = Fun(_pipe@2),
+ insert(Dict, Key, _pipe@3).
+
+-spec do_fold(list({RI, RJ}), RL, fun((RL, RI, RJ) -> RL)) -> RL.
+do_fold(List, Initial, Fun) ->
+ case List of
+ [] ->
+ Initial;
+
+ [{K, V} | Rest] ->
+ do_fold(Rest, Fun(Initial, K, V), Fun)
+ end.
+
+-spec fold(dict(RM, RN), RQ, fun((RQ, RM, RN) -> RQ)) -> RQ.
+fold(Dict, Initial, Fun) ->
+ _pipe = Dict,
+ _pipe@1 = to_list(_pipe),
+ do_fold(_pipe@1, Initial, Fun).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl
new file mode 100644
index 0000000..38f4b4e
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@dynamic.erl
@@ -0,0 +1,808 @@
+-module(gleam@dynamic).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([from/1, unsafe_coerce/1, dynamic/1, bit_array/1, bit_string/1, classify/1, int/1, float/1, bool/1, shallow_list/1, optional/1, any/1, decode1/2, result/2, list/1, string/1, field/2, optional_field/2, element/2, tuple2/2, tuple3/3, tuple4/4, tuple5/5, tuple6/6, dict/2, map/2, decode2/3, decode3/4, decode4/5, decode5/6, decode6/7, decode7/8, decode8/9, decode9/10]).
+-export_type([dynamic_/0, decode_error/0, unknown_tuple/0]).
+
+-type dynamic_() :: any().
+
+-type decode_error() :: {decode_error, binary(), binary(), list(binary())}.
+
+-type unknown_tuple() :: any().
+
+-spec from(any()) -> dynamic_().
+from(A) ->
+ gleam_stdlib:identity(A).
+
+-spec unsafe_coerce(dynamic_()) -> any().
+unsafe_coerce(A) ->
+ gleam_stdlib:identity(A).
+
+-spec dynamic(dynamic_()) -> {ok, dynamic_()} | {error, list(decode_error())}.
+dynamic(Value) ->
+ {ok, Value}.
+
+-spec bit_array(dynamic_()) -> {ok, bitstring()} | {error, list(decode_error())}.
+bit_array(Data) ->
+ gleam_stdlib:decode_bit_array(Data).
+
+-spec bit_string(dynamic_()) -> {ok, bitstring()} |
+ {error, list(decode_error())}.
+bit_string(Data) ->
+ bit_array(Data).
+
+-spec put_expected(decode_error(), binary()) -> decode_error().
+put_expected(Error, Expected) ->
+ erlang:setelement(2, Error, Expected).
+
+-spec classify(dynamic_()) -> binary().
+classify(Data) ->
+ gleam_stdlib:classify_dynamic(Data).
+
+-spec int(dynamic_()) -> {ok, integer()} | {error, list(decode_error())}.
+int(Data) ->
+ gleam_stdlib:decode_int(Data).
+
+-spec float(dynamic_()) -> {ok, float()} | {error, list(decode_error())}.
+float(Data) ->
+ gleam_stdlib:decode_float(Data).
+
+-spec bool(dynamic_()) -> {ok, boolean()} | {error, list(decode_error())}.
+bool(Data) ->
+ gleam_stdlib:decode_bool(Data).
+
+-spec shallow_list(dynamic_()) -> {ok, list(dynamic_())} |
+ {error, list(decode_error())}.
+shallow_list(Value) ->
+ gleam_stdlib:decode_list(Value).
+
+-spec optional(fun((dynamic_()) -> {ok, DZX} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok,
+ gleam@option:option(DZX)} |
+ {error, list(decode_error())}).
+optional(Decode) ->
+ fun(Value) -> gleam_stdlib:decode_option(Value, Decode) end.
+
+-spec at_least_decode_tuple_error(integer(), dynamic_()) -> {ok, any()} |
+ {error, list(decode_error())}.
+at_least_decode_tuple_error(Size, Data) ->
+ S = case Size of
+ 1 ->
+ <<""/utf8>>;
+
+ _ ->
+ <<"s"/utf8>>
+ end,
+ Error = begin
+ _pipe = [<<"Tuple of at least "/utf8>>,
+ gleam@int:to_string(Size),
+ <<" element"/utf8>>,
+ S],
+ _pipe@1 = gleam@string_builder:from_strings(_pipe),
+ _pipe@2 = gleam@string_builder:to_string(_pipe@1),
+ {decode_error, _pipe@2, classify(Data), []}
+ end,
+ {error, [Error]}.
+
+-spec any(list(fun((dynamic_()) -> {ok, EEE} | {error, list(decode_error())}))) -> fun((dynamic_()) -> {ok,
+ EEE} |
+ {error, list(decode_error())}).
+any(Decoders) ->
+ fun(Data) -> case Decoders of
+ [] ->
+ {error,
+ [{decode_error, <<"another type"/utf8>>, classify(Data), []}]};
+
+ [Decoder | Decoders@1] ->
+ case Decoder(Data) of
+ {ok, Decoded} ->
+ {ok, Decoded};
+
+ {error, _} ->
+ (any(Decoders@1))(Data)
+ end
+ end end.
+
+-spec all_errors({ok, any()} | {error, list(decode_error())}) -> list(decode_error()).
+all_errors(Result) ->
+ case Result of
+ {ok, _} ->
+ [];
+
+ {error, Errors} ->
+ Errors
+ end.
+
+-spec decode1(
+ fun((EEI) -> EEJ),
+ fun((dynamic_()) -> {ok, EEI} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EEJ} | {error, list(decode_error())}).
+decode1(Constructor, T1) ->
+ fun(Value) -> case T1(Value) of
+ {ok, A} ->
+ {ok, Constructor(A)};
+
+ A@1 ->
+ {error, all_errors(A@1)}
+ end end.
+
+-spec push_path(decode_error(), any()) -> decode_error().
+push_path(Error, Name) ->
+ Name@1 = from(Name),
+ Decoder = any(
+ [fun string/1,
+ fun(X) -> gleam@result:map(int(X), fun gleam@int:to_string/1) end]
+ ),
+ Name@3 = case Decoder(Name@1) of
+ {ok, Name@2} ->
+ Name@2;
+
+ {error, _} ->
+ _pipe = [<<"<"/utf8>>, classify(Name@1), <<">"/utf8>>],
+ _pipe@1 = gleam@string_builder:from_strings(_pipe),
+ gleam@string_builder:to_string(_pipe@1)
+ end,
+ erlang:setelement(4, Error, [Name@3 | erlang:element(4, Error)]).
+
+-spec result(
+ fun((dynamic_()) -> {ok, DZL} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, DZN} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {ok, DZL} | {error, DZN}} |
+ {error, list(decode_error())}).
+result(Decode_ok, Decode_error) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_result(Value),
+ fun(Inner_result) -> case Inner_result of
+ {ok, Raw} ->
+ gleam@result:'try'(
+ begin
+ _pipe = Decode_ok(Raw),
+ map_errors(
+ _pipe,
+ fun(_capture) ->
+ push_path(_capture, <<"ok"/utf8>>)
+ end
+ )
+ end,
+ fun(Value@1) -> {ok, {ok, Value@1}} end
+ );
+
+ {error, Raw@1} ->
+ gleam@result:'try'(
+ begin
+ _pipe@1 = Decode_error(Raw@1),
+ map_errors(
+ _pipe@1,
+ fun(_capture@1) ->
+ push_path(_capture@1, <<"error"/utf8>>)
+ end
+ )
+ end,
+ fun(Value@2) -> {ok, {error, Value@2}} end
+ )
+ end end
+ )
+ end.
+
+-spec list(fun((dynamic_()) -> {ok, DZS} | {error, list(decode_error())})) -> fun((dynamic_()) -> {ok,
+ list(DZS)} |
+ {error, list(decode_error())}).
+list(Decoder_type) ->
+ fun(Dynamic) ->
+ gleam@result:'try'(shallow_list(Dynamic), fun(List) -> _pipe = List,
+ _pipe@1 = gleam@list:try_map(_pipe, Decoder_type),
+ map_errors(
+ _pipe@1,
+ fun(_capture) -> push_path(_capture, <<"*"/utf8>>) end
+ ) end)
+ end.
+
+-spec map_errors(
+ {ok, DYG} | {error, list(decode_error())},
+ fun((decode_error()) -> decode_error())
+) -> {ok, DYG} | {error, list(decode_error())}.
+map_errors(Result, F) ->
+ gleam@result:map_error(
+ Result,
+ fun(_capture) -> gleam@list:map(_capture, F) end
+ ).
+
+-spec decode_string(dynamic_()) -> {ok, binary()} |
+ {error, list(decode_error())}.
+decode_string(Data) ->
+ _pipe = bit_array(Data),
+ _pipe@1 = map_errors(
+ _pipe,
+ fun(_capture) -> put_expected(_capture, <<"String"/utf8>>) end
+ ),
+ gleam@result:'try'(
+ _pipe@1,
+ fun(Raw) -> case gleam@bit_array:to_string(Raw) of
+ {ok, String} ->
+ {ok, String};
+
+ {error, nil} ->
+ {error,
+ [{decode_error,
+ <<"String"/utf8>>,
+ <<"BitArray"/utf8>>,
+ []}]}
+ end end
+ ).
+
+-spec string(dynamic_()) -> {ok, binary()} | {error, list(decode_error())}.
+string(Data) ->
+ decode_string(Data).
+
+-spec field(
+ any(),
+ fun((dynamic_()) -> {ok, EAH} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EAH} | {error, list(decode_error())}).
+field(Name, Inner_type) ->
+ fun(Value) ->
+ Missing_field_error = {decode_error,
+ <<"field"/utf8>>,
+ <<"nothing"/utf8>>,
+ []},
+ gleam@result:'try'(
+ gleam_stdlib:decode_field(Value, Name),
+ fun(Maybe_inner) -> _pipe = Maybe_inner,
+ _pipe@1 = gleam@option:to_result(_pipe, [Missing_field_error]),
+ _pipe@2 = gleam@result:'try'(_pipe@1, Inner_type),
+ map_errors(
+ _pipe@2,
+ fun(_capture) -> push_path(_capture, Name) end
+ ) end
+ )
+ end.
+
+-spec optional_field(
+ any(),
+ fun((dynamic_()) -> {ok, EAL} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, gleam@option:option(EAL)} |
+ {error, list(decode_error())}).
+optional_field(Name, Inner_type) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_field(Value, Name),
+ fun(Maybe_inner) -> case Maybe_inner of
+ none ->
+ {ok, none};
+
+ {some, Dynamic_inner} ->
+ _pipe = Dynamic_inner,
+ _pipe@1 = gleam_stdlib:decode_option(_pipe, Inner_type),
+ map_errors(
+ _pipe@1,
+ fun(_capture) -> push_path(_capture, Name) end
+ )
+ end end
+ )
+ end.
+
+-spec element(
+ integer(),
+ fun((dynamic_()) -> {ok, EAT} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EAT} | {error, list(decode_error())}).
+element(Index, Inner_type) ->
+ fun(Data) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple(Data),
+ fun(Tuple) ->
+ Size = gleam_stdlib:size_of_tuple(Tuple),
+ gleam@result:'try'(case Index >= 0 of
+ true ->
+ case Index < Size of
+ true ->
+ gleam_stdlib:tuple_get(Tuple, Index);
+
+ false ->
+ at_least_decode_tuple_error(Index + 1, Data)
+ end;
+
+ false ->
+ case gleam@int:absolute_value(Index) =< Size of
+ true ->
+ gleam_stdlib:tuple_get(Tuple, Size + Index);
+
+ false ->
+ at_least_decode_tuple_error(
+ gleam@int:absolute_value(Index),
+ Data
+ )
+ end
+ end, fun(Data@1) -> _pipe = Inner_type(Data@1),
+ map_errors(
+ _pipe,
+ fun(_capture) -> push_path(_capture, Index) end
+ ) end)
+ end
+ )
+ end.
+
+-spec tuple_errors({ok, any()} | {error, list(decode_error())}, binary()) -> list(decode_error()).
+tuple_errors(Result, Name) ->
+ case Result of
+ {ok, _} ->
+ [];
+
+ {error, Errors} ->
+ gleam@list:map(
+ Errors,
+ fun(_capture) -> push_path(_capture, Name) end
+ )
+ end.
+
+-spec tuple2(
+ fun((dynamic_()) -> {ok, EBT} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EBV} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {EBT, EBV}} | {error, list(decode_error())}).
+tuple2(Decode1, Decode2) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple2(Value),
+ fun(_use0) ->
+ {A, B} = _use0,
+ case {Decode1(A), Decode2(B)} of
+ {{ok, A@1}, {ok, B@1}} ->
+ {ok, {A@1, B@1}};
+
+ {A@2, B@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ {error, _pipe@1}
+ end
+ end
+ )
+ end.
+
+-spec tuple3(
+ fun((dynamic_()) -> {ok, EBY} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECC} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {EBY, ECA, ECC}} | {error, list(decode_error())}).
+tuple3(Decode1, Decode2, Decode3) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple3(Value),
+ fun(_use0) ->
+ {A, B, C} = _use0,
+ case {Decode1(A), Decode2(B), Decode3(C)} of
+ {{ok, A@1}, {ok, B@1}, {ok, C@1}} ->
+ {ok, {A@1, B@1, C@1}};
+
+ {A@2, B@2, C@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ {error, _pipe@2}
+ end
+ end
+ )
+ end.
+
+-spec tuple4(
+ fun((dynamic_()) -> {ok, ECF} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECH} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECJ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECL} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {ECF, ECH, ECJ, ECL}} |
+ {error, list(decode_error())}).
+tuple4(Decode1, Decode2, Decode3, Decode4) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple4(Value),
+ fun(_use0) ->
+ {A, B, C, D} = _use0,
+ case {Decode1(A), Decode2(B), Decode3(C), Decode4(D)} of
+ {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}} ->
+ {ok, {A@1, B@1, C@1, D@1}};
+
+ {A@2, B@2, C@2, D@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ _pipe@3 = gleam@list:append(
+ _pipe@2,
+ tuple_errors(D@2, <<"3"/utf8>>)
+ ),
+ {error, _pipe@3}
+ end
+ end
+ )
+ end.
+
+-spec tuple5(
+ fun((dynamic_()) -> {ok, ECO} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECQ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECS} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECU} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, ECW} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {ECO, ECQ, ECS, ECU, ECW}} |
+ {error, list(decode_error())}).
+tuple5(Decode1, Decode2, Decode3, Decode4, Decode5) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple5(Value),
+ fun(_use0) ->
+ {A, B, C, D, E} = _use0,
+ case {Decode1(A),
+ Decode2(B),
+ Decode3(C),
+ Decode4(D),
+ Decode5(E)} of
+ {{ok, A@1}, {ok, B@1}, {ok, C@1}, {ok, D@1}, {ok, E@1}} ->
+ {ok, {A@1, B@1, C@1, D@1, E@1}};
+
+ {A@2, B@2, C@2, D@2, E@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ _pipe@3 = gleam@list:append(
+ _pipe@2,
+ tuple_errors(D@2, <<"3"/utf8>>)
+ ),
+ _pipe@4 = gleam@list:append(
+ _pipe@3,
+ tuple_errors(E@2, <<"4"/utf8>>)
+ ),
+ {error, _pipe@4}
+ end
+ end
+ )
+ end.
+
+-spec tuple6(
+ fun((dynamic_()) -> {ok, ECZ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDD} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDF} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDH} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDJ} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, {ECZ, EDB, EDD, EDF, EDH, EDJ}} |
+ {error, list(decode_error())}).
+tuple6(Decode1, Decode2, Decode3, Decode4, Decode5, Decode6) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_tuple6(Value),
+ fun(_use0) ->
+ {A, B, C, D, E, F} = _use0,
+ case {Decode1(A),
+ Decode2(B),
+ Decode3(C),
+ Decode4(D),
+ Decode5(E),
+ Decode6(F)} of
+ {{ok, A@1},
+ {ok, B@1},
+ {ok, C@1},
+ {ok, D@1},
+ {ok, E@1},
+ {ok, F@1}} ->
+ {ok, {A@1, B@1, C@1, D@1, E@1, F@1}};
+
+ {A@2, B@2, C@2, D@2, E@2, F@2} ->
+ _pipe = tuple_errors(A@2, <<"0"/utf8>>),
+ _pipe@1 = gleam@list:append(
+ _pipe,
+ tuple_errors(B@2, <<"1"/utf8>>)
+ ),
+ _pipe@2 = gleam@list:append(
+ _pipe@1,
+ tuple_errors(C@2, <<"2"/utf8>>)
+ ),
+ _pipe@3 = gleam@list:append(
+ _pipe@2,
+ tuple_errors(D@2, <<"3"/utf8>>)
+ ),
+ _pipe@4 = gleam@list:append(
+ _pipe@3,
+ tuple_errors(E@2, <<"4"/utf8>>)
+ ),
+ _pipe@5 = gleam@list:append(
+ _pipe@4,
+ tuple_errors(F@2, <<"5"/utf8>>)
+ ),
+ {error, _pipe@5}
+ end
+ end
+ )
+ end.
+
+-spec dict(
+ fun((dynamic_()) -> {ok, EDM} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDO} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, gleam@dict:dict(EDM, EDO)} |
+ {error, list(decode_error())}).
+dict(Key_type, Value_type) ->
+ fun(Value) ->
+ gleam@result:'try'(
+ gleam_stdlib:decode_map(Value),
+ fun(Map) ->
+ gleam@result:'try'(
+ begin
+ _pipe = Map,
+ _pipe@1 = gleam@dict:to_list(_pipe),
+ gleam@list:try_map(
+ _pipe@1,
+ fun(Pair) ->
+ {K, V} = Pair,
+ gleam@result:'try'(
+ begin
+ _pipe@2 = Key_type(K),
+ map_errors(
+ _pipe@2,
+ fun(_capture) ->
+ push_path(
+ _capture,
+ <<"keys"/utf8>>
+ )
+ end
+ )
+ end,
+ fun(K@1) ->
+ gleam@result:'try'(
+ begin
+ _pipe@3 = Value_type(V),
+ map_errors(
+ _pipe@3,
+ fun(_capture@1) ->
+ push_path(
+ _capture@1,
+ <<"values"/utf8>>
+ )
+ end
+ )
+ end,
+ fun(V@1) -> {ok, {K@1, V@1}} end
+ )
+ end
+ )
+ end
+ )
+ end,
+ fun(Pairs) -> {ok, gleam@dict:from_list(Pairs)} end
+ )
+ end
+ )
+ end.
+
+-spec map(
+ fun((dynamic_()) -> {ok, EDT} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EDV} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, gleam@dict:dict(EDT, EDV)} |
+ {error, list(decode_error())}).
+map(Key_type, Value_type) ->
+ dict(Key_type, Value_type).
+
+-spec decode2(
+ fun((EEM, EEN) -> EEO),
+ fun((dynamic_()) -> {ok, EEM} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EEN} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EEO} | {error, list(decode_error())}).
+decode2(Constructor, T1, T2) ->
+ fun(Value) -> case {T1(Value), T2(Value)} of
+ {{ok, A}, {ok, B}} ->
+ {ok, Constructor(A, B)};
+
+ {A@1, B@1} ->
+ {error, gleam@list:concat([all_errors(A@1), all_errors(B@1)])}
+ end end.
+
+-spec decode3(
+ fun((EES, EET, EEU) -> EEV),
+ fun((dynamic_()) -> {ok, EES} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EET} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EEU} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EEV} | {error, list(decode_error())}).
+decode3(Constructor, T1, T2, T3) ->
+ fun(Value) -> case {T1(Value), T2(Value), T3(Value)} of
+ {{ok, A}, {ok, B}, {ok, C}} ->
+ {ok, Constructor(A, B, C)};
+
+ {A@1, B@1, C@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1), all_errors(B@1), all_errors(C@1)]
+ )}
+ end end.
+
+-spec decode4(
+ fun((EFA, EFB, EFC, EFD) -> EFE),
+ fun((dynamic_()) -> {ok, EFA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFC} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFD} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EFE} | {error, list(decode_error())}).
+decode4(Constructor, T1, T2, T3, T4) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}} ->
+ {ok, Constructor(A, B, C, D)};
+
+ {A@1, B@1, C@1, D@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1)]
+ )}
+ end end.
+
+-spec decode5(
+ fun((EFK, EFL, EFM, EFN, EFO) -> EFP),
+ fun((dynamic_()) -> {ok, EFK} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFL} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFM} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFN} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFO} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EFP} | {error, list(decode_error())}).
+decode5(Constructor, T1, T2, T3, T4, T5) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}} ->
+ {ok, Constructor(A, B, C, D, E)};
+
+ {A@1, B@1, C@1, D@1, E@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1)]
+ )}
+ end end.
+
+-spec decode6(
+ fun((EFW, EFX, EFY, EFZ, EGA, EGB) -> EGC),
+ fun((dynamic_()) -> {ok, EFW} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFX} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFY} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EFZ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGB} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EGC} | {error, list(decode_error())}).
+decode6(Constructor, T1, T2, T3, T4, T5, T6) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}} ->
+ {ok, Constructor(A, B, C, D, E, F)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1)]
+ )}
+ end end.
+
+-spec decode7(
+ fun((EGK, EGL, EGM, EGN, EGO, EGP, EGQ) -> EGR),
+ fun((dynamic_()) -> {ok, EGK} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGL} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGM} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGN} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGO} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGP} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EGQ} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EGR} | {error, list(decode_error())}).
+decode7(Constructor, T1, T2, T3, T4, T5, T6, T7) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X)} of
+ {{ok, A}, {ok, B}, {ok, C}, {ok, D}, {ok, E}, {ok, F}, {ok, G}} ->
+ {ok, Constructor(A, B, C, D, E, F, G)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1, G@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1),
+ all_errors(G@1)]
+ )}
+ end end.
+
+-spec decode8(
+ fun((EHA, EHB, EHC, EHD, EHE, EHF, EHG, EHH) -> EHI),
+ fun((dynamic_()) -> {ok, EHA} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHB} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHC} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHD} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHE} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHF} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHG} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHH} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EHI} | {error, list(decode_error())}).
+decode8(Constructor, T1, T2, T3, T4, T5, T6, T7, T8) ->
+ fun(X) -> case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X)} of
+ {{ok, A},
+ {ok, B},
+ {ok, C},
+ {ok, D},
+ {ok, E},
+ {ok, F},
+ {ok, G},
+ {ok, H}} ->
+ {ok, Constructor(A, B, C, D, E, F, G, H)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1),
+ all_errors(G@1),
+ all_errors(H@1)]
+ )}
+ end end.
+
+-spec decode9(
+ fun((EHS, EHT, EHU, EHV, EHW, EHX, EHY, EHZ, EIA) -> EIB),
+ fun((dynamic_()) -> {ok, EHS} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHT} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHU} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHV} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHW} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHX} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHY} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EHZ} | {error, list(decode_error())}),
+ fun((dynamic_()) -> {ok, EIA} | {error, list(decode_error())})
+) -> fun((dynamic_()) -> {ok, EIB} | {error, list(decode_error())}).
+decode9(Constructor, T1, T2, T3, T4, T5, T6, T7, T8, T9) ->
+ fun(X) ->
+ case {T1(X), T2(X), T3(X), T4(X), T5(X), T6(X), T7(X), T8(X), T9(X)} of
+ {{ok, A},
+ {ok, B},
+ {ok, C},
+ {ok, D},
+ {ok, E},
+ {ok, F},
+ {ok, G},
+ {ok, H},
+ {ok, I}} ->
+ {ok, Constructor(A, B, C, D, E, F, G, H, I)};
+
+ {A@1, B@1, C@1, D@1, E@1, F@1, G@1, H@1, I@1} ->
+ {error,
+ gleam@list:concat(
+ [all_errors(A@1),
+ all_errors(B@1),
+ all_errors(C@1),
+ all_errors(D@1),
+ all_errors(E@1),
+ all_errors(F@1),
+ all_errors(G@1),
+ all_errors(H@1),
+ all_errors(I@1)]
+ )}
+ end
+ end.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl
new file mode 100644
index 0000000..33b3d4a
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@float.erl
@@ -0,0 +1,181 @@
+-module(gleam@float).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([parse/1, to_string/1, compare/2, min/2, max/2, clamp/3, ceiling/1, floor/1, round/1, truncate/1, absolute_value/1, loosely_compare/3, loosely_equals/3, power/2, square_root/1, negate/1, sum/1, product/1, random/2, divide/2, add/2, multiply/2, subtract/2]).
+
+-spec parse(binary()) -> {ok, float()} | {error, nil}.
+parse(String) ->
+ gleam_stdlib:parse_float(String).
+
+-spec to_string(float()) -> binary().
+to_string(X) ->
+ gleam_stdlib:float_to_string(X).
+
+-spec compare(float(), float()) -> gleam@order:order().
+compare(A, B) ->
+ case A =:= B of
+ true ->
+ eq;
+
+ false ->
+ case A < B of
+ true ->
+ lt;
+
+ false ->
+ gt
+ end
+ end.
+
+-spec min(float(), float()) -> float().
+min(A, B) ->
+ case A < B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec max(float(), float()) -> float().
+max(A, B) ->
+ case A > B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec clamp(float(), float(), float()) -> float().
+clamp(X, Min_bound, Max_bound) ->
+ _pipe = X,
+ _pipe@1 = min(_pipe, Max_bound),
+ max(_pipe@1, Min_bound).
+
+-spec ceiling(float()) -> float().
+ceiling(X) ->
+ math:ceil(X).
+
+-spec floor(float()) -> float().
+floor(X) ->
+ math:floor(X).
+
+-spec round(float()) -> integer().
+round(X) ->
+ erlang:round(X).
+
+-spec truncate(float()) -> integer().
+truncate(X) ->
+ erlang:trunc(X).
+
+-spec absolute_value(float()) -> float().
+absolute_value(X) ->
+ case X >= +0.0 of
+ true ->
+ X;
+
+ _ ->
+ +0.0 - X
+ end.
+
+-spec loosely_compare(float(), float(), float()) -> gleam@order:order().
+loosely_compare(A, B, Tolerance) ->
+ Difference = absolute_value(A - B),
+ case Difference =< Tolerance of
+ true ->
+ eq;
+
+ false ->
+ compare(A, B)
+ end.
+
+-spec loosely_equals(float(), float(), float()) -> boolean().
+loosely_equals(A, B, Tolerance) ->
+ Difference = absolute_value(A - B),
+ Difference =< Tolerance.
+
+-spec power(float(), float()) -> {ok, float()} | {error, nil}.
+power(Base, Exponent) ->
+ Fractional = (ceiling(Exponent) - Exponent) > +0.0,
+ case ((Base < +0.0) andalso Fractional) orelse ((Base =:= +0.0) andalso (Exponent
+ < +0.0)) of
+ true ->
+ {error, nil};
+
+ false ->
+ {ok, math:pow(Base, Exponent)}
+ end.
+
+-spec square_root(float()) -> {ok, float()} | {error, nil}.
+square_root(X) ->
+ power(X, 0.5).
+
+-spec negate(float()) -> float().
+negate(X) ->
+ -1.0 * X.
+
+-spec do_sum(list(float()), float()) -> float().
+do_sum(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_sum(Rest, X + Initial)
+ end.
+
+-spec sum(list(float())) -> float().
+sum(Numbers) ->
+ _pipe = Numbers,
+ do_sum(_pipe, +0.0).
+
+-spec do_product(list(float()), float()) -> float().
+do_product(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_product(Rest, X * Initial)
+ end.
+
+-spec product(list(float())) -> float().
+product(Numbers) ->
+ case Numbers of
+ [] ->
+ 1.0;
+
+ _ ->
+ do_product(Numbers, 1.0)
+ end.
+
+-spec random(float(), float()) -> float().
+random(Min, Max) ->
+ (rand:uniform() * (Max - Min)) + Min.
+
+-spec divide(float(), float()) -> {ok, float()} | {error, nil}.
+divide(A, B) ->
+ case B of
+ +0.0 ->
+ {error, nil};
+
+ B@1 ->
+ {ok, case B@1 of
+ +0.0 -> +0.0;
+ -0.0 -> -0.0;
+ Gleam@denominator -> A / Gleam@denominator
+ end}
+ end.
+
+-spec add(float(), float()) -> float().
+add(A, B) ->
+ A + B.
+
+-spec multiply(float(), float()) -> float().
+multiply(A, B) ->
+ A * B.
+
+-spec subtract(float(), float()) -> float().
+subtract(A, B) ->
+ A - B.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl
new file mode 100644
index 0000000..3496318
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@function.erl
@@ -0,0 +1,67 @@
+-module(gleam@function).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([compose/2, curry2/1, curry3/1, curry4/1, curry5/1, curry6/1, flip/1, identity/1, constant/1, tap/2, apply1/2, apply2/3, apply3/4]).
+
+-spec compose(fun((DOO) -> DOP), fun((DOP) -> DOQ)) -> fun((DOO) -> DOQ).
+compose(Fun1, Fun2) ->
+ fun(A) -> Fun2(Fun1(A)) end.
+
+-spec curry2(fun((DOR, DOS) -> DOT)) -> fun((DOR) -> fun((DOS) -> DOT)).
+curry2(Fun) ->
+ fun(A) -> fun(B) -> Fun(A, B) end end.
+
+-spec curry3(fun((DOV, DOW, DOX) -> DOY)) -> fun((DOV) -> fun((DOW) -> fun((DOX) -> DOY))).
+curry3(Fun) ->
+ fun(A) -> fun(B) -> fun(C) -> Fun(A, B, C) end end end.
+
+-spec curry4(fun((DPA, DPB, DPC, DPD) -> DPE)) -> fun((DPA) -> fun((DPB) -> fun((DPC) -> fun((DPD) -> DPE)))).
+curry4(Fun) ->
+ fun(A) -> fun(B) -> fun(C) -> fun(D) -> Fun(A, B, C, D) end end end end.
+
+-spec curry5(fun((DPG, DPH, DPI, DPJ, DPK) -> DPL)) -> fun((DPG) -> fun((DPH) -> fun((DPI) -> fun((DPJ) -> fun((DPK) -> DPL))))).
+curry5(Fun) ->
+ fun(A) ->
+ fun(B) ->
+ fun(C) -> fun(D) -> fun(E) -> Fun(A, B, C, D, E) end end end
+ end
+ end.
+
+-spec curry6(fun((DPN, DPO, DPP, DPQ, DPR, DPS) -> DPT)) -> fun((DPN) -> fun((DPO) -> fun((DPP) -> fun((DPQ) -> fun((DPR) -> fun((DPS) -> DPT)))))).
+curry6(Fun) ->
+ fun(A) ->
+ fun(B) ->
+ fun(C) ->
+ fun(D) -> fun(E) -> fun(F) -> Fun(A, B, C, D, E, F) end end end
+ end
+ end
+ end.
+
+-spec flip(fun((DPV, DPW) -> DPX)) -> fun((DPW, DPV) -> DPX).
+flip(Fun) ->
+ fun(B, A) -> Fun(A, B) end.
+
+-spec identity(DPY) -> DPY.
+identity(X) ->
+ X.
+
+-spec constant(DPZ) -> fun((any()) -> DPZ).
+constant(Value) ->
+ fun(_) -> Value end.
+
+-spec tap(DQB, fun((DQB) -> any())) -> DQB.
+tap(Arg, Effect) ->
+ Effect(Arg),
+ Arg.
+
+-spec apply1(fun((DQD) -> DQE), DQD) -> DQE.
+apply1(Fun, Arg1) ->
+ Fun(Arg1).
+
+-spec apply2(fun((DQF, DQG) -> DQH), DQF, DQG) -> DQH.
+apply2(Fun, Arg1, Arg2) ->
+ Fun(Arg1, Arg2).
+
+-spec apply3(fun((DQI, DQJ, DQK) -> DQL), DQI, DQJ, DQK) -> DQL.
+apply3(Fun, Arg1, Arg2, Arg3) ->
+ Fun(Arg1, Arg2, Arg3).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl
new file mode 100644
index 0000000..2a5dd2c
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@int.erl
@@ -0,0 +1,332 @@
+-module(gleam@int).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([absolute_value/1, parse/1, base_parse/2, to_string/1, to_base_string/2, to_base2/1, to_base8/1, to_base16/1, to_base36/1, to_float/1, power/2, square_root/1, compare/2, min/2, max/2, clamp/3, is_even/1, is_odd/1, negate/1, sum/1, product/1, digits/2, undigits/2, random/2, divide/2, remainder/2, modulo/2, floor_divide/2, add/2, multiply/2, subtract/2, bitwise_and/2, bitwise_not/1, bitwise_or/2, bitwise_exclusive_or/2, bitwise_shift_left/2, bitwise_shift_right/2]).
+-export_type([invalid_base/0]).
+
+-type invalid_base() :: invalid_base.
+
+-spec absolute_value(integer()) -> integer().
+absolute_value(X) ->
+ case X >= 0 of
+ true ->
+ X;
+
+ false ->
+ X * -1
+ end.
+
+-spec parse(binary()) -> {ok, integer()} | {error, nil}.
+parse(String) ->
+ gleam_stdlib:parse_int(String).
+
+-spec base_parse(binary(), integer()) -> {ok, integer()} | {error, nil}.
+base_parse(String, Base) ->
+ case (Base >= 2) andalso (Base =< 36) of
+ true ->
+ gleam_stdlib:int_from_base_string(String, Base);
+
+ false ->
+ {error, nil}
+ end.
+
+-spec to_string(integer()) -> binary().
+to_string(X) ->
+ erlang:integer_to_binary(X).
+
+-spec to_base_string(integer(), integer()) -> {ok, binary()} |
+ {error, invalid_base()}.
+to_base_string(X, Base) ->
+ case (Base >= 2) andalso (Base =< 36) of
+ true ->
+ {ok, erlang:integer_to_binary(X, Base)};
+
+ false ->
+ {error, invalid_base}
+ end.
+
+-spec to_base2(integer()) -> binary().
+to_base2(X) ->
+ erlang:integer_to_binary(X, 2).
+
+-spec to_base8(integer()) -> binary().
+to_base8(X) ->
+ erlang:integer_to_binary(X, 8).
+
+-spec to_base16(integer()) -> binary().
+to_base16(X) ->
+ erlang:integer_to_binary(X, 16).
+
+-spec to_base36(integer()) -> binary().
+to_base36(X) ->
+ erlang:integer_to_binary(X, 36).
+
+-spec to_float(integer()) -> float().
+to_float(X) ->
+ erlang:float(X).
+
+-spec power(integer(), float()) -> {ok, float()} | {error, nil}.
+power(Base, Exponent) ->
+ _pipe = Base,
+ _pipe@1 = to_float(_pipe),
+ gleam@float:power(_pipe@1, Exponent).
+
+-spec square_root(integer()) -> {ok, float()} | {error, nil}.
+square_root(X) ->
+ _pipe = X,
+ _pipe@1 = to_float(_pipe),
+ gleam@float:square_root(_pipe@1).
+
+-spec compare(integer(), integer()) -> gleam@order:order().
+compare(A, B) ->
+ case A =:= B of
+ true ->
+ eq;
+
+ false ->
+ case A < B of
+ true ->
+ lt;
+
+ false ->
+ gt
+ end
+ end.
+
+-spec min(integer(), integer()) -> integer().
+min(A, B) ->
+ case A < B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec max(integer(), integer()) -> integer().
+max(A, B) ->
+ case A > B of
+ true ->
+ A;
+
+ false ->
+ B
+ end.
+
+-spec clamp(integer(), integer(), integer()) -> integer().
+clamp(X, Min_bound, Max_bound) ->
+ _pipe = X,
+ _pipe@1 = min(_pipe, Max_bound),
+ max(_pipe@1, Min_bound).
+
+-spec is_even(integer()) -> boolean().
+is_even(X) ->
+ (X rem 2) =:= 0.
+
+-spec is_odd(integer()) -> boolean().
+is_odd(X) ->
+ (X rem 2) /= 0.
+
+-spec negate(integer()) -> integer().
+negate(X) ->
+ -1 * X.
+
+-spec do_sum(list(integer()), integer()) -> integer().
+do_sum(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_sum(Rest, X + Initial)
+ end.
+
+-spec sum(list(integer())) -> integer().
+sum(Numbers) ->
+ _pipe = Numbers,
+ do_sum(_pipe, 0).
+
+-spec do_product(list(integer()), integer()) -> integer().
+do_product(Numbers, Initial) ->
+ case Numbers of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ do_product(Rest, X * Initial)
+ end.
+
+-spec product(list(integer())) -> integer().
+product(Numbers) ->
+ case Numbers of
+ [] ->
+ 1;
+
+ _ ->
+ do_product(Numbers, 1)
+ end.
+
+-spec do_digits(integer(), integer(), list(integer())) -> list(integer()).
+do_digits(X, Base, Acc) ->
+ case absolute_value(X) < Base of
+ true ->
+ [X | Acc];
+
+ false ->
+ do_digits(case Base of
+ 0 -> 0;
+ Gleam@denominator -> X div Gleam@denominator
+ end, Base, [case Base of
+ 0 -> 0;
+ Gleam@denominator@1 -> X rem Gleam@denominator@1
+ end | Acc])
+ end.
+
+-spec digits(integer(), integer()) -> {ok, list(integer())} |
+ {error, invalid_base()}.
+digits(X, Base) ->
+ case Base < 2 of
+ true ->
+ {error, invalid_base};
+
+ false ->
+ {ok, do_digits(X, Base, [])}
+ end.
+
+-spec do_undigits(list(integer()), integer(), integer()) -> {ok, integer()} |
+ {error, invalid_base()}.
+do_undigits(Numbers, Base, Acc) ->
+ case Numbers of
+ [] ->
+ {ok, Acc};
+
+ [Digit | _] when Digit >= Base ->
+ {error, invalid_base};
+
+ [Digit@1 | Rest] ->
+ do_undigits(Rest, Base, (Acc * Base) + Digit@1)
+ end.
+
+-spec undigits(list(integer()), integer()) -> {ok, integer()} |
+ {error, invalid_base()}.
+undigits(Numbers, Base) ->
+ case Base < 2 of
+ true ->
+ {error, invalid_base};
+
+ false ->
+ do_undigits(Numbers, Base, 0)
+ end.
+
+-spec random(integer(), integer()) -> integer().
+random(Min, Max) ->
+ _pipe = gleam@float:random(to_float(Min), to_float(Max)),
+ _pipe@1 = gleam@float:floor(_pipe),
+ gleam@float:round(_pipe@1).
+
+-spec divide(integer(), integer()) -> {ok, integer()} | {error, nil}.
+divide(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ Divisor@1 ->
+ {ok, case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator -> Dividend div Gleam@denominator
+ end}
+ end.
+
+-spec remainder(integer(), integer()) -> {ok, integer()} | {error, nil}.
+remainder(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ Divisor@1 ->
+ {ok, case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator -> Dividend rem Gleam@denominator
+ end}
+ end.
+
+-spec modulo(integer(), integer()) -> {ok, integer()} | {error, nil}.
+modulo(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ _ ->
+ Remainder = case Divisor of
+ 0 -> 0;
+ Gleam@denominator -> Dividend rem Gleam@denominator
+ end,
+ case (Remainder * Divisor) < 0 of
+ true ->
+ {ok, Remainder + Divisor};
+
+ false ->
+ {ok, Remainder}
+ end
+ end.
+
+-spec floor_divide(integer(), integer()) -> {ok, integer()} | {error, nil}.
+floor_divide(Dividend, Divisor) ->
+ case Divisor of
+ 0 ->
+ {error, nil};
+
+ Divisor@1 ->
+ case ((Dividend * Divisor@1) < 0) andalso ((case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator -> Dividend rem Gleam@denominator
+ end) /= 0) of
+ true ->
+ {ok, (case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator@1 -> Dividend div Gleam@denominator@1
+ end) - 1};
+
+ false ->
+ {ok, case Divisor@1 of
+ 0 -> 0;
+ Gleam@denominator@2 -> Dividend div Gleam@denominator@2
+ end}
+ end
+ end.
+
+-spec add(integer(), integer()) -> integer().
+add(A, B) ->
+ A + B.
+
+-spec multiply(integer(), integer()) -> integer().
+multiply(A, B) ->
+ A * B.
+
+-spec subtract(integer(), integer()) -> integer().
+subtract(A, B) ->
+ A - B.
+
+-spec bitwise_and(integer(), integer()) -> integer().
+bitwise_and(X, Y) ->
+ erlang:'band'(X, Y).
+
+-spec bitwise_not(integer()) -> integer().
+bitwise_not(X) ->
+ erlang:'bnot'(X).
+
+-spec bitwise_or(integer(), integer()) -> integer().
+bitwise_or(X, Y) ->
+ erlang:'bor'(X, Y).
+
+-spec bitwise_exclusive_or(integer(), integer()) -> integer().
+bitwise_exclusive_or(X, Y) ->
+ erlang:'bxor'(X, Y).
+
+-spec bitwise_shift_left(integer(), integer()) -> integer().
+bitwise_shift_left(X, Y) ->
+ erlang:'bsl'(X, Y).
+
+-spec bitwise_shift_right(integer(), integer()) -> integer().
+bitwise_shift_right(X, Y) ->
+ erlang:'bsr'(X, Y).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl
new file mode 100644
index 0000000..a46eae3
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@io.erl
@@ -0,0 +1,27 @@
+-module(gleam@io).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([print/1, print_error/1, println/1, println_error/1, debug/1]).
+
+-spec print(binary()) -> nil.
+print(String) ->
+ gleam_stdlib:print(String).
+
+-spec print_error(binary()) -> nil.
+print_error(String) ->
+ gleam_stdlib:print_error(String).
+
+-spec println(binary()) -> nil.
+println(String) ->
+ gleam_stdlib:println(String).
+
+-spec println_error(binary()) -> nil.
+println_error(String) ->
+ gleam_stdlib:println_error(String).
+
+-spec debug(CZT) -> CZT.
+debug(Term) ->
+ _pipe = Term,
+ _pipe@1 = gleam@string:inspect(_pipe),
+ gleam_stdlib:println_error(_pipe@1),
+ Term.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl
new file mode 100644
index 0000000..aa84139
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@iterator.erl
@@ -0,0 +1,744 @@
+-module(gleam@iterator).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([unfold/2, repeatedly/1, repeat/1, from_list/1, transform/3, fold/3, run/1, to_list/1, step/1, take/2, drop/2, map/2, map2/3, append/2, flatten/1, concat/1, flat_map/2, filter/2, cycle/1, find/2, index/1, iterate/2, take_while/2, drop_while/2, scan/3, zip/2, chunk/2, sized_chunk/2, intersperse/2, any/2, all/2, group/2, reduce/2, last/1, empty/0, once/1, range/2, single/1, interleave/2, fold_until/3, try_fold/3, first/1, at/2, length/1, each/2, yield/2]).
+-export_type([action/1, iterator/1, step/2, chunk/2, sized_chunk/1]).
+
+-type action(BPF) :: stop | {continue, BPF, fun(() -> action(BPF))}.
+
+-opaque iterator(BPG) :: {iterator, fun(() -> action(BPG))}.
+
+-type step(BPH, BPI) :: {next, BPH, BPI} | done.
+
+-type chunk(BPJ, BPK) :: {another_by,
+ list(BPJ),
+ BPK,
+ BPJ,
+ fun(() -> action(BPJ))} |
+ {last_by, list(BPJ)}.
+
+-type sized_chunk(BPL) :: {another, list(BPL), fun(() -> action(BPL))} |
+ {last, list(BPL)} |
+ no_more.
+
+-spec stop() -> action(any()).
+stop() ->
+ stop.
+
+-spec do_unfold(BPO, fun((BPO) -> step(BPP, BPO))) -> fun(() -> action(BPP)).
+do_unfold(Initial, F) ->
+ fun() -> case F(Initial) of
+ {next, X, Acc} ->
+ {continue, X, do_unfold(Acc, F)};
+
+ done ->
+ stop
+ end end.
+
+-spec unfold(BPT, fun((BPT) -> step(BPU, BPT))) -> iterator(BPU).
+unfold(Initial, F) ->
+ _pipe = Initial,
+ _pipe@1 = do_unfold(_pipe, F),
+ {iterator, _pipe@1}.
+
+-spec repeatedly(fun(() -> BPY)) -> iterator(BPY).
+repeatedly(F) ->
+ unfold(nil, fun(_) -> {next, F(), nil} end).
+
+-spec repeat(BQA) -> iterator(BQA).
+repeat(X) ->
+ repeatedly(fun() -> X end).
+
+-spec from_list(list(BQC)) -> iterator(BQC).
+from_list(List) ->
+ Yield = fun(Acc) -> case Acc of
+ [] ->
+ done;
+
+ [Head | Tail] ->
+ {next, Head, Tail}
+ end end,
+ unfold(List, Yield).
+
+-spec do_transform(
+ fun(() -> action(BQF)),
+ BQH,
+ fun((BQH, BQF) -> step(BQI, BQH))
+) -> fun(() -> action(BQI)).
+do_transform(Continuation, State, F) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, El, Next} ->
+ case F(State, El) of
+ done ->
+ stop;
+
+ {next, Yield, Next_state} ->
+ {continue, Yield, do_transform(Next, Next_state, F)}
+ end
+ end end.
+
+-spec transform(iterator(BQM), BQO, fun((BQO, BQM) -> step(BQP, BQO))) -> iterator(BQP).
+transform(Iterator, Initial, F) ->
+ _pipe = do_transform(erlang:element(2, Iterator), Initial, F),
+ {iterator, _pipe}.
+
+-spec do_fold(fun(() -> action(BQT)), fun((BQV, BQT) -> BQV), BQV) -> BQV.
+do_fold(Continuation, F, Accumulator) ->
+ case Continuation() of
+ {continue, Elem, Next} ->
+ do_fold(Next, F, F(Accumulator, Elem));
+
+ stop ->
+ Accumulator
+ end.
+
+-spec fold(iterator(BQW), BQY, fun((BQY, BQW) -> BQY)) -> BQY.
+fold(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ do_fold(_pipe, F, Initial).
+
+-spec run(iterator(any())) -> nil.
+run(Iterator) ->
+ fold(Iterator, nil, fun(_, _) -> nil end).
+
+-spec to_list(iterator(BRB)) -> list(BRB).
+to_list(Iterator) ->
+ _pipe = Iterator,
+ _pipe@1 = fold(_pipe, [], fun(Acc, E) -> [E | Acc] end),
+ gleam@list:reverse(_pipe@1).
+
+-spec step(iterator(BRE)) -> step(BRE, iterator(BRE)).
+step(Iterator) ->
+ case (erlang:element(2, Iterator))() of
+ stop ->
+ done;
+
+ {continue, E, A} ->
+ {next, E, {iterator, A}}
+ end.
+
+-spec do_take(fun(() -> action(BRJ)), integer()) -> fun(() -> action(BRJ)).
+do_take(Continuation, Desired) ->
+ fun() -> case Desired > 0 of
+ false ->
+ stop;
+
+ true ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ {continue, E, do_take(Next, Desired - 1)}
+ end
+ end end.
+
+-spec take(iterator(BRM), integer()) -> iterator(BRM).
+take(Iterator, Desired) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_take(_pipe, Desired),
+ {iterator, _pipe@1}.
+
+-spec do_drop(fun(() -> action(BRP)), integer()) -> action(BRP).
+do_drop(Continuation, Desired) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ case Desired > 0 of
+ true ->
+ do_drop(Next, Desired - 1);
+
+ false ->
+ {continue, E, Next}
+ end
+ end.
+
+-spec drop(iterator(BRS), integer()) -> iterator(BRS).
+drop(Iterator, Desired) ->
+ _pipe = fun() -> do_drop(erlang:element(2, Iterator), Desired) end,
+ {iterator, _pipe}.
+
+-spec do_map(fun(() -> action(BRV)), fun((BRV) -> BRX)) -> fun(() -> action(BRX)).
+do_map(Continuation, F) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Continuation@1} ->
+ {continue, F(E), do_map(Continuation@1, F)}
+ end end.
+
+-spec map(iterator(BRZ), fun((BRZ) -> BSB)) -> iterator(BSB).
+map(Iterator, F) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_map(_pipe, F),
+ {iterator, _pipe@1}.
+
+-spec do_map2(
+ fun(() -> action(BSD)),
+ fun(() -> action(BSF)),
+ fun((BSD, BSF) -> BSH)
+) -> fun(() -> action(BSH)).
+do_map2(Continuation1, Continuation2, Fun) ->
+ fun() -> case Continuation1() of
+ stop ->
+ stop;
+
+ {continue, A, Next_a} ->
+ case Continuation2() of
+ stop ->
+ stop;
+
+ {continue, B, Next_b} ->
+ {continue, Fun(A, B), do_map2(Next_a, Next_b, Fun)}
+ end
+ end end.
+
+-spec map2(iterator(BSJ), iterator(BSL), fun((BSJ, BSL) -> BSN)) -> iterator(BSN).
+map2(Iterator1, Iterator2, Fun) ->
+ _pipe = do_map2(
+ erlang:element(2, Iterator1),
+ erlang:element(2, Iterator2),
+ Fun
+ ),
+ {iterator, _pipe}.
+
+-spec do_append(fun(() -> action(BSP)), fun(() -> action(BSP))) -> action(BSP).
+do_append(First, Second) ->
+ case First() of
+ {continue, E, First@1} ->
+ {continue, E, fun() -> do_append(First@1, Second) end};
+
+ stop ->
+ Second()
+ end.
+
+-spec append(iterator(BST), iterator(BST)) -> iterator(BST).
+append(First, Second) ->
+ _pipe = fun() ->
+ do_append(erlang:element(2, First), erlang:element(2, Second))
+ end,
+ {iterator, _pipe}.
+
+-spec do_flatten(fun(() -> action(iterator(BSX)))) -> action(BSX).
+do_flatten(Flattened) ->
+ case Flattened() of
+ stop ->
+ stop;
+
+ {continue, It, Next_iterator} ->
+ do_append(
+ erlang:element(2, It),
+ fun() -> do_flatten(Next_iterator) end
+ )
+ end.
+
+-spec flatten(iterator(iterator(BTB))) -> iterator(BTB).
+flatten(Iterator) ->
+ _pipe = fun() -> do_flatten(erlang:element(2, Iterator)) end,
+ {iterator, _pipe}.
+
+-spec concat(list(iterator(BTF))) -> iterator(BTF).
+concat(Iterators) ->
+ flatten(from_list(Iterators)).
+
+-spec flat_map(iterator(BTJ), fun((BTJ) -> iterator(BTL))) -> iterator(BTL).
+flat_map(Iterator, F) ->
+ _pipe = Iterator,
+ _pipe@1 = map(_pipe, F),
+ flatten(_pipe@1).
+
+-spec do_filter(fun(() -> action(BTO)), fun((BTO) -> boolean())) -> action(BTO).
+do_filter(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Iterator} ->
+ case Predicate(E) of
+ true ->
+ {continue, E, fun() -> do_filter(Iterator, Predicate) end};
+
+ false ->
+ do_filter(Iterator, Predicate)
+ end
+ end.
+
+-spec filter(iterator(BTR), fun((BTR) -> boolean())) -> iterator(BTR).
+filter(Iterator, Predicate) ->
+ _pipe = fun() -> do_filter(erlang:element(2, Iterator), Predicate) end,
+ {iterator, _pipe}.
+
+-spec cycle(iterator(BTU)) -> iterator(BTU).
+cycle(Iterator) ->
+ _pipe = repeat(Iterator),
+ flatten(_pipe).
+
+-spec do_find(fun(() -> action(BTY)), fun((BTY) -> boolean())) -> {ok, BTY} |
+ {error, nil}.
+do_find(Continuation, F) ->
+ case Continuation() of
+ stop ->
+ {error, nil};
+
+ {continue, E, Next} ->
+ case F(E) of
+ true ->
+ {ok, E};
+
+ false ->
+ do_find(Next, F)
+ end
+ end.
+
+-spec find(iterator(BUC), fun((BUC) -> boolean())) -> {ok, BUC} | {error, nil}.
+find(Haystack, Is_desired) ->
+ _pipe = erlang:element(2, Haystack),
+ do_find(_pipe, Is_desired).
+
+-spec do_index(fun(() -> action(BUG)), integer()) -> fun(() -> action({integer(),
+ BUG})).
+do_index(Continuation, Next) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Continuation@1} ->
+ {continue, {Next, E}, do_index(Continuation@1, Next + 1)}
+ end end.
+
+-spec index(iterator(BUJ)) -> iterator({integer(), BUJ}).
+index(Iterator) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_index(_pipe, 0),
+ {iterator, _pipe@1}.
+
+-spec iterate(BUM, fun((BUM) -> BUM)) -> iterator(BUM).
+iterate(Initial, F) ->
+ unfold(Initial, fun(Element) -> {next, Element, F(Element)} end).
+
+-spec do_take_while(fun(() -> action(BUO)), fun((BUO) -> boolean())) -> fun(() -> action(BUO)).
+do_take_while(Continuation, Predicate) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ false ->
+ stop;
+
+ true ->
+ {continue, E, do_take_while(Next, Predicate)}
+ end
+ end end.
+
+-spec take_while(iterator(BUR), fun((BUR) -> boolean())) -> iterator(BUR).
+take_while(Iterator, Predicate) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_take_while(_pipe, Predicate),
+ {iterator, _pipe@1}.
+
+-spec do_drop_while(fun(() -> action(BUU)), fun((BUU) -> boolean())) -> action(BUU).
+do_drop_while(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ false ->
+ {continue, E, Next};
+
+ true ->
+ do_drop_while(Next, Predicate)
+ end
+ end.
+
+-spec drop_while(iterator(BUX), fun((BUX) -> boolean())) -> iterator(BUX).
+drop_while(Iterator, Predicate) ->
+ _pipe = fun() -> do_drop_while(erlang:element(2, Iterator), Predicate) end,
+ {iterator, _pipe}.
+
+-spec do_scan(fun(() -> action(BVA)), fun((BVC, BVA) -> BVC), BVC) -> fun(() -> action(BVC)).
+do_scan(Continuation, F, Accumulator) ->
+ fun() -> case Continuation() of
+ stop ->
+ stop;
+
+ {continue, El, Next} ->
+ Accumulated = F(Accumulator, El),
+ {continue, Accumulated, do_scan(Next, F, Accumulated)}
+ end end.
+
+-spec scan(iterator(BVE), BVG, fun((BVG, BVE) -> BVG)) -> iterator(BVG).
+scan(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_scan(_pipe, F, Initial),
+ {iterator, _pipe@1}.
+
+-spec do_zip(fun(() -> action(BVI)), fun(() -> action(BVK))) -> fun(() -> action({BVI,
+ BVK})).
+do_zip(Left, Right) ->
+ fun() -> case Left() of
+ stop ->
+ stop;
+
+ {continue, El_left, Next_left} ->
+ case Right() of
+ stop ->
+ stop;
+
+ {continue, El_right, Next_right} ->
+ {continue,
+ {El_left, El_right},
+ do_zip(Next_left, Next_right)}
+ end
+ end end.
+
+-spec zip(iterator(BVN), iterator(BVP)) -> iterator({BVN, BVP}).
+zip(Left, Right) ->
+ _pipe = do_zip(erlang:element(2, Left), erlang:element(2, Right)),
+ {iterator, _pipe}.
+
+-spec next_chunk(fun(() -> action(BVS)), fun((BVS) -> BVU), BVU, list(BVS)) -> chunk(BVS, BVU).
+next_chunk(Continuation, F, Previous_key, Current_chunk) ->
+ case Continuation() of
+ stop ->
+ {last_by, gleam@list:reverse(Current_chunk)};
+
+ {continue, E, Next} ->
+ Key = F(E),
+ case Key =:= Previous_key of
+ true ->
+ next_chunk(Next, F, Key, [E | Current_chunk]);
+
+ false ->
+ {another_by,
+ gleam@list:reverse(Current_chunk),
+ Key,
+ E,
+ Next}
+ end
+ end.
+
+-spec do_chunk(fun(() -> action(BVY)), fun((BVY) -> BWA), BWA, BVY) -> action(list(BVY)).
+do_chunk(Continuation, F, Previous_key, Previous_element) ->
+ case next_chunk(Continuation, F, Previous_key, [Previous_element]) of
+ {last_by, Chunk} ->
+ {continue, Chunk, fun stop/0};
+
+ {another_by, Chunk@1, Key, El, Next} ->
+ {continue, Chunk@1, fun() -> do_chunk(Next, F, Key, El) end}
+ end.
+
+-spec chunk(iterator(BWD), fun((BWD) -> any())) -> iterator(list(BWD)).
+chunk(Iterator, F) ->
+ _pipe = fun() -> case (erlang:element(2, Iterator))() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ do_chunk(Next, F, F(E), E)
+ end end,
+ {iterator, _pipe}.
+
+-spec next_sized_chunk(fun(() -> action(BWI)), integer(), list(BWI)) -> sized_chunk(BWI).
+next_sized_chunk(Continuation, Left, Current_chunk) ->
+ case Continuation() of
+ stop ->
+ case Current_chunk of
+ [] ->
+ no_more;
+
+ Remaining ->
+ {last, gleam@list:reverse(Remaining)}
+ end;
+
+ {continue, E, Next} ->
+ Chunk = [E | Current_chunk],
+ case Left > 1 of
+ false ->
+ {another, gleam@list:reverse(Chunk), Next};
+
+ true ->
+ next_sized_chunk(Next, Left - 1, Chunk)
+ end
+ end.
+
+-spec do_sized_chunk(fun(() -> action(BWM)), integer()) -> fun(() -> action(list(BWM))).
+do_sized_chunk(Continuation, Count) ->
+ fun() -> case next_sized_chunk(Continuation, Count, []) of
+ no_more ->
+ stop;
+
+ {last, Chunk} ->
+ {continue, Chunk, fun stop/0};
+
+ {another, Chunk@1, Next_element} ->
+ {continue, Chunk@1, do_sized_chunk(Next_element, Count)}
+ end end.
+
+-spec sized_chunk(iterator(BWQ), integer()) -> iterator(list(BWQ)).
+sized_chunk(Iterator, Count) ->
+ _pipe = erlang:element(2, Iterator),
+ _pipe@1 = do_sized_chunk(_pipe, Count),
+ {iterator, _pipe@1}.
+
+-spec do_intersperse(fun(() -> action(BWU)), BWU) -> action(BWU).
+do_intersperse(Continuation, Separator) ->
+ case Continuation() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ Next_interspersed = fun() -> do_intersperse(Next, Separator) end,
+ {continue, Separator, fun() -> {continue, E, Next_interspersed} end}
+ end.
+
+-spec intersperse(iterator(BWX), BWX) -> iterator(BWX).
+intersperse(Iterator, Elem) ->
+ _pipe = fun() -> case (erlang:element(2, Iterator))() of
+ stop ->
+ stop;
+
+ {continue, E, Next} ->
+ {continue, E, fun() -> do_intersperse(Next, Elem) end}
+ end end,
+ {iterator, _pipe}.
+
+-spec do_any(fun(() -> action(BXA)), fun((BXA) -> boolean())) -> boolean().
+do_any(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ false;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ true ->
+ true;
+
+ false ->
+ do_any(Next, Predicate)
+ end
+ end.
+
+-spec any(iterator(BXC), fun((BXC) -> boolean())) -> boolean().
+any(Iterator, Predicate) ->
+ _pipe = erlang:element(2, Iterator),
+ do_any(_pipe, Predicate).
+
+-spec do_all(fun(() -> action(BXE)), fun((BXE) -> boolean())) -> boolean().
+do_all(Continuation, Predicate) ->
+ case Continuation() of
+ stop ->
+ true;
+
+ {continue, E, Next} ->
+ case Predicate(E) of
+ true ->
+ do_all(Next, Predicate);
+
+ false ->
+ false
+ end
+ end.
+
+-spec all(iterator(BXG), fun((BXG) -> boolean())) -> boolean().
+all(Iterator, Predicate) ->
+ _pipe = erlang:element(2, Iterator),
+ do_all(_pipe, Predicate).
+
+-spec update_group_with(BXI) -> fun((gleam@option:option(list(BXI))) -> list(BXI)).
+update_group_with(El) ->
+ fun(Maybe_group) -> case Maybe_group of
+ {some, Group} ->
+ [El | Group];
+
+ none ->
+ [El]
+ end end.
+
+-spec group_updater(fun((BXM) -> BXN)) -> fun((gleam@dict:dict(BXN, list(BXM)), BXM) -> gleam@dict:dict(BXN, list(BXM))).
+group_updater(F) ->
+ fun(Groups, Elem) -> _pipe = Groups,
+ gleam@dict:update(_pipe, F(Elem), update_group_with(Elem)) end.
+
+-spec group(iterator(BXU), fun((BXU) -> BXW)) -> gleam@dict:dict(BXW, list(BXU)).
+group(Iterator, Key) ->
+ _pipe = Iterator,
+ _pipe@1 = fold(_pipe, gleam@dict:new(), group_updater(Key)),
+ gleam@dict:map_values(
+ _pipe@1,
+ fun(_, Group) -> gleam@list:reverse(Group) end
+ ).
+
+-spec reduce(iterator(BYA), fun((BYA, BYA) -> BYA)) -> {ok, BYA} | {error, nil}.
+reduce(Iterator, F) ->
+ case (erlang:element(2, Iterator))() of
+ stop ->
+ {error, nil};
+
+ {continue, E, Next} ->
+ _pipe = do_fold(Next, F, E),
+ {ok, _pipe}
+ end.
+
+-spec last(iterator(BYE)) -> {ok, BYE} | {error, nil}.
+last(Iterator) ->
+ _pipe = Iterator,
+ reduce(_pipe, fun(_, Elem) -> Elem end).
+
+-spec empty() -> iterator(any()).
+empty() ->
+ {iterator, fun stop/0}.
+
+-spec once(fun(() -> BYK)) -> iterator(BYK).
+once(F) ->
+ _pipe = fun() -> {continue, F(), fun stop/0} end,
+ {iterator, _pipe}.
+
+-spec range(integer(), integer()) -> iterator(integer()).
+range(Start, Stop) ->
+ case gleam@int:compare(Start, Stop) of
+ eq ->
+ once(fun() -> Start end);
+
+ gt ->
+ unfold(Start, fun(Current) -> case Current < Stop of
+ false ->
+ {next, Current, Current - 1};
+
+ true ->
+ done
+ end end);
+
+ lt ->
+ unfold(Start, fun(Current@1) -> case Current@1 > Stop of
+ false ->
+ {next, Current@1, Current@1 + 1};
+
+ true ->
+ done
+ end end)
+ end.
+
+-spec single(BYM) -> iterator(BYM).
+single(Elem) ->
+ once(fun() -> Elem end).
+
+-spec do_interleave(fun(() -> action(BYO)), fun(() -> action(BYO))) -> action(BYO).
+do_interleave(Current, Next) ->
+ case Current() of
+ stop ->
+ Next();
+
+ {continue, E, Next_other} ->
+ {continue, E, fun() -> do_interleave(Next, Next_other) end}
+ end.
+
+-spec interleave(iterator(BYS), iterator(BYS)) -> iterator(BYS).
+interleave(Left, Right) ->
+ _pipe = fun() ->
+ do_interleave(erlang:element(2, Left), erlang:element(2, Right))
+ end,
+ {iterator, _pipe}.
+
+-spec do_fold_until(
+ fun(() -> action(BYW)),
+ fun((BYY, BYW) -> gleam@list:continue_or_stop(BYY)),
+ BYY
+) -> BYY.
+do_fold_until(Continuation, F, Accumulator) ->
+ case Continuation() of
+ stop ->
+ Accumulator;
+
+ {continue, Elem, Next} ->
+ case F(Accumulator, Elem) of
+ {continue, Accumulator@1} ->
+ do_fold_until(Next, F, Accumulator@1);
+
+ {stop, Accumulator@2} ->
+ Accumulator@2
+ end
+ end.
+
+-spec fold_until(
+ iterator(BZA),
+ BZC,
+ fun((BZC, BZA) -> gleam@list:continue_or_stop(BZC))
+) -> BZC.
+fold_until(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ do_fold_until(_pipe, F, Initial).
+
+-spec do_try_fold(
+ fun(() -> action(BZE)),
+ fun((BZG, BZE) -> {ok, BZG} | {error, BZH}),
+ BZG
+) -> {ok, BZG} | {error, BZH}.
+do_try_fold(Continuation, F, Accumulator) ->
+ case Continuation() of
+ stop ->
+ {ok, Accumulator};
+
+ {continue, Elem, Next} ->
+ gleam@result:'try'(
+ F(Accumulator, Elem),
+ fun(Accumulator@1) -> do_try_fold(Next, F, Accumulator@1) end
+ )
+ end.
+
+-spec try_fold(iterator(BZM), BZO, fun((BZO, BZM) -> {ok, BZO} | {error, BZP})) -> {ok,
+ BZO} |
+ {error, BZP}.
+try_fold(Iterator, Initial, F) ->
+ _pipe = erlang:element(2, Iterator),
+ do_try_fold(_pipe, F, Initial).
+
+-spec first(iterator(BZU)) -> {ok, BZU} | {error, nil}.
+first(Iterator) ->
+ case (erlang:element(2, Iterator))() of
+ stop ->
+ {error, nil};
+
+ {continue, E, _} ->
+ {ok, E}
+ end.
+
+-spec at(iterator(BZY), integer()) -> {ok, BZY} | {error, nil}.
+at(Iterator, Index) ->
+ _pipe = Iterator,
+ _pipe@1 = drop(_pipe, Index),
+ first(_pipe@1).
+
+-spec do_length(fun(() -> action(any())), integer()) -> integer().
+do_length(Continuation, Length) ->
+ case Continuation() of
+ stop ->
+ Length;
+
+ {continue, _, Next} ->
+ do_length(Next, Length + 1)
+ end.
+
+-spec length(iterator(any())) -> integer().
+length(Iterator) ->
+ _pipe = erlang:element(2, Iterator),
+ do_length(_pipe, 0).
+
+-spec each(iterator(CAG), fun((CAG) -> any())) -> nil.
+each(Iterator, F) ->
+ _pipe = Iterator,
+ _pipe@1 = map(_pipe, F),
+ run(_pipe@1).
+
+-spec yield(CAJ, fun(() -> iterator(CAJ))) -> iterator(CAJ).
+yield(Element, Next) ->
+ {iterator, fun() -> {continue, Element, erlang:element(2, Next())} end}.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl
new file mode 100644
index 0000000..6c2e684
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@list.erl
@@ -0,0 +1,1129 @@
+-module(gleam@list).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([length/1, reverse/1, is_empty/1, contains/2, first/1, rest/1, filter/2, filter_map/2, map/2, map2/3, index_map/2, try_map/2, drop/2, take/2, new/0, append/2, prepend/2, concat/1, flatten/1, flat_map/2, fold/3, group/2, map_fold/3, fold_right/3, index_fold/3, try_fold/3, fold_until/3, find/2, find_map/2, all/2, any/2, zip/2, strict_zip/2, unzip/1, intersperse/2, at/2, unique/1, sort/2, range/2, repeat/2, split/2, split_while/2, key_find/2, key_filter/2, pop/2, pop_map/2, key_pop/2, key_set/3, each/2, try_each/2, partition/2, permutations/1, window/2, window_by_2/1, drop_while/2, take_while/2, chunk/2, sized_chunk/2, reduce/2, scan/3, last/1, combinations/2, combination_pairs/1, transpose/1, interleave/1, shuffle/1]).
+-export_type([length_mismatch/0, continue_or_stop/1]).
+
+-type length_mismatch() :: length_mismatch.
+
+-type continue_or_stop(UD) :: {continue, UD} | {stop, UD}.
+
+-spec length(list(any())) -> integer().
+length(List) ->
+ erlang:length(List).
+
+-spec reverse(list(UI)) -> list(UI).
+reverse(Xs) ->
+ lists:reverse(Xs).
+
+-spec is_empty(list(any())) -> boolean().
+is_empty(List) ->
+ List =:= [].
+
+-spec contains(list(UQ), UQ) -> boolean().
+contains(List, Elem) ->
+ case List of
+ [] ->
+ false;
+
+ [First | _] when First =:= Elem ->
+ true;
+
+ [_ | Rest] ->
+ contains(Rest, Elem)
+ end.
+
+-spec first(list(US)) -> {ok, US} | {error, nil}.
+first(List) ->
+ case List of
+ [] ->
+ {error, nil};
+
+ [X | _] ->
+ {ok, X}
+ end.
+
+-spec rest(list(UW)) -> {ok, list(UW)} | {error, nil}.
+rest(List) ->
+ case List of
+ [] ->
+ {error, nil};
+
+ [_ | Xs] ->
+ {ok, Xs}
+ end.
+
+-spec update_group(fun((VB) -> VC)) -> fun((gleam@dict:dict(VC, list(VB)), VB) -> gleam@dict:dict(VC, list(VB))).
+update_group(F) ->
+ fun(Groups, Elem) -> case gleam@dict:get(Groups, F(Elem)) of
+ {ok, Existing} ->
+ gleam@dict:insert(Groups, F(Elem), [Elem | Existing]);
+
+ {error, _} ->
+ gleam@dict:insert(Groups, F(Elem), [Elem])
+ end end.
+
+-spec do_filter(list(VP), fun((VP) -> boolean()), list(VP)) -> list(VP).
+do_filter(List, Fun, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ New_acc = case Fun(X) of
+ true ->
+ [X | Acc];
+
+ false ->
+ Acc
+ end,
+ do_filter(Xs, Fun, New_acc)
+ end.
+
+-spec filter(list(VT), fun((VT) -> boolean())) -> list(VT).
+filter(List, Predicate) ->
+ do_filter(List, Predicate, []).
+
+-spec do_filter_map(list(VW), fun((VW) -> {ok, VY} | {error, any()}), list(VY)) -> list(VY).
+do_filter_map(List, Fun, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ New_acc = case Fun(X) of
+ {ok, X@1} ->
+ [X@1 | Acc];
+
+ {error, _} ->
+ Acc
+ end,
+ do_filter_map(Xs, Fun, New_acc)
+ end.
+
+-spec filter_map(list(WE), fun((WE) -> {ok, WG} | {error, any()})) -> list(WG).
+filter_map(List, Fun) ->
+ do_filter_map(List, Fun, []).
+
+-spec do_map(list(WL), fun((WL) -> WN), list(WN)) -> list(WN).
+do_map(List, Fun, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ do_map(Xs, Fun, [Fun(X) | Acc])
+ end.
+
+-spec map(list(WQ), fun((WQ) -> WS)) -> list(WS).
+map(List, Fun) ->
+ do_map(List, Fun, []).
+
+-spec do_map2(list(XA), list(XC), fun((XA, XC) -> XE), list(XE)) -> list(XE).
+do_map2(List1, List2, Fun, Acc) ->
+ case {List1, List2} of
+ {[], _} ->
+ reverse(Acc);
+
+ {_, []} ->
+ reverse(Acc);
+
+ {[A | As_], [B | Bs]} ->
+ do_map2(As_, Bs, Fun, [Fun(A, B) | Acc])
+ end.
+
+-spec map2(list(WU), list(WW), fun((WU, WW) -> WY)) -> list(WY).
+map2(List1, List2, Fun) ->
+ do_map2(List1, List2, Fun, []).
+
+-spec do_index_map(list(XM), fun((integer(), XM) -> XO), integer(), list(XO)) -> list(XO).
+do_index_map(List, Fun, Index, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ Acc@1 = [Fun(Index, X) | Acc],
+ do_index_map(Xs, Fun, Index + 1, Acc@1)
+ end.
+
+-spec index_map(list(XR), fun((integer(), XR) -> XT)) -> list(XT).
+index_map(List, Fun) ->
+ do_index_map(List, Fun, 0, []).
+
+-spec do_try_map(list(XV), fun((XV) -> {ok, XX} | {error, XY}), list(XX)) -> {ok,
+ list(XX)} |
+ {error, XY}.
+do_try_map(List, Fun, Acc) ->
+ case List of
+ [] ->
+ {ok, reverse(Acc)};
+
+ [X | Xs] ->
+ case Fun(X) of
+ {ok, Y} ->
+ do_try_map(Xs, Fun, [Y | Acc]);
+
+ {error, Error} ->
+ {error, Error}
+ end
+ end.
+
+-spec try_map(list(YF), fun((YF) -> {ok, YH} | {error, YI})) -> {ok, list(YH)} |
+ {error, YI}.
+try_map(List, Fun) ->
+ do_try_map(List, Fun, []).
+
+-spec drop(list(YO), integer()) -> list(YO).
+drop(List, N) ->
+ case N =< 0 of
+ true ->
+ List;
+
+ false ->
+ case List of
+ [] ->
+ [];
+
+ [_ | Xs] ->
+ drop(Xs, N - 1)
+ end
+ end.
+
+-spec do_take(list(YR), integer(), list(YR)) -> list(YR).
+do_take(List, N, Acc) ->
+ case N =< 0 of
+ true ->
+ reverse(Acc);
+
+ false ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Xs] ->
+ do_take(Xs, N - 1, [X | Acc])
+ end
+ end.
+
+-spec take(list(YV), integer()) -> list(YV).
+take(List, N) ->
+ do_take(List, N, []).
+
+-spec new() -> list(any()).
+new() ->
+ [].
+
+-spec append(list(AAA), list(AAA)) -> list(AAA).
+append(First, Second) ->
+ lists:append(First, Second).
+
+-spec prepend(list(AAI), AAI) -> list(AAI).
+prepend(List, Item) ->
+ [Item | List].
+
+-spec reverse_and_prepend(list(AAL), list(AAL)) -> list(AAL).
+reverse_and_prepend(Prefix, Suffix) ->
+ case Prefix of
+ [] ->
+ Suffix;
+
+ [First | Rest] ->
+ reverse_and_prepend(Rest, [First | Suffix])
+ end.
+
+-spec do_concat(list(list(AAP)), list(AAP)) -> list(AAP).
+do_concat(Lists, Acc) ->
+ case Lists of
+ [] ->
+ reverse(Acc);
+
+ [List | Further_lists] ->
+ do_concat(Further_lists, reverse_and_prepend(List, Acc))
+ end.
+
+-spec concat(list(list(AAU))) -> list(AAU).
+concat(Lists) ->
+ do_concat(Lists, []).
+
+-spec flatten(list(list(AAY))) -> list(AAY).
+flatten(Lists) ->
+ do_concat(Lists, []).
+
+-spec flat_map(list(ABC), fun((ABC) -> list(ABE))) -> list(ABE).
+flat_map(List, Fun) ->
+ _pipe = map(List, Fun),
+ concat(_pipe).
+
+-spec fold(list(ABH), ABJ, fun((ABJ, ABH) -> ABJ)) -> ABJ.
+fold(List, Initial, Fun) ->
+ case List of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ fold(Rest, Fun(Initial, X), Fun)
+ end.
+
+-spec group(list(VJ), fun((VJ) -> VL)) -> gleam@dict:dict(VL, list(VJ)).
+group(List, Key) ->
+ fold(List, gleam@dict:new(), update_group(Key)).
+
+-spec map_fold(list(XH), XJ, fun((XJ, XH) -> {XJ, XK})) -> {XJ, list(XK)}.
+map_fold(List, Acc, Fun) ->
+ _pipe = fold(
+ List,
+ {Acc, []},
+ fun(Acc@1, Item) ->
+ {Current_acc, Items} = Acc@1,
+ {Next_acc, Next_item} = Fun(Current_acc, Item),
+ {Next_acc, [Next_item | Items]}
+ end
+ ),
+ gleam@pair:map_second(_pipe, fun reverse/1).
+
+-spec fold_right(list(ABK), ABM, fun((ABM, ABK) -> ABM)) -> ABM.
+fold_right(List, Initial, Fun) ->
+ case List of
+ [] ->
+ Initial;
+
+ [X | Rest] ->
+ Fun(fold_right(Rest, Initial, Fun), X)
+ end.
+
+-spec do_index_fold(
+ list(ABN),
+ ABP,
+ fun((ABP, ABN, integer()) -> ABP),
+ integer()
+) -> ABP.
+do_index_fold(Over, Acc, With, Index) ->
+ case Over of
+ [] ->
+ Acc;
+
+ [First | Rest] ->
+ do_index_fold(Rest, With(Acc, First, Index), With, Index + 1)
+ end.
+
+-spec index_fold(list(ABQ), ABS, fun((ABS, ABQ, integer()) -> ABS)) -> ABS.
+index_fold(Over, Initial, Fun) ->
+ do_index_fold(Over, Initial, Fun, 0).
+
+-spec try_fold(list(ABT), ABV, fun((ABV, ABT) -> {ok, ABV} | {error, ABW})) -> {ok,
+ ABV} |
+ {error, ABW}.
+try_fold(Collection, Accumulator, Fun) ->
+ case Collection of
+ [] ->
+ {ok, Accumulator};
+
+ [First | Rest] ->
+ case Fun(Accumulator, First) of
+ {ok, Result} ->
+ try_fold(Rest, Result, Fun);
+
+ {error, _} = Error ->
+ Error
+ end
+ end.
+
+-spec fold_until(list(ACB), ACD, fun((ACD, ACB) -> continue_or_stop(ACD))) -> ACD.
+fold_until(Collection, Accumulator, Fun) ->
+ case Collection of
+ [] ->
+ Accumulator;
+
+ [First | Rest] ->
+ case Fun(Accumulator, First) of
+ {continue, Next_accumulator} ->
+ fold_until(Rest, Next_accumulator, Fun);
+
+ {stop, B} ->
+ B
+ end
+ end.
+
+-spec find(list(ACF), fun((ACF) -> boolean())) -> {ok, ACF} | {error, nil}.
+find(Haystack, Is_desired) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Is_desired(X) of
+ true ->
+ {ok, X};
+
+ _ ->
+ find(Rest, Is_desired)
+ end
+ end.
+
+-spec find_map(list(ACJ), fun((ACJ) -> {ok, ACL} | {error, any()})) -> {ok, ACL} |
+ {error, nil}.
+find_map(Haystack, Fun) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Fun(X) of
+ {ok, X@1} ->
+ {ok, X@1};
+
+ _ ->
+ find_map(Rest, Fun)
+ end
+ end.
+
+-spec all(list(ACR), fun((ACR) -> boolean())) -> boolean().
+all(List, Predicate) ->
+ case List of
+ [] ->
+ true;
+
+ [First | Rest] ->
+ case Predicate(First) of
+ true ->
+ all(Rest, Predicate);
+
+ false ->
+ false
+ end
+ end.
+
+-spec any(list(ACT), fun((ACT) -> boolean())) -> boolean().
+any(List, Predicate) ->
+ case List of
+ [] ->
+ false;
+
+ [First | Rest] ->
+ case Predicate(First) of
+ true ->
+ true;
+
+ false ->
+ any(Rest, Predicate)
+ end
+ end.
+
+-spec do_zip(list(ACV), list(ACX), list({ACV, ACX})) -> list({ACV, ACX}).
+do_zip(Xs, Ys, Acc) ->
+ case {Xs, Ys} of
+ {[X | Xs@1], [Y | Ys@1]} ->
+ do_zip(Xs@1, Ys@1, [{X, Y} | Acc]);
+
+ {_, _} ->
+ reverse(Acc)
+ end.
+
+-spec zip(list(ADB), list(ADD)) -> list({ADB, ADD}).
+zip(List, Other) ->
+ do_zip(List, Other, []).
+
+-spec strict_zip(list(ADG), list(ADI)) -> {ok, list({ADG, ADI})} |
+ {error, length_mismatch()}.
+strict_zip(List, Other) ->
+ case length(List) =:= length(Other) of
+ true ->
+ {ok, zip(List, Other)};
+
+ false ->
+ {error, length_mismatch}
+ end.
+
+-spec do_unzip(list({ATA, ATB}), list(ATA), list(ATB)) -> {list(ATA), list(ATB)}.
+do_unzip(Input, Xs, Ys) ->
+ case Input of
+ [] ->
+ {reverse(Xs), reverse(Ys)};
+
+ [{X, Y} | Rest] ->
+ do_unzip(Rest, [X | Xs], [Y | Ys])
+ end.
+
+-spec unzip(list({ADR, ADS})) -> {list(ADR), list(ADS)}.
+unzip(Input) ->
+ do_unzip(Input, [], []).
+
+-spec do_intersperse(list(ADW), ADW, list(ADW)) -> list(ADW).
+do_intersperse(List, Separator, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [X | Rest] ->
+ do_intersperse(Rest, Separator, [X, Separator | Acc])
+ end.
+
+-spec intersperse(list(AEA), AEA) -> list(AEA).
+intersperse(List, Elem) ->
+ case List of
+ [] ->
+ List;
+
+ [_] ->
+ List;
+
+ [X | Rest] ->
+ do_intersperse(Rest, Elem, [X])
+ end.
+
+-spec at(list(AED), integer()) -> {ok, AED} | {error, nil}.
+at(List, Index) ->
+ case Index >= 0 of
+ true ->
+ _pipe = List,
+ _pipe@1 = drop(_pipe, Index),
+ first(_pipe@1);
+
+ false ->
+ {error, nil}
+ end.
+
+-spec unique(list(AEH)) -> list(AEH).
+unique(List) ->
+ case List of
+ [] ->
+ [];
+
+ [X | Rest] ->
+ [X | unique(filter(Rest, fun(Y) -> Y /= X end))]
+ end.
+
+-spec merge_up(
+ integer(),
+ integer(),
+ list(AEK),
+ list(AEK),
+ list(AEK),
+ fun((AEK, AEK) -> gleam@order:order())
+) -> list(AEK).
+merge_up(Na, Nb, A, B, Acc, Compare) ->
+ case {Na, Nb, A, B} of
+ {0, 0, _, _} ->
+ Acc;
+
+ {_, 0, [Ax | Ar], _} ->
+ merge_up(Na - 1, Nb, Ar, B, [Ax | Acc], Compare);
+
+ {0, _, _, [Bx | Br]} ->
+ merge_up(Na, Nb - 1, A, Br, [Bx | Acc], Compare);
+
+ {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} ->
+ case Compare(Ax@1, Bx@1) of
+ gt ->
+ merge_up(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare);
+
+ _ ->
+ merge_up(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare)
+ end;
+
+ {_, _, _, _} ->
+ Acc
+ end.
+
+-spec merge_down(
+ integer(),
+ integer(),
+ list(AEP),
+ list(AEP),
+ list(AEP),
+ fun((AEP, AEP) -> gleam@order:order())
+) -> list(AEP).
+merge_down(Na, Nb, A, B, Acc, Compare) ->
+ case {Na, Nb, A, B} of
+ {0, 0, _, _} ->
+ Acc;
+
+ {_, 0, [Ax | Ar], _} ->
+ merge_down(Na - 1, Nb, Ar, B, [Ax | Acc], Compare);
+
+ {0, _, _, [Bx | Br]} ->
+ merge_down(Na, Nb - 1, A, Br, [Bx | Acc], Compare);
+
+ {_, _, [Ax@1 | Ar@1], [Bx@1 | Br@1]} ->
+ case Compare(Bx@1, Ax@1) of
+ lt ->
+ merge_down(Na - 1, Nb, Ar@1, B, [Ax@1 | Acc], Compare);
+
+ _ ->
+ merge_down(Na, Nb - 1, A, Br@1, [Bx@1 | Acc], Compare)
+ end;
+
+ {_, _, _, _} ->
+ Acc
+ end.
+
+-spec merge_sort(
+ list(AEU),
+ integer(),
+ fun((AEU, AEU) -> gleam@order:order()),
+ boolean()
+) -> list(AEU).
+merge_sort(L, Ln, Compare, Down) ->
+ N = Ln div 2,
+ A = L,
+ B = drop(L, N),
+ case Ln < 3 of
+ true ->
+ case Down of
+ true ->
+ merge_down(N, Ln - N, A, B, [], Compare);
+
+ false ->
+ merge_up(N, Ln - N, A, B, [], Compare)
+ end;
+
+ false ->
+ case Down of
+ true ->
+ merge_down(
+ N,
+ Ln - N,
+ merge_sort(A, N, Compare, false),
+ merge_sort(B, Ln - N, Compare, false),
+ [],
+ Compare
+ );
+
+ false ->
+ merge_up(
+ N,
+ Ln - N,
+ merge_sort(A, N, Compare, true),
+ merge_sort(B, Ln - N, Compare, true),
+ [],
+ Compare
+ )
+ end
+ end.
+
+-spec sort(list(AEX), fun((AEX, AEX) -> gleam@order:order())) -> list(AEX).
+sort(List, Compare) ->
+ merge_sort(List, length(List), Compare, true).
+
+-spec tail_recursive_range(integer(), integer(), list(integer())) -> list(integer()).
+tail_recursive_range(Start, Stop, Acc) ->
+ case gleam@int:compare(Start, Stop) of
+ eq ->
+ [Stop | Acc];
+
+ gt ->
+ tail_recursive_range(Start, Stop + 1, [Stop | Acc]);
+
+ lt ->
+ tail_recursive_range(Start, Stop - 1, [Stop | Acc])
+ end.
+
+-spec range(integer(), integer()) -> list(integer()).
+range(Start, Stop) ->
+ tail_recursive_range(Start, Stop, []).
+
+-spec do_repeat(AFD, integer(), list(AFD)) -> list(AFD).
+do_repeat(A, Times, Acc) ->
+ case Times =< 0 of
+ true ->
+ Acc;
+
+ false ->
+ do_repeat(A, Times - 1, [A | Acc])
+ end.
+
+-spec repeat(AFG, integer()) -> list(AFG).
+repeat(A, Times) ->
+ do_repeat(A, Times, []).
+
+-spec do_split(list(AFI), integer(), list(AFI)) -> {list(AFI), list(AFI)}.
+do_split(List, N, Taken) ->
+ case N =< 0 of
+ true ->
+ {reverse(Taken), List};
+
+ false ->
+ case List of
+ [] ->
+ {reverse(Taken), []};
+
+ [X | Xs] ->
+ do_split(Xs, N - 1, [X | Taken])
+ end
+ end.
+
+-spec split(list(AFN), integer()) -> {list(AFN), list(AFN)}.
+split(List, Index) ->
+ do_split(List, Index, []).
+
+-spec do_split_while(list(AFR), fun((AFR) -> boolean()), list(AFR)) -> {list(AFR),
+ list(AFR)}.
+do_split_while(List, F, Acc) ->
+ case List of
+ [] ->
+ {reverse(Acc), []};
+
+ [X | Xs] ->
+ case F(X) of
+ false ->
+ {reverse(Acc), List};
+
+ _ ->
+ do_split_while(Xs, F, [X | Acc])
+ end
+ end.
+
+-spec split_while(list(AFW), fun((AFW) -> boolean())) -> {list(AFW), list(AFW)}.
+split_while(List, Predicate) ->
+ do_split_while(List, Predicate, []).
+
+-spec key_find(list({AGA, AGB}), AGA) -> {ok, AGB} | {error, nil}.
+key_find(Keyword_list, Desired_key) ->
+ find_map(
+ Keyword_list,
+ fun(Keyword) ->
+ {Key, Value} = Keyword,
+ case Key =:= Desired_key of
+ true ->
+ {ok, Value};
+
+ false ->
+ {error, nil}
+ end
+ end
+ ).
+
+-spec key_filter(list({AGF, AGG}), AGF) -> list(AGG).
+key_filter(Keyword_list, Desired_key) ->
+ filter_map(
+ Keyword_list,
+ fun(Keyword) ->
+ {Key, Value} = Keyword,
+ case Key =:= Desired_key of
+ true ->
+ {ok, Value};
+
+ false ->
+ {error, nil}
+ end
+ end
+ ).
+
+-spec do_pop(list(AWT), fun((AWT) -> boolean()), list(AWT)) -> {ok,
+ {AWT, list(AWT)}} |
+ {error, nil}.
+do_pop(Haystack, Predicate, Checked) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Predicate(X) of
+ true ->
+ {ok, {X, append(reverse(Checked), Rest)}};
+
+ false ->
+ do_pop(Rest, Predicate, [X | Checked])
+ end
+ end.
+
+-spec pop(list(AGN), fun((AGN) -> boolean())) -> {ok, {AGN, list(AGN)}} |
+ {error, nil}.
+pop(Haystack, Is_desired) ->
+ do_pop(Haystack, Is_desired, []).
+
+-spec do_pop_map(list(AXH), fun((AXH) -> {ok, AXU} | {error, any()}), list(AXH)) -> {ok,
+ {AXU, list(AXH)}} |
+ {error, nil}.
+do_pop_map(Haystack, Mapper, Checked) ->
+ case Haystack of
+ [] ->
+ {error, nil};
+
+ [X | Rest] ->
+ case Mapper(X) of
+ {ok, Y} ->
+ {ok, {Y, append(reverse(Checked), Rest)}};
+
+ {error, _} ->
+ do_pop_map(Rest, Mapper, [X | Checked])
+ end
+ end.
+
+-spec pop_map(list(AGW), fun((AGW) -> {ok, AGY} | {error, any()})) -> {ok,
+ {AGY, list(AGW)}} |
+ {error, nil}.
+pop_map(Haystack, Is_desired) ->
+ do_pop_map(Haystack, Is_desired, []).
+
+-spec key_pop(list({AHF, AHG}), AHF) -> {ok, {AHG, list({AHF, AHG})}} |
+ {error, nil}.
+key_pop(Haystack, Key) ->
+ pop_map(
+ Haystack,
+ fun(Entry) ->
+ {K, V} = Entry,
+ case K of
+ K@1 when K@1 =:= Key ->
+ {ok, V};
+
+ _ ->
+ {error, nil}
+ end
+ end
+ ).
+
+-spec key_set(list({AHL, AHM}), AHL, AHM) -> list({AHL, AHM}).
+key_set(List, Key, Value) ->
+ case List of
+ [] ->
+ [{Key, Value}];
+
+ [{K, _} | Rest] when K =:= Key ->
+ [{Key, Value} | Rest];
+
+ [First | Rest@1] ->
+ [First | key_set(Rest@1, Key, Value)]
+ end.
+
+-spec each(list(AHP), fun((AHP) -> any())) -> nil.
+each(List, F) ->
+ case List of
+ [] ->
+ nil;
+
+ [X | Xs] ->
+ F(X),
+ each(Xs, F)
+ end.
+
+-spec try_each(list(AHS), fun((AHS) -> {ok, any()} | {error, AHV})) -> {ok, nil} |
+ {error, AHV}.
+try_each(List, Fun) ->
+ case List of
+ [] ->
+ {ok, nil};
+
+ [X | Xs] ->
+ case Fun(X) of
+ {ok, _} ->
+ try_each(Xs, Fun);
+
+ {error, E} ->
+ {error, E}
+ end
+ end.
+
+-spec do_partition(list(AZB), fun((AZB) -> boolean()), list(AZB), list(AZB)) -> {list(AZB),
+ list(AZB)}.
+do_partition(List, Categorise, Trues, Falses) ->
+ case List of
+ [] ->
+ {reverse(Trues), reverse(Falses)};
+
+ [X | Xs] ->
+ case Categorise(X) of
+ true ->
+ do_partition(Xs, Categorise, [X | Trues], Falses);
+
+ false ->
+ do_partition(Xs, Categorise, Trues, [X | Falses])
+ end
+ end.
+
+-spec partition(list(AIF), fun((AIF) -> boolean())) -> {list(AIF), list(AIF)}.
+partition(List, Categorise) ->
+ do_partition(List, Categorise, [], []).
+
+-spec permutations(list(AIJ)) -> list(list(AIJ)).
+permutations(L) ->
+ case L of
+ [] ->
+ [[]];
+
+ _ ->
+ _pipe = L,
+ _pipe@5 = index_map(_pipe, fun(I_idx, I) -> _pipe@1 = L,
+ _pipe@2 = index_fold(
+ _pipe@1,
+ [],
+ fun(Acc, J, J_idx) -> case I_idx =:= J_idx of
+ true ->
+ Acc;
+
+ false ->
+ [J | Acc]
+ end end
+ ),
+ _pipe@3 = reverse(_pipe@2),
+ _pipe@4 = permutations(_pipe@3),
+ map(_pipe@4, fun(Permutation) -> [I | Permutation] end) end),
+ concat(_pipe@5)
+ end.
+
+-spec do_window(list(list(AIN)), list(AIN), integer()) -> list(list(AIN)).
+do_window(Acc, L, N) ->
+ Window = take(L, N),
+ case length(Window) =:= N of
+ true ->
+ do_window([Window | Acc], drop(L, 1), N);
+
+ false ->
+ Acc
+ end.
+
+-spec window(list(AIT), integer()) -> list(list(AIT)).
+window(L, N) ->
+ _pipe = do_window([], L, N),
+ reverse(_pipe).
+
+-spec window_by_2(list(AIX)) -> list({AIX, AIX}).
+window_by_2(L) ->
+ zip(L, drop(L, 1)).
+
+-spec drop_while(list(AJA), fun((AJA) -> boolean())) -> list(AJA).
+drop_while(List, Predicate) ->
+ case List of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ case Predicate(X) of
+ true ->
+ drop_while(Xs, Predicate);
+
+ false ->
+ [X | Xs]
+ end
+ end.
+
+-spec do_take_while(list(AJD), fun((AJD) -> boolean()), list(AJD)) -> list(AJD).
+do_take_while(List, Predicate, Acc) ->
+ case List of
+ [] ->
+ reverse(Acc);
+
+ [First | Rest] ->
+ case Predicate(First) of
+ true ->
+ do_take_while(Rest, Predicate, [First | Acc]);
+
+ false ->
+ reverse(Acc)
+ end
+ end.
+
+-spec take_while(list(AJH), fun((AJH) -> boolean())) -> list(AJH).
+take_while(List, Predicate) ->
+ do_take_while(List, Predicate, []).
+
+-spec do_chunk(list(AJK), fun((AJK) -> AJM), AJM, list(AJK), list(list(AJK))) -> list(list(AJK)).
+do_chunk(List, F, Previous_key, Current_chunk, Acc) ->
+ case List of
+ [First | Rest] ->
+ Key = F(First),
+ case Key =:= Previous_key of
+ false ->
+ New_acc = [reverse(Current_chunk) | Acc],
+ do_chunk(Rest, F, Key, [First], New_acc);
+
+ _ ->
+ do_chunk(Rest, F, Key, [First | Current_chunk], Acc)
+ end;
+
+ _ ->
+ reverse([reverse(Current_chunk) | Acc])
+ end.
+
+-spec chunk(list(AJS), fun((AJS) -> any())) -> list(list(AJS)).
+chunk(List, F) ->
+ case List of
+ [] ->
+ [];
+
+ [First | Rest] ->
+ do_chunk(Rest, F, F(First), [First], [])
+ end.
+
+-spec do_sized_chunk(
+ list(AJX),
+ integer(),
+ integer(),
+ list(AJX),
+ list(list(AJX))
+) -> list(list(AJX)).
+do_sized_chunk(List, Count, Left, Current_chunk, Acc) ->
+ case List of
+ [] ->
+ case Current_chunk of
+ [] ->
+ reverse(Acc);
+
+ Remaining ->
+ reverse([reverse(Remaining) | Acc])
+ end;
+
+ [First | Rest] ->
+ Chunk = [First | Current_chunk],
+ case Left > 1 of
+ false ->
+ do_sized_chunk(
+ Rest,
+ Count,
+ Count,
+ [],
+ [reverse(Chunk) | Acc]
+ );
+
+ true ->
+ do_sized_chunk(Rest, Count, Left - 1, Chunk, Acc)
+ end
+ end.
+
+-spec sized_chunk(list(AKE), integer()) -> list(list(AKE)).
+sized_chunk(List, Count) ->
+ do_sized_chunk(List, Count, Count, [], []).
+
+-spec reduce(list(AKI), fun((AKI, AKI) -> AKI)) -> {ok, AKI} | {error, nil}.
+reduce(List, Fun) ->
+ case List of
+ [] ->
+ {error, nil};
+
+ [First | Rest] ->
+ {ok, fold(Rest, First, Fun)}
+ end.
+
+-spec do_scan(list(AKM), AKO, list(AKO), fun((AKO, AKM) -> AKO)) -> list(AKO).
+do_scan(List, Accumulator, Accumulated, Fun) ->
+ case List of
+ [] ->
+ reverse(Accumulated);
+
+ [X | Xs] ->
+ Next = Fun(Accumulator, X),
+ do_scan(Xs, Next, [Next | Accumulated], Fun)
+ end.
+
+-spec scan(list(AKR), AKT, fun((AKT, AKR) -> AKT)) -> list(AKT).
+scan(List, Initial, Fun) ->
+ do_scan(List, Initial, [], Fun).
+
+-spec last(list(AKV)) -> {ok, AKV} | {error, nil}.
+last(List) ->
+ _pipe = List,
+ reduce(_pipe, fun(_, Elem) -> Elem end).
+
+-spec combinations(list(AKZ), integer()) -> list(list(AKZ)).
+combinations(Items, N) ->
+ case N of
+ 0 ->
+ [[]];
+
+ _ ->
+ case Items of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ First_combinations = begin
+ _pipe = map(
+ combinations(Xs, N - 1),
+ fun(Com) -> [X | Com] end
+ ),
+ reverse(_pipe)
+ end,
+ fold(
+ First_combinations,
+ combinations(Xs, N),
+ fun(Acc, C) -> [C | Acc] end
+ )
+ end
+ end.
+
+-spec do_combination_pairs(list(ALD)) -> list(list({ALD, ALD})).
+do_combination_pairs(Items) ->
+ case Items of
+ [] ->
+ [];
+
+ [X | Xs] ->
+ First_combinations = map(Xs, fun(Other) -> {X, Other} end),
+ [First_combinations | do_combination_pairs(Xs)]
+ end.
+
+-spec combination_pairs(list(ALH)) -> list({ALH, ALH}).
+combination_pairs(Items) ->
+ _pipe = do_combination_pairs(Items),
+ concat(_pipe).
+
+-spec transpose(list(list(ALO))) -> list(list(ALO)).
+transpose(List_of_list) ->
+ Take_first = fun(List) -> case List of
+ [] ->
+ [];
+
+ [F] ->
+ [F];
+
+ [F@1 | _] ->
+ [F@1]
+ end end,
+ case List_of_list of
+ [] ->
+ [];
+
+ [[] | Xss] ->
+ transpose(Xss);
+
+ Rows ->
+ Firsts = begin
+ _pipe = Rows,
+ _pipe@1 = map(_pipe, Take_first),
+ concat(_pipe@1)
+ end,
+ Rest = transpose(map(Rows, fun(_capture) -> drop(_capture, 1) end)),
+ [Firsts | Rest]
+ end.
+
+-spec interleave(list(list(ALK))) -> list(ALK).
+interleave(List) ->
+ _pipe = transpose(List),
+ concat(_pipe).
+
+-spec do_shuffle_pair_unwrap(list({float(), ALT}), list(ALT)) -> list(ALT).
+do_shuffle_pair_unwrap(List, Acc) ->
+ case List of
+ [] ->
+ Acc;
+
+ [Elem_pair | Enumerable] ->
+ do_shuffle_pair_unwrap(
+ Enumerable,
+ [erlang:element(2, Elem_pair) | Acc]
+ )
+ end.
+
+-spec do_shuffle_by_pair_indexes(list({float(), ALX})) -> list({float(), ALX}).
+do_shuffle_by_pair_indexes(List_of_pairs) ->
+ sort(
+ List_of_pairs,
+ fun(A_pair, B_pair) ->
+ gleam@float:compare(
+ erlang:element(1, A_pair),
+ erlang:element(1, B_pair)
+ )
+ end
+ ).
+
+-spec shuffle(list(AMA)) -> list(AMA).
+shuffle(List) ->
+ _pipe = List,
+ _pipe@1 = fold(
+ _pipe,
+ [],
+ fun(Acc, A) -> [{gleam@float:random(+0.0, 1.0), A} | Acc] end
+ ),
+ _pipe@2 = do_shuffle_by_pair_indexes(_pipe@1),
+ do_shuffle_pair_unwrap(_pipe@2, []).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl
new file mode 100644
index 0000000..33e89a9
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@map.erl
@@ -0,0 +1,76 @@
+-module(gleam@map).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
+
+-spec size(gleam@dict:dict(any(), any())) -> integer().
+size(Map) ->
+ gleam@dict:size(Map).
+
+-spec to_list(gleam@dict:dict(DAJ, DAK)) -> list({DAJ, DAK}).
+to_list(Map) ->
+ gleam@dict:to_list(Map).
+
+-spec from_list(list({DAM, DAN})) -> gleam@dict:dict(DAM, DAN).
+from_list(List) ->
+ gleam@dict:from_list(List).
+
+-spec has_key(gleam@dict:dict(DAR, any()), DAR) -> boolean().
+has_key(Map, Key) ->
+ gleam@dict:has_key(Map, Key).
+
+-spec new() -> gleam@dict:dict(any(), any()).
+new() ->
+ gleam@dict:new().
+
+-spec get(gleam@dict:dict(DAU, DAV), DAU) -> {ok, DAV} | {error, nil}.
+get(From, Get) ->
+ gleam@dict:get(From, Get).
+
+-spec insert(gleam@dict:dict(DAZ, DBA), DAZ, DBA) -> gleam@dict:dict(DAZ, DBA).
+insert(Map, Key, Value) ->
+ gleam@dict:insert(Map, Key, Value).
+
+-spec map_values(gleam@dict:dict(DBD, DBE), fun((DBD, DBE) -> DBF)) -> gleam@dict:dict(DBD, DBF).
+map_values(Map, Fun) ->
+ gleam@dict:map_values(Map, Fun).
+
+-spec keys(gleam@dict:dict(DBI, any())) -> list(DBI).
+keys(Map) ->
+ gleam@dict:keys(Map).
+
+-spec values(gleam@dict:dict(any(), DBL)) -> list(DBL).
+values(Map) ->
+ gleam@dict:values(Map).
+
+-spec filter(gleam@dict:dict(DBO, DBP), fun((DBO, DBP) -> boolean())) -> gleam@dict:dict(DBO, DBP).
+filter(Map, Predicate) ->
+ gleam@dict:filter(Map, Predicate).
+
+-spec take(gleam@dict:dict(DBS, DDM), list(DBS)) -> gleam@dict:dict(DBS, DDM).
+take(Map, Desired_keys) ->
+ gleam@dict:take(Map, Desired_keys).
+
+-spec merge(gleam@dict:dict(DDN, DDO), gleam@dict:dict(DDN, DDO)) -> gleam@dict:dict(DDN, DDO).
+merge(Map, New_entries) ->
+ gleam@dict:merge(Map, New_entries).
+
+-spec delete(gleam@dict:dict(DBZ, DDQ), DBZ) -> gleam@dict:dict(DBZ, DDQ).
+delete(Map, Key) ->
+ gleam@dict:delete(Map, Key).
+
+-spec drop(gleam@dict:dict(DCC, DDS), list(DCC)) -> gleam@dict:dict(DCC, DDS).
+drop(Map, Disallowed_keys) ->
+ gleam@dict:drop(Map, Disallowed_keys).
+
+-spec update(
+ gleam@dict:dict(DCG, DCH),
+ DCG,
+ fun((gleam@option:option(DCH)) -> DCH)
+) -> gleam@dict:dict(DCG, DCH).
+update(Map, Key, Fun) ->
+ gleam@dict:update(Map, Key, Fun).
+
+-spec fold(gleam@dict:dict(DCM, DCN), DCL, fun((DCL, DCM, DCN) -> DCL)) -> DCL.
+fold(Map, Initial, Fun) ->
+ gleam@dict:fold(Map, Initial, Fun).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl
new file mode 100644
index 0000000..5c20713
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@option.erl
@@ -0,0 +1,147 @@
+-module(gleam@option).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([all/1, is_some/1, is_none/1, to_result/2, from_result/1, unwrap/2, lazy_unwrap/2, map/2, flatten/1, then/2, 'or'/2, lazy_or/2, values/1]).
+-export_type([option/1]).
+
+-type option(GB) :: {some, GB} | none.
+
+-spec do_all(list(option(GC)), list(GC)) -> option(list(GC)).
+do_all(List, Acc) ->
+ case List of
+ [] ->
+ {some, Acc};
+
+ [X | Rest] ->
+ Accumulate = fun(Acc@1, Item) -> case {Acc@1, Item} of
+ {{some, Values}, {some, Value}} ->
+ {some, [Value | Values]};
+
+ {_, _} ->
+ none
+ end end,
+ Accumulate(do_all(Rest, Acc), X)
+ end.
+
+-spec all(list(option(GI))) -> option(list(GI)).
+all(List) ->
+ do_all(List, []).
+
+-spec is_some(option(any())) -> boolean().
+is_some(Option) ->
+ Option /= none.
+
+-spec is_none(option(any())) -> boolean().
+is_none(Option) ->
+ Option =:= none.
+
+-spec to_result(option(GR), GU) -> {ok, GR} | {error, GU}.
+to_result(Option, E) ->
+ case Option of
+ {some, A} ->
+ {ok, A};
+
+ _ ->
+ {error, E}
+ end.
+
+-spec from_result({ok, GX} | {error, any()}) -> option(GX).
+from_result(Result) ->
+ case Result of
+ {ok, A} ->
+ {some, A};
+
+ _ ->
+ none
+ end.
+
+-spec unwrap(option(HC), HC) -> HC.
+unwrap(Option, Default) ->
+ case Option of
+ {some, X} ->
+ X;
+
+ none ->
+ Default
+ end.
+
+-spec lazy_unwrap(option(HE), fun(() -> HE)) -> HE.
+lazy_unwrap(Option, Default) ->
+ case Option of
+ {some, X} ->
+ X;
+
+ none ->
+ Default()
+ end.
+
+-spec map(option(HG), fun((HG) -> HI)) -> option(HI).
+map(Option, Fun) ->
+ case Option of
+ {some, X} ->
+ {some, Fun(X)};
+
+ none ->
+ none
+ end.
+
+-spec flatten(option(option(HK))) -> option(HK).
+flatten(Option) ->
+ case Option of
+ {some, X} ->
+ X;
+
+ none ->
+ none
+ end.
+
+-spec then(option(HO), fun((HO) -> option(HQ))) -> option(HQ).
+then(Option, Fun) ->
+ case Option of
+ {some, X} ->
+ Fun(X);
+
+ none ->
+ none
+ end.
+
+-spec 'or'(option(HT), option(HT)) -> option(HT).
+'or'(First, Second) ->
+ case First of
+ {some, _} ->
+ First;
+
+ none ->
+ Second
+ end.
+
+-spec lazy_or(option(HX), fun(() -> option(HX))) -> option(HX).
+lazy_or(First, Second) ->
+ case First of
+ {some, _} ->
+ First;
+
+ none ->
+ Second()
+ end.
+
+-spec do_values(list(option(IB)), list(IB)) -> list(IB).
+do_values(List, Acc) ->
+ case List of
+ [] ->
+ Acc;
+
+ [X | Xs] ->
+ Accumulate = fun(Acc@1, Item) -> case Item of
+ {some, Value} ->
+ [Value | Acc@1];
+
+ none ->
+ Acc@1
+ end end,
+ Accumulate(do_values(Xs, Acc), X)
+ end.
+
+-spec values(list(option(IG))) -> list(IG).
+values(Options) ->
+ do_values(Options, []).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl
new file mode 100644
index 0000000..61649b9
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@order.erl
@@ -0,0 +1,79 @@
+-module(gleam@order).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([negate/1, to_int/1, compare/2, max/2, min/2, reverse/1]).
+-export_type([order/0]).
+
+-type order() :: lt | eq | gt.
+
+-spec negate(order()) -> order().
+negate(Order) ->
+ case Order of
+ lt ->
+ gt;
+
+ eq ->
+ eq;
+
+ gt ->
+ lt
+ end.
+
+-spec to_int(order()) -> integer().
+to_int(Order) ->
+ case Order of
+ lt ->
+ -1;
+
+ eq ->
+ 0;
+
+ gt ->
+ 1
+ end.
+
+-spec compare(order(), order()) -> order().
+compare(A, B) ->
+ case {A, B} of
+ {X, Y} when X =:= Y ->
+ eq;
+
+ {lt, _} ->
+ lt;
+
+ {eq, gt} ->
+ lt;
+
+ {_, _} ->
+ gt
+ end.
+
+-spec max(order(), order()) -> order().
+max(A, B) ->
+ case {A, B} of
+ {gt, _} ->
+ gt;
+
+ {eq, lt} ->
+ eq;
+
+ {_, _} ->
+ B
+ end.
+
+-spec min(order(), order()) -> order().
+min(A, B) ->
+ case {A, B} of
+ {lt, _} ->
+ lt;
+
+ {eq, gt} ->
+ eq;
+
+ {_, _} ->
+ B
+ end.
+
+-spec reverse(fun((I, I) -> order())) -> fun((I, I) -> order()).
+reverse(Orderer) ->
+ fun(A, B) -> Orderer(B, A) end.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl
new file mode 100644
index 0000000..f4eff52
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@pair.erl
@@ -0,0 +1,33 @@
+-module(gleam@pair).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([first/1, second/1, swap/1, map_first/2, map_second/2, new/2]).
+
+-spec first({FM, any()}) -> FM.
+first(Pair) ->
+ {A, _} = Pair,
+ A.
+
+-spec second({any(), FP}) -> FP.
+second(Pair) ->
+ {_, A} = Pair,
+ A.
+
+-spec swap({FQ, FR}) -> {FR, FQ}.
+swap(Pair) ->
+ {A, B} = Pair,
+ {B, A}.
+
+-spec map_first({FS, FT}, fun((FS) -> FU)) -> {FU, FT}.
+map_first(Pair, Fun) ->
+ {A, B} = Pair,
+ {Fun(A), B}.
+
+-spec map_second({FV, FW}, fun((FW) -> FX)) -> {FV, FX}.
+map_second(Pair, Fun) ->
+ {A, B} = Pair,
+ {A, Fun(B)}.
+
+-spec new(FY, FZ) -> {FY, FZ}.
+new(First, Second) ->
+ {First, Second}.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl
new file mode 100644
index 0000000..6b587e7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@queue.erl
@@ -0,0 +1,121 @@
+-module(gleam@queue).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, from_list/1, to_list/1, is_empty/1, length/1, push_back/2, push_front/2, pop_back/1, pop_front/1, reverse/1, is_logically_equal/3, is_equal/2]).
+-export_type([queue/1]).
+
+-opaque queue(DRL) :: {queue, list(DRL), list(DRL)}.
+
+-spec new() -> queue(any()).
+new() ->
+ {queue, [], []}.
+
+-spec from_list(list(DRO)) -> queue(DRO).
+from_list(List) ->
+ {queue, [], List}.
+
+-spec to_list(queue(DRR)) -> list(DRR).
+to_list(Queue) ->
+ _pipe = erlang:element(3, Queue),
+ gleam@list:append(_pipe, gleam@list:reverse(erlang:element(2, Queue))).
+
+-spec is_empty(queue(any())) -> boolean().
+is_empty(Queue) ->
+ (erlang:element(2, Queue) =:= []) andalso (erlang:element(3, Queue) =:= []).
+
+-spec length(queue(any())) -> integer().
+length(Queue) ->
+ gleam@list:length(erlang:element(2, Queue)) + gleam@list:length(
+ erlang:element(3, Queue)
+ ).
+
+-spec push_back(queue(DRY), DRY) -> queue(DRY).
+push_back(Queue, Item) ->
+ {queue, [Item | erlang:element(2, Queue)], erlang:element(3, Queue)}.
+
+-spec push_front(queue(DSB), DSB) -> queue(DSB).
+push_front(Queue, Item) ->
+ {queue, erlang:element(2, Queue), [Item | erlang:element(3, Queue)]}.
+
+-spec pop_back(queue(DSE)) -> {ok, {DSE, queue(DSE)}} | {error, nil}.
+pop_back(Queue) ->
+ case Queue of
+ {queue, [], []} ->
+ {error, nil};
+
+ {queue, [], Out} ->
+ pop_back({queue, gleam@list:reverse(Out), []});
+
+ {queue, [First | Rest], Out@1} ->
+ Queue@1 = {queue, Rest, Out@1},
+ {ok, {First, Queue@1}}
+ end.
+
+-spec pop_front(queue(DSJ)) -> {ok, {DSJ, queue(DSJ)}} | {error, nil}.
+pop_front(Queue) ->
+ case Queue of
+ {queue, [], []} ->
+ {error, nil};
+
+ {queue, In, []} ->
+ pop_front({queue, [], gleam@list:reverse(In)});
+
+ {queue, In@1, [First | Rest]} ->
+ Queue@1 = {queue, In@1, Rest},
+ {ok, {First, Queue@1}}
+ end.
+
+-spec reverse(queue(DSO)) -> queue(DSO).
+reverse(Queue) ->
+ {queue, erlang:element(3, Queue), erlang:element(2, Queue)}.
+
+-spec check_equal(
+ list(DSR),
+ list(DSR),
+ list(DSR),
+ list(DSR),
+ fun((DSR, DSR) -> boolean())
+) -> boolean().
+check_equal(Xs, X_tail, Ys, Y_tail, Eq) ->
+ case {Xs, X_tail, Ys, Y_tail} of
+ {[], [], [], []} ->
+ true;
+
+ {[X | Xs@1], _, [Y | Ys@1], _} ->
+ case Eq(X, Y) of
+ false ->
+ false;
+
+ true ->
+ check_equal(Xs@1, X_tail, Ys@1, Y_tail, Eq)
+ end;
+
+ {[], [_ | _], _, _} ->
+ check_equal(gleam@list:reverse(X_tail), [], Ys, Y_tail, Eq);
+
+ {_, _, [], [_ | _]} ->
+ check_equal(Xs, X_tail, gleam@list:reverse(Y_tail), [], Eq);
+
+ {_, _, _, _} ->
+ false
+ end.
+
+-spec is_logically_equal(queue(DSW), queue(DSW), fun((DSW, DSW) -> boolean())) -> boolean().
+is_logically_equal(A, B, Element_is_equal) ->
+ check_equal(
+ erlang:element(3, A),
+ erlang:element(2, A),
+ erlang:element(3, B),
+ erlang:element(2, B),
+ Element_is_equal
+ ).
+
+-spec is_equal(queue(DSZ), queue(DSZ)) -> boolean().
+is_equal(A, B) ->
+ check_equal(
+ erlang:element(3, A),
+ erlang:element(2, A),
+ erlang:element(3, B),
+ erlang:element(2, B),
+ fun(A@1, B@1) -> A@1 =:= B@1 end
+ ).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl
new file mode 100644
index 0000000..2d1c5fc
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@regex.erl
@@ -0,0 +1,33 @@
+-module(gleam@regex).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([compile/2, from_string/1, check/2, split/2, scan/2]).
+-export_type([regex/0, match/0, compile_error/0, options/0]).
+
+-type regex() :: any().
+
+-type match() :: {match, binary(), list(gleam@option:option(binary()))}.
+
+-type compile_error() :: {compile_error, binary(), integer()}.
+
+-type options() :: {options, boolean(), boolean()}.
+
+-spec compile(binary(), options()) -> {ok, regex()} | {error, compile_error()}.
+compile(Pattern, Options) ->
+ gleam_stdlib:compile_regex(Pattern, Options).
+
+-spec from_string(binary()) -> {ok, regex()} | {error, compile_error()}.
+from_string(Pattern) ->
+ compile(Pattern, {options, false, false}).
+
+-spec check(regex(), binary()) -> boolean().
+check(Regex, Content) ->
+ gleam_stdlib:regex_check(Regex, Content).
+
+-spec split(regex(), binary()) -> list(binary()).
+split(Regex, String) ->
+ gleam_stdlib:regex_split(Regex, String).
+
+-spec scan(regex(), binary()) -> list(match()).
+scan(Regex, String) ->
+ gleam_stdlib:regex_scan(Regex, String).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl
new file mode 100644
index 0000000..7324e45
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@result.erl
@@ -0,0 +1,201 @@
+-module(gleam@result).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([is_ok/1, is_error/1, map/2, map_error/2, flatten/1, 'try'/2, then/2, unwrap/2, lazy_unwrap/2, unwrap_error/2, unwrap_both/1, nil_error/1, 'or'/2, lazy_or/2, all/1, partition/1, replace/2, replace_error/2, values/1, try_recover/2]).
+
+-spec is_ok({ok, any()} | {error, any()}) -> boolean().
+is_ok(Result) ->
+ case Result of
+ {error, _} ->
+ false;
+
+ {ok, _} ->
+ true
+ end.
+
+-spec is_error({ok, any()} | {error, any()}) -> boolean().
+is_error(Result) ->
+ case Result of
+ {ok, _} ->
+ false;
+
+ {error, _} ->
+ true
+ end.
+
+-spec map({ok, BFM} | {error, BFN}, fun((BFM) -> BFQ)) -> {ok, BFQ} |
+ {error, BFN}.
+map(Result, Fun) ->
+ case Result of
+ {ok, X} ->
+ {ok, Fun(X)};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec map_error({ok, BFT} | {error, BFU}, fun((BFU) -> BFX)) -> {ok, BFT} |
+ {error, BFX}.
+map_error(Result, Fun) ->
+ case Result of
+ {ok, X} ->
+ {ok, X};
+
+ {error, Error} ->
+ {error, Fun(Error)}
+ end.
+
+-spec flatten({ok, {ok, BGA} | {error, BGB}} | {error, BGB}) -> {ok, BGA} |
+ {error, BGB}.
+flatten(Result) ->
+ case Result of
+ {ok, X} ->
+ X;
+
+ {error, Error} ->
+ {error, Error}
+ end.
+
+-spec 'try'({ok, BGI} | {error, BGJ}, fun((BGI) -> {ok, BGM} | {error, BGJ})) -> {ok,
+ BGM} |
+ {error, BGJ}.
+'try'(Result, Fun) ->
+ case Result of
+ {ok, X} ->
+ Fun(X);
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec then({ok, BGR} | {error, BGS}, fun((BGR) -> {ok, BGV} | {error, BGS})) -> {ok,
+ BGV} |
+ {error, BGS}.
+then(Result, Fun) ->
+ 'try'(Result, Fun).
+
+-spec unwrap({ok, BHA} | {error, any()}, BHA) -> BHA.
+unwrap(Result, Default) ->
+ case Result of
+ {ok, V} ->
+ V;
+
+ {error, _} ->
+ Default
+ end.
+
+-spec lazy_unwrap({ok, BHE} | {error, any()}, fun(() -> BHE)) -> BHE.
+lazy_unwrap(Result, Default) ->
+ case Result of
+ {ok, V} ->
+ V;
+
+ {error, _} ->
+ Default()
+ end.
+
+-spec unwrap_error({ok, any()} | {error, BHJ}, BHJ) -> BHJ.
+unwrap_error(Result, Default) ->
+ case Result of
+ {ok, _} ->
+ Default;
+
+ {error, E} ->
+ E
+ end.
+
+-spec unwrap_both({ok, BHM} | {error, BHM}) -> BHM.
+unwrap_both(Result) ->
+ case Result of
+ {ok, A} ->
+ A;
+
+ {error, A@1} ->
+ A@1
+ end.
+
+-spec nil_error({ok, BHP} | {error, any()}) -> {ok, BHP} | {error, nil}.
+nil_error(Result) ->
+ map_error(Result, fun(_) -> nil end).
+
+-spec 'or'({ok, BHV} | {error, BHW}, {ok, BHV} | {error, BHW}) -> {ok, BHV} |
+ {error, BHW}.
+'or'(First, Second) ->
+ case First of
+ {ok, _} ->
+ First;
+
+ {error, _} ->
+ Second
+ end.
+
+-spec lazy_or({ok, BID} | {error, BIE}, fun(() -> {ok, BID} | {error, BIE})) -> {ok,
+ BID} |
+ {error, BIE}.
+lazy_or(First, Second) ->
+ case First of
+ {ok, _} ->
+ First;
+
+ {error, _} ->
+ Second()
+ end.
+
+-spec all(list({ok, BIL} | {error, BIM})) -> {ok, list(BIL)} | {error, BIM}.
+all(Results) ->
+ gleam@list:try_map(Results, fun(X) -> X end).
+
+-spec do_partition(list({ok, BJA} | {error, BJB}), list(BJA), list(BJB)) -> {list(BJA),
+ list(BJB)}.
+do_partition(Results, Oks, Errors) ->
+ case Results of
+ [] ->
+ {Oks, Errors};
+
+ [{ok, A} | Rest] ->
+ do_partition(Rest, [A | Oks], Errors);
+
+ [{error, E} | Rest@1] ->
+ do_partition(Rest@1, Oks, [E | Errors])
+ end.
+
+-spec partition(list({ok, BIT} | {error, BIU})) -> {list(BIT), list(BIU)}.
+partition(Results) ->
+ do_partition(Results, [], []).
+
+-spec replace({ok, any()} | {error, BJJ}, BJM) -> {ok, BJM} | {error, BJJ}.
+replace(Result, Value) ->
+ case Result of
+ {ok, _} ->
+ {ok, Value};
+
+ {error, Error} ->
+ {error, Error}
+ end.
+
+-spec replace_error({ok, BJP} | {error, any()}, BJT) -> {ok, BJP} | {error, BJT}.
+replace_error(Result, Error) ->
+ case Result of
+ {ok, X} ->
+ {ok, X};
+
+ {error, _} ->
+ {error, Error}
+ end.
+
+-spec values(list({ok, BJW} | {error, any()})) -> list(BJW).
+values(Results) ->
+ gleam@list:filter_map(Results, fun(R) -> R end).
+
+-spec try_recover(
+ {ok, BKC} | {error, BKD},
+ fun((BKD) -> {ok, BKC} | {error, BKG})
+) -> {ok, BKC} | {error, BKG}.
+try_recover(Result, Fun) ->
+ case Result of
+ {ok, Value} ->
+ {ok, Value};
+
+ {error, Error} ->
+ Fun(Error)
+ end.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl
new file mode 100644
index 0000000..df87b13
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@set.erl
@@ -0,0 +1,85 @@
+-module(gleam@set).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([new/0, size/1, insert/2, contains/2, delete/2, to_list/1, from_list/1, fold/3, filter/2, drop/2, take/2, union/2, intersection/2]).
+-export_type([set/1]).
+
+-opaque set(DJZ) :: {set, gleam@dict:dict(DJZ, list(nil))}.
+
+-spec new() -> set(any()).
+new() ->
+ {set, gleam@dict:new()}.
+
+-spec size(set(any())) -> integer().
+size(Set) ->
+ gleam@dict:size(erlang:element(2, Set)).
+
+-spec insert(set(DKF), DKF) -> set(DKF).
+insert(Set, Member) ->
+ {set, gleam@dict:insert(erlang:element(2, Set), Member, [])}.
+
+-spec contains(set(DKI), DKI) -> boolean().
+contains(Set, Member) ->
+ _pipe = erlang:element(2, Set),
+ _pipe@1 = gleam@dict:get(_pipe, Member),
+ gleam@result:is_ok(_pipe@1).
+
+-spec delete(set(DKK), DKK) -> set(DKK).
+delete(Set, Member) ->
+ {set, gleam@dict:delete(erlang:element(2, Set), Member)}.
+
+-spec to_list(set(DKN)) -> list(DKN).
+to_list(Set) ->
+ gleam@dict:keys(erlang:element(2, Set)).
+
+-spec from_list(list(DKQ)) -> set(DKQ).
+from_list(Members) ->
+ Map = gleam@list:fold(
+ Members,
+ gleam@dict:new(),
+ fun(M, K) -> gleam@dict:insert(M, K, []) end
+ ),
+ {set, Map}.
+
+-spec fold(set(DKT), DKV, fun((DKV, DKT) -> DKV)) -> DKV.
+fold(Set, Initial, Reducer) ->
+ gleam@dict:fold(
+ erlang:element(2, Set),
+ Initial,
+ fun(A, K, _) -> Reducer(A, K) end
+ ).
+
+-spec filter(set(DKW), fun((DKW) -> boolean())) -> set(DKW).
+filter(Set, Predicate) ->
+ {set,
+ gleam@dict:filter(erlang:element(2, Set), fun(M, _) -> Predicate(M) end)}.
+
+-spec drop(set(DKZ), list(DKZ)) -> set(DKZ).
+drop(Set, Disallowed) ->
+ gleam@list:fold(Disallowed, Set, fun delete/2).
+
+-spec take(set(DLD), list(DLD)) -> set(DLD).
+take(Set, Desired) ->
+ {set, gleam@dict:take(erlang:element(2, Set), Desired)}.
+
+-spec order(set(DLH), set(DLH)) -> {set(DLH), set(DLH)}.
+order(First, Second) ->
+ case gleam@dict:size(erlang:element(2, First)) > gleam@dict:size(
+ erlang:element(2, Second)
+ ) of
+ true ->
+ {First, Second};
+
+ false ->
+ {Second, First}
+ end.
+
+-spec union(set(DLM), set(DLM)) -> set(DLM).
+union(First, Second) ->
+ {Larger, Smaller} = order(First, Second),
+ fold(Smaller, Larger, fun insert/2).
+
+-spec intersection(set(DLQ), set(DLQ)) -> set(DLQ).
+intersection(First, Second) ->
+ {Larger, Smaller} = order(First, Second),
+ take(Larger, to_list(Smaller)).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl
new file mode 100644
index 0000000..6cba31d
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@string.erl
@@ -0,0 +1,352 @@
+-module(gleam@string).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([is_empty/1, length/1, reverse/1, replace/3, lowercase/1, uppercase/1, compare/2, slice/3, crop/2, drop_left/2, drop_right/2, contains/2, starts_with/2, ends_with/2, split_once/2, append/2, concat/1, repeat/2, join/2, pad_left/3, pad_right/3, trim/1, trim_left/1, trim_right/1, pop_grapheme/1, to_graphemes/1, split/2, to_utf_codepoints/1, from_utf_codepoints/1, utf_codepoint/1, utf_codepoint_to_int/1, to_option/1, first/1, last/1, capitalise/1, inspect/1, byte_size/1]).
+-export_type([direction/0]).
+
+-type direction() :: leading | trailing | both.
+
+-spec is_empty(binary()) -> boolean().
+is_empty(Str) ->
+ Str =:= <<""/utf8>>.
+
+-spec length(binary()) -> integer().
+length(String) ->
+ string:length(String).
+
+-spec do_reverse(binary()) -> binary().
+do_reverse(String) ->
+ _pipe = String,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:reverse(_pipe@1),
+ gleam@string_builder:to_string(_pipe@2).
+
+-spec reverse(binary()) -> binary().
+reverse(String) ->
+ do_reverse(String).
+
+-spec replace(binary(), binary(), binary()) -> binary().
+replace(String, Pattern, Substitute) ->
+ _pipe = String,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:replace(_pipe@1, Pattern, Substitute),
+ gleam@string_builder:to_string(_pipe@2).
+
+-spec lowercase(binary()) -> binary().
+lowercase(String) ->
+ string:lowercase(String).
+
+-spec uppercase(binary()) -> binary().
+uppercase(String) ->
+ string:uppercase(String).
+
+-spec compare(binary(), binary()) -> gleam@order:order().
+compare(A, B) ->
+ case A =:= B of
+ true ->
+ eq;
+
+ _ ->
+ case gleam_stdlib:less_than(A, B) of
+ true ->
+ lt;
+
+ _ ->
+ gt
+ end
+ end.
+
+-spec slice(binary(), integer(), integer()) -> binary().
+slice(String, Idx, Len) ->
+ case Len < 0 of
+ true ->
+ <<""/utf8>>;
+
+ false ->
+ case Idx < 0 of
+ true ->
+ Translated_idx = length(String) + Idx,
+ case Translated_idx < 0 of
+ true ->
+ <<""/utf8>>;
+
+ false ->
+ string:slice(String, Translated_idx, Len)
+ end;
+
+ false ->
+ string:slice(String, Idx, Len)
+ end
+ end.
+
+-spec crop(binary(), binary()) -> binary().
+crop(String, Substring) ->
+ gleam_stdlib:crop_string(String, Substring).
+
+-spec drop_left(binary(), integer()) -> binary().
+drop_left(String, Num_graphemes) ->
+ case Num_graphemes < 0 of
+ true ->
+ String;
+
+ false ->
+ slice(String, Num_graphemes, length(String) - Num_graphemes)
+ end.
+
+-spec drop_right(binary(), integer()) -> binary().
+drop_right(String, Num_graphemes) ->
+ case Num_graphemes < 0 of
+ true ->
+ String;
+
+ false ->
+ slice(String, 0, length(String) - Num_graphemes)
+ end.
+
+-spec contains(binary(), binary()) -> boolean().
+contains(Haystack, Needle) ->
+ gleam_stdlib:contains_string(Haystack, Needle).
+
+-spec starts_with(binary(), binary()) -> boolean().
+starts_with(String, Prefix) ->
+ gleam_stdlib:string_starts_with(String, Prefix).
+
+-spec ends_with(binary(), binary()) -> boolean().
+ends_with(String, Suffix) ->
+ gleam_stdlib:string_ends_with(String, Suffix).
+
+-spec do_split_once(binary(), binary()) -> {ok, {binary(), binary()}} |
+ {error, nil}.
+do_split_once(X, Substring) ->
+ case string:split(X, Substring) of
+ [First, Rest] ->
+ {ok, {First, Rest}};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec split_once(binary(), binary()) -> {ok, {binary(), binary()}} |
+ {error, nil}.
+split_once(X, Substring) ->
+ do_split_once(X, Substring).
+
+-spec append(binary(), binary()) -> binary().
+append(First, Second) ->
+ _pipe = First,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:append(_pipe@1, Second),
+ gleam@string_builder:to_string(_pipe@2).
+
+-spec concat(list(binary())) -> binary().
+concat(Strings) ->
+ _pipe = Strings,
+ _pipe@1 = gleam@string_builder:from_strings(_pipe),
+ gleam@string_builder:to_string(_pipe@1).
+
+-spec repeat(binary(), integer()) -> binary().
+repeat(String, Times) ->
+ _pipe = gleam@iterator:repeat(String),
+ _pipe@1 = gleam@iterator:take(_pipe, Times),
+ _pipe@2 = gleam@iterator:to_list(_pipe@1),
+ concat(_pipe@2).
+
+-spec do_join(list(binary()), binary()) -> binary().
+do_join(Strings, Separator) ->
+ _pipe = Strings,
+ _pipe@1 = gleam@list:intersperse(_pipe, Separator),
+ concat(_pipe@1).
+
+-spec join(list(binary()), binary()) -> binary().
+join(Strings, Separator) ->
+ do_join(Strings, Separator).
+
+-spec padding(integer(), binary()) -> gleam@iterator:iterator(binary()).
+padding(Size, Pad_string) ->
+ Pad_length = length(Pad_string),
+ Num_pads = case Pad_length of
+ 0 -> 0;
+ Gleam@denominator -> Size div Gleam@denominator
+ end,
+ Extra = case Pad_length of
+ 0 -> 0;
+ Gleam@denominator@1 -> Size rem Gleam@denominator@1
+ end,
+ _pipe = gleam@iterator:repeat(Pad_string),
+ _pipe@1 = gleam@iterator:take(_pipe, Num_pads),
+ gleam@iterator:append(
+ _pipe@1,
+ gleam@iterator:single(slice(Pad_string, 0, Extra))
+ ).
+
+-spec pad_left(binary(), integer(), binary()) -> binary().
+pad_left(String, Desired_length, Pad_string) ->
+ Current_length = length(String),
+ To_pad_length = Desired_length - Current_length,
+ _pipe = padding(To_pad_length, Pad_string),
+ _pipe@1 = gleam@iterator:append(_pipe, gleam@iterator:single(String)),
+ _pipe@2 = gleam@iterator:to_list(_pipe@1),
+ concat(_pipe@2).
+
+-spec pad_right(binary(), integer(), binary()) -> binary().
+pad_right(String, Desired_length, Pad_string) ->
+ Current_length = length(String),
+ To_pad_length = Desired_length - Current_length,
+ _pipe = gleam@iterator:single(String),
+ _pipe@1 = gleam@iterator:append(_pipe, padding(To_pad_length, Pad_string)),
+ _pipe@2 = gleam@iterator:to_list(_pipe@1),
+ concat(_pipe@2).
+
+-spec do_trim(binary()) -> binary().
+do_trim(String) ->
+ string:trim(String, both).
+
+-spec trim(binary()) -> binary().
+trim(String) ->
+ do_trim(String).
+
+-spec do_trim_left(binary()) -> binary().
+do_trim_left(String) ->
+ string:trim(String, leading).
+
+-spec trim_left(binary()) -> binary().
+trim_left(String) ->
+ do_trim_left(String).
+
+-spec do_trim_right(binary()) -> binary().
+do_trim_right(String) ->
+ string:trim(String, trailing).
+
+-spec trim_right(binary()) -> binary().
+trim_right(String) ->
+ do_trim_right(String).
+
+-spec pop_grapheme(binary()) -> {ok, {binary(), binary()}} | {error, nil}.
+pop_grapheme(String) ->
+ gleam_stdlib:string_pop_grapheme(String).
+
+-spec do_to_graphemes(binary(), list(binary())) -> list(binary()).
+do_to_graphemes(String, Acc) ->
+ case pop_grapheme(String) of
+ {ok, {Grapheme, Rest}} ->
+ do_to_graphemes(Rest, [Grapheme | Acc]);
+
+ _ ->
+ Acc
+ end.
+
+-spec to_graphemes(binary()) -> list(binary()).
+to_graphemes(String) ->
+ _pipe = do_to_graphemes(String, []),
+ gleam@list:reverse(_pipe).
+
+-spec split(binary(), binary()) -> list(binary()).
+split(X, Substring) ->
+ case Substring of
+ <<""/utf8>> ->
+ to_graphemes(X);
+
+ _ ->
+ _pipe = X,
+ _pipe@1 = gleam@string_builder:from_string(_pipe),
+ _pipe@2 = gleam@string_builder:split(_pipe@1, Substring),
+ gleam@list:map(_pipe@2, fun gleam@string_builder:to_string/1)
+ end.
+
+-spec do_to_utf_codepoints_impl(bitstring(), list(integer())) -> list(integer()).
+do_to_utf_codepoints_impl(Bit_array, Acc) ->
+ case Bit_array of
+ <<First/utf8, Rest/binary>> ->
+ do_to_utf_codepoints_impl(Rest, [First | Acc]);
+
+ _ ->
+ Acc
+ end.
+
+-spec do_to_utf_codepoints(binary()) -> list(integer()).
+do_to_utf_codepoints(String) ->
+ _pipe = do_to_utf_codepoints_impl(<<String/binary>>, []),
+ gleam@list:reverse(_pipe).
+
+-spec to_utf_codepoints(binary()) -> list(integer()).
+to_utf_codepoints(String) ->
+ do_to_utf_codepoints(String).
+
+-spec from_utf_codepoints(list(integer())) -> binary().
+from_utf_codepoints(Utf_codepoints) ->
+ gleam_stdlib:utf_codepoint_list_to_string(Utf_codepoints).
+
+-spec utf_codepoint(integer()) -> {ok, integer()} | {error, nil}.
+utf_codepoint(Value) ->
+ case Value of
+ I when I > 1114111 ->
+ {error, nil};
+
+ 65534 ->
+ {error, nil};
+
+ 65535 ->
+ {error, nil};
+
+ I@1 when (I@1 >= 55296) andalso (I@1 =< 57343) ->
+ {error, nil};
+
+ I@2 ->
+ {ok, gleam_stdlib:identity(I@2)}
+ end.
+
+-spec utf_codepoint_to_int(integer()) -> integer().
+utf_codepoint_to_int(Cp) ->
+ gleam_stdlib:identity(Cp).
+
+-spec to_option(binary()) -> gleam@option:option(binary()).
+to_option(S) ->
+ case S of
+ <<""/utf8>> ->
+ none;
+
+ _ ->
+ {some, S}
+ end.
+
+-spec first(binary()) -> {ok, binary()} | {error, nil}.
+first(S) ->
+ case pop_grapheme(S) of
+ {ok, {First, _}} ->
+ {ok, First};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec last(binary()) -> {ok, binary()} | {error, nil}.
+last(S) ->
+ case pop_grapheme(S) of
+ {ok, {First, <<""/utf8>>}} ->
+ {ok, First};
+
+ {ok, {_, Rest}} ->
+ {ok, slice(Rest, -1, 1)};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec capitalise(binary()) -> binary().
+capitalise(S) ->
+ case pop_grapheme(S) of
+ {ok, {First, Rest}} ->
+ append(uppercase(First), lowercase(Rest));
+
+ _ ->
+ <<""/utf8>>
+ end.
+
+-spec inspect(any()) -> binary().
+inspect(Term) ->
+ _pipe = gleam_stdlib:inspect(Term),
+ gleam@string_builder:to_string(_pipe).
+
+-spec byte_size(binary()) -> integer().
+byte_size(String) ->
+ erlang:byte_size(String).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl
new file mode 100644
index 0000000..693e840
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@string_builder.erl
@@ -0,0 +1,91 @@
+-module(gleam@string_builder).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([prepend_builder/2, append_builder/2, new/0, from_strings/1, concat/1, from_string/1, prepend/2, append/2, to_string/1, byte_size/1, join/2, lowercase/1, uppercase/1, reverse/1, split/2, replace/3, is_equal/2, is_empty/1]).
+-export_type([string_builder/0, direction/0]).
+
+-type string_builder() :: any().
+
+-type direction() :: all.
+
+-spec prepend_builder(string_builder(), string_builder()) -> string_builder().
+prepend_builder(Builder, Prefix) ->
+ gleam_stdlib:iodata_append(Prefix, Builder).
+
+-spec append_builder(string_builder(), string_builder()) -> string_builder().
+append_builder(Builder, Suffix) ->
+ gleam_stdlib:iodata_append(Builder, Suffix).
+
+-spec new() -> string_builder().
+new() ->
+ gleam_stdlib:identity([]).
+
+-spec from_strings(list(binary())) -> string_builder().
+from_strings(Strings) ->
+ gleam_stdlib:identity(Strings).
+
+-spec concat(list(string_builder())) -> string_builder().
+concat(Builders) ->
+ gleam_stdlib:identity(Builders).
+
+-spec from_string(binary()) -> string_builder().
+from_string(String) ->
+ gleam_stdlib:identity(String).
+
+-spec prepend(string_builder(), binary()) -> string_builder().
+prepend(Builder, Prefix) ->
+ append_builder(from_string(Prefix), Builder).
+
+-spec append(string_builder(), binary()) -> string_builder().
+append(Builder, Second) ->
+ append_builder(Builder, from_string(Second)).
+
+-spec to_string(string_builder()) -> binary().
+to_string(Builder) ->
+ unicode:characters_to_binary(Builder).
+
+-spec byte_size(string_builder()) -> integer().
+byte_size(Builder) ->
+ erlang:iolist_size(Builder).
+
+-spec join(list(string_builder()), binary()) -> string_builder().
+join(Builders, Sep) ->
+ _pipe = Builders,
+ _pipe@1 = gleam@list:intersperse(_pipe, from_string(Sep)),
+ concat(_pipe@1).
+
+-spec lowercase(string_builder()) -> string_builder().
+lowercase(Builder) ->
+ string:lowercase(Builder).
+
+-spec uppercase(string_builder()) -> string_builder().
+uppercase(Builder) ->
+ string:uppercase(Builder).
+
+-spec reverse(string_builder()) -> string_builder().
+reverse(Builder) ->
+ string:reverse(Builder).
+
+-spec do_split(string_builder(), binary()) -> list(string_builder()).
+do_split(Iodata, Pattern) ->
+ string:split(Iodata, Pattern, all).
+
+-spec split(string_builder(), binary()) -> list(string_builder()).
+split(Iodata, Pattern) ->
+ do_split(Iodata, Pattern).
+
+-spec do_replace(string_builder(), binary(), binary()) -> string_builder().
+do_replace(Iodata, Pattern, Substitute) ->
+ string:replace(Iodata, Pattern, Substitute, all).
+
+-spec replace(string_builder(), binary(), binary()) -> string_builder().
+replace(Builder, Pattern, Substitute) ->
+ do_replace(Builder, Pattern, Substitute).
+
+-spec is_equal(string_builder(), string_builder()) -> boolean().
+is_equal(A, B) ->
+ string:equal(A, B).
+
+-spec is_empty(string_builder()) -> boolean().
+is_empty(Builder) ->
+ string:is_empty(Builder).
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl
new file mode 100644
index 0000000..7ec4fe7
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam@uri.erl
@@ -0,0 +1,252 @@
+-module(gleam@uri).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([parse/1, parse_query/1, percent_encode/1, query_to_string/1, percent_decode/1, path_segments/1, to_string/1, origin/1, merge/2]).
+-export_type([uri/0]).
+
+-type uri() :: {uri,
+ gleam@option:option(binary()),
+ gleam@option:option(binary()),
+ gleam@option:option(binary()),
+ gleam@option:option(integer()),
+ binary(),
+ gleam@option:option(binary()),
+ gleam@option:option(binary())}.
+
+-spec parse(binary()) -> {ok, uri()} | {error, nil}.
+parse(Uri_string) ->
+ gleam_stdlib:uri_parse(Uri_string).
+
+-spec parse_query(binary()) -> {ok, list({binary(), binary()})} | {error, nil}.
+parse_query(Query) ->
+ gleam_stdlib:parse_query(Query).
+
+-spec percent_encode(binary()) -> binary().
+percent_encode(Value) ->
+ gleam_stdlib:percent_encode(Value).
+
+-spec query_pair({binary(), binary()}) -> gleam@string_builder:string_builder().
+query_pair(Pair) ->
+ gleam@string_builder:from_strings(
+ [percent_encode(erlang:element(1, Pair)),
+ <<"="/utf8>>,
+ percent_encode(erlang:element(2, Pair))]
+ ).
+
+-spec query_to_string(list({binary(), binary()})) -> binary().
+query_to_string(Query) ->
+ _pipe = Query,
+ _pipe@1 = gleam@list:map(_pipe, fun query_pair/1),
+ _pipe@2 = gleam@list:intersperse(
+ _pipe@1,
+ gleam@string_builder:from_string(<<"&"/utf8>>)
+ ),
+ _pipe@3 = gleam@string_builder:concat(_pipe@2),
+ gleam@string_builder:to_string(_pipe@3).
+
+-spec percent_decode(binary()) -> {ok, binary()} | {error, nil}.
+percent_decode(Value) ->
+ gleam_stdlib:percent_decode(Value).
+
+-spec do_remove_dot_segments(list(binary()), list(binary())) -> list(binary()).
+do_remove_dot_segments(Input, Accumulator) ->
+ case Input of
+ [] ->
+ gleam@list:reverse(Accumulator);
+
+ [Segment | Rest] ->
+ Accumulator@5 = case {Segment, Accumulator} of
+ {<<""/utf8>>, Accumulator@1} ->
+ Accumulator@1;
+
+ {<<"."/utf8>>, Accumulator@2} ->
+ Accumulator@2;
+
+ {<<".."/utf8>>, []} ->
+ [];
+
+ {<<".."/utf8>>, [_ | Accumulator@3]} ->
+ Accumulator@3;
+
+ {Segment@1, Accumulator@4} ->
+ [Segment@1 | Accumulator@4]
+ end,
+ do_remove_dot_segments(Rest, Accumulator@5)
+ end.
+
+-spec remove_dot_segments(list(binary())) -> list(binary()).
+remove_dot_segments(Input) ->
+ do_remove_dot_segments(Input, []).
+
+-spec path_segments(binary()) -> list(binary()).
+path_segments(Path) ->
+ remove_dot_segments(gleam@string:split(Path, <<"/"/utf8>>)).
+
+-spec to_string(uri()) -> binary().
+to_string(Uri) ->
+ Parts = case erlang:element(8, Uri) of
+ {some, Fragment} ->
+ [<<"#"/utf8>>, Fragment];
+
+ _ ->
+ []
+ end,
+ Parts@1 = case erlang:element(7, Uri) of
+ {some, Query} ->
+ [<<"?"/utf8>>, Query | Parts];
+
+ _ ->
+ Parts
+ end,
+ Parts@2 = [erlang:element(6, Uri) | Parts@1],
+ Parts@3 = case {erlang:element(4, Uri),
+ gleam@string:starts_with(erlang:element(6, Uri), <<"/"/utf8>>)} of
+ {{some, Host}, false} when Host =/= <<""/utf8>> ->
+ [<<"/"/utf8>> | Parts@2];
+
+ {_, _} ->
+ Parts@2
+ end,
+ Parts@4 = case {erlang:element(4, Uri), erlang:element(5, Uri)} of
+ {{some, _}, {some, Port}} ->
+ [<<":"/utf8>>, gleam@int:to_string(Port) | Parts@3];
+
+ {_, _} ->
+ Parts@3
+ end,
+ Parts@5 = case {erlang:element(2, Uri),
+ erlang:element(3, Uri),
+ erlang:element(4, Uri)} of
+ {{some, S}, {some, U}, {some, H}} ->
+ [S, <<"://"/utf8>>, U, <<"@"/utf8>>, H | Parts@4];
+
+ {{some, S@1}, none, {some, H@1}} ->
+ [S@1, <<"://"/utf8>>, H@1 | Parts@4];
+
+ {{some, S@2}, {some, _}, none} ->
+ [S@2, <<":"/utf8>> | Parts@4];
+
+ {{some, S@2}, none, none} ->
+ [S@2, <<":"/utf8>> | Parts@4];
+
+ {none, none, {some, H@2}} ->
+ [<<"//"/utf8>>, H@2 | Parts@4];
+
+ {_, _, _} ->
+ Parts@4
+ end,
+ gleam@string:concat(Parts@5).
+
+-spec origin(uri()) -> {ok, binary()} | {error, nil}.
+origin(Uri) ->
+ {uri, Scheme, _, Host, Port, _, _, _} = Uri,
+ case Scheme of
+ {some, <<"https"/utf8>>} when Port =:= {some, 443} ->
+ Origin = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none},
+ {ok, to_string(Origin)};
+
+ {some, <<"http"/utf8>>} when Port =:= {some, 80} ->
+ Origin@1 = {uri, Scheme, none, Host, none, <<""/utf8>>, none, none},
+ {ok, to_string(Origin@1)};
+
+ {some, S} when (S =:= <<"http"/utf8>>) orelse (S =:= <<"https"/utf8>>) ->
+ Origin@2 = {uri, Scheme, none, Host, Port, <<""/utf8>>, none, none},
+ {ok, to_string(Origin@2)};
+
+ _ ->
+ {error, nil}
+ end.
+
+-spec drop_last(list(DFL)) -> list(DFL).
+drop_last(Elements) ->
+ gleam@list:take(Elements, gleam@list:length(Elements) - 1).
+
+-spec join_segments(list(binary())) -> binary().
+join_segments(Segments) ->
+ gleam@string:join([<<""/utf8>> | Segments], <<"/"/utf8>>).
+
+-spec merge(uri(), uri()) -> {ok, uri()} | {error, nil}.
+merge(Base, Relative) ->
+ case Base of
+ {uri, {some, _}, _, {some, _}, _, _, _, _} ->
+ case Relative of
+ {uri, _, _, {some, _}, _, _, _, _} ->
+ Path = begin
+ _pipe = gleam@string:split(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ ),
+ _pipe@1 = remove_dot_segments(_pipe),
+ join_segments(_pipe@1)
+ end,
+ Resolved = {uri,
+ gleam@option:'or'(
+ erlang:element(2, Relative),
+ erlang:element(2, Base)
+ ),
+ none,
+ erlang:element(4, Relative),
+ gleam@option:'or'(
+ erlang:element(5, Relative),
+ erlang:element(5, Base)
+ ),
+ Path,
+ erlang:element(7, Relative),
+ erlang:element(8, Relative)},
+ {ok, Resolved};
+
+ _ ->
+ {New_path, New_query} = case erlang:element(6, Relative) of
+ <<""/utf8>> ->
+ {erlang:element(6, Base),
+ gleam@option:'or'(
+ erlang:element(7, Relative),
+ erlang:element(7, Base)
+ )};
+
+ _ ->
+ Path_segments = case gleam@string:starts_with(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ ) of
+ true ->
+ gleam@string:split(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ );
+
+ false ->
+ _pipe@2 = gleam@string:split(
+ erlang:element(6, Base),
+ <<"/"/utf8>>
+ ),
+ _pipe@3 = drop_last(_pipe@2),
+ gleam@list:append(
+ _pipe@3,
+ gleam@string:split(
+ erlang:element(6, Relative),
+ <<"/"/utf8>>
+ )
+ )
+ end,
+ Path@1 = begin
+ _pipe@4 = Path_segments,
+ _pipe@5 = remove_dot_segments(_pipe@4),
+ join_segments(_pipe@5)
+ end,
+ {Path@1, erlang:element(7, Relative)}
+ end,
+ Resolved@1 = {uri,
+ erlang:element(2, Base),
+ none,
+ erlang:element(4, Base),
+ erlang:element(5, Base),
+ New_path,
+ New_query,
+ erlang:element(8, Relative)},
+ {ok, Resolved@1}
+ end;
+
+ _ ->
+ {error, nil}
+ end.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src
new file mode 100644
index 0000000..bcf08e2
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.app.src
@@ -0,0 +1,31 @@
+{application, gleam_stdlib, [
+ {vsn, "0.33.0"},
+ {applications, []},
+ {description, "A standard library for the Gleam programming language"},
+ {modules, [gleam@base,
+ gleam@bit_array,
+ gleam@bit_builder,
+ gleam@bit_string,
+ gleam@bool,
+ gleam@bytes_builder,
+ gleam@dict,
+ gleam@dynamic,
+ gleam@float,
+ gleam@function,
+ gleam@int,
+ gleam@io,
+ gleam@iterator,
+ gleam@list,
+ gleam@map,
+ gleam@option,
+ gleam@order,
+ gleam@pair,
+ gleam@queue,
+ gleam@regex,
+ gleam@result,
+ gleam@set,
+ gleam@string,
+ gleam@string_builder,
+ gleam@uri]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl
new file mode 100644
index 0000000..c6ea125
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.erl
@@ -0,0 +1,529 @@
+-module(gleam_stdlib).
+
+-export([
+ map_get/2, iodata_append/2, identity/1, decode_int/1, decode_bool/1,
+ decode_float/1, decode_list/1, decode_option/2, decode_field/2, parse_int/1,
+ parse_float/1, less_than/2, string_pop_grapheme/1, string_starts_with/2,
+ wrap_list/1, string_ends_with/2, string_pad/4, decode_map/1, uri_parse/1,
+ bit_array_int_to_u32/1, bit_array_int_from_u32/1, decode_result/1,
+ bit_array_slice/3, decode_bit_array/1, compile_regex/2, regex_scan/2,
+ percent_encode/1, percent_decode/1, regex_check/2, regex_split/2,
+ base_decode64/1, parse_query/1, bit_array_concat/1, size_of_tuple/1,
+ decode_tuple/1, decode_tuple2/1, decode_tuple3/1, decode_tuple4/1,
+ decode_tuple5/1, decode_tuple6/1, tuple_get/2, classify_dynamic/1, print/1,
+ println/1, print_error/1, println_error/1, inspect/1, float_to_string/1,
+ int_from_base_string/2, utf_codepoint_list_to_string/1, contains_string/2,
+ crop_string/2, base16_decode/1
+]).
+
+%% Taken from OTP's uri_string module
+-define(DEC2HEX(X),
+ if ((X) >= 0) andalso ((X) =< 9) -> (X) + $0;
+ ((X) >= 10) andalso ((X) =< 15) -> (X) + $A - 10
+ end).
+
+%% Taken from OTP's uri_string module
+-define(HEX2DEC(X),
+ if ((X) >= $0) andalso ((X) =< $9) -> (X) - $0;
+ ((X) >= $A) andalso ((X) =< $F) -> (X) - $A + 10;
+ ((X) >= $a) andalso ((X) =< $f) -> (X) - $a + 10
+ end).
+
+-define(is_lowercase_char(X), (X > 96 andalso X < 123)).
+-define(is_underscore_char(X), (X == 95)).
+-define(is_digit_char(X), (X > 47 andalso X < 58)).
+
+uppercase(X) -> X - 32.
+
+map_get(Map, Key) ->
+ case maps:find(Key, Map) of
+ error -> {error, nil};
+ OkFound -> OkFound
+ end.
+
+iodata_append(Iodata, String) -> [Iodata, String].
+
+identity(X) -> X.
+
+decode_error_msg(Expected, Data) when is_binary(Expected) ->
+ decode_error(Expected, classify_dynamic(Data)).
+decode_error(Expected, Got) when is_binary(Expected) andalso is_binary(Got) ->
+ {error, [{decode_error, Expected, Got, []}]}.
+
+classify_dynamic(nil) -> <<"Nil">>;
+classify_dynamic(X) when is_atom(X) -> <<"Atom">>;
+classify_dynamic(X) when is_binary(X) -> <<"String">>;
+classify_dynamic(X) when is_bitstring(X) -> <<"BitArray">>;
+classify_dynamic(X) when is_integer(X) -> <<"Int">>;
+classify_dynamic(X) when is_float(X) -> <<"Float">>;
+classify_dynamic(X) when is_list(X) -> <<"List">>;
+classify_dynamic(X) when is_boolean(X) -> <<"Bool">>;
+classify_dynamic(X) when is_map(X) -> <<"Map">>;
+classify_dynamic(X) when is_tuple(X) ->
+ iolist_to_binary(["Tuple of ", integer_to_list(tuple_size(X)), " elements"]);
+classify_dynamic(X) when
+ is_function(X, 0) orelse is_function(X, 1) orelse is_function(X, 2) orelse
+ is_function(X, 3) orelse is_function(X, 4) orelse is_function(X, 5) orelse
+ is_function(X, 6) orelse is_function(X, 7) orelse is_function(X, 8) orelse
+ is_function(X, 9) orelse is_function(X, 10) orelse is_function(X, 11) orelse
+ is_function(X, 12) -> <<"Function">>;
+classify_dynamic(_) -> <<"Some other type">>.
+
+decode_map(Data) when is_map(Data) -> {ok, Data};
+decode_map(Data) -> decode_error_msg(<<"Map">>, Data).
+
+decode_bit_array(Data) when is_bitstring(Data) -> {ok, Data};
+decode_bit_array(Data) -> decode_error_msg(<<"BitArray">>, Data).
+
+decode_int(Data) when is_integer(Data) -> {ok, Data};
+decode_int(Data) -> decode_error_msg(<<"Int">>, Data).
+
+decode_float(Data) when is_float(Data) -> {ok, Data};
+decode_float(Data) -> decode_error_msg(<<"Float">>, Data).
+
+decode_bool(Data) when is_boolean(Data) -> {ok, Data};
+decode_bool(Data) -> decode_error_msg(<<"Bool">>, Data).
+
+decode_list(Data) when is_list(Data) -> {ok, Data};
+decode_list(Data) -> decode_error_msg(<<"List">>, Data).
+
+decode_field(Data, Key) when is_map(Data) ->
+ case Data of
+ #{Key := Value} -> {ok, {some, Value}};
+ _ ->
+ {ok, none}
+ end;
+decode_field(Data, _) ->
+ decode_error_msg(<<"Map">>, Data).
+
+size_of_tuple(Data) -> tuple_size(Data).
+
+tuple_get(_tup, Index) when Index < 0 -> {error, nil};
+tuple_get(Data, Index) when Index >= tuple_size(Data) -> {error, nil};
+tuple_get(Data, Index) -> {ok, element(Index + 1, Data)}.
+
+decode_tuple(Data) when is_tuple(Data) -> {ok, Data};
+decode_tuple(Data) -> decode_error_msg(<<"Tuple">>, Data).
+
+decode_tuple2({_,_} = A) -> {ok, A};
+decode_tuple2([A,B]) -> {ok, {A,B}};
+decode_tuple2(Data) -> decode_error_msg(<<"Tuple of 2 elements">>, Data).
+
+decode_tuple3({_,_,_} = A) -> {ok, A};
+decode_tuple3([A,B,C]) -> {ok, {A,B,C}};
+decode_tuple3(Data) -> decode_error_msg(<<"Tuple of 3 elements">>, Data).
+
+decode_tuple4({_,_,_,_} = A) -> {ok, A};
+decode_tuple4([A,B,C,D]) -> {ok, {A,B,C,D}};
+decode_tuple4(Data) -> decode_error_msg(<<"Tuple of 4 elements">>, Data).
+
+decode_tuple5({_,_,_,_,_} = A) -> {ok, A};
+decode_tuple5([A,B,C,D,E]) -> {ok, {A,B,C,D,E}};
+decode_tuple5(Data) -> decode_error_msg(<<"Tuple of 5 elements">>, Data).
+
+decode_tuple6({_,_,_,_,_,_} = A) -> {ok, A};
+decode_tuple6([A,B,C,D,E,F]) -> {ok, {A,B,C,D,E,F}};
+decode_tuple6(Data) -> decode_error_msg(<<"Tuple of 6 elements">>, Data).
+
+decode_option(Term, F) ->
+ Decode = fun(Inner) ->
+ case F(Inner) of
+ {ok, Decoded} -> {ok, {some, Decoded}};
+ Error -> Error
+ end
+ end,
+ case Term of
+ undefined -> {ok, none};
+ error -> {ok, none};
+ null -> {ok, none};
+ none -> {ok, none};
+ nil -> {ok, none};
+ {some, Inner} -> Decode(Inner);
+ _ -> Decode(Term)
+ end.
+
+decode_result(Term) ->
+ case Term of
+ {ok, Inner} -> {ok, {ok, Inner}};
+ ok -> {ok, {ok, nil}};
+ {error, Inner} -> {ok, {error, Inner}};
+ error -> {ok, {error, nil}};
+ _ -> decode_error_msg(<<"Result">>, Term)
+ end.
+
+int_from_base_string(String, Base) ->
+ case catch binary_to_integer(String, Base) of
+ Int when is_integer(Int) -> {ok, Int};
+ _ -> {error, nil}
+ end.
+
+parse_int(String) ->
+ case catch binary_to_integer(String) of
+ Int when is_integer(Int) -> {ok, Int};
+ _ -> {error, nil}
+ end.
+
+parse_float(String) ->
+ case catch binary_to_float(String) of
+ Float when is_float(Float) -> {ok, Float};
+ _ -> {error, nil}
+ end.
+
+less_than(Lhs, Rhs) ->
+ Lhs < Rhs.
+
+string_starts_with(_, <<>>) -> true;
+string_starts_with(String, Prefix) when byte_size(Prefix) > byte_size(String) -> false;
+string_starts_with(String, Prefix) ->
+ PrefixSize = byte_size(Prefix),
+ Prefix == binary_part(String, 0, PrefixSize).
+
+string_ends_with(_, <<>>) -> true;
+string_ends_with(String, Suffix) when byte_size(Suffix) > byte_size(String) -> false;
+string_ends_with(String, Suffix) ->
+ SuffixSize = byte_size(Suffix),
+ Suffix == binary_part(String, byte_size(String) - SuffixSize, SuffixSize).
+
+string_pad(String, Length, Dir, PadString) ->
+ Chars = string:pad(String, Length, Dir, binary_to_list(PadString)),
+ case unicode:characters_to_binary(Chars) of
+ Bin when is_binary(Bin) -> Bin;
+ Error -> erlang:error({gleam_error, {string_invalid_utf8, Error}})
+ end.
+
+string_pop_grapheme(String) ->
+ case string:next_grapheme(String) of
+ [ Next | Rest ] ->
+ {ok, {unicode:characters_to_binary([Next]), unicode:characters_to_binary(Rest)}};
+ _ -> {error, nil}
+ end.
+
+bit_array_concat(BitArrays) ->
+ list_to_bitstring(BitArrays).
+
+bit_array_slice(Bin, Pos, Len) ->
+ try {ok, binary:part(Bin, Pos, Len)}
+ catch error:badarg -> {error, nil}
+ end.
+
+bit_array_int_to_u32(I) when 0 =< I, I < 4294967296 ->
+ {ok, <<I:32>>};
+bit_array_int_to_u32(_) ->
+ {error, nil}.
+
+bit_array_int_from_u32(<<I:32>>) ->
+ {ok, I};
+bit_array_int_from_u32(_) ->
+ {error, nil}.
+
+compile_regex(String, Options) ->
+ {options, Caseless, Multiline} = Options,
+ OptionsList = [
+ unicode,
+ ucp,
+ Caseless andalso caseless,
+ Multiline andalso multiline
+ ],
+ FilteredOptions = [Option || Option <- OptionsList, Option /= false],
+ case re:compile(String, FilteredOptions) of
+ {ok, MP} -> {ok, MP};
+ {error, {Str, Pos}} ->
+ {error, {compile_error, unicode:characters_to_binary(Str), Pos}}
+ end.
+
+regex_check(Regex, String) ->
+ re:run(String, Regex) /= nomatch.
+
+regex_split(Regex, String) ->
+ re:split(String, Regex).
+
+regex_submatches(_, {-1, 0}) -> none;
+regex_submatches(String, {Start, Length}) ->
+ BinarySlice = binary:part(String, {Start, Length}),
+ case string:is_empty(binary_to_list(BinarySlice)) of
+ true -> none;
+ false -> {some, BinarySlice}
+ end.
+
+regex_matches(String, [{Start, Length} | Submatches]) ->
+ Submatches1 = lists:map(fun(X) -> regex_submatches(String, X) end, Submatches),
+ {match, binary:part(String, Start, Length), Submatches1}.
+
+regex_scan(Regex, String) ->
+ case re:run(String, Regex, [global]) of
+ {match, Captured} -> lists:map(fun(X) -> regex_matches(String, X) end, Captured);
+ nomatch -> []
+ end.
+
+base_decode64(S) ->
+ try {ok, base64:decode(S)}
+ catch error:_ -> {error, nil}
+ end.
+
+wrap_list(X) when is_list(X) -> X;
+wrap_list(X) -> [X].
+
+parse_query(Query) ->
+ case uri_string:dissect_query(Query) of
+ {error, _, _} -> {error, nil};
+ Pairs ->
+ Pairs1 = lists:map(fun
+ ({K, true}) -> {K, <<"">>};
+ (Pair) -> Pair
+ end, Pairs),
+ {ok, Pairs1}
+ end.
+
+percent_encode(B) -> percent_encode(B, <<>>).
+percent_encode(<<>>, Acc) ->
+ Acc;
+percent_encode(<<H,T/binary>>, Acc) ->
+ case percent_ok(H) of
+ true ->
+ percent_encode(T, <<Acc/binary,H>>);
+ false ->
+ <<A:4,B:4>> = <<H>>,
+ percent_encode(T, <<Acc/binary,$%,(?DEC2HEX(A)),(?DEC2HEX(B))>>)
+ end.
+
+percent_decode(Cs) -> percent_decode(Cs, <<>>).
+percent_decode(<<$%, C0, C1, Cs/binary>>, Acc) ->
+ case is_hex_digit(C0) andalso is_hex_digit(C1) of
+ true ->
+ B = ?HEX2DEC(C0)*16+?HEX2DEC(C1),
+ percent_decode(Cs, <<Acc/binary, B>>);
+ false ->
+ {error, nil}
+ end;
+percent_decode(<<C,Cs/binary>>, Acc) ->
+ percent_decode(Cs, <<Acc/binary, C>>);
+percent_decode(<<>>, Acc) ->
+ check_utf8(Acc).
+
+percent_ok($!) -> true;
+percent_ok($$) -> true;
+percent_ok($') -> true;
+percent_ok($() -> true;
+percent_ok($)) -> true;
+percent_ok($*) -> true;
+percent_ok($+) -> true;
+percent_ok($-) -> true;
+percent_ok($.) -> true;
+percent_ok($_) -> true;
+percent_ok($~) -> true;
+percent_ok(C) when $0 =< C, C =< $9 -> true;
+percent_ok(C) when $A =< C, C =< $Z -> true;
+percent_ok(C) when $a =< C, C =< $z -> true;
+percent_ok(_) -> false.
+
+is_hex_digit(C) ->
+ ($0 =< C andalso C =< $9) orelse ($a =< C andalso C =< $f) orelse ($A =< C andalso C =< $F).
+
+check_utf8(Cs) ->
+ case unicode:characters_to_list(Cs) of
+ {incomplete, _, _} -> {error, nil};
+ {error, _, _} -> {error, nil};
+ _ -> {ok, Cs}
+ end.
+
+uri_parse(String) ->
+ case uri_string:parse(String) of
+ {error, _, _} -> {error, nil};
+ Uri ->
+ {ok, {uri,
+ maps_get_optional(Uri, scheme),
+ maps_get_optional(Uri, userinfo),
+ maps_get_optional(Uri, host),
+ maps_get_optional(Uri, port),
+ maps_get_or(Uri, path, <<>>),
+ maps_get_optional(Uri, query),
+ maps_get_optional(Uri, fragment)
+ }}
+ end.
+
+maps_get_optional(Map, Key) ->
+ try {some, maps:get(Key, Map)}
+ catch _:_ -> none
+ end.
+
+maps_get_or(Map, Key, Default) ->
+ try maps:get(Key, Map)
+ catch _:_ -> Default
+ end.
+
+print(String) ->
+ io:put_chars(String),
+ nil.
+
+println(String) ->
+ io:put_chars([String, $\n]),
+ nil.
+
+print_error(String) ->
+ io:put_chars(standard_error, String),
+ nil.
+
+println_error(String) ->
+ io:put_chars(standard_error, [String, $\n]),
+ nil.
+
+inspect(true) ->
+ "True";
+inspect(false) ->
+ "False";
+inspect(nil) ->
+ "Nil";
+inspect(Data) when is_map(Data) ->
+ Fields = [
+ [<<"#(">>, inspect(Key), <<", ">>, inspect(Value), <<")">>]
+ || {Key, Value} <- maps:to_list(Data)
+ ],
+ ["dict.from_list([", lists:join(", ", Fields), "])"];
+inspect(Atom) when is_atom(Atom) ->
+ Binary = erlang:atom_to_binary(Atom),
+ case inspect_maybe_gleam_atom(Binary, none, <<>>) of
+ {ok, Inspected} -> Inspected;
+ {error, _} -> ["atom.create_from_string(\"", Binary, "\")"]
+ end;
+inspect(Any) when is_integer(Any) ->
+ erlang:integer_to_list(Any);
+inspect(Any) when is_float(Any) ->
+ io_lib_format:fwrite_g(Any);
+inspect(Binary) when is_binary(Binary) ->
+ case inspect_maybe_utf8_string(Binary, <<>>) of
+ {ok, InspectedUtf8String} -> InspectedUtf8String;
+ {error, not_a_utf8_string} ->
+ Segments = [erlang:integer_to_list(X) || <<X>> <= Binary],
+ ["<<", lists:join(", ", Segments), ">>"]
+ end;
+inspect(Bits) when is_bitstring(Bits) ->
+ inspect_bit_array(Bits);
+inspect(List) when is_list(List) ->
+ case inspect_list(List) of
+ {proper, Elements} -> ["[", Elements, "]"];
+ {improper, Elements} -> ["//erl([", Elements, "])"]
+ end;
+inspect(Any) when is_tuple(Any) % Record constructors
+ andalso is_atom(element(1, Any))
+ andalso element(1, Any) =/= false
+ andalso element(1, Any) =/= true
+ andalso element(1, Any) =/= nil
+->
+ [Atom | ArgsList] = erlang:tuple_to_list(Any),
+ Args = lists:join(<<", ">>,
+ lists:map(fun inspect/1, ArgsList)
+ ),
+ [inspect(Atom), "(", Args, ")"];
+inspect(Tuple) when is_tuple(Tuple) ->
+ Elements = lists:map(fun inspect/1, erlang:tuple_to_list(Tuple)),
+ ["#(", lists:join(", ", Elements), ")"];
+inspect(Any) when is_function(Any) ->
+ {arity, Arity} = erlang:fun_info(Any, arity),
+ ArgsAsciiCodes = lists:seq($a, $a + Arity - 1),
+ Args = lists:join(<<", ">>,
+ lists:map(fun(Arg) -> <<Arg>> end, ArgsAsciiCodes)
+ ),
+ ["//fn(", Args, ") { ... }"];
+inspect(Any) ->
+ ["//erl(", io_lib:format("~p", [Any]), ")"].
+
+
+inspect_maybe_gleam_atom(<<>>, none, _) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<First, _Rest/binary>>, none, _) when ?is_digit_char(First) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, none, _) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<"_">>, _PrevChar, _Acc) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<"_", _Rest/binary>>, $_, _Acc) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<First, _Rest/binary>>, _PrevChar, _Acc)
+ when not (?is_lowercase_char(First) orelse ?is_underscore_char(First) orelse ?is_digit_char(First)) ->
+ {error, nil};
+inspect_maybe_gleam_atom(<<First, Rest/binary>>, none, Acc) ->
+ inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>);
+inspect_maybe_gleam_atom(<<"_", Rest/binary>>, _PrevChar, Acc) ->
+ inspect_maybe_gleam_atom(Rest, $_, Acc);
+inspect_maybe_gleam_atom(<<First, Rest/binary>>, $_, Acc) ->
+ inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, (uppercase(First))>>);
+inspect_maybe_gleam_atom(<<First, Rest/binary>>, _PrevChar, Acc) ->
+ inspect_maybe_gleam_atom(Rest, First, <<Acc/binary, First>>);
+inspect_maybe_gleam_atom(<<>>, _PrevChar, Acc) ->
+ {ok, Acc};
+inspect_maybe_gleam_atom(A, B, C) ->
+ erlang:display({A, B, C}),
+ throw({gleam_error, A, B, C}).
+
+inspect_list([]) ->
+ {proper, []};
+inspect_list([First]) ->
+ {proper, [inspect(First)]};
+inspect_list([First | Rest]) when is_list(Rest) ->
+ {Kind, Inspected} = inspect_list(Rest),
+ {Kind, [inspect(First), <<", ">> | Inspected]};
+inspect_list([First | ImproperTail]) ->
+ {improper, [inspect(First), <<" | ">>, inspect(ImproperTail)]}.
+
+inspect_bit_array(Bits) ->
+ Text = inspect_bit_array(Bits, <<"<<">>),
+ <<Text/binary, ">>">>.
+
+inspect_bit_array(<<>>, Acc) ->
+ Acc;
+inspect_bit_array(<<X, Rest/bitstring>>, Acc) ->
+ inspect_bit_array(Rest, append_segment(Acc, erlang:integer_to_binary(X)));
+inspect_bit_array(Rest, Acc) ->
+ Size = bit_size(Rest),
+ <<X:Size>> = Rest,
+ X1 = erlang:integer_to_binary(X),
+ Size1 = erlang:integer_to_binary(Size),
+ Segment = <<X1/binary, ":size(", Size1/binary, ")">>,
+ inspect_bit_array(<<>>, append_segment(Acc, Segment)).
+
+append_segment(<<"<<">>, Segment) ->
+ <<"<<", Segment/binary>>;
+append_segment(Acc, Segment) ->
+ <<Acc/binary, ", ", Segment/binary>>.
+
+
+inspect_maybe_utf8_string(Binary, Acc) ->
+ case Binary of
+ <<>> -> {ok, <<$", Acc/binary, $">>};
+ <<First/utf8, Rest/binary>> ->
+ Escaped = case First of
+ $" -> <<$\\, $">>;
+ $\\ -> <<$\\, $\\>>;
+ $\r -> <<$\\, $r>>;
+ $\n -> <<$\\, $n>>;
+ $\t -> <<$\\, $t>>;
+ Other -> <<Other/utf8>>
+ end,
+ inspect_maybe_utf8_string(Rest, <<Acc/binary, Escaped/binary>>);
+ _ -> {error, not_a_utf8_string}
+ end.
+
+float_to_string(Float) when is_float(Float) ->
+ erlang:iolist_to_binary(io_lib_format:fwrite_g(Float)).
+
+utf_codepoint_list_to_string(List) ->
+ case unicode:characters_to_binary(List) of
+ {error, _} -> erlang:error({gleam_error, {string_invalid_utf8, List}});
+ Binary -> Binary
+ end.
+
+crop_string(String, Prefix) ->
+ case string:find(String, Prefix) of
+ nomatch -> String;
+ New -> New
+ end.
+
+contains_string(String, Substring) ->
+ is_bitstring(string:find(String, Substring)).
+
+base16_decode(String) ->
+ try
+ {ok, binary:decode_hex(String)}
+ catch
+ _:_ -> {error, nil}
+ end.
diff --git a/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs
new file mode 100644
index 0000000..a908b23
--- /dev/null
+++ b/aoc2023/build/packages/gleam_stdlib/src/gleam_stdlib.mjs
@@ -0,0 +1,875 @@
+import {
+ BitArray,
+ Error,
+ List,
+ Ok,
+ Result,
+ UtfCodepoint,
+ stringBits,
+ toBitArray,
+ NonEmpty,
+ CustomType,
+} from "./gleam.mjs";
+import {
+ CompileError as RegexCompileError,
+ Match as RegexMatch,
+} from "./gleam/regex.mjs";
+import { DecodeError } from "./gleam/dynamic.mjs";
+import { Some, None } from "./gleam/option.mjs";
+import Dict from "./dict.mjs";
+
+const Nil = undefined;
+const NOT_FOUND = {};
+
+export function identity(x) {
+ return x;
+}
+
+export function parse_int(value) {
+ if (/^[-+]?(\d+)$/.test(value)) {
+ return new Ok(parseInt(value));
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function parse_float(value) {
+ if (/^[-+]?(\d+)\.(\d+)$/.test(value)) {
+ return new Ok(parseFloat(value));
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function to_string(term) {
+ return term.toString();
+}
+
+export function float_to_string(float) {
+ const string = float.toString();
+ if (string.indexOf(".") >= 0) {
+ return string;
+ } else {
+ return string + ".0";
+ }
+}
+
+export function int_to_base_string(int, base) {
+ return int.toString(base).toUpperCase();
+}
+
+const int_base_patterns = {
+ 2: /[^0-1]/,
+ 3: /[^0-2]/,
+ 4: /[^0-3]/,
+ 5: /[^0-4]/,
+ 6: /[^0-5]/,
+ 7: /[^0-6]/,
+ 8: /[^0-7]/,
+ 9: /[^0-8]/,
+ 10: /[^0-9]/,
+ 11: /[^0-9a]/,
+ 12: /[^0-9a-b]/,
+ 13: /[^0-9a-c]/,
+ 14: /[^0-9a-d]/,
+ 15: /[^0-9a-e]/,
+ 16: /[^0-9a-f]/,
+ 17: /[^0-9a-g]/,
+ 18: /[^0-9a-h]/,
+ 19: /[^0-9a-i]/,
+ 20: /[^0-9a-j]/,
+ 21: /[^0-9a-k]/,
+ 22: /[^0-9a-l]/,
+ 23: /[^0-9a-m]/,
+ 24: /[^0-9a-n]/,
+ 25: /[^0-9a-o]/,
+ 26: /[^0-9a-p]/,
+ 27: /[^0-9a-q]/,
+ 28: /[^0-9a-r]/,
+ 29: /[^0-9a-s]/,
+ 30: /[^0-9a-t]/,
+ 31: /[^0-9a-u]/,
+ 32: /[^0-9a-v]/,
+ 33: /[^0-9a-w]/,
+ 34: /[^0-9a-x]/,
+ 35: /[^0-9a-y]/,
+ 36: /[^0-9a-z]/,
+};
+
+export function int_from_base_string(string, base) {
+ if (int_base_patterns[base].test(string.replace(/^-/, "").toLowerCase())) {
+ return new Error(Nil);
+ }
+
+ const result = parseInt(string, base);
+
+ if (isNaN(result)) {
+ return new Error(Nil);
+ }
+
+ return new Ok(result);
+}
+
+export function string_replace(string, target, substitute) {
+ if (typeof string.replaceAll !== "undefined") {
+ return string.replaceAll(target, substitute);
+ }
+ // Fallback for older Node.js versions:
+ // 1. <https://stackoverflow.com/a/1144788>
+ // 2. <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping>
+ // TODO: This fallback could be remove once Node.js 14 is EOL
+ // aka <https://nodejs.org/en/about/releases/> on or after 2024-04-30
+ return string.replace(
+ // $& means the whole matched string
+ new RegExp(target.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"),
+ substitute
+ );
+}
+
+export function string_reverse(string) {
+ return [...string].reverse().join("");
+}
+
+export function string_length(string) {
+ if (string === "") {
+ return 0;
+ }
+ const iterator = graphemes_iterator(string);
+ if (iterator) {
+ let i = 0;
+ for (const _ of iterator) {
+ i++;
+ }
+ return i;
+ } else {
+ return string.match(/./gsu).length;
+ }
+}
+
+export function graphemes(string) {
+ return List.fromArray(
+ Array.from(graphemes_iterator(string)).map((item) => item.segment)
+ );
+}
+
+function graphemes_iterator(string) {
+ if (Intl && Intl.Segmenter) {
+ return new Intl.Segmenter().segment(string)[Symbol.iterator]();
+ }
+}
+
+export function pop_grapheme(string) {
+ let first;
+ const iterator = graphemes_iterator(string);
+ if (iterator) {
+ first = iterator.next().value?.segment;
+ } else {
+ first = string.match(/./su)?.[0];
+ }
+ if (first) {
+ return new Ok([first, string.slice(first.length)]);
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function lowercase(string) {
+ return string.toLowerCase();
+}
+
+export function uppercase(string) {
+ return string.toUpperCase();
+}
+
+export function less_than(a, b) {
+ return a < b;
+}
+
+export function add(a, b) {
+ return a + b;
+}
+
+export function equal(a, b) {
+ return a === b;
+}
+
+export function split(xs, pattern) {
+ return List.fromArray(xs.split(pattern));
+}
+
+export function join(xs, separator) {
+ const iterator = xs[Symbol.iterator]();
+ let result = iterator.next().value || "";
+ let current = iterator.next();
+ while (!current.done) {
+ result = result + separator + current.value;
+ current = iterator.next();
+ }
+ return result;
+}
+
+export function concat(xs) {
+ let result = "";
+ for (const x of xs) {
+ result = result + x;
+ }
+ return result;
+}
+
+export function length(data) {
+ return data.length;
+}
+
+export function crop_string(string, substring) {
+ return string.substring(string.indexOf(substring));
+}
+
+export function contains_string(haystack, needle) {
+ return haystack.indexOf(needle) >= 0;
+}
+
+export function starts_with(haystack, needle) {
+ return haystack.startsWith(needle);
+}
+
+export function ends_with(haystack, needle) {
+ return haystack.endsWith(needle);
+}
+
+export function split_once(haystack, needle) {
+ const index = haystack.indexOf(needle);
+ if (index >= 0) {
+ const before = haystack.slice(0, index);
+ const after = haystack.slice(index + needle.length);
+ return new Ok([before, after]);
+ } else {
+ return new Error(Nil);
+ }
+}
+
+export function trim(string) {
+ return string.trim();
+}
+
+export function trim_left(string) {
+ return string.trimLeft();
+}
+
+export function trim_right(string) {
+ return string.trimRight();
+}
+
+export function bit_array_from_string(string) {
+ return toBitArray([stringBits(string)]);
+}
+
+export function bit_array_concat(bit_arrays) {
+ return toBitArray(bit_arrays.toArray().map((b) => b.buffer));
+}
+
+export function console_log(term) {
+ console.log(term);
+}
+
+export function console_error(term) {
+ console.error(term);
+}
+
+export function crash(message) {
+ throw new globalThis.Error(message);
+}
+
+export function bit_array_to_string(bit_array) {
+ try {
+ const decoder = new TextDecoder("utf-8", { fatal: true });
+ return new Ok(decoder.decode(bit_array.buffer));
+ } catch (_error) {
+ return new Error(Nil);
+ }
+}
+
+export function print(string) {
+ if (typeof process === "object") {
+ process.stdout.write(string); // We can write without a trailing newline
+ } else if (typeof Deno === "object") {
+ Deno.stdout.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline
+ } else {
+ console.log(string); // We're in a browser. Newlines are mandated
+ }
+}
+
+export function print_error(string) {
+ if (typeof process === "object" && process.stderr?.write) {
+ process.stderr.write(string); // We can write without a trailing newline
+ } else if (typeof Deno === "object") {
+ Deno.stderr.writeSync(new TextEncoder().encode(string)); // We can write without a trailing newline
+ } else {
+ console.error(string); // We're in a browser. Newlines are mandated
+ }
+}
+
+export function print_debug(string) {
+ if (typeof process === "object" && process.stderr?.write) {
+ process.stderr.write(string + "\n"); // If we're in Node.js, use `stderr`
+ } else if (typeof Deno === "object") {
+ Deno.stderr.writeSync(new TextEncoder().encode(string + "\n")); // If we're in Deno, use `stderr`
+ } else {
+ console.log(string); // Otherwise, use `console.log` (so that it doesn't look like an error)
+ }
+}
+
+export function ceiling(float) {
+ return Math.ceil(float);
+}
+
+export function floor(float) {
+ return Math.floor(float);
+}
+
+export function round(float) {
+ return Math.round(float);
+}
+
+export function truncate(float) {
+ return Math.trunc(float);
+}
+
+export function power(base, exponent) {
+ // It is checked in Gleam that:
+ // - The base is non-negative and that the exponent is not fractional.
+ // - The base is non-zero and the exponent is non-negative (otherwise
+ // the result will essentially be division by zero).
+ // It can thus be assumed that valid input is passed to the Math.pow
+ // function and a NaN or Infinity value will not be produced.
+ return Math.pow(base, exponent);
+}
+
+export function random_uniform() {
+ const random_uniform_result = Math.random();
+ // With round-to-nearest-even behavior, the ranges claimed for the functions below
+ // (excluding the one for Math.random() itself) aren't exact.
+ // If extremely large bounds are chosen (2^53 or higher),
+ // it's possible in extremely rare cases to calculate the usually-excluded upper bound.
+ // Note that as numbers in JavaScript are IEEE 754 floating point numbers
+ // See: <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random>
+ // Because of this, we just loop 'until' we get a valid result where 0.0 <= x < 1.0:
+ if (random_uniform_result === 1.0) {
+ return random_uniform();
+ }
+ return random_uniform_result;
+}
+
+export function bit_array_slice(bits, position, length) {
+ const start = Math.min(position, position + length);
+ const end = Math.max(position, position + length);
+ if (start < 0 || end > bits.length) return new Error(Nil);
+ const buffer = new Uint8Array(bits.buffer.buffer, start, Math.abs(length));
+ return new Ok(new BitArray(buffer));
+}
+
+export function codepoint(int) {
+ return new UtfCodepoint(int);
+}
+
+export function string_to_codepoint_integer_list(string) {
+ return List.fromArray(Array.from(string).map((item) => item.codePointAt(0)));
+}
+
+export function utf_codepoint_list_to_string(utf_codepoint_integer_list) {
+ return utf_codepoint_integer_list
+ .toArray()
+ .map((x) => String.fromCodePoint(x.value))
+ .join("");
+}
+
+export function utf_codepoint_to_int(utf_codepoint) {
+ return utf_codepoint.value;
+}
+
+export function regex_check(regex, string) {
+ regex.lastIndex = 0;
+ return regex.test(string);
+}
+
+export function compile_regex(pattern, options) {
+ try {
+ let flags = "gu";
+ if (options.case_insensitive) flags += "i";
+ if (options.multi_line) flags += "m";
+ return new Ok(new RegExp(pattern, flags));
+ } catch (error) {
+ const number = (error.columnNumber || 0) | 0;
+ return new Error(new RegexCompileError(error.message, number));
+ }
+}
+
+export function regex_scan(regex, string) {
+ const matches = Array.from(string.matchAll(regex)).map((match) => {
+ const content = match[0];
+ const submatches = [];
+ for (let n = match.length - 1; n > 0; n--) {
+ if (match[n]) {
+ submatches[n - 1] = new Some(match[n]);
+ continue;
+ }
+ if (submatches.length > 0) {
+ submatches[n - 1] = new None();
+ }
+ }
+ return new RegexMatch(content, List.fromArray(submatches));
+ });
+ return List.fromArray(matches);
+}
+
+export function new_map() {
+ return Dict.new();
+}
+
+export function map_size(map) {
+ return map.size;
+}
+
+export function map_to_list(map) {
+ return List.fromArray(map.entries());
+}
+
+export function map_remove(key, map) {
+ return map.delete(key);
+}
+
+export function map_get(map, key) {
+ const value = map.get(key, NOT_FOUND);
+ if (value === NOT_FOUND) {
+ return new Error(Nil);
+ }
+ return new Ok(value);
+}
+
+export function map_insert(key, value, map) {
+ return map.set(key, value);
+}
+
+function unsafe_percent_decode(string) {
+ return decodeURIComponent((string || "").replace("+", " "));
+}
+
+export function percent_decode(string) {
+ try {
+ return new Ok(unsafe_percent_decode(string));
+ } catch (_error) {
+ return new Error(Nil);
+ }
+}
+
+export function percent_encode(string) {
+ return encodeURIComponent(string);
+}
+
+export function parse_query(query) {
+ try {
+ const pairs = [];
+ for (const section of query.split("&")) {
+ const [key, value] = section.split("=");
+ if (!key) continue;
+ pairs.push([unsafe_percent_decode(key), unsafe_percent_decode(value)]);
+ }
+ return new Ok(List.fromArray(pairs));
+ } catch (_error) {
+ return new Error(Nil);
+ }
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+export function encode64(bit_array) {
+ const aBytes = bit_array.buffer;
+ let nMod3 = 2;
+ let sB64Enc = "";
+
+ for (let nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
+ nMod3 = nIdx % 3;
+ if (nIdx > 0 && ((nIdx * 4) / 3) % 76 === 0) {
+ sB64Enc += "\r\n";
+ }
+ nUint24 |= aBytes[nIdx] << ((16 >>> nMod3) & 24);
+ if (nMod3 === 2 || aBytes.length - nIdx === 1) {
+ sB64Enc += String.fromCharCode(
+ uint6ToB64((nUint24 >>> 18) & 63),
+ uint6ToB64((nUint24 >>> 12) & 63),
+ uint6ToB64((nUint24 >>> 6) & 63),
+ uint6ToB64(nUint24 & 63)
+ );
+ nUint24 = 0;
+ }
+ }
+
+ return (
+ sB64Enc.substr(0, sB64Enc.length - 2 + nMod3) +
+ (nMod3 === 2 ? "" : nMod3 === 1 ? "=" : "==")
+ );
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+function uint6ToB64(nUint6) {
+ return nUint6 < 26
+ ? nUint6 + 65
+ : nUint6 < 52
+ ? nUint6 + 71
+ : nUint6 < 62
+ ? nUint6 - 4
+ : nUint6 === 62
+ ? 43
+ : nUint6 === 63
+ ? 47
+ : 65;
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+function b64ToUint6(nChr) {
+ return nChr > 64 && nChr < 91
+ ? nChr - 65
+ : nChr > 96 && nChr < 123
+ ? nChr - 71
+ : nChr > 47 && nChr < 58
+ ? nChr + 4
+ : nChr === 43
+ ? 62
+ : nChr === 47
+ ? 63
+ : 0;
+}
+
+// From https://developer.mozilla.org/en-US/docs/Glossary/Base64#Solution_2_%E2%80%93_rewrite_the_DOMs_atob()_and_btoa()_using_JavaScript's_TypedArrays_and_UTF-8
+export function decode64(sBase64) {
+ if (sBase64.match(/[^A-Za-z0-9\+\/=]/g)) return new Error(Nil);
+ const sB64Enc = sBase64.replace(/=/g, "");
+ const nInLen = sB64Enc.length;
+ const nOutLen = (nInLen * 3 + 1) >> 2;
+ const taBytes = new Uint8Array(nOutLen);
+
+ for (
+ let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0;
+ nInIdx < nInLen;
+ nInIdx++
+ ) {
+ nMod4 = nInIdx & 3;
+ nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << (6 * (3 - nMod4));
+ if (nMod4 === 3 || nInLen - nInIdx === 1) {
+ for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
+ taBytes[nOutIdx] = (nUint24 >>> ((16 >>> nMod3) & 24)) & 255;
+ }
+ nUint24 = 0;
+ }
+ }
+
+ return new Ok(new BitArray(taBytes));
+}
+
+export function classify_dynamic(data) {
+ if (typeof data === "string") {
+ return "String";
+ } else if (data instanceof Result) {
+ return "Result";
+ } else if (data instanceof List) {
+ return "List";
+ } else if (data instanceof BitArray) {
+ return "BitArray";
+ } else if (data instanceof Dict) {
+ return "Map";
+ } else if (Number.isInteger(data)) {
+ return "Int";
+ } else if (Array.isArray(data)) {
+ return `Tuple of ${data.length} elements`;
+ } else if (typeof data === "number") {
+ return "Float";
+ } else if (data === null) {
+ return "Null";
+ } else if (data === undefined) {
+ return "Nil";
+ } else {
+ const type = typeof data;
+ return type.charAt(0).toUpperCase() + type.slice(1);
+ }
+}
+
+function decoder_error(expected, got) {
+ return decoder_error_no_classify(expected, classify_dynamic(got));
+}
+
+function decoder_error_no_classify(expected, got) {
+ return new Error(
+ List.fromArray([new DecodeError(expected, got, List.fromArray([]))])
+ );
+}
+
+export function decode_string(data) {
+ return typeof data === "string"
+ ? new Ok(data)
+ : decoder_error("String", data);
+}
+
+export function decode_int(data) {
+ return Number.isInteger(data) ? new Ok(data) : decoder_error("Int", data);
+}
+
+export function decode_float(data) {
+ return typeof data === "number" ? new Ok(data) : decoder_error("Float", data);
+}
+
+export function decode_bool(data) {
+ return typeof data === "boolean" ? new Ok(data) : decoder_error("Bool", data);
+}
+
+export function decode_bit_array(data) {
+ if (data instanceof BitArray) {
+ return new Ok(data);
+ }
+ if (data instanceof Uint8Array) {
+ return new Ok(new BitArray(data));
+ }
+ return decoder_error("BitArray", data);
+}
+
+export function decode_tuple(data) {
+ return Array.isArray(data) ? new Ok(data) : decoder_error("Tuple", data);
+}
+
+export function decode_tuple2(data) {
+ return decode_tupleN(data, 2);
+}
+
+export function decode_tuple3(data) {
+ return decode_tupleN(data, 3);
+}
+
+export function decode_tuple4(data) {
+ return decode_tupleN(data, 4);
+}
+
+export function decode_tuple5(data) {
+ return decode_tupleN(data, 5);
+}
+
+export function decode_tuple6(data) {
+ return decode_tupleN(data, 6);
+}
+
+function decode_tupleN(data, n) {
+ if (Array.isArray(data) && data.length == n) {
+ return new Ok(data);
+ }
+
+ const list = decode_exact_length_list(data, n);
+ if (list) return new Ok(list);
+
+ return decoder_error(`Tuple of ${n} elements`, data);
+}
+
+function decode_exact_length_list(data, n) {
+ if (!(data instanceof List)) return;
+
+ const elements = [];
+ let current = data;
+
+ for (let i = 0; i < n; i++) {
+ if (!(current instanceof NonEmpty)) break;
+ elements.push(current.head);
+ current = current.tail;
+ }
+
+ if (elements.length === n && !(current instanceof NonEmpty)) return elements;
+}
+
+export function tuple_get(data, index) {
+ return index >= 0 && data.length > index
+ ? new Ok(data[index])
+ : new Error(Nil);
+}
+
+export function decode_list(data) {
+ if (Array.isArray(data)) {
+ return new Ok(List.fromArray(data));
+ }
+ return data instanceof List ? new Ok(data) : decoder_error("List", data);
+}
+
+export function decode_result(data) {
+ return data instanceof Result ? new Ok(data) : decoder_error("Result", data);
+}
+
+export function decode_map(data) {
+ if (data instanceof Dict) {
+ return new Ok(Dict.fromMap(data));
+ }
+ if (data == null) {
+ return decoder_error("Map", data);
+ }
+ if (typeof data !== "object") {
+ return decoder_error("Map", data);
+ }
+ const proto = Object.getPrototypeOf(data);
+ if (proto === Object.prototype || proto === null) {
+ return new Ok(Dict.fromObject(data));
+ }
+ return decoder_error("Map", data);
+}
+
+export function decode_option(data, decoder) {
+ if (data === null || data === undefined || data instanceof None)
+ return new Ok(new None());
+ if (data instanceof Some) data = data[0];
+ const result = decoder(data);
+ if (result.isOk()) {
+ return new Ok(new Some(result[0]));
+ } else {
+ return result;
+ }
+}
+
+export function decode_field(value, name) {
+ const not_a_map_error = () => decoder_error("Map", value);
+
+ if (
+ value instanceof Dict ||
+ value instanceof WeakMap ||
+ value instanceof Map
+ ) {
+ const entry = map_get(value, name);
+ return new Ok(entry.isOk() ? new Some(entry[0]) : new None());
+ } else if (Object.getPrototypeOf(value) == Object.prototype) {
+ return try_get_field(value, name, () => new Ok(new None()));
+ } else {
+ return try_get_field(value, name, not_a_map_error);
+ }
+}
+
+function try_get_field(value, field, or_else) {
+ try {
+ return field in value ? new Ok(new Some(value[field])) : or_else();
+ } catch {
+ return or_else();
+ }
+}
+
+export function byte_size(string) {
+ return new TextEncoder().encode(string).length;
+}
+
+// In Javascript bitwise operations convert numbers to a sequence of 32 bits
+// while Erlang uses arbitrary precision.
+// To get around this problem and get consistent results use BigInt and then
+// downcast the value back to a Number value.
+
+export function bitwise_and(x, y) {
+ return Number(BigInt(x) & BigInt(y));
+}
+
+export function bitwise_not(x) {
+ return Number(~BigInt(x));
+}
+
+export function bitwise_or(x, y) {
+ return Number(BigInt(x) | BigInt(y));
+}
+
+export function bitwise_exclusive_or(x, y) {
+ return Number(BigInt(x) ^ BigInt(y));
+}
+
+export function bitwise_shift_left(x, y) {
+ return Number(BigInt(x) << BigInt(y));
+}
+
+export function bitwise_shift_right(x, y) {
+ return Number(BigInt(x) >> BigInt(y));
+}
+
+export function inspect(v) {
+ const t = typeof v;
+ if (v === true) return "True";
+ if (v === false) return "False";
+ if (v === null) return "//js(null)";
+ if (v === undefined) return "Nil";
+ if (t === "string") return JSON.stringify(v);
+ if (t === "bigint" || t === "number") return v.toString();
+ if (Array.isArray(v)) return `#(${v.map(inspect).join(", ")})`;
+ if (v instanceof List) return inspectList(v);
+ if (v instanceof UtfCodepoint) return inspectUtfCodepoint(v);
+ if (v instanceof BitArray) return inspectBitArray(v);
+ if (v instanceof CustomType) return inspectCustomType(v);
+ if (v instanceof Dict) return inspectDict(v);
+ if (v instanceof Set) return `//js(Set(${[...v].map(inspect).join(", ")}))`;
+ if (v instanceof RegExp) return `//js(${v})`;
+ if (v instanceof Date) return `//js(Date("${v.toISOString()}"))`;
+ if (v instanceof Function) {
+ const args = [];
+ for (const i of Array(v.length).keys())
+ args.push(String.fromCharCode(i + 97));
+ return `//fn(${args.join(", ")}) { ... }`;
+ }
+ return inspectObject(v);
+}
+
+function inspectDict(map) {
+ let body = "dict.from_list([";
+ let first = true;
+ map.forEach((value, key) => {
+ if (!first) body = body + ", ";
+ body = body + "#(" + inspect(key) + ", " + inspect(value) + ")";
+ first = false;
+ });
+ return body + "])";
+}
+
+function inspectObject(v) {
+ const name = Object.getPrototypeOf(v)?.constructor?.name || "Object";
+ const props = [];
+ for (const k of Object.keys(v)) {
+ props.push(`${inspect(k)}: ${inspect(v[k])}`);
+ }
+ const body = props.length ? " " + props.join(", ") + " " : "";
+ const head = name === "Object" ? "" : name + " ";
+ return `//js(${head}{${body}})`;
+}
+
+function inspectCustomType(record) {
+ const props = Object.keys(record)
+ .map((label) => {
+ const value = inspect(record[label]);
+ return isNaN(parseInt(label)) ? `${label}: ${value}` : value;
+ })
+ .join(", ");
+ return props
+ ? `${record.constructor.name}(${props})`
+ : record.constructor.name;
+}
+
+export function inspectList(list) {
+ return `[${list.toArray().map(inspect).join(", ")}]`;
+}
+
+export function inspectBitArray(bits) {
+ return `<<${Array.from(bits.buffer).join(", ")}>>`;
+}
+
+export function inspectUtfCodepoint(codepoint) {
+ return `//utfcodepoint(${String.fromCodePoint(codepoint.value)})`;
+}
+
+export function base16_encode(bit_array) {
+ let result = "";
+ for (const byte of bit_array.buffer) {
+ result += byte.toString(16).padStart(2, "0").toUpperCase();
+ }
+ return result;
+}
+
+export function base16_decode(string) {
+ const bytes = new Uint8Array(string.length / 2);
+ for (let i = 0; i < string.length; i += 2) {
+ const a = parseInt(string[i], 16);
+ const b = parseInt(string[i + 1], 16);
+ if (isNaN(a) || isNaN(b)) return new Error(Nil);
+ bytes[i / 2] = a * 16 + b;
+ }
+ return new Ok(new BitArray(bytes));
+}
diff --git a/aoc2023/build/packages/glint/LICENSE b/aoc2023/build/packages/glint/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/aoc2023/build/packages/glint/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/aoc2023/build/packages/glint/README.md b/aoc2023/build/packages/glint/README.md
new file mode 100644
index 0000000..d6d5821
--- /dev/null
+++ b/aoc2023/build/packages/glint/README.md
@@ -0,0 +1,104 @@
+# glint
+
+[![Hex Package](https://img.shields.io/hexpm/v/glint?color=ffaff3&label=%F0%9F%93%A6)](https://hex.pm/packages/glint)
+[![Hex.pm](https://img.shields.io/hexpm/dt/glint?color=ffaff3)](https://hex.pm/packages/glint)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3?label=%F0%9F%93%9A)](https://hexdocs.pm/glint/)
+[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/tanklesxl/glint/main)](https://github.com/tanklesxl/glint/actions)
+
+Gleam command line argument parsing with basic flag support.
+
+## Installation
+
+To install from hex:
+
+```sh
+gleam add glint
+```
+
+## Usage
+
+### Glint's Core
+
+`glint` is conceptually quite small, your general flow will be:
+
+1. create a new glint instance with `glint.new`
+1. configure it with `glint.with_pretty_help` and other configuration functions
+1. add commands with `glint.add`
+ 1. create a new command with `glint.cmd`
+ 1. assign that command any flags required
+ 1. assign the command a custom description
+1. run your cli with `glnt.run`, run with a function to handle command output with `glint.run_and_handle`
+
+### Mini Example
+
+You can import `glint` as a dependency and use it to build simple command-line applications like the following simplified version of the [the hello world example](https://github.com/TanklesXL/glint/tree/main/examples/hello/README.md)
+
+```gleam
+// stdlib imports
+import gleam/io
+import gleam/list
+import gleam/result
+import gleam/string.{uppercase}
+// external dep imports
+import snag
+// glint imports
+import glint
+import glint/flag
+// erlang-specific imports
+
+@target(erlang)
+import gleam/erlang.{start_arguments}
+
+/// the key for the caps flag
+const caps = "caps"
+
+/// a boolean flag with default False to control message capitalization.
+///
+fn caps_flag() -> flag.FlagBuilder(Bool) {
+ flag.bool()
+ |> flag.default(False)
+ |> flag.description("Capitalize the provided name")
+}
+
+/// the command function that will be executed
+///
+fn hello(input: glint.CommandInput) -> Nil {
+ let assert Ok(caps) = flag.get_bool(from: input.flags, for: caps)
+
+ let name =
+ case input.args {
+ [] -> "Joe"
+ [name,..] -> name
+ }
+
+ let msg = "Hello, " <> name <> "!"
+
+
+ case caps {
+ True -> uppercase(msg)
+ False -> msg
+ }
+ |> io.println
+}
+
+pub fn main() {
+ // create a new glint instance
+ glint.new()
+ // with an app name of "hello", this is used when printing help text
+ |> glint.with_name("hello")
+ // with pretty help enabled, using the built-in colours
+ |> glint.with_pretty_help(glint.default_pretty_help())
+ // with a root command that executes the `hello` function
+ |> glint.add(
+ // add the command to the root
+ at: [],
+ // create the command, add any flags
+ do: glint.command(hello)
+ // with flag `caps`
+ |> glint.flag(caps, caps_flag())
+ // with a short description
+ |> glint.description("Prints Hello, <NAME>!"),
+ )
+ |> glint.run(start_arguments())
+}
+```
diff --git a/aoc2023/build/packages/glint/gleam.toml b/aoc2023/build/packages/glint/gleam.toml
new file mode 100644
index 0000000..e8ac4ae
--- /dev/null
+++ b/aoc2023/build/packages/glint/gleam.toml
@@ -0,0 +1,23 @@
+name = "glint"
+version = "0.13.0"
+
+# Fill out these fields if you intend to generate HTML documentation or publishname = "glint"
+# your project to the Hex package manager.
+#
+licences = ["Apache-2.0"]
+description = "Gleam command line argument parsing with basic flag support."
+repository = { type = "github", user = "TanklesXL", repo = "glint" }
+links = [
+ { title = "Hex", href = "https://hex.pm/packages/glint" },
+ { title = "Docs", href = "https://hexdocs.pm/glint/" },
+]
+gleam = ">= 0.32.0"
+
+[dependencies]
+gleam_stdlib = "~> 0.19"
+snag = "~> 0.2"
+gleam_community_ansi = "~> 1.0"
+gleam_community_colour = "~> 1.0"
+
+[dev-dependencies]
+gleeunit = "~> 0.5"
diff --git a/aoc2023/build/packages/glint/include/glint@flag_Flag.hrl b/aoc2023/build/packages/glint/include/glint@flag_Flag.hrl
new file mode 100644
index 0000000..645cb12
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint@flag_Flag.hrl
@@ -0,0 +1 @@
+-record(flag, {value :: glint@flag:value(), description :: binary()}).
diff --git a/aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl b/aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl
new file mode 100644
index 0000000..b5e21a2
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint@flag_FlagBuilder.hrl
@@ -0,0 +1,6 @@
+-record(flag_builder, {
+ desc :: binary(),
+ parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()}),
+ value :: fun((glint@flag:internal(any())) -> glint@flag:value()),
+ default :: gleam@option:option(any())
+}).
diff --git a/aoc2023/build/packages/glint/include/glint@flag_Internal.hrl b/aoc2023/build/packages/glint/include/glint@flag_Internal.hrl
new file mode 100644
index 0000000..281bbd0
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint@flag_Internal.hrl
@@ -0,0 +1,4 @@
+-record(internal, {
+ value :: gleam@option:option(any()),
+ parser :: fun((binary()) -> {ok, any()} | {error, snag:snag()})
+}).
diff --git a/aoc2023/build/packages/glint/include/glint_Command.hrl b/aoc2023/build/packages/glint/include/glint_Command.hrl
new file mode 100644
index 0000000..00a03e3
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint_Command.hrl
@@ -0,0 +1,5 @@
+-record(command, {
+ do :: fun((glint:command_input()) -> any()),
+ flags :: gleam@map:map_(binary(), glint@flag:flag()),
+ description :: binary()
+}).
diff --git a/aoc2023/build/packages/glint/include/glint_CommandInput.hrl b/aoc2023/build/packages/glint/include/glint_CommandInput.hrl
new file mode 100644
index 0000000..72c9641
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint_CommandInput.hrl
@@ -0,0 +1,4 @@
+-record(command_input, {
+ args :: list(binary()),
+ flags :: gleam@map:map_(binary(), glint@flag:flag())
+}).
diff --git a/aoc2023/build/packages/glint/include/glint_Config.hrl b/aoc2023/build/packages/glint/include/glint_Config.hrl
new file mode 100644
index 0000000..70cf645
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint_Config.hrl
@@ -0,0 +1,4 @@
+-record(config, {
+ pretty_help :: gleam@option:option(glint:pretty_help()),
+ name :: gleam@option:option(binary())
+}).
diff --git a/aoc2023/build/packages/glint/include/glint_Glint.hrl b/aoc2023/build/packages/glint/include/glint_Glint.hrl
new file mode 100644
index 0000000..7ece11d
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint_Glint.hrl
@@ -0,0 +1,5 @@
+-record(glint, {
+ config :: glint:config(),
+ cmd :: glint:command_node(any()),
+ global_flags :: gleam@map:map_(binary(), glint@flag:flag())
+}).
diff --git a/aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl b/aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl
new file mode 100644
index 0000000..79bd887
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint_PrettyHelp.hrl
@@ -0,0 +1,5 @@
+-record(pretty_help, {
+ usage :: gleam_community@colour:colour(),
+ flags :: gleam_community@colour:colour(),
+ subcommands :: gleam_community@colour:colour()
+}).
diff --git a/aoc2023/build/packages/glint/include/glint_Stub.hrl b/aoc2023/build/packages/glint/include/glint_Stub.hrl
new file mode 100644
index 0000000..5aa5d83
--- /dev/null
+++ b/aoc2023/build/packages/glint/include/glint_Stub.hrl
@@ -0,0 +1,6 @@
+-record(stub, {
+ path :: list(binary()),
+ run :: fun((glint:command_input()) -> any()),
+ flags :: list({binary(), glint@flag:flag()}),
+ description :: binary()
+}).
diff --git a/aoc2023/build/packages/glint/src/glint.app.src b/aoc2023/build/packages/glint/src/glint.app.src
new file mode 100644
index 0000000..7eb7649
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint.app.src
@@ -0,0 +1,13 @@
+{application, glint, [
+ {vsn, "0.13.0"},
+ {applications, [gleam_community_ansi,
+ gleam_community_colour,
+ gleam_stdlib,
+ gleeunit,
+ snag]},
+ {description, "Gleam command line argument parsing with basic flag support."},
+ {modules, [glint,
+ glint@flag,
+ glint@flag@constraint]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/glint/src/glint.erl b/aoc2023/build/packages/glint/src/glint.erl
new file mode 100644
index 0000000..0501cc6
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint.erl
@@ -0,0 +1,513 @@
+-module(glint).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([with_config/2, with_pretty_help/2, without_pretty_help/1, with_name/2, new/0, command/1, description/2, flag/3, flag_tuple/2, flags/2, global_flag/3, global_flag_tuple/2, global_flags/2, default_pretty_help/0, add/3, help_flag/0, execute/2, run_and_handle/3, run/2, add_command_from_stub/2]).
+-export_type([config/0, pretty_help/0, glint/1, command/1, command_input/0, command_node/1, out/1, stub/1]).
+
+-type config() :: {config,
+ gleam@option:option(pretty_help()),
+ gleam@option:option(binary())}.
+
+-type pretty_help() :: {pretty_help,
+ gleam_community@colour:colour(),
+ gleam_community@colour:colour(),
+ gleam_community@colour:colour()}.
+
+-opaque glint(GHR) :: {glint,
+ config(),
+ command_node(GHR),
+ gleam@map:map_(binary(), glint@flag:flag())}.
+
+-opaque command(GHS) :: {command,
+ fun((command_input()) -> GHS),
+ gleam@map:map_(binary(), glint@flag:flag()),
+ binary()}.
+
+-type command_input() :: {command_input,
+ list(binary()),
+ gleam@map:map_(binary(), glint@flag:flag())}.
+
+-type command_node(GHT) :: {command_node,
+ gleam@option:option(command(GHT)),
+ gleam@map:map_(binary(), command_node(GHT))}.
+
+-type out(GHU) :: {out, GHU} | {help, binary()}.
+
+-type stub(GHV) :: {stub,
+ list(binary()),
+ fun((command_input()) -> GHV),
+ list({binary(), glint@flag:flag()}),
+ binary()}.
+
+-spec with_config(glint(GIA), config()) -> glint(GIA).
+with_config(Glint, Config) ->
+ erlang:setelement(2, Glint, Config).
+
+-spec with_pretty_help(glint(GID), pretty_help()) -> glint(GID).
+with_pretty_help(Glint, Pretty) ->
+ _pipe = erlang:setelement(2, erlang:element(2, Glint), {some, Pretty}),
+ with_config(Glint, _pipe).
+
+-spec without_pretty_help(glint(GIG)) -> glint(GIG).
+without_pretty_help(Glint) ->
+ _pipe = erlang:setelement(2, erlang:element(2, Glint), none),
+ with_config(Glint, _pipe).
+
+-spec with_name(glint(GIJ), binary()) -> glint(GIJ).
+with_name(Glint, Name) ->
+ _pipe = erlang:setelement(3, erlang:element(2, Glint), {some, Name}),
+ with_config(Glint, _pipe).
+
+-spec empty_command() -> command_node(any()).
+empty_command() ->
+ {command_node, none, gleam@map:new()}.
+
+-spec new() -> glint(any()).
+new() ->
+ {glint, {config, none, none}, empty_command(), gleam@map:new()}.
+
+-spec do_add(command_node(GIT), list(binary()), command(GIT)) -> command_node(GIT).
+do_add(Root, Path, Contents) ->
+ case Path of
+ [] ->
+ erlang:setelement(2, Root, {some, Contents});
+
+ [X | Xs] ->
+ erlang:setelement(
+ 3,
+ Root,
+ (gleam@map:update(
+ erlang:element(3, Root),
+ X,
+ fun(Node) -> _pipe = Node,
+ _pipe@1 = gleam@option:lazy_unwrap(
+ _pipe,
+ fun empty_command/0
+ ),
+ do_add(_pipe@1, Xs, Contents) end
+ ))
+ )
+ end.
+
+-spec command(fun((command_input()) -> GJC)) -> command(GJC).
+command(Runner) ->
+ {command, Runner, gleam@map:new(), <<""/utf8>>}.
+
+-spec description(command(GJF), binary()) -> command(GJF).
+description(Cmd, Description) ->
+ erlang:setelement(4, Cmd, Description).
+
+-spec flag(command(GJI), binary(), glint@flag:flag_builder(any())) -> command(GJI).
+flag(Cmd, Key, Flag) ->
+ erlang:setelement(
+ 3,
+ Cmd,
+ gleam@map:insert(erlang:element(3, Cmd), Key, glint@flag:build(Flag))
+ ).
+
+-spec flag_tuple(command(GJN), {binary(), glint@flag:flag_builder(any())}) -> command(GJN).
+flag_tuple(Cmd, Tup) ->
+ flag(Cmd, erlang:element(1, Tup), erlang:element(2, Tup)).
+
+-spec flags(command(GJS), list({binary(), glint@flag:flag()})) -> command(GJS).
+flags(Cmd, Flags) ->
+ gleam@list:fold(
+ Flags,
+ Cmd,
+ fun(Cmd@1, _use1) ->
+ {Key, Flag} = _use1,
+ erlang:setelement(
+ 3,
+ Cmd@1,
+ gleam@map:insert(erlang:element(3, Cmd@1), Key, Flag)
+ )
+ end
+ ).
+
+-spec global_flag(glint(GJW), binary(), glint@flag:flag_builder(any())) -> glint(GJW).
+global_flag(Glint, Key, Flag) ->
+ erlang:setelement(
+ 4,
+ Glint,
+ gleam@map:insert(erlang:element(4, Glint), Key, glint@flag:build(Flag))
+ ).
+
+-spec global_flag_tuple(glint(GKB), {binary(), glint@flag:flag_builder(any())}) -> glint(GKB).
+global_flag_tuple(Glint, Tup) ->
+ global_flag(Glint, erlang:element(1, Tup), erlang:element(2, Tup)).
+
+-spec global_flags(glint(GKG), list({binary(), glint@flag:flag()})) -> glint(GKG).
+global_flags(Glint, Flags) ->
+ erlang:setelement(
+ 4,
+ Glint,
+ (gleam@list:fold(
+ Flags,
+ erlang:element(4, Glint),
+ fun(Acc, Tup) ->
+ gleam@map:insert(
+ Acc,
+ erlang:element(1, Tup),
+ erlang:element(2, Tup)
+ )
+ end
+ ))
+ ).
+
+-spec execute_root(
+ command_node(GKU),
+ gleam@map:map_(binary(), glint@flag:flag()),
+ list(binary()),
+ list(binary())
+) -> {ok, out(GKU)} | {error, snag:snag()}.
+execute_root(Cmd, Global_flags, Args, Flag_inputs) ->
+ _pipe@3 = case erlang:element(2, Cmd) of
+ {some, Contents} ->
+ gleam@result:'try'(
+ gleam@list:try_fold(
+ Flag_inputs,
+ gleam@map:merge(Global_flags, erlang:element(3, Contents)),
+ fun glint@flag:update_flags/2
+ ),
+ fun(New_flags) -> _pipe = {command_input, Args, New_flags},
+ _pipe@1 = (erlang:element(2, Contents))(_pipe),
+ _pipe@2 = {out, _pipe@1},
+ {ok, _pipe@2} end
+ );
+
+ none ->
+ snag:error(<<"command not found"/utf8>>)
+ end,
+ snag:context(_pipe@3, <<"failed to run command"/utf8>>).
+
+-spec default_pretty_help() -> pretty_help().
+default_pretty_help() ->
+ _assert_subject = gleam_community@colour:from_rgb255(182, 255, 234),
+ {ok, Usage_colour} = case _assert_subject of
+ {ok, _} -> _assert_subject;
+ _assert_fail ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail,
+ module => <<"glint"/utf8>>,
+ function => <<"default_pretty_help"/utf8>>,
+ line => 404})
+ end,
+ _assert_subject@1 = gleam_community@colour:from_rgb255(255, 175, 243),
+ {ok, Flags_colour} = case _assert_subject@1 of
+ {ok, _} -> _assert_subject@1;
+ _assert_fail@1 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@1,
+ module => <<"glint"/utf8>>,
+ function => <<"default_pretty_help"/utf8>>,
+ line => 405})
+ end,
+ _assert_subject@2 = gleam_community@colour:from_rgb255(252, 226, 174),
+ {ok, Subcommands_colour} = case _assert_subject@2 of
+ {ok, _} -> _assert_subject@2;
+ _assert_fail@2 ->
+ erlang:error(#{gleam_error => let_assert,
+ message => <<"Assertion pattern match failed"/utf8>>,
+ value => _assert_fail@2,
+ module => <<"glint"/utf8>>,
+ function => <<"default_pretty_help"/utf8>>,
+ line => 406})
+ end,
+ {pretty_help, Usage_colour, Flags_colour, Subcommands_colour}.
+
+-spec is_not_empty(binary()) -> boolean().
+is_not_empty(S) ->
+ S /= <<""/utf8>>.
+
+-spec sanitize_path(list(binary())) -> list(binary()).
+sanitize_path(Path) ->
+ _pipe = Path,
+ _pipe@1 = gleam@list:map(_pipe, fun gleam@string:trim/1),
+ gleam@list:filter(_pipe@1, fun is_not_empty/1).
+
+-spec add(glint(GIO), list(binary()), command(GIO)) -> glint(GIO).
+add(Glint, Path, Contents) ->
+ erlang:setelement(
+ 3,
+ Glint,
+ begin
+ _pipe = Path,
+ _pipe@1 = sanitize_path(_pipe),
+ do_add(erlang:element(3, Glint), _pipe@1, Contents)
+ end
+ ).
+
+-spec help_flag() -> binary().
+help_flag() ->
+ <<(<<"--"/utf8>>)/binary, "help"/utf8>>.
+
+-spec wrap_with_space(binary()) -> binary().
+wrap_with_space(S) ->
+ case S of
+ <<""/utf8>> ->
+ <<" "/utf8>>;
+
+ _ ->
+ <<<<" "/utf8, S/binary>>/binary, " "/utf8>>
+ end.
+
+-spec subcommand_help(binary(), command_node(any())) -> binary().
+subcommand_help(Name, Cmd) ->
+ case erlang:element(2, Cmd) of
+ none ->
+ Name;
+
+ {some, Contents} ->
+ <<<<Name/binary, "\t\t"/utf8>>/binary,
+ (erlang:element(4, Contents))/binary>>
+ end.
+
+-spec subcommands_help(gleam@map:map_(binary(), command_node(any()))) -> binary().
+subcommands_help(Cmds) ->
+ _pipe = Cmds,
+ _pipe@1 = gleam@map:map_values(_pipe, fun subcommand_help/2),
+ _pipe@2 = gleam@map:values(_pipe@1),
+ _pipe@3 = gleam@list:sort(_pipe@2, fun gleam@string:compare/2),
+ gleam@string:join(_pipe@3, <<"\n\t"/utf8>>).
+
+-spec heading_style(binary(), gleam_community@colour:colour()) -> binary().
+heading_style(Heading, Colour) ->
+ _pipe = Heading,
+ _pipe@1 = gleam_community@ansi:bold(_pipe),
+ _pipe@2 = gleam_community@ansi:underline(_pipe@1),
+ _pipe@3 = gleam_community@ansi:italic(_pipe@2),
+ _pipe@4 = gleam_community@ansi:hex(
+ _pipe@3,
+ gleam_community@colour:to_rgb_hex(Colour)
+ ),
+ gleam_community@ansi:reset(_pipe@4).
+
+-spec usage_help(
+ binary(),
+ gleam@map:map_(binary(), glint@flag:flag()),
+ config()
+) -> binary().
+usage_help(Cmd_name, Flags, Config) ->
+ App_name = gleam@option:unwrap(
+ erlang:element(3, Config),
+ <<"gleam run"/utf8>>
+ ),
+ Flags@1 = begin
+ _pipe = Flags,
+ _pipe@1 = gleam@map:to_list(_pipe),
+ _pipe@2 = gleam@list:map(_pipe@1, fun glint@flag:flag_type_help/1),
+ gleam@list:sort(_pipe@2, fun gleam@string:compare/2)
+ end,
+ Flag_sb = case Flags@1 of
+ [] ->
+ gleam@string_builder:new();
+
+ _ ->
+ _pipe@3 = Flags@1,
+ _pipe@4 = gleam@list:intersperse(_pipe@3, <<" "/utf8>>),
+ _pipe@5 = gleam@string_builder:from_strings(_pipe@4),
+ _pipe@6 = gleam@string_builder:prepend(_pipe@5, <<" [ "/utf8>>),
+ gleam@string_builder:append(_pipe@6, <<" ]"/utf8>>)
+ end,
+ _pipe@7 = [App_name, wrap_with_space(Cmd_name), <<"[ ARGS ]"/utf8>>],
+ _pipe@8 = gleam@string_builder:from_strings(_pipe@7),
+ _pipe@9 = gleam@string_builder:append_builder(_pipe@8, Flag_sb),
+ _pipe@12 = gleam@string_builder:prepend(
+ _pipe@9,
+ <<(begin
+ _pipe@10 = erlang:element(2, Config),
+ _pipe@11 = gleam@option:map(
+ _pipe@10,
+ fun(Styling) ->
+ heading_style(
+ <<"USAGE:"/utf8>>,
+ erlang:element(2, Styling)
+ )
+ end
+ ),
+ gleam@option:unwrap(_pipe@11, <<"USAGE:"/utf8>>)
+ end)/binary,
+ "\n\t"/utf8>>
+ ),
+ gleam@string_builder:to_string(_pipe@12).
+
+-spec cmd_help(
+ list(binary()),
+ command_node(any()),
+ config(),
+ gleam@map:map_(binary(), glint@flag:flag())
+) -> binary().
+cmd_help(Path, Cmd, Config, Global_flags) ->
+ Name = begin
+ _pipe = Path,
+ _pipe@1 = gleam@list:reverse(_pipe),
+ gleam@string:join(_pipe@1, <<" "/utf8>>)
+ end,
+ Flags = begin
+ _pipe@2 = gleam@option:map(
+ erlang:element(2, Cmd),
+ fun(Contents) -> erlang:element(3, Contents) end
+ ),
+ _pipe@3 = gleam@option:lazy_unwrap(_pipe@2, fun gleam@map:new/0),
+ gleam@map:merge(Global_flags, _pipe@3)
+ end,
+ Flags_help_body = <<<<(begin
+ _pipe@4 = erlang:element(2, Config),
+ _pipe@5 = gleam@option:map(
+ _pipe@4,
+ fun(P) ->
+ heading_style(<<"FLAGS:"/utf8>>, erlang:element(3, P))
+ end
+ ),
+ gleam@option:unwrap(_pipe@5, <<"FLAGS:"/utf8>>)
+ end)/binary,
+ "\n\t"/utf8>>/binary,
+ (gleam@string:join(
+ gleam@list:sort(
+ [<<"--help\t\t\tPrint help information"/utf8>> |
+ glint@flag:flags_help(Flags)],
+ fun gleam@string:compare/2
+ ),
+ <<"\n\t"/utf8>>
+ ))/binary>>,
+ Usage = usage_help(Name, Flags, Config),
+ Description = begin
+ _pipe@6 = erlang:element(2, Cmd),
+ _pipe@7 = gleam@option:map(
+ _pipe@6,
+ fun(Contents@1) -> erlang:element(4, Contents@1) end
+ ),
+ gleam@option:unwrap(_pipe@7, <<""/utf8>>)
+ end,
+ Header_items = begin
+ _pipe@8 = [Name, Description],
+ _pipe@9 = gleam@list:filter(_pipe@8, fun is_not_empty/1),
+ gleam@string:join(_pipe@9, <<"\n"/utf8>>)
+ end,
+ Subcommands = case subcommands_help(erlang:element(3, Cmd)) of
+ <<""/utf8>> ->
+ <<""/utf8>>;
+
+ Subcommands_help_body ->
+ <<<<(begin
+ _pipe@10 = erlang:element(2, Config),
+ _pipe@11 = gleam@option:map(
+ _pipe@10,
+ fun(P@1) ->
+ heading_style(
+ <<"SUBCOMMANDS:"/utf8>>,
+ erlang:element(4, P@1)
+ )
+ end
+ ),
+ gleam@option:unwrap(_pipe@11, <<"SUBCOMMANDS:"/utf8>>)
+ end)/binary,
+ "\n\t"/utf8>>/binary,
+ Subcommands_help_body/binary>>
+ end,
+ _pipe@12 = [Header_items, Usage, Flags_help_body, Subcommands],
+ _pipe@13 = gleam@list:filter(_pipe@12, fun is_not_empty/1),
+ gleam@string:join(_pipe@13, <<"\n\n"/utf8>>).
+
+-spec do_execute(
+ command_node(GKO),
+ config(),
+ gleam@map:map_(binary(), glint@flag:flag()),
+ list(binary()),
+ list(binary()),
+ boolean(),
+ list(binary())
+) -> {ok, out(GKO)} | {error, snag:snag()}.
+do_execute(Cmd, Config, Global_flags, Args, Flags, Help, Command_path) ->
+ case Args of
+ [] when Help ->
+ _pipe = Command_path,
+ _pipe@1 = cmd_help(_pipe, Cmd, Config, Global_flags),
+ _pipe@2 = {help, _pipe@1},
+ {ok, _pipe@2};
+
+ [] ->
+ execute_root(Cmd, Global_flags, [], Flags);
+
+ [Arg | Rest] ->
+ case gleam@map:get(erlang:element(3, Cmd), Arg) of
+ {ok, Cmd@1} ->
+ do_execute(
+ Cmd@1,
+ Config,
+ Global_flags,
+ Rest,
+ Flags,
+ Help,
+ [Arg | Command_path]
+ );
+
+ _ when Help ->
+ _pipe@3 = Command_path,
+ _pipe@4 = cmd_help(_pipe@3, Cmd, Config, Global_flags),
+ _pipe@5 = {help, _pipe@4},
+ {ok, _pipe@5};
+
+ _ ->
+ execute_root(Cmd, Global_flags, Args, Flags)
+ end
+ end.
+
+-spec execute(glint(GKK), list(binary())) -> {ok, out(GKK)} |
+ {error, snag:snag()}.
+execute(Glint, Args) ->
+ Help_flag = help_flag(),
+ {Help, Args@2} = case gleam@list:pop(Args, fun(S) -> S =:= Help_flag end) of
+ {ok, {_, Args@1}} ->
+ {true, Args@1};
+
+ _ ->
+ {false, Args}
+ end,
+ {Flags, Args@3} = gleam@list:partition(
+ Args@2,
+ fun(_capture) -> gleam@string:starts_with(_capture, <<"--"/utf8>>) end
+ ),
+ do_execute(
+ erlang:element(3, Glint),
+ erlang:element(2, Glint),
+ erlang:element(4, Glint),
+ Args@3,
+ Flags,
+ Help,
+ []
+ ).
+
+-spec run_and_handle(glint(GLC), list(binary()), fun((GLC) -> any())) -> nil.
+run_and_handle(Glint, Args, Handle) ->
+ case execute(Glint, Args) of
+ {error, Err} ->
+ _pipe = Err,
+ _pipe@1 = snag:pretty_print(_pipe),
+ gleam@io:println(_pipe@1);
+
+ {ok, {help, Help}} ->
+ gleam@io:println(Help);
+
+ {ok, {out, Out}} ->
+ Handle(Out),
+ nil
+ end.
+
+-spec run(glint(any()), list(binary())) -> nil.
+run(Glint, Args) ->
+ run_and_handle(Glint, Args, gleam@function:constant(nil)).
+
+-spec add_command_from_stub(glint(GLP), stub(GLP)) -> glint(GLP).
+add_command_from_stub(Glint, Stub) ->
+ add(
+ Glint,
+ erlang:element(2, Stub),
+ begin
+ _pipe = command(erlang:element(3, Stub)),
+ _pipe@1 = flags(_pipe, erlang:element(4, Stub)),
+ description(_pipe@1, erlang:element(5, Stub))
+ end
+ ).
diff --git a/aoc2023/build/packages/glint/src/glint.gleam b/aoc2023/build/packages/glint/src/glint.gleam
new file mode 100644
index 0000000..b159016
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint.gleam
@@ -0,0 +1,588 @@
+import gleam/map.{type Map}
+import gleam/option.{type Option, None, Some}
+import gleam/list
+import gleam/io
+import gleam/string
+import snag.{type Result}
+import glint/flag.{type Flag, type Map as FlagMap}
+import gleam/string_builder as sb
+import gleam_community/ansi
+import gleam_community/colour.{type Colour}
+import gleam/result
+import gleam/function
+
+// --- CONFIGURATION ---
+
+// -- CONFIGURATION: TYPES --
+
+/// Config for glint
+///
+pub type Config {
+ Config(pretty_help: Option(PrettyHelp), name: Option(String))
+}
+
+/// PrettyHelp defines the header colours to be used when styling help text
+///
+pub type PrettyHelp {
+ PrettyHelp(usage: Colour, flags: Colour, subcommands: Colour)
+}
+
+// -- CONFIGURATION: CONSTANTS --
+
+/// Default config
+///
+pub const default_config = Config(pretty_help: None, name: None)
+
+// -- CONFIGURATION: FUNCTIONS --
+
+/// Add the provided config to the existing command tree
+///
+pub fn with_config(glint: Glint(a), config: Config) -> Glint(a) {
+ Glint(..glint, config: config)
+}
+
+/// Enable custom colours for help text headers
+/// For a pre-made colouring use `default_pretty_help()`
+///
+pub fn with_pretty_help(glint: Glint(a), pretty: PrettyHelp) -> Glint(a) {
+ Config(..glint.config, pretty_help: Some(pretty))
+ |> with_config(glint, _)
+}
+
+/// Disable custom colours for help text headers
+///
+pub fn without_pretty_help(glint: Glint(a)) -> Glint(a) {
+ Config(..glint.config, pretty_help: None)
+ |> with_config(glint, _)
+}
+
+pub fn with_name(glint: Glint(a), name: String) -> Glint(a) {
+ Config(..glint.config, name: Some(name))
+ |> with_config(glint, _)
+}
+
+// --- CORE ---
+
+// -- CORE: TYPES --
+
+/// Glint container type for config and commands
+///
+pub opaque type Glint(a) {
+ Glint(config: Config, cmd: CommandNode(a), global_flags: FlagMap)
+}
+
+/// CommandNode contents
+///
+pub opaque type Command(a) {
+ Command(do: Runner(a), flags: FlagMap, description: String)
+}
+
+/// Input type for `Runner`.
+///
+pub type CommandInput {
+ CommandInput(args: List(String), flags: FlagMap)
+}
+
+/// Function type to be run by `glint`.
+///
+pub type Runner(a) =
+ fn(CommandInput) -> a
+
+/// CommandNode tree representation.
+///
+type CommandNode(a) {
+ CommandNode(
+ contents: Option(Command(a)),
+ subcommands: Map(String, CommandNode(a)),
+ )
+}
+
+/// Ok type for command execution
+///
+pub type Out(a) {
+ /// Container for the command return value
+ Out(a)
+ /// Container for the generated help string
+ Help(String)
+}
+
+/// Result type for command execution
+///
+pub type CmdResult(a) =
+ Result(Out(a))
+
+// -- CORE: BUILDER FUNCTIONS --
+
+/// Creates a new command tree.
+///
+pub fn new() -> Glint(a) {
+ Glint(config: default_config, cmd: empty_command(), global_flags: map.new())
+}
+
+/// Adds a new command to be run at the specified path.
+///
+/// If the path is `[]`, the root command is set with the provided function and
+/// flags.
+///
+/// Note: all command paths are sanitized by stripping whitespace and removing any empty string elements.
+///
+pub fn add(
+ to glint: Glint(a),
+ at path: List(String),
+ do contents: Command(a),
+) -> Glint(a) {
+ Glint(
+ ..glint,
+ cmd: path
+ |> sanitize_path
+ |> do_add(to: glint.cmd, put: contents),
+ )
+}
+
+/// Recursive traversal of the command tree to find where to puth the provided command
+///
+fn do_add(
+ to root: CommandNode(a),
+ at path: List(String),
+ put contents: Command(a),
+) -> CommandNode(a) {
+ case path {
+ // update current command with provided contents
+ [] -> CommandNode(..root, contents: Some(contents))
+ // continue down the path, creating empty command nodes along the way
+ [x, ..xs] ->
+ CommandNode(
+ ..root,
+ subcommands: {
+ use node <- map.update(root.subcommands, x)
+ node
+ |> option.lazy_unwrap(empty_command)
+ |> do_add(xs, contents)
+ },
+ )
+ }
+}
+
+/// Helper for initializing empty commands
+///
+fn empty_command() -> CommandNode(a) {
+ CommandNode(contents: None, subcommands: map.new())
+}
+
+/// Trim each path element and remove any resulting empty strings.
+///
+fn sanitize_path(path: List(String)) -> List(String) {
+ path
+ |> list.map(string.trim)
+ |> list.filter(is_not_empty)
+}
+
+/// Create a Command(a) from a Runner(a)
+///
+pub fn command(do runner: Runner(a)) -> Command(a) {
+ Command(do: runner, flags: map.new(), description: "")
+}
+
+/// Attach a description to a Command(a)
+///
+pub fn description(cmd: Command(a), description: String) -> Command(a) {
+ Command(..cmd, description: description)
+}
+
+/// add a `flag.Flag` to a `Command`
+///
+pub fn flag(
+ cmd: Command(a),
+ at key: String,
+ of flag: flag.FlagBuilder(_),
+) -> Command(a) {
+ Command(..cmd, flags: map.insert(cmd.flags, key, flag.build(flag)))
+}
+
+/// Add a `flag.Flag to a `Command` when the flag name and builder are bundled as a #(String, flag.FlagBuilder(a)).
+///
+/// This is merely a convenience function and calls `glint.flag` under the hood.
+///
+pub fn flag_tuple(
+ cmd: Command(a),
+ with tup: #(String, flag.FlagBuilder(_)),
+) -> Command(a) {
+ flag(cmd, tup.0, tup.1)
+}
+
+/// Add multiple `Flag`s to a `Command`, note that this function uses `Flag` and not `FlagBuilder(_)`, so the user will need to call `flag.build` before providing the flags here.
+///
+/// It is recommended to call `glint.flag` instead.
+///
+pub fn flags(cmd: Command(a), with flags: List(#(String, Flag))) -> Command(a) {
+ use cmd, #(key, flag) <- list.fold(flags, cmd)
+ Command(..cmd, flags: map.insert(cmd.flags, key, flag))
+}
+
+/// Add global flags to the existing command tree
+///
+pub fn global_flag(
+ glint: Glint(a),
+ at key: String,
+ of flag: flag.FlagBuilder(_),
+) -> Glint(a) {
+ Glint(
+ ..glint,
+ global_flags: map.insert(glint.global_flags, key, flag.build(flag)),
+ )
+}
+
+/// Add global flags to the existing command tree.
+///
+pub fn global_flag_tuple(
+ glint: Glint(a),
+ with tup: #(String, flag.FlagBuilder(_)),
+) -> Glint(a) {
+ global_flag(glint, tup.0, tup.1)
+}
+
+/// Add global flags to the existing command tree.
+///
+/// Like `glint.flags`, this function requires `Flag`s insead of `FlagBuilder(_)`.
+///
+/// It is recommended to use `glint.global_flag` instead.
+///
+pub fn global_flags(glint: Glint(a), flags: List(#(String, Flag))) -> Glint(a) {
+ Glint(
+ ..glint,
+ global_flags: {
+ list.fold(
+ flags,
+ glint.global_flags,
+ fn(acc, tup) { map.insert(acc, tup.0, tup.1) },
+ )
+ },
+ )
+}
+
+// -- CORE: EXECUTION FUNCTIONS --
+
+/// Determines which command to run and executes it.
+///
+/// Sets any provided flags if necessary.
+///
+/// Each value prefixed with `--` is parsed as a flag.
+///
+/// This function does not print its output and is mainly intended for use within `glint` itself.
+/// If you would like to print or handle the output of a command please see the `run_and_handle` function.
+///
+pub fn execute(glint: Glint(a), args: List(String)) -> CmdResult(a) {
+ // create help flag to check for
+ let help_flag = help_flag()
+
+ // check if help flag is present
+ let #(help, args) = case list.pop(args, fn(s) { s == help_flag }) {
+ Ok(#(_, args)) -> #(True, args)
+ _ -> #(False, args)
+ }
+
+ // split flags out from the args list
+ let #(flags, args) = list.partition(args, string.starts_with(_, flag.prefix))
+
+ // search for command and execute
+ do_execute(glint.cmd, glint.config, glint.global_flags, args, flags, help, [])
+}
+
+/// Find which command to execute and run it with computed flags and args
+///
+fn do_execute(
+ cmd: CommandNode(a),
+ config: Config,
+ global_flags: FlagMap,
+ args: List(String),
+ flags: List(String),
+ help: Bool,
+ command_path: List(String),
+) -> CmdResult(a) {
+ case args {
+ // when there are no more available arguments
+ // and help flag has been passed, generate help message
+ [] if help ->
+ command_path
+ |> cmd_help(cmd, config, global_flags)
+ |> Help
+ |> Ok
+
+ // when there are no more available arguments
+ // run the current command
+ [] -> execute_root(cmd, global_flags, [], flags)
+
+ // when there are arguments remaining
+ // check if the next one is a subcommand of the current command
+ [arg, ..rest] ->
+ case map.get(cmd.subcommands, arg) {
+ // subcommand found, continue
+ Ok(cmd) ->
+ do_execute(
+ cmd,
+ config,
+ global_flags,
+ rest,
+ flags,
+ help,
+ [arg, ..command_path],
+ )
+ // subcommand not found, but help flag has been passed
+ // generate and return help message
+ _ if help ->
+ command_path
+ |> cmd_help(cmd, config, global_flags)
+ |> Help
+ |> Ok
+ // subcommand not found, but help flag has not been passed
+ // execute the current command
+ _ -> execute_root(cmd, global_flags, args, flags)
+ }
+ }
+}
+
+/// Executes the current root command.
+///
+fn execute_root(
+ cmd: CommandNode(a),
+ global_flags: FlagMap,
+ args: List(String),
+ flag_inputs: List(String),
+) -> CmdResult(a) {
+ case cmd.contents {
+ Some(contents) -> {
+ use new_flags <- result.try(list.try_fold(
+ over: flag_inputs,
+ from: map.merge(global_flags, contents.flags),
+ with: flag.update_flags,
+ ))
+ CommandInput(args, new_flags)
+ |> contents.do
+ |> Out
+ |> Ok
+ }
+ None -> snag.error("command not found")
+ }
+ |> snag.context("failed to run command")
+}
+
+/// A wrapper for `execute` that prints any errors enountered or the help text if requested.
+/// This function ignores any value returned by the command that was run.
+/// If you would like to do something with the command output please see the run_and_handle function.
+///
+pub fn run(from glint: Glint(a), for args: List(String)) -> Nil {
+ run_and_handle(from: glint, for: args, with: function.constant(Nil))
+}
+
+/// A wrapper for `execute` that prints any errors enountered or the help text if requested.
+/// This function calls the provided handler with the value returned by the command that was run.
+///
+pub fn run_and_handle(
+ from glint: Glint(a),
+ for args: List(String),
+ with handle: fn(a) -> _,
+) -> Nil {
+ case execute(glint, args) {
+ Error(err) ->
+ err
+ |> snag.pretty_print
+ |> io.println
+ Ok(Help(help)) -> io.println(help)
+ Ok(Out(out)) -> {
+ handle(out)
+ Nil
+ }
+ }
+}
+
+/// Default pretty help heading colouring
+/// mint (r: 182, g: 255, b: 234) colour for usage
+/// pink (r: 255, g: 175, b: 243) colour for flags
+/// buttercup (r: 252, g: 226, b: 174) colour for subcommands
+///
+pub fn default_pretty_help() -> PrettyHelp {
+ let assert Ok(usage_colour) = colour.from_rgb255(182, 255, 234)
+ let assert Ok(flags_colour) = colour.from_rgb255(255, 175, 243)
+ let assert Ok(subcommands_colour) = colour.from_rgb255(252, 226, 174)
+
+ PrettyHelp(
+ usage: usage_colour,
+ flags: flags_colour,
+ subcommands: subcommands_colour,
+ )
+}
+
+// constants for setting up sections of the help message
+const flags_heading = "FLAGS:"
+
+const subcommands_heading = "SUBCOMMANDS:"
+
+const usage_heading = "USAGE:"
+
+/// Helper for filtering out empty strings
+///
+fn is_not_empty(s: String) -> Bool {
+ s != ""
+}
+
+const help_flag_name = "help"
+
+const help_flag_message = "--help\t\t\tPrint help information"
+
+/// Function to create the help flag string
+/// Exported for testing purposes only
+///
+pub fn help_flag() -> String {
+ flag.prefix <> help_flag_name
+}
+
+// -- HELP: FUNCTIONS --
+
+fn wrap_with_space(s: String) -> String {
+ case s {
+ "" -> " "
+ _ -> " " <> s <> " "
+ }
+}
+
+/// generate the usage help string for a command
+fn usage_help(cmd_name: String, flags: FlagMap, config: Config) -> String {
+ let app_name = option.unwrap(config.name, "gleam run")
+ let flags =
+ flags
+ |> map.to_list
+ |> list.map(flag.flag_type_help)
+ |> list.sort(string.compare)
+
+ let flag_sb = case flags {
+ [] -> sb.new()
+ _ ->
+ flags
+ |> list.intersperse(" ")
+ |> sb.from_strings()
+ |> sb.prepend(prefix: " [ ")
+ |> sb.append(suffix: " ]")
+ }
+
+ [app_name, wrap_with_space(cmd_name), "[ ARGS ]"]
+ |> sb.from_strings
+ |> sb.append_builder(flag_sb)
+ |> sb.prepend(
+ config.pretty_help
+ |> option.map(fn(styling) { heading_style(usage_heading, styling.usage) })
+ |> option.unwrap(usage_heading) <> "\n\t",
+ )
+ |> sb.to_string
+}
+
+/// generate the help text for a command
+fn cmd_help(
+ path: List(String),
+ cmd: CommandNode(a),
+ config: Config,
+ global_flags: FlagMap,
+) -> String {
+ // recreate the path of the current command
+ // reverse the path because it is created by prepending each section as do_execute walks down the tree
+ let name =
+ path
+ |> list.reverse
+ |> string.join(" ")
+
+ let flags =
+ option.map(cmd.contents, fn(contents) { contents.flags })
+ |> option.lazy_unwrap(map.new)
+ |> map.merge(global_flags, _)
+
+ let flags_help_body =
+ config.pretty_help
+ |> option.map(fn(p) { heading_style(flags_heading, p.flags) })
+ |> option.unwrap(flags_heading) <> "\n\t" <> string.join(
+ list.sort([help_flag_message, ..flag.flags_help(flags)], string.compare),
+ "\n\t",
+ )
+
+ let usage = usage_help(name, flags, config)
+
+ let description =
+ cmd.contents
+ |> option.map(fn(contents) { contents.description })
+ |> option.unwrap("")
+
+ // create the header block from the name and description
+ let header_items =
+ [name, description]
+ |> list.filter(is_not_empty)
+ |> string.join("\n")
+
+ // create the subcommands help block
+ let subcommands = case subcommands_help(cmd.subcommands) {
+ "" -> ""
+ subcommands_help_body ->
+ config.pretty_help
+ |> option.map(fn(p) { heading_style(subcommands_heading, p.subcommands) })
+ |> option.unwrap(subcommands_heading) <> "\n\t" <> subcommands_help_body
+ }
+
+ // join the resulting help blocks into the final help message
+ [header_items, usage, flags_help_body, subcommands]
+ |> list.filter(is_not_empty)
+ |> string.join("\n\n")
+}
+
+// create the help text for subcommands
+fn subcommands_help(cmds: Map(String, CommandNode(a))) -> String {
+ cmds
+ |> map.map_values(subcommand_help)
+ |> map.values
+ |> list.sort(string.compare)
+ |> string.join("\n\t")
+}
+
+// generate the help text for a subcommand
+fn subcommand_help(name: String, cmd: CommandNode(_)) -> String {
+ case cmd.contents {
+ None -> name
+ Some(contents) -> name <> "\t\t" <> contents.description
+ }
+}
+
+/// Style heading text with the provided rgb colouring
+/// this is only intended for use within glint itself.
+///
+fn heading_style(heading: String, colour: Colour) -> String {
+ heading
+ |> ansi.bold
+ |> ansi.underline
+ |> ansi.italic
+ |> ansi.hex(colour.to_rgb_hex(colour))
+ |> ansi.reset
+}
+
+// -- DEPRECATED: STUBS --
+
+/// DEPRECATED: use `glint.cmd` and related new functions instead to create a Command
+///
+/// Create command stubs to be used in `add_command_from_stub`
+///
+pub type Stub(a) {
+ Stub(
+ path: List(String),
+ run: Runner(a),
+ flags: List(#(String, Flag)),
+ description: String,
+ )
+}
+
+/// Add a command to the root given a stub
+///
+@deprecated("use `glint.cmd` and related new functions instead to create a Command")
+pub fn add_command_from_stub(to glint: Glint(a), with stub: Stub(a)) -> Glint(a) {
+ add(
+ to: glint,
+ at: stub.path,
+ do: command(stub.run)
+ |> flags(stub.flags)
+ |> description(stub.description),
+ )
+}
diff --git a/aoc2023/build/packages/glint/src/glint/flag.gleam b/aoc2023/build/packages/glint/src/glint/flag.gleam
new file mode 100644
index 0000000..0a6cae1
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint/flag.gleam
@@ -0,0 +1,478 @@
+import gleam/map
+import gleam/string
+import gleam/result
+import gleam/int
+import gleam/list
+import gleam/float
+import snag.{type Result, type Snag}
+import gleam/option.{type Option, None, Some}
+import glint/flag/constraint.{type Constraint}
+import gleam
+
+/// Flag inputs must start with this prefix
+///
+pub const prefix = "--"
+
+/// The separation character for flag names and their values
+const delimiter = "="
+
+/// Supported flag types.
+///
+pub type Value {
+ /// Boolean flags, to be passed in as `--flag=true` or `--flag=false`.
+ /// Can be toggled by omitting the desired value like `--flag`.
+ /// Toggling will negate the existing value.
+ ///
+ B(Internal(Bool))
+
+ /// Int flags, to be passed in as `--flag=1`
+ ///
+ I(Internal(Int))
+
+ /// List(Int) flags, to be passed in as `--flag=1,2,3`
+ ///
+ LI(Internal(List(Int)))
+
+ /// Float flags, to be passed in as `--flag=1.0`
+ ///
+ F(Internal(Float))
+
+ /// List(Float) flags, to be passed in as `--flag=1.0,2.0`
+ ///
+ LF(Internal(List(Float)))
+
+ /// String flags, to be passed in as `--flag=hello`
+ ///
+ S(Internal(String))
+
+ /// List(String) flags, to be passed in as `--flag=hello,world`
+ ///
+ LS(Internal(List(String)))
+}
+
+/// A type that facilitates the creation of `Flag`s
+///
+pub opaque type FlagBuilder(a) {
+ FlagBuilder(
+ desc: Description,
+ parser: Parser(a, Snag),
+ value: fn(Internal(a)) -> Value,
+ default: Option(a),
+ )
+}
+
+/// An internal representation of flag contents
+///
+pub opaque type Internal(a) {
+ Internal(value: Option(a), parser: Parser(a, Snag))
+}
+
+// Builder initializers
+
+type Parser(a, b) =
+ fn(String) -> gleam.Result(a, b)
+
+/// initialise an int flag builder
+///
+pub fn int() -> FlagBuilder(Int) {
+ use input <- new(I)
+ input
+ |> int.parse
+ |> result.replace_error(cannot_parse(input, "int"))
+}
+
+/// initialise an int list flag builder
+///
+pub fn int_list() -> FlagBuilder(List(Int)) {
+ use input <- new(LI)
+ input
+ |> string.split(",")
+ |> list.try_map(int.parse)
+ |> result.replace_error(cannot_parse(input, "int list"))
+}
+
+/// initialise a float flag builder
+///
+pub fn float() -> FlagBuilder(Float) {
+ use input <- new(F)
+ input
+ |> float.parse
+ |> result.replace_error(cannot_parse(input, "float"))
+}
+
+/// initialise a float list flag builder
+///
+pub fn float_list() -> FlagBuilder(List(Float)) {
+ use input <- new(LF)
+ input
+ |> string.split(",")
+ |> list.try_map(float.parse)
+ |> result.replace_error(cannot_parse(input, "float list"))
+}
+
+/// initialise a string flag builder
+///
+pub fn string() -> FlagBuilder(String) {
+ new(S, fn(s) { Ok(s) })
+}
+
+/// intitialise a string list flag builder
+///
+pub fn string_list() -> FlagBuilder(List(String)) {
+ use input <- new(LS)
+ input
+ |> string.split(",")
+ |> Ok
+}
+
+/// initialise a bool flag builder
+///
+pub fn bool() -> FlagBuilder(Bool) {
+ use input <- new(B)
+ case string.lowercase(input) {
+ "true" | "t" -> Ok(True)
+ "false" | "f" -> Ok(False)
+ _ -> Error(cannot_parse(input, "bool"))
+ }
+}
+
+/// initialize custom builders using a Value constructor and a parsing function
+///
+fn new(valuer: fn(Internal(a)) -> Value, p: Parser(a, Snag)) -> FlagBuilder(a) {
+ FlagBuilder(desc: "", parser: p, value: valuer, default: None)
+}
+
+/// convert a FlagBuilder(a) into its corresponding Flag representation
+///
+pub fn build(fb: FlagBuilder(a)) -> Flag {
+ Flag(
+ value: fb.value(Internal(value: fb.default, parser: fb.parser)),
+ description: fb.desc,
+ )
+}
+
+/// attach a constraint to a `Flag`
+///
+pub fn constraint(
+ builder: FlagBuilder(a),
+ constraint: Constraint(a),
+) -> FlagBuilder(a) {
+ FlagBuilder(
+ ..builder,
+ parser: wrap_with_constraint(builder.parser, constraint),
+ )
+}
+
+/// attach a Constraint(a) to a Parser(a,Snag)
+/// this function should not be used directly unless
+fn wrap_with_constraint(
+ p: Parser(a, Snag),
+ constraint: Constraint(a),
+) -> Parser(a, Snag) {
+ fn(input: String) -> Result(a) { attempt(p(input), constraint) }
+}
+
+fn attempt(
+ val: gleam.Result(a, e),
+ f: fn(a) -> gleam.Result(_, e),
+) -> gleam.Result(a, e) {
+ use a <- result.try(val)
+ result.replace(f(a), a)
+}
+
+/// Flag descriptions
+///
+pub type Description =
+ String
+
+/// Flag data and descriptions
+///
+pub type Flag {
+ Flag(value: Value, description: Description)
+}
+
+/// attach a description to a `Flag`
+///
+pub fn description(
+ for builder: FlagBuilder(a),
+ of description: Description,
+) -> FlagBuilder(a) {
+ FlagBuilder(..builder, desc: description)
+}
+
+/// Set the default value for a flag `Value`
+///
+pub fn default(for builder: FlagBuilder(a), of default: a) -> FlagBuilder(a) {
+ FlagBuilder(..builder, default: Some(default))
+}
+
+/// Associate flag names to their current values.
+///
+pub type Map =
+ map.Map(String, Flag)
+
+/// Convert a list of flags to a Map.
+///
+pub fn build_map(flags: List(#(String, Flag))) -> Map {
+ map.from_list(flags)
+}
+
+/// Updates a flag value, ensuring that the new value can satisfy the required type.
+/// Assumes that all flag inputs passed in start with --
+/// This function is only intended to be used from glint.execute_root
+///
+pub fn update_flags(in flags: Map, with flag_input: String) -> Result(Map) {
+ let flag_input = string.drop_left(flag_input, string.length(prefix))
+
+ case string.split_once(flag_input, delimiter) {
+ Ok(data) -> update_flag_value(flags, data)
+ Error(_) -> attempt_toggle_flag(flags, flag_input)
+ }
+}
+
+fn update_flag_value(in flags: Map, with data: #(String, String)) -> Result(Map) {
+ let #(key, input) = data
+ use contents <- result.try(access(flags, key))
+ use value <- result.map(
+ compute_flag(with: input, given: contents.value)
+ |> result.map_error(layer_invalid_flag(_, key)),
+ )
+ map.insert(flags, key, Flag(..contents, value: value))
+}
+
+fn attempt_toggle_flag(in flags: Map, at key: String) -> Result(Map) {
+ use contents <- result.try(access(flags, key))
+ case contents.value {
+ B(Internal(None, ..) as internal) ->
+ Internal(..internal, value: Some(True))
+ |> B
+ |> fn(val) { Flag(..contents, value: val) }
+ |> map.insert(into: flags, for: key)
+ |> Ok()
+ B(Internal(Some(val), ..) as internal) ->
+ Internal(..internal, value: Some(!val))
+ |> B
+ |> fn(val) { Flag(..contents, value: val) }
+ |> map.insert(into: flags, for: key)
+ |> Ok()
+ _ -> Error(no_value_flag_err(key))
+ }
+}
+
+fn access_type_error(flag_type) {
+ snag.error("cannot access flag as " <> flag_type)
+}
+
+fn flag_not_provided_error() {
+ snag.error("no value provided")
+}
+
+fn construct_value(
+ input: String,
+ internal: Internal(a),
+ constructor: fn(Internal(a)) -> Value,
+) -> Result(Value) {
+ use val <- result.map(internal.parser(input))
+ constructor(Internal(..internal, value: Some(val)))
+}
+
+/// Computes the new flag value given the input and the expected flag type
+///
+fn compute_flag(with input: String, given current: Value) -> Result(Value) {
+ input
+ |> case current {
+ I(internal) -> construct_value(_, internal, I)
+ LI(internal) -> construct_value(_, internal, LI)
+ F(internal) -> construct_value(_, internal, F)
+ LF(internal) -> construct_value(_, internal, LF)
+ S(internal) -> construct_value(_, internal, S)
+ LS(internal) -> construct_value(_, internal, LS)
+ B(internal) -> construct_value(_, internal, B)
+ }
+ |> snag.context("failed to compute value for flag")
+}
+
+// Error creation and manipulation functions
+fn layer_invalid_flag(err: Snag, flag: String) -> Snag {
+ snag.layer(err, "invalid flag '" <> flag <> "'")
+}
+
+fn no_value_flag_err(flag_input: String) -> Snag {
+ { "flag '" <> flag_input <> "' has no assigned value" }
+ |> snag.new()
+ |> layer_invalid_flag(flag_input)
+}
+
+fn undefined_flag_err(key: String) -> Snag {
+ "flag provided but not defined"
+ |> snag.new()
+ |> layer_invalid_flag(key)
+}
+
+fn cannot_parse(with value: String, is kind: String) -> Snag {
+ { "cannot parse value '" <> value <> "' as " <> kind }
+ |> snag.new()
+}
+
+// Help Message Functions
+/// Generate the help message contents for a single flag
+///
+pub fn flag_type_help(flag: #(String, Flag)) {
+ let #(name, contents) = flag
+ let kind = case contents.value {
+ I(_) -> "INT"
+ B(_) -> "BOOL"
+ F(_) -> "FLOAT"
+ LF(_) -> "FLOAT_LIST"
+ LI(_) -> "INT_LIST"
+ LS(_) -> "STRING_LIST"
+ S(_) -> "STRING"
+ }
+
+ prefix <> name <> delimiter <> "<" <> kind <> ">"
+}
+
+/// Generate help message line for a single flag
+///
+fn flag_help(flag: #(String, Flag)) -> String {
+ flag_type_help(flag) <> "\t\t" <> { flag.1 }.description
+}
+
+/// Generate help messages for all flags
+///
+pub fn flags_help(flags: Map) -> List(String) {
+ flags
+ |> map.to_list
+ |> list.map(flag_help)
+}
+
+// -- FLAG ACCESS FUNCTIONS --
+
+/// Access the contents for the associated flag
+///
+fn access(flags: Map, name: String) -> Result(Flag) {
+ map.get(flags, name)
+ |> result.replace_error(undefined_flag_err(name))
+}
+
+fn get_value(
+ from flags: Map,
+ at key: String,
+ expecting kind: fn(Flag) -> Result(a),
+) -> Result(a) {
+ access(flags, key)
+ |> result.try(kind)
+ |> snag.context("failed to retrieve value for flag '" <> key <> "'")
+}
+
+/// Gets the current value for the provided int flag
+///
+pub fn get_int_value(from flag: Flag) -> Result(Int) {
+ case flag.value {
+ I(Internal(value: Some(val), ..)) -> Ok(val)
+ I(Internal(value: None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("int")
+ }
+}
+
+/// Gets the current value for the associated int flag
+///
+pub fn get_int(from flags: Map, for name: String) -> Result(Int) {
+ get_value(flags, name, get_int_value)
+}
+
+/// Gets the current value for the provided ints flag
+///
+pub fn get_ints_value(from flag: Flag) -> Result(List(Int)) {
+ case flag.value {
+ LI(Internal(value: Some(val), ..)) -> Ok(val)
+ LI(Internal(value: None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("int list")
+ }
+}
+
+/// Gets the current value for the associated ints flag
+///
+pub fn get_ints(from flags: Map, for name: String) -> Result(List(Int)) {
+ get_value(flags, name, get_ints_value)
+}
+
+/// Gets the current value for the provided bool flag
+///
+pub fn get_bool_value(from flag: Flag) -> Result(Bool) {
+ case flag.value {
+ B(Internal(Some(val), ..)) -> Ok(val)
+ B(Internal(None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("bool")
+ }
+}
+
+/// Gets the current value for the associated bool flag
+///
+pub fn get_bool(from flags: Map, for name: String) -> Result(Bool) {
+ get_value(flags, name, get_bool_value)
+}
+
+/// Gets the current value for the provided string flag
+///
+pub fn get_string_value(from flag: Flag) -> Result(String) {
+ case flag.value {
+ S(Internal(value: Some(val), ..)) -> Ok(val)
+ S(Internal(value: None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("string")
+ }
+}
+
+/// Gets the current value for the associated string flag
+///
+pub fn get_string(from flags: Map, for name: String) -> Result(String) {
+ get_value(flags, name, get_string_value)
+}
+
+/// Gets the current value for the provided strings flag
+///
+pub fn get_strings_value(from flag: Flag) -> Result(List(String)) {
+ case flag.value {
+ LS(Internal(value: Some(val), ..)) -> Ok(val)
+ LS(Internal(value: None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("string list")
+ }
+}
+
+/// Gets the current value for the associated strings flag
+///
+pub fn get_strings(from flags: Map, for name: String) -> Result(List(String)) {
+ get_value(flags, name, get_strings_value)
+}
+
+/// Gets the current value for the provided float flag
+///
+pub fn get_float_value(from flag: Flag) -> Result(Float) {
+ case flag.value {
+ F(Internal(value: Some(val), ..)) -> Ok(val)
+ F(Internal(value: None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("float")
+ }
+}
+
+/// Gets the current value for the associated float flag
+///
+pub fn get_float(from flags: Map, for name: String) -> Result(Float) {
+ get_value(flags, name, get_float_value)
+}
+
+/// Gets the current value for the provided floats flag
+///
+pub fn get_floats_value(from flag: Flag) -> Result(List(Float)) {
+ case flag.value {
+ LF(Internal(value: Some(val), ..)) -> Ok(val)
+ LF(Internal(value: None, ..)) -> flag_not_provided_error()
+ _ -> access_type_error("float list")
+ }
+}
+
+/// Gets the current value for the associated floats flag
+///
+pub fn get_floats(from flags: Map, for name: String) -> Result(List(Float)) {
+ get_value(flags, name, get_floats_value)
+}
diff --git a/aoc2023/build/packages/glint/src/glint/flag/constraint.gleam b/aoc2023/build/packages/glint/src/glint/flag/constraint.gleam
new file mode 100644
index 0000000..e474bc2
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint/flag/constraint.gleam
@@ -0,0 +1,66 @@
+import gleam/list
+import gleam/result
+import gleam/string
+import gleam/set
+import snag.{type Result}
+
+/// Constraint type for verifying flag values
+///
+pub type Constraint(a) =
+ fn(a) -> Result(Nil)
+
+/// one_of returns a Constraint that ensures the parsed flag value is
+/// one of the allowed values.
+///
+pub fn one_of(allowed: List(a)) -> Constraint(a) {
+ let allowed_set = set.from_list(allowed)
+ fn(val: a) -> Result(Nil) {
+ case set.contains(allowed_set, val) {
+ True -> Ok(Nil)
+ False ->
+ snag.error(
+ "invalid value '" <> string.inspect(val) <> "', must be one of: [" <> {
+ allowed
+ |> list.map(fn(a) { "'" <> string.inspect(a) <> "'" })
+ |> string.join(", ") <> "]"
+ },
+ )
+ }
+ }
+}
+
+/// none_of returns a Constraint that ensures the parsed flag value is not one of the disallowed values.
+///
+pub fn none_of(disallowed: List(a)) -> Constraint(a) {
+ let disallowed_set = set.from_list(disallowed)
+ fn(val: a) -> Result(Nil) {
+ case set.contains(disallowed_set, val) {
+ False -> Ok(Nil)
+ True ->
+ snag.error(
+ "invalid value '" <> string.inspect(val) <> "', must not be one of: [" <> {
+ {
+ disallowed
+ |> list.map(fn(a) { "'" <> string.inspect(a) <> "'" })
+ |> string.join(", ") <> "]"
+ }
+ },
+ )
+ }
+ }
+}
+
+/// each is a convenience function for applying a Constraint(a) to a List(a).
+/// This is useful because the default behaviour for constraints on lists is that they will apply to the list as a whole.
+///
+/// For example, to apply one_of to all items in a `List(Int)`:
+/// ```gleam
+/// [1, 2, 3, 4] |> one_of |> each
+/// ```
+pub fn each(constraint: Constraint(a)) -> Constraint(List(a)) {
+ fn(l: List(a)) -> Result(Nil) {
+ l
+ |> list.try_map(constraint)
+ |> result.replace(Nil)
+ }
+}
diff --git a/aoc2023/build/packages/glint/src/glint@flag.erl b/aoc2023/build/packages/glint/src/glint@flag.erl
new file mode 100644
index 0000000..bcce6db
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint@flag.erl
@@ -0,0 +1,523 @@
+-module(glint@flag).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([string/0, string_list/0, build/1, constraint/2, description/2, default/2, build_map/1, int/0, int_list/0, float/0, float_list/0, bool/0, flag_type_help/1, flags_help/1, update_flags/2, get_int_value/1, get_int/2, get_ints_value/1, get_ints/2, get_bool_value/1, get_bool/2, get_string_value/1, get_string/2, get_strings_value/1, get_strings/2, get_float_value/1, get_float/2, get_floats_value/1, get_floats/2]).
+-export_type([value/0, flag_builder/1, internal/1, flag/0]).
+
+-type value() :: {b, internal(boolean())} |
+ {i, internal(integer())} |
+ {li, internal(list(integer()))} |
+ {f, internal(float())} |
+ {lf, internal(list(float()))} |
+ {s, internal(binary())} |
+ {ls, internal(list(binary()))}.
+
+-opaque flag_builder(FTZ) :: {flag_builder,
+ binary(),
+ fun((binary()) -> {ok, FTZ} | {error, snag:snag()}),
+ fun((internal(FTZ)) -> value()),
+ gleam@option:option(FTZ)}.
+
+-opaque internal(FUA) :: {internal,
+ gleam@option:option(FUA),
+ fun((binary()) -> {ok, FUA} | {error, snag:snag()})}.
+
+-type flag() :: {flag, value(), binary()}.
+
+-spec new(
+ fun((internal(FUR)) -> value()),
+ fun((binary()) -> {ok, FUR} | {error, snag:snag()})
+) -> flag_builder(FUR).
+new(Valuer, P) ->
+ {flag_builder, <<""/utf8>>, P, Valuer, none}.
+
+-spec string() -> flag_builder(binary()).
+string() ->
+ new(fun(Field@0) -> {s, Field@0} end, fun(S) -> {ok, S} end).
+
+-spec string_list() -> flag_builder(list(binary())).
+string_list() ->
+ new(fun(Field@0) -> {ls, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
+ {ok, _pipe@1} end).
+
+-spec build(flag_builder(any())) -> flag().
+build(Fb) ->
+ {flag,
+ (erlang:element(4, Fb))(
+ {internal, erlang:element(5, Fb), erlang:element(3, Fb)}
+ ),
+ erlang:element(2, Fb)}.
+
+-spec attempt(
+ {ok, FVI} | {error, FVJ},
+ fun((FVI) -> {ok, any()} | {error, FVJ})
+) -> {ok, FVI} | {error, FVJ}.
+attempt(Val, F) ->
+ gleam@result:'try'(Val, fun(A) -> gleam@result:replace(F(A), A) end).
+
+-spec wrap_with_constraint(
+ fun((binary()) -> {ok, FVC} | {error, snag:snag()}),
+ fun((FVC) -> {ok, nil} | {error, snag:snag()})
+) -> fun((binary()) -> {ok, FVC} | {error, snag:snag()}).
+wrap_with_constraint(P, Constraint) ->
+ fun(Input) -> attempt(P(Input), Constraint) end.
+
+-spec constraint(
+ flag_builder(FUY),
+ fun((FUY) -> {ok, nil} | {error, snag:snag()})
+) -> flag_builder(FUY).
+constraint(Builder, Constraint) ->
+ erlang:setelement(
+ 3,
+ Builder,
+ wrap_with_constraint(erlang:element(3, Builder), Constraint)
+ ).
+
+-spec description(flag_builder(FVR), binary()) -> flag_builder(FVR).
+description(Builder, Description) ->
+ erlang:setelement(2, Builder, Description).
+
+-spec default(flag_builder(FVU), FVU) -> flag_builder(FVU).
+default(Builder, Default) ->
+ erlang:setelement(5, Builder, {some, Default}).
+
+-spec build_map(list({binary(), flag()})) -> gleam@map:map_(binary(), flag()).
+build_map(Flags) ->
+ gleam@map:from_list(Flags).
+
+-spec access_type_error(binary()) -> {ok, any()} | {error, snag:snag()}.
+access_type_error(Flag_type) ->
+ snag:error(<<"cannot access flag as "/utf8, Flag_type/binary>>).
+
+-spec flag_not_provided_error() -> {ok, any()} | {error, snag:snag()}.
+flag_not_provided_error() ->
+ snag:error(<<"no value provided"/utf8>>).
+
+-spec construct_value(binary(), internal(FWE), fun((internal(FWE)) -> value())) -> {ok,
+ value()} |
+ {error, snag:snag()}.
+construct_value(Input, Internal, Constructor) ->
+ gleam@result:map(
+ (erlang:element(3, Internal))(Input),
+ fun(Val) -> Constructor(erlang:setelement(2, Internal, {some, Val})) end
+ ).
+
+-spec compute_flag(binary(), value()) -> {ok, value()} | {error, snag:snag()}.
+compute_flag(Input, Current) ->
+ _pipe = Input,
+ _pipe@1 = case Current of
+ {i, Internal} ->
+ fun(_capture) ->
+ construct_value(
+ _capture,
+ Internal,
+ fun(Field@0) -> {i, Field@0} end
+ )
+ end;
+
+ {li, Internal@1} ->
+ fun(_capture@1) ->
+ construct_value(
+ _capture@1,
+ Internal@1,
+ fun(Field@0) -> {li, Field@0} end
+ )
+ end;
+
+ {f, Internal@2} ->
+ fun(_capture@2) ->
+ construct_value(
+ _capture@2,
+ Internal@2,
+ fun(Field@0) -> {f, Field@0} end
+ )
+ end;
+
+ {lf, Internal@3} ->
+ fun(_capture@3) ->
+ construct_value(
+ _capture@3,
+ Internal@3,
+ fun(Field@0) -> {lf, Field@0} end
+ )
+ end;
+
+ {s, Internal@4} ->
+ fun(_capture@4) ->
+ construct_value(
+ _capture@4,
+ Internal@4,
+ fun(Field@0) -> {s, Field@0} end
+ )
+ end;
+
+ {ls, Internal@5} ->
+ fun(_capture@5) ->
+ construct_value(
+ _capture@5,
+ Internal@5,
+ fun(Field@0) -> {ls, Field@0} end
+ )
+ end;
+
+ {b, Internal@6} ->
+ fun(_capture@6) ->
+ construct_value(
+ _capture@6,
+ Internal@6,
+ fun(Field@0) -> {b, Field@0} end
+ )
+ end
+ end(_pipe),
+ snag:context(_pipe@1, <<"failed to compute value for flag"/utf8>>).
+
+-spec layer_invalid_flag(snag:snag(), binary()) -> snag:snag().
+layer_invalid_flag(Err, Flag) ->
+ snag:layer(Err, <<<<"invalid flag '"/utf8, Flag/binary>>/binary, "'"/utf8>>).
+
+-spec no_value_flag_err(binary()) -> snag:snag().
+no_value_flag_err(Flag_input) ->
+ _pipe = (<<<<"flag '"/utf8, Flag_input/binary>>/binary,
+ "' has no assigned value"/utf8>>),
+ _pipe@1 = snag:new(_pipe),
+ layer_invalid_flag(_pipe@1, Flag_input).
+
+-spec undefined_flag_err(binary()) -> snag:snag().
+undefined_flag_err(Key) ->
+ _pipe = <<"flag provided but not defined"/utf8>>,
+ _pipe@1 = snag:new(_pipe),
+ layer_invalid_flag(_pipe@1, Key).
+
+-spec cannot_parse(binary(), binary()) -> snag:snag().
+cannot_parse(Value, Kind) ->
+ _pipe = (<<<<<<"cannot parse value '"/utf8, Value/binary>>/binary,
+ "' as "/utf8>>/binary,
+ Kind/binary>>),
+ snag:new(_pipe).
+
+-spec int() -> flag_builder(integer()).
+int() ->
+ new(fun(Field@0) -> {i, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@int:parse(_pipe),
+ gleam@result:replace_error(
+ _pipe@1,
+ cannot_parse(Input, <<"int"/utf8>>)
+ ) end).
+
+-spec int_list() -> flag_builder(list(integer())).
+int_list() ->
+ new(fun(Field@0) -> {li, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
+ _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@int:parse/1),
+ gleam@result:replace_error(
+ _pipe@2,
+ cannot_parse(Input, <<"int list"/utf8>>)
+ ) end).
+
+-spec float() -> flag_builder(float()).
+float() ->
+ new(fun(Field@0) -> {f, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@float:parse(_pipe),
+ gleam@result:replace_error(
+ _pipe@1,
+ cannot_parse(Input, <<"float"/utf8>>)
+ ) end).
+
+-spec float_list() -> flag_builder(list(float())).
+float_list() ->
+ new(fun(Field@0) -> {lf, Field@0} end, fun(Input) -> _pipe = Input,
+ _pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
+ _pipe@2 = gleam@list:try_map(_pipe@1, fun gleam@float:parse/1),
+ gleam@result:replace_error(
+ _pipe@2,
+ cannot_parse(Input, <<"float list"/utf8>>)
+ ) end).
+
+-spec bool() -> flag_builder(boolean()).
+bool() ->
+ new(
+ fun(Field@0) -> {b, Field@0} end,
+ fun(Input) -> case gleam@string:lowercase(Input) of
+ <<"true"/utf8>> ->
+ {ok, true};
+
+ <<"t"/utf8>> ->
+ {ok, true};
+
+ <<"false"/utf8>> ->
+ {ok, false};
+
+ <<"f"/utf8>> ->
+ {ok, false};
+
+ _ ->
+ {error, cannot_parse(Input, <<"bool"/utf8>>)}
+ end end
+ ).
+
+-spec flag_type_help({binary(), flag()}) -> binary().
+flag_type_help(Flag) ->
+ {Name, Contents} = Flag,
+ Kind = case erlang:element(2, Contents) of
+ {i, _} ->
+ <<"INT"/utf8>>;
+
+ {b, _} ->
+ <<"BOOL"/utf8>>;
+
+ {f, _} ->
+ <<"FLOAT"/utf8>>;
+
+ {lf, _} ->
+ <<"FLOAT_LIST"/utf8>>;
+
+ {li, _} ->
+ <<"INT_LIST"/utf8>>;
+
+ {ls, _} ->
+ <<"STRING_LIST"/utf8>>;
+
+ {s, _} ->
+ <<"STRING"/utf8>>
+ end,
+ <<<<<<<<<<"--"/utf8, Name/binary>>/binary, "="/utf8>>/binary, "<"/utf8>>/binary,
+ Kind/binary>>/binary,
+ ">"/utf8>>.
+
+-spec flag_help({binary(), flag()}) -> binary().
+flag_help(Flag) ->
+ <<<<(flag_type_help(Flag))/binary, "\t\t"/utf8>>/binary,
+ (erlang:element(3, (erlang:element(2, Flag))))/binary>>.
+
+-spec flags_help(gleam@map:map_(binary(), flag())) -> list(binary()).
+flags_help(Flags) ->
+ _pipe = Flags,
+ _pipe@1 = gleam@map:to_list(_pipe),
+ gleam@list:map(_pipe@1, fun flag_help/1).
+
+-spec access(gleam@map:map_(binary(), flag()), binary()) -> {ok, flag()} |
+ {error, snag:snag()}.
+access(Flags, Name) ->
+ _pipe = gleam@map:get(Flags, Name),
+ gleam@result:replace_error(_pipe, undefined_flag_err(Name)).
+
+-spec update_flag_value(gleam@map:map_(binary(), flag()), {binary(), binary()}) -> {ok,
+ gleam@map:map_(binary(), flag())} |
+ {error, snag:snag()}.
+update_flag_value(Flags, Data) ->
+ {Key, Input} = Data,
+ gleam@result:'try'(
+ access(Flags, Key),
+ fun(Contents) ->
+ gleam@result:map(
+ begin
+ _pipe = compute_flag(Input, erlang:element(2, Contents)),
+ gleam@result:map_error(
+ _pipe,
+ fun(_capture) -> layer_invalid_flag(_capture, Key) end
+ )
+ end,
+ fun(Value) ->
+ gleam@map:insert(
+ Flags,
+ Key,
+ erlang:setelement(2, Contents, Value)
+ )
+ end
+ )
+ end
+ ).
+
+-spec attempt_toggle_flag(gleam@map:map_(binary(), flag()), binary()) -> {ok,
+ gleam@map:map_(binary(), flag())} |
+ {error, snag:snag()}.
+attempt_toggle_flag(Flags, Key) ->
+ gleam@result:'try'(
+ access(Flags, Key),
+ fun(Contents) -> case erlang:element(2, Contents) of
+ {b, {internal, none, _} = Internal} ->
+ _pipe = erlang:setelement(2, Internal, {some, true}),
+ _pipe@1 = {b, _pipe},
+ _pipe@2 = (fun(Val) ->
+ erlang:setelement(2, Contents, Val)
+ end)(_pipe@1),
+ _pipe@3 = gleam@map:insert(Flags, Key, _pipe@2),
+ {ok, _pipe@3};
+
+ {b, {internal, {some, Val@1}, _} = Internal@1} ->
+ _pipe@4 = erlang:setelement(
+ 2,
+ Internal@1,
+ {some, not Val@1}
+ ),
+ _pipe@5 = {b, _pipe@4},
+ _pipe@6 = (fun(Val@2) ->
+ erlang:setelement(2, Contents, Val@2)
+ end)(_pipe@5),
+ _pipe@7 = gleam@map:insert(Flags, Key, _pipe@6),
+ {ok, _pipe@7};
+
+ _ ->
+ {error, no_value_flag_err(Key)}
+ end end
+ ).
+
+-spec update_flags(gleam@map:map_(binary(), flag()), binary()) -> {ok,
+ gleam@map:map_(binary(), flag())} |
+ {error, snag:snag()}.
+update_flags(Flags, Flag_input) ->
+ Flag_input@1 = gleam@string:drop_left(
+ Flag_input,
+ gleam@string:length(<<"--"/utf8>>)
+ ),
+ case gleam@string:split_once(Flag_input@1, <<"="/utf8>>) of
+ {ok, Data} ->
+ update_flag_value(Flags, Data);
+
+ {error, _} ->
+ attempt_toggle_flag(Flags, Flag_input@1)
+ end.
+
+-spec get_value(
+ gleam@map:map_(binary(), flag()),
+ binary(),
+ fun((flag()) -> {ok, FWM} | {error, snag:snag()})
+) -> {ok, FWM} | {error, snag:snag()}.
+get_value(Flags, Key, Kind) ->
+ _pipe = access(Flags, Key),
+ _pipe@1 = gleam@result:'try'(_pipe, Kind),
+ snag:context(
+ _pipe@1,
+ <<<<"failed to retrieve value for flag '"/utf8, Key/binary>>/binary,
+ "'"/utf8>>
+ ).
+
+-spec get_int_value(flag()) -> {ok, integer()} | {error, snag:snag()}.
+get_int_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {i, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {i, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"int"/utf8>>)
+ end.
+
+-spec get_int(gleam@map:map_(binary(), flag()), binary()) -> {ok, integer()} |
+ {error, snag:snag()}.
+get_int(Flags, Name) ->
+ get_value(Flags, Name, fun get_int_value/1).
+
+-spec get_ints_value(flag()) -> {ok, list(integer())} | {error, snag:snag()}.
+get_ints_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {li, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {li, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"int list"/utf8>>)
+ end.
+
+-spec get_ints(gleam@map:map_(binary(), flag()), binary()) -> {ok,
+ list(integer())} |
+ {error, snag:snag()}.
+get_ints(Flags, Name) ->
+ get_value(Flags, Name, fun get_ints_value/1).
+
+-spec get_bool_value(flag()) -> {ok, boolean()} | {error, snag:snag()}.
+get_bool_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {b, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {b, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"bool"/utf8>>)
+ end.
+
+-spec get_bool(gleam@map:map_(binary(), flag()), binary()) -> {ok, boolean()} |
+ {error, snag:snag()}.
+get_bool(Flags, Name) ->
+ get_value(Flags, Name, fun get_bool_value/1).
+
+-spec get_string_value(flag()) -> {ok, binary()} | {error, snag:snag()}.
+get_string_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {s, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {s, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"string"/utf8>>)
+ end.
+
+-spec get_string(gleam@map:map_(binary(), flag()), binary()) -> {ok, binary()} |
+ {error, snag:snag()}.
+get_string(Flags, Name) ->
+ get_value(Flags, Name, fun get_string_value/1).
+
+-spec get_strings_value(flag()) -> {ok, list(binary())} | {error, snag:snag()}.
+get_strings_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {ls, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {ls, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"string list"/utf8>>)
+ end.
+
+-spec get_strings(gleam@map:map_(binary(), flag()), binary()) -> {ok,
+ list(binary())} |
+ {error, snag:snag()}.
+get_strings(Flags, Name) ->
+ get_value(Flags, Name, fun get_strings_value/1).
+
+-spec get_float_value(flag()) -> {ok, float()} | {error, snag:snag()}.
+get_float_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {f, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {f, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"float"/utf8>>)
+ end.
+
+-spec get_float(gleam@map:map_(binary(), flag()), binary()) -> {ok, float()} |
+ {error, snag:snag()}.
+get_float(Flags, Name) ->
+ get_value(Flags, Name, fun get_float_value/1).
+
+-spec get_floats_value(flag()) -> {ok, list(float())} | {error, snag:snag()}.
+get_floats_value(Flag) ->
+ case erlang:element(2, Flag) of
+ {lf, {internal, {some, Val}, _}} ->
+ {ok, Val};
+
+ {lf, {internal, none, _}} ->
+ flag_not_provided_error();
+
+ _ ->
+ access_type_error(<<"float list"/utf8>>)
+ end.
+
+-spec get_floats(gleam@map:map_(binary(), flag()), binary()) -> {ok,
+ list(float())} |
+ {error, snag:snag()}.
+get_floats(Flags, Name) ->
+ get_value(Flags, Name, fun get_floats_value/1).
diff --git a/aoc2023/build/packages/glint/src/glint@flag@constraint.erl b/aoc2023/build/packages/glint/src/glint@flag@constraint.erl
new file mode 100644
index 0000000..2978be0
--- /dev/null
+++ b/aoc2023/build/packages/glint/src/glint@flag@constraint.erl
@@ -0,0 +1,68 @@
+-module(glint@flag@constraint).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([one_of/1, none_of/1, each/1]).
+
+-spec one_of(list(FSI)) -> fun((FSI) -> {ok, nil} | {error, snag:snag()}).
+one_of(Allowed) ->
+ Allowed_set = gleam@set:from_list(Allowed),
+ fun(Val) -> case gleam@set:contains(Allowed_set, Val) of
+ true ->
+ {ok, nil};
+
+ false ->
+ snag:error(
+ <<<<<<"invalid value '"/utf8,
+ (gleam@string:inspect(Val))/binary>>/binary,
+ "', must be one of: ["/utf8>>/binary,
+ ((<<(begin
+ _pipe = Allowed,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(A) ->
+ <<<<"'"/utf8,
+ (gleam@string:inspect(A))/binary>>/binary,
+ "'"/utf8>>
+ end
+ ),
+ gleam@string:join(_pipe@1, <<", "/utf8>>)
+ end)/binary,
+ "]"/utf8>>))/binary>>
+ )
+ end end.
+
+-spec none_of(list(FSL)) -> fun((FSL) -> {ok, nil} | {error, snag:snag()}).
+none_of(Disallowed) ->
+ Disallowed_set = gleam@set:from_list(Disallowed),
+ fun(Val) -> case gleam@set:contains(Disallowed_set, Val) of
+ false ->
+ {ok, nil};
+
+ true ->
+ snag:error(
+ <<<<<<"invalid value '"/utf8,
+ (gleam@string:inspect(Val))/binary>>/binary,
+ "', must not be one of: ["/utf8>>/binary,
+ (((<<(begin
+ _pipe = Disallowed,
+ _pipe@1 = gleam@list:map(
+ _pipe,
+ fun(A) ->
+ <<<<"'"/utf8,
+ (gleam@string:inspect(A))/binary>>/binary,
+ "'"/utf8>>
+ end
+ ),
+ gleam@string:join(_pipe@1, <<", "/utf8>>)
+ end)/binary,
+ "]"/utf8>>)))/binary>>
+ )
+ end end.
+
+-spec each(fun((FSO) -> {ok, nil} | {error, snag:snag()})) -> fun((list(FSO)) -> {ok,
+ nil} |
+ {error, snag:snag()}).
+each(Constraint) ->
+ fun(L) -> _pipe = L,
+ _pipe@1 = gleam@list:try_map(_pipe, Constraint),
+ gleam@result:replace(_pipe@1, nil) end.
diff --git a/aoc2023/build/packages/packages.toml b/aoc2023/build/packages/packages.toml
new file mode 100644
index 0000000..d4c7b69
--- /dev/null
+++ b/aoc2023/build/packages/packages.toml
@@ -0,0 +1,16 @@
+[packages]
+simplifile = "1.0.0"
+gleam_community_ansi = "1.2.0"
+glint = "0.13.0"
+gleam_community_colour = "1.2.0"
+gleam_erlang = "0.23.1"
+tom = "0.2.1"
+gleam_httpc = "2.1.1"
+adglent = "1.2.0"
+gap = "1.0.1"
+gleam_community_maths = "1.0.1"
+gleam_otp = "0.8.0"
+gleam_stdlib = "0.33.0"
+pqueue = "2.0.7"
+snag = "0.2.1"
+gleam_http = "3.5.2"
diff --git a/aoc2023/build/packages/pqueue/LICENSE b/aoc2023/build/packages/pqueue/LICENSE
new file mode 100644
index 0000000..5697803
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2011-2023 Michael Truog <mjtruog at protonmail dot com>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/aoc2023/build/packages/pqueue/README.markdown b/aoc2023/build/packages/pqueue/README.markdown
new file mode 100644
index 0000000..77aaf1c
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/README.markdown
@@ -0,0 +1,31 @@
+Erlang Priority Queue Implementation
+====================================
+
+The priority queue implementations implement a subset of the stdlib Erlang queue interface as seen in the implementation used by both [Riak and RabbitMQ](https://github.com/basho/riak_core/blob/master/src/riak_core_priority_queue.erl).
+
+The implementations:
+
+* `priority_queue` (fastest for any priorities when only using a single priority at a time)
+* `pqueue` (fastest for 41 priorities, -20 (high) to 20 (low), when using 2 or more priorities at the same time)
+* `pqueue2` (slower heap implementation)
+* `pqueue3` (faster than `pqueue2` and `priority_queue` when using 64 or more priorities at the same time)
+* `pqueue4` (slightly slower than `pqueue` but fastest for allowing 257 priorities, -128 (high) to 128 (low), i.e., fastest when using 42 or more priorities at the same time)
+
+[The latest results are here](http://okeuday.livejournal.com/19539.html), with [the benchmark here](http://github.com/okeuday/erlbench).
+
+Author
+------
+
+Michael Truog (mjtruog at protonmail dot com)
+
+Thanks
+------
+
+* Jesper Louis andersen (PropEr integration and testing)
+* Ulf Wiger (suggestions and insight)
+
+License
+-------
+
+MIT License
+
diff --git a/aoc2023/build/packages/pqueue/doc/edoc-info b/aoc2023/build/packages/pqueue/doc/edoc-info
new file mode 100644
index 0000000..5e5a8d3
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/edoc-info
@@ -0,0 +1,3 @@
+%% encoding: UTF-8
+{application,pqueue}.
+{modules,[pqueue,pqueue2,pqueue3,pqueue4]}.
diff --git a/aoc2023/build/packages/pqueue/doc/erlang.png b/aoc2023/build/packages/pqueue/doc/erlang.png
new file mode 100644
index 0000000..987a618
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/erlang.png
Binary files differ
diff --git a/aoc2023/build/packages/pqueue/doc/index.html b/aoc2023/build/packages/pqueue/doc/index.html
new file mode 100644
index 0000000..d55b5e6
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>The pqueue application</title>
+</head>
+<frameset cols="20%,80%">
+<frame src="modules-frame.html" name="modulesFrame" title="">
+
+<frame src="overview-summary.html" name="overviewFrame" title="">
+<noframes>
+<h2>This page uses frames</h2>
+<p>Your browser does not accept frames.
+<br>You should go to the <a href="overview-summary.html">non-frame version</a> instead.
+</p>
+</noframes>
+</frameset>
+</html> \ No newline at end of file
diff --git a/aoc2023/build/packages/pqueue/doc/modules-frame.html b/aoc2023/build/packages/pqueue/doc/modules-frame.html
new file mode 100644
index 0000000..5a87cc4
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/modules-frame.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>The pqueue application</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<h2 class="indextitle">Modules</h2>
+<table width="100%" border="0" summary="list of modules">
+<tr><td><a href="pqueue.html" target="overviewFrame" class="module">pqueue</a></td></tr>
+<tr><td><a href="pqueue2.html" target="overviewFrame" class="module">pqueue2</a></td></tr>
+<tr><td><a href="pqueue3.html" target="overviewFrame" class="module">pqueue3</a></td></tr>
+<tr><td><a href="pqueue4.html" target="overviewFrame" class="module">pqueue4</a></td></tr></table>
+</body>
+</html> \ No newline at end of file
diff --git a/aoc2023/build/packages/pqueue/doc/overview-summary.html b/aoc2023/build/packages/pqueue/doc/overview-summary.html
new file mode 100644
index 0000000..e2f8906
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/overview-summary.html
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>The pqueue application</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<h1>The pqueue application</h1>
+
+<hr>
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/packages/pqueue/doc/pqueue.html b/aoc2023/build/packages/pqueue/doc/pqueue.html
new file mode 100644
index 0000000..40b05ac
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/pqueue.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-20 (high) to 20 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-20 (high) to 20 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations. This implementation was created to
+ avoid the slowness within the priority queue used by both RabbitMQ and Riak
+ (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue">pqueue()</a></h3>
+<p><tt>pqueue() = {integer(), {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}} | {empty, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, <a href="queue.html#type-queue">queue:queue()</a>, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}, {<a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>, <a href="queue.html#type-queue">queue:queue()</a>}}</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#join-2">join/2</a></td><td>
+ <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#test-0">test/0</a></td><td>
+ <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N).</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(X::term(), Q::<a href="#type-pqueue">pqueue()</a>) -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(X::term(), P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="join-2">join/2</a></h3>
+<div class="spec">
+<p><tt>join(X1::<a href="#type-pqueue">pqueue()</a>, X2::<a href="#type-pqueue">pqueue()</a>) -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Join_two_priority_queues.">Join two priority queues.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue">pqueue()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(Q::<a href="#type-pqueue">pqueue()</a>) -&gt; {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), Q::<a href="#type-pqueue">pqueue()</a>) -&gt; {{value, term()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(Q::<a href="#type-pqueue">pqueue()</a>) -&gt; {{value, term(), integer()}, <a href="#type-pqueue">pqueue()</a>} | {empty, <a href="#type-pqueue">pqueue()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="test-0">test/0</a></h3>
+<div class="spec">
+<p><tt>test() -&gt; any()</tt></p>
+</div><p>
+ <h4><a name="Regression_test.">Regression test.</a></h4>
+</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(X1::<a href="#type-pqueue">pqueue()</a>) -&gt; [term()]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N)</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/packages/pqueue/doc/pqueue2.html b/aoc2023/build/packages/pqueue/doc/pqueue2.html
new file mode 100644
index 0000000..2942b84
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/pqueue2.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue2</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue2</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3>
+ Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority
+ queue implementation.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="Skew_Heap_Priority_Queue.">Skew Heap Priority Queue.</a></h3>
+ Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority
+ queue implementation. Unfortunately, testing has shown this solution to
+ be more than 2 times slower than pqueue.
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue2">pqueue2()</a></h3>
+<p><tt>pqueue2() = empty | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, element, term()} | {integer(), <a href="#type-pqueue2">pqueue2()</a>, <a href="#type-pqueue2">pqueue2()</a>, queue, <a href="queue.html#type-queue">queue:queue()</a>}</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#test-0">test/0</a></td><td>
+ <h4><a name="Regression_test.">Regression test.</a></h4>.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>.</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; <a href="#type-pqueue2">pqueue2()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; <a href="#type-pqueue2">pqueue2()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue2">pqueue2()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; {{value, term()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(X1::<a href="#type-pqueue2">pqueue2()</a>) -&gt; {{value, term(), integer()}, <a href="#type-pqueue2">pqueue2()</a>} | {empty, <a href="#type-pqueue2">pqueue2()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</p>
+
+<h3 class="function"><a name="test-0">test/0</a></h3>
+<div class="spec">
+<p><tt>test() -&gt; any()</tt></p>
+</div><p>
+ <h4><a name="Regression_test.">Regression test.</a></h4>
+</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(H::<a href="#type-pqueue2">pqueue2()</a>) -&gt; [term()]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/packages/pqueue/doc/pqueue3.html b/aoc2023/build/packages/pqueue/doc/pqueue3.html
new file mode 100644
index 0000000..35f1a7b
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/pqueue3.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue3</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue3</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3>
+ This priority queue implementation depends on layered tuples, so that tuple
+ access times can be exploited for quick in/out priority queue operations
+ when using 64 or more total priorities.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:32
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="A_Large_Priority_Queue.">A Large Priority Queue.</a></h3>
+ This priority queue implementation depends on layered tuples, so that tuple
+ access times can be exploited for quick in/out priority queue operations
+ when using 64 or more total priorities. This implementation was created
+ to avoid the slowness within the priority queue used by
+ both RabbitMQ and Riak
+ (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue3">pqueue3()</a></h3>
+<p><tt>pqueue3() = {integer(), integer(), empty | integer(), tuple()}</tt></p>
+
+
+<h3 class="typedecl"><a name="type-pqueue3_empty">pqueue3_empty()</a></h3>
+<p><tt>pqueue3_empty() = {integer(), integer(), empty, tuple()}</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#new-1">new/1</a></td><td>
+ <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N).</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; <a href="#type-pqueue3">pqueue3()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(Value::term(), P::integer(), X3::<a href="#type-pqueue3">pqueue3()</a>) -&gt; <a href="#type-pqueue3">pqueue3()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue3">pqueue3()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue3_empty">pqueue3_empty()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="new-1">new/1</a></h3>
+<div class="spec">
+<p><tt>new(Options::[{atom(), term()}]) -&gt; <a href="#type-pqueue3">pqueue3()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue_with_customization_options.">Create a new priority queue with customization options.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; {{value, term()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; {{value, term(), integer()}, <a href="#type-pqueue3">pqueue3()</a>} | {empty, <a href="#type-pqueue3">pqueue3()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(Q::<a href="#type-pqueue3">pqueue3()</a>) -&gt; [term()]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N)</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/packages/pqueue/doc/pqueue4.html b/aoc2023/build/packages/pqueue/doc/pqueue4.html
new file mode 100644
index 0000000..edcdb6e
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/pqueue4.html
@@ -0,0 +1,205 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Module pqueue4</title>
+<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
+</head>
+<body bgcolor="white">
+<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<hr>
+
+<h1>Module pqueue4</h1>
+<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-128 (high) to 128 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations.
+<p>Copyright © 2011-2020 Michael Truog</p>
+
+<p><b>Version:</b> 2.0.1 Nov 26 2020 14:55:34
+ ------------------------------------------------------------------------</p>
+<p><b>Authors:</b> Michael Truog (<a href="mailto:mjtruog at protonmail dot com"><tt>mjtruog at protonmail dot com</tt></a>).</p>
+
+<h2><a name="description">Description</a></h2>
+ <h3><a name="Static_Priority_Queue.">Static Priority Queue.</a></h3>
+ This priority queue implementation depends on a static number of priorities
+ (-128 (high) to 128 (low)) so that tuple access times can be exploited for
+ quick in/out priority queue operations. This implementation was created to
+ avoid the slowness within the priority queue used by both RabbitMQ and Riak
+ (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+<h2><a name="types">Data Types</a></h2>
+
+<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3>
+<p><tt>pqueue4() = <a href="#type-pqueue4">pqueue4</a>(any())</tt></p>
+
+
+<h3 class="typedecl"><a name="type-pqueue4">pqueue4()</a></h3>
+<p><tt>pqueue4(T) = {<a href="#type-priority">priority()</a> | empty, non_neg_integer(), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, <a href="queue.html#type-queue">queue:queue</a>(T), {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}, {<a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T), <a href="queue.html#type-queue">queue:queue</a>(T)}}</tt></p>
+
+
+<h3 class="typedecl"><a name="type-priority">priority()</a></h3>
+<p><tt>priority() = -128..128</tt></p>
+
+
+<h2><a name="index">Function Index</a></h2>
+<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#filter-2">filter/2</a></td><td>
+ <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#filter-3">filter/3</a></td><td>
+ <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#in-2">in/2</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#in-3">in/3</a></td><td>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_empty-1">is_empty/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#is_queue-1">is_queue/1</a></td><td>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#len-1">len/1</a></td><td>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#new-0">new/0</a></td><td>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1).</td></tr>
+<tr><td valign="top"><a href="#out-1">out/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#out-2">out/2</a></td><td>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case.</td></tr>
+<tr><td valign="top"><a href="#pout-1">pout/1</a></td><td>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.</td></tr>
+<tr><td valign="top"><a href="#remove_unique-2">remove_unique/2</a></td><td>
+ <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/2.</td></tr>
+<tr><td valign="top"><a href="#remove_unique-3">remove_unique/3</a></td><td>
+ <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/3.</td></tr>
+<tr><td valign="top"><a href="#to_list-1">to_list/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N).</td></tr>
+<tr><td valign="top"><a href="#to_plist-1">to_plist/1</a></td><td>
+ <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4>
+ O(N).</td></tr>
+</table>
+
+<h2><a name="functions">Function Details</a></h2>
+
+<h3 class="function"><a name="filter-2">filter/2</a></h3>
+<div class="spec">
+<p><tt>filter(F::fun((any()) -&gt; boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Filter_the_priority_queue.">Filter the priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="filter-3">filter/3</a></h3>
+<div class="spec">
+<p><tt>filter(F::fun((any()) -&gt; boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Filter_a_specific_priority_within_the_priority_queue.">Filter a specific priority within the priority queue.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="in-2">in/2</a></h3>
+<div class="spec">
+<p><tt>in(X::any(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_the_0_priority_queue.">Append an item to the tail of the 0 priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="in-3">in/3</a></h3>
+<div class="spec">
+<p><tt>in(X::any(), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Append_an_item_to_the_tail_of_a_specific_priority_queue.">Append an item to the tail of a specific priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_empty-1">is_empty/1</a></h3>
+<div class="spec">
+<p><tt>is_empty(X1::<a href="#type-pqueue4">pqueue4()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_is_empty.">Check if the priority queue is empty.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="is_queue-1">is_queue/1</a></h3>
+<div class="spec">
+<p><tt>is_queue(X1::<a href="#type-pqueue4">pqueue4()</a>) -&gt; true | false</tt><br></p>
+</div><p>
+ <h4><a name="Check_if_the_priority_queue_type_is_as_expected.">Check if the priority queue type is as expected.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="len-1">len/1</a></h3>
+<div class="spec">
+<p><tt>len(X1::<a href="#type-pqueue4">pqueue4()</a>) -&gt; non_neg_integer()</tt><br></p>
+</div><p>
+ <h4><a name="Determine_the_length_of_a_priority_queue.">Determine the length of a priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="new-0">new/0</a></h3>
+<div class="spec">
+<p><tt>new() -&gt; <a href="#type-pqueue4">pqueue4()</a></tt><br></p>
+</div><p>
+ <h4><a name="Create_a_new_priority_queue.">Create a new priority queue.</a></h4>
+ O(1)</p>
+
+<h3 class="function"><a name="out-1">out/1</a></h3>
+<div class="spec">
+<p><tt>out(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="out-2">out/2</a></h3>
+<div class="spec">
+<p><tt>out(P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {{value, any()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_of_a_specific_priority_from_the_head_of_the_queue.">Take an item of a specific priority from the head of the queue.</a></h4>
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="pout-1">pout/1</a></h3>
+<div class="spec">
+<p><tt>pout(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {{value, any(), integer()}, <a href="#type-pqueue4">pqueue4()</a>} | {empty, <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Take_an_item_from_the_head_of_the_priority_queue.">Take an item from the head of the priority queue.</a></h4>
+ Includes the priority in the return value.
+ O(1) amortized, O(N) worst case</p>
+
+<h3 class="function"><a name="remove_unique-2">remove_unique/2</a></h3>
+<div class="spec">
+<p><tt>remove_unique(F::fun((any()) -&gt; boolean()), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Remove_a_unique_value_from_the_priority_queue_with_a_binary_predicate.">Remove a unique value from the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/2</p>
+
+<h3 class="function"><a name="remove_unique-3">remove_unique/3</a></h3>
+<div class="spec">
+<p><tt>remove_unique(F::fun((any()) -&gt; boolean()), P::integer(), Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; {boolean(), <a href="#type-pqueue4">pqueue4()</a>}</tt><br></p>
+</div><p>
+ <h4><a name="Remove_a_unique_value_in_a_specific_priority_within_the_priority_queue_with_a_binary_predicate.">Remove a unique value in a specific priority within the priority queue with a binary predicate.</a></h4>
+ O(N) but smaller constant than filter/3</p>
+
+<h3 class="function"><a name="to_list-1">to_list/1</a></h3>
+<div class="spec">
+<p><tt>to_list(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; list()</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list.">Convert the priority queue to a list.</a></h4>
+ O(N)</p>
+
+<h3 class="function"><a name="to_plist-1">to_plist/1</a></h3>
+<div class="spec">
+<p><tt>to_plist(Q::<a href="#type-pqueue4">pqueue4()</a>) -&gt; [{<a href="#type-priority">priority()</a>, list()}]</tt><br></p>
+</div><p>
+ <h4><a name="Convert_the_priority_queue_to_a_list_with_priorities.">Convert the priority queue to a list with priorities.</a></h4>
+ O(N)</p>
+<hr>
+
+<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
+<p><i>Generated by EDoc</i></p>
+</body>
+</html>
diff --git a/aoc2023/build/packages/pqueue/doc/stylesheet.css b/aoc2023/build/packages/pqueue/doc/stylesheet.css
new file mode 100644
index 0000000..ab170c0
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/doc/stylesheet.css
@@ -0,0 +1,55 @@
+/* standard EDoc style sheet */
+body {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ margin-left: .25in;
+ margin-right: .2in;
+ margin-top: 0.2in;
+ margin-bottom: 0.2in;
+ color: #000000;
+ background-color: #ffffff;
+}
+h1,h2 {
+ margin-left: -0.2in;
+}
+div.navbar {
+ background-color: #add8e6;
+ padding: 0.2em;
+}
+h2.indextitle {
+ padding: 0.4em;
+ background-color: #add8e6;
+}
+h3.function,h3.typedecl {
+ background-color: #add8e6;
+ padding-left: 1em;
+}
+div.spec {
+ margin-left: 2em;
+ background-color: #eeeeee;
+}
+a.module {
+ text-decoration:none
+}
+a.module:hover {
+ background-color: #eeeeee;
+}
+ul.definitions {
+ list-style-type: none;
+}
+ul.index {
+ list-style-type: none;
+ background-color: #eeeeee;
+}
+
+/*
+ * Minor style tweaks
+ */
+ul {
+ list-style-type: square;
+}
+table {
+ border-collapse: collapse;
+}
+td {
+ padding: 3
+}
diff --git a/aoc2023/build/packages/pqueue/rebar.config b/aoc2023/build/packages/pqueue/rebar.config
new file mode 100644
index 0000000..f8022f0
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/rebar.config
@@ -0,0 +1,14 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+
+{erl_opts,
+ [{platform_define, "^R16", 'ERLANG_OTP_VERSION_16'},
+ {platform_define, "^17\.", 'ERLANG_OTP_VERSION_17'},
+ {platform_define, "^18\.", 'ERLANG_OTP_VERSION_18'},
+ {platform_define, "^19\.", 'ERLANG_OTP_VERSION_19'},
+ {platform_define, "^20\.", 'ERLANG_OTP_VERSION_20'},
+ warn_export_vars,
+ warn_unused_import,
+ %warn_missing_spec,
+ warnings_as_errors]}.
+{edoc_opts, [{preprocess, true}]}.
diff --git a/aoc2023/build/packages/pqueue/src/pqueue.app.src b/aoc2023/build/packages/pqueue/src/pqueue.app.src
new file mode 100644
index 0000000..b153ad1
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/src/pqueue.app.src
@@ -0,0 +1,10 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+
+{application, pqueue,
+ [{description, "Priority Queue Data Structures"},
+ {vsn, "2.0.7"},
+ {modules, [pqueue, pqueue2, pqueue3, pqueue4]},
+ {registered, []},
+ {applications, [stdlib, kernel]}]}.
+
diff --git a/aoc2023/build/packages/pqueue/src/pqueue.erl b/aoc2023/build/packages/pqueue/src/pqueue.erl
new file mode 100644
index 0000000..2c57fa2
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/src/pqueue.erl
@@ -0,0 +1,2246 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==Static Priority Queue.==
+%%% This priority queue implementation depends on a static number of priorities
+%%% (-20 (high) to 20 (low)) so that tuple access times can be exploited for
+%%% quick in/out priority queue operations. This implementation was created to
+%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak
+%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([in/2, % O(1)
+ in/3, % O(1)
+ is_empty/1, % O(1)
+ is_queue/1, % O(1)
+ join/2, % O(N) typically (?)
+ len/1, % O(N)
+ new/0, % O(1)
+ out/1, % O(1) amortized, O(N) worst case
+ out/2, % O(1) amortized, O(N) worst case
+ pout/1, % O(1) amortized, O(N) worst case
+ to_list/1, % O(N)
+ test/0]).
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-ifdef(ERLANG_OTP_VERSION_16).
+-type pqueue() ::
+ {integer(),
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ queue(),
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()}} |
+ {'empty',
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ queue(),
+ {queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue()}}.
+-else.
+-type pqueue() ::
+ {integer(),
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ queue:queue(),
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()}} |
+ {'empty',
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ queue:queue(),
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()},
+ {queue:queue(), queue:queue(), queue:queue(), queue:queue(),
+ queue:queue(), queue:queue(), queue:queue()}}.
+-endif.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), pqueue()) -> pqueue().
+
+in(X, Q) ->
+ in(X, 0, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), integer(), pqueue()) -> pqueue().
+
+in(_, P, _)
+ when P < -20; P > 20 ->
+ erlang:exit(badarg);
+in(X, P, {empty, _, _, _, _, _, _, _} = Q) ->
+ in_higher(P, Q, X);
+in(X, P, {Pc, _, _, _, _, _, _, _} = Q)
+ when P < Pc ->
+ in_higher(P, Q, X);
+in(X, P, Q) ->
+ in_lower(P, Q, X).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue()) -> 'true' | 'false'.
+
+is_empty({empty, _, _, _, _, _, _, _}) ->
+ true;
+is_empty({_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ queue:is_empty(Qn20) and queue:is_empty(Qn19) and queue:is_empty(Qn18) and
+ queue:is_empty(Qn17) and queue:is_empty(Qn16) and queue:is_empty(Qn15) and
+ queue:is_empty(Qn14) and
+ queue:is_empty(Qn13) and queue:is_empty(Qn12) and queue:is_empty(Qn11) and
+ queue:is_empty(Qn10) and queue:is_empty(Qn9) and queue:is_empty(Qn8) and
+ queue:is_empty(Qn7) and
+ queue:is_empty(Qn6) and queue:is_empty(Qn5) and queue:is_empty(Qn4) and
+ queue:is_empty(Qn3) and queue:is_empty(Qn2) and queue:is_empty(Qn1) and
+ queue:is_empty(Q0) and
+ queue:is_empty(Qp1) and queue:is_empty(Qp2) and queue:is_empty(Qp3) and
+ queue:is_empty(Qp4) and queue:is_empty(Qp5) and queue:is_empty(Qp6) and
+ queue:is_empty(Qp7) and queue:is_empty(Qp8) and queue:is_empty(Qp9) and
+ queue:is_empty(Qp10) and queue:is_empty(Qp11) and queue:is_empty(Qp12) and
+ queue:is_empty(Qp13) and
+ queue:is_empty(Qp14) and queue:is_empty(Qp15) and queue:is_empty(Qp16) and
+ queue:is_empty(Qp17) and queue:is_empty(Qp18) and queue:is_empty(Qp19) and
+ queue:is_empty(Qp20).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue()) -> 'true' | 'false'.
+
+is_queue({Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14})
+ when tuple_size(Qsn14) == 7, tuple_size(Qsn7) == 7, tuple_size(Qsn1) == 6,
+ tuple_size(Qsp14) == 7, tuple_size(Qsp7) == 7, tuple_size(Qsp1) == 6 ->
+ (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0));
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Join two priority queues.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec join(pqueue(), pqueue()) -> pqueue().
+
+join({P1c,
+ {Q1_n20, Q1_n19, Q1_n18, Q1_n17, Q1_n16, Q1_n15, Q1_n14},
+ {Q1_n13, Q1_n12, Q1_n11, Q1_n10, Q1_n9, Q1_n8, Q1_n7},
+ {Q1_n6, Q1_n5, Q1_n4, Q1_n3, Q1_n2, Q1_n1},
+ Q1_0,
+ {Q1_p1, Q1_p2, Q1_p3, Q1_p4, Q1_p5, Q1_p6},
+ {Q1_p7, Q1_p8, Q1_p9, Q1_p10, Q1_p11, Q1_p12, Q1_p13},
+ {Q1_p14, Q1_p15, Q1_p16, Q1_p17, Q1_p18, Q1_p19, Q1_p20}},
+ {P2c,
+ {Q2_n20, Q2_n19, Q2_n18, Q2_n17, Q2_n16, Q2_n15, Q2_n14},
+ {Q2_n13, Q2_n12, Q2_n11, Q2_n10, Q2_n9, Q2_n8, Q2_n7},
+ {Q2_n6, Q2_n5, Q2_n4, Q2_n3, Q2_n2, Q2_n1},
+ Q2_0,
+ {Q2_p1, Q2_p2, Q2_p3, Q2_p4, Q2_p5, Q2_p6},
+ {Q2_p7, Q2_p8, Q2_p9, Q2_p10, Q2_p11, Q2_p12, Q2_p13},
+ {Q2_p14, Q2_p15, Q2_p16, Q2_p17, Q2_p18, Q2_p19, Q2_p20}}) ->
+ {erlang:min(P1c, P2c),
+ {queue:join(Q1_n20, Q2_n20), queue:join(Q1_n19, Q2_n19),
+ queue:join(Q1_n18, Q2_n18), queue:join(Q1_n17, Q2_n17),
+ queue:join(Q1_n16, Q2_n16), queue:join(Q1_n15, Q2_n15),
+ queue:join(Q1_n14, Q2_n14)},
+ {queue:join(Q1_n13, Q2_n13), queue:join(Q1_n12, Q2_n12),
+ queue:join(Q1_n11, Q2_n11), queue:join(Q1_n10, Q2_n10),
+ queue:join(Q1_n9, Q2_n9), queue:join(Q1_n8, Q2_n8),
+ queue:join(Q1_n7, Q2_n7)},
+ {queue:join(Q1_n6, Q2_n6), queue:join(Q1_n5, Q2_n5),
+ queue:join(Q1_n4, Q2_n4), queue:join(Q1_n3, Q2_n3),
+ queue:join(Q1_n2, Q2_n2), queue:join(Q1_n1, Q2_n1)},
+ queue:join(Q1_0, Q2_0),
+ {queue:join(Q1_p1, Q2_p1), queue:join(Q1_p2, Q2_p2),
+ queue:join(Q1_p3, Q2_p3), queue:join(Q1_p4, Q2_p4),
+ queue:join(Q1_p5, Q2_p5), queue:join(Q1_p6, Q2_p6)},
+ {queue:join(Q1_p7, Q2_p7), queue:join(Q1_p8, Q2_p8),
+ queue:join(Q1_p9, Q2_p9), queue:join(Q1_p10, Q2_p10),
+ queue:join(Q1_p11, Q2_p11), queue:join(Q1_p12, Q2_p12),
+ queue:join(Q1_p13, Q2_p13)},
+ {queue:join(Q1_p14, Q2_p14), queue:join(Q1_p15, Q2_p15),
+ queue:join(Q1_p16, Q2_p16), queue:join(Q1_p17, Q2_p17),
+ queue:join(Q1_p18, Q2_p18), queue:join(Q1_p19, Q2_p19),
+ queue:join(Q1_p20, Q2_p20)}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue()) -> non_neg_integer().
+
+len({_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ queue:len(Qn20) + queue:len(Qn19) + queue:len(Qn18) + queue:len(Qn17) +
+ queue:len(Qn16) + queue:len(Qn15) + queue:len(Qn14) +
+ queue:len(Qn13) + queue:len(Qn12) + queue:len(Qn11) + queue:len(Qn10) +
+ queue:len(Qn9) + queue:len(Qn8) + queue:len(Qn7) +
+ queue:len(Qn6) + queue:len(Qn5) + queue:len(Qn4) + queue:len(Qn3) +
+ queue:len(Qn2) + queue:len(Qn1) +
+ queue:len(Q0) +
+ queue:len(Qp1) + queue:len(Qp2) + queue:len(Qp3) + queue:len(Qp4) +
+ queue:len(Qp5) + queue:len(Qp6) +
+ queue:len(Qp7) + queue:len(Qp8) + queue:len(Qp9) + queue:len(Qp10) +
+ queue:len(Qp11) + queue:len(Qp12) + queue:len(Qp13) +
+ queue:len(Qp14) + queue:len(Qp15) + queue:len(Qp16) + queue:len(Qp17) +
+ queue:len(Qp18) + queue:len(Qp19) + queue:len(Qp20).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue().
+
+new() ->
+ {empty, % current priority
+ erlang:make_tuple(7, queue:new()), % priority [-20..-14]
+ erlang:make_tuple(7, queue:new()), % priority [-13.. -7]
+ erlang:make_tuple(6, queue:new()), % priority [ -6.. -1]
+ queue:new(), % priority 0 (default)
+ erlang:make_tuple(6, queue:new()), % priority [ 1.. 6]
+ erlang:make_tuple(7, queue:new()), % priority [ 7.. 13]
+ erlang:make_tuple(7, queue:new())}. % priority [ 14.. 20]
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue()) ->
+ {{'value', term()}, pqueue()} | {'empty', pqueue()}.
+
+out({empty, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out({Pc, _, _, _, _, _, _, _} = Q) ->
+ out_current(Pc, Q, nopriority).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue()) ->
+ {{'value', term()}, pqueue()} | {'empty', pqueue()}.
+
+out(P, _)
+ when P < -20; P > 20 ->
+ erlang:exit(badarg);
+out(_, {empty, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out(P, Q) ->
+ out_specific(P, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue()) ->
+ {{'value', term(), integer()}, pqueue()} | {'empty', pqueue()}.
+
+pout({empty, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+pout({Pc, _, _, _, _, _, _, _} = Q) ->
+ out_current(Pc, Q, priority).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue()) -> list(term()).
+
+to_list({_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ queue:to_list(Qn20) ++ queue:to_list(Qn19) ++ queue:to_list(Qn18) ++
+ queue:to_list(Qn17) ++ queue:to_list(Qn16) ++ queue:to_list(Qn15) ++
+ queue:to_list(Qn14) ++
+ queue:to_list(Qn13) ++ queue:to_list(Qn12) ++ queue:to_list(Qn11) ++
+ queue:to_list(Qn10) ++ queue:to_list(Qn9) ++ queue:to_list(Qn8) ++
+ queue:to_list(Qn7) ++
+ queue:to_list(Qn6) ++ queue:to_list(Qn5) ++ queue:to_list(Qn4) ++
+ queue:to_list(Qn3) ++ queue:to_list(Qn2) ++ queue:to_list(Qn1) ++
+ queue:to_list(Q0) ++
+ queue:to_list(Qp1) ++ queue:to_list(Qp2) ++ queue:to_list(Qp3) ++
+ queue:to_list(Qp4) ++ queue:to_list(Qp5) ++ queue:to_list(Qp6) ++
+ queue:to_list(Qp7) ++ queue:to_list(Qp8) ++ queue:to_list(Qp9) ++
+ queue:to_list(Qp10) ++ queue:to_list(Qp11) ++ queue:to_list(Qp12) ++
+ queue:to_list(Qp13) ++
+ queue:to_list(Qp14) ++ queue:to_list(Qp15) ++ queue:to_list(Qp16) ++
+ queue:to_list(Qp17) ++ queue:to_list(Qp18) ++ queue:to_list(Qp19) ++
+ queue:to_list(Qp20).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Regression test.===
+%% @end
+%%-------------------------------------------------------------------------
+
+test() ->
+ Q0 = pqueue:new(),
+ true = pqueue:is_queue(Q0),
+ Q1 = pqueue:in(20, 20, Q0),
+ Q2 = pqueue:in(19, 19, Q1),
+ Q3 = pqueue:in(18, 18, Q2),
+ Q4 = pqueue:in(17, 17, Q3),
+ Q5 = pqueue:in(16, 16, Q4),
+ Q6 = pqueue:in(15, 15, Q5),
+ Q7 = pqueue:in(14, 14, Q6),
+ Q8 = pqueue:in(13, 13, Q7),
+ Q9 = pqueue:in(12, 12, Q8),
+ Q10 = pqueue:in(11, 11, Q9),
+ Q11 = pqueue:in(10, 10, Q10),
+ Q12 = pqueue:in(9, 9, Q11),
+ Q13 = pqueue:in(8, 8, Q12),
+ Q14 = pqueue:in(7, 7, Q13),
+ Q15 = pqueue:in(6, 6, Q14),
+ Q16 = pqueue:in(5, 5, Q15),
+ Q17 = pqueue:in(4, 4, Q16),
+ Q18 = pqueue:in(3, 3, Q17),
+ Q19 = pqueue:in(2, 2, Q18),
+ Q20 = pqueue:in(1, 1, Q19),
+ Q21 = pqueue:in(0, 0, Q20),
+ Q22 = pqueue:in(-1, -1, Q21),
+ Q23 = pqueue:in(-2, -2, Q22),
+ Q24 = pqueue:in(-3, -3, Q23),
+ Q25 = pqueue:in(-4, -4, Q24),
+ Q26 = pqueue:in(-5, -5, Q25),
+ Q27 = pqueue:in(-6, -6, Q26),
+ Q28 = pqueue:in(-7, -7, Q27),
+ Q29 = pqueue:in(-8, -8, Q28),
+ Q30 = pqueue:in(-9, -9, Q29),
+ Q31 = pqueue:in(-10, -10, Q30),
+ Q32 = pqueue:in(-11, -11, Q31),
+ Q33 = pqueue:in(-12, -12, Q32),
+ Q34 = pqueue:in(-13, -13, Q33),
+ Q35 = pqueue:in(-14, -14, Q34),
+ Q36 = pqueue:in(-15, -15, Q35),
+ Q37 = pqueue:in(-16, -16, Q36),
+ Q38 = pqueue:in(-17, -17, Q37),
+ Q39 = pqueue:in(-18, -18, Q38),
+ Q40 = pqueue:in(-19, -19, Q39),
+ Q41 = pqueue:in(-20, -20, Q40),
+ Q42 = pqueue:in(-20, -20, Q41),
+ Q43 = pqueue:in(-19, -19, Q42),
+ Q44 = pqueue:in(-18, -18, Q43),
+ Q45 = pqueue:in(-17, -17, Q44),
+ Q46 = pqueue:in(-16, -16, Q45),
+ Q47 = pqueue:in(-15, -15, Q46),
+ Q48 = pqueue:in(-14, -14, Q47),
+ Q49 = pqueue:in(-13, -13, Q48),
+ Q50 = pqueue:in(-12, -12, Q49),
+ Q51 = pqueue:in(-11, -11, Q50),
+ Q52 = pqueue:in(-10, -10, Q51),
+ Q53 = pqueue:in(-9, -9, Q52),
+ Q54 = pqueue:in(-8, -8, Q53),
+ Q55 = pqueue:in(-7, -7, Q54),
+ Q56 = pqueue:in(-6, -6, Q55),
+ Q57 = pqueue:in(-5, -5, Q56),
+ Q58 = pqueue:in(-4, -4, Q57),
+ Q59 = pqueue:in(-3, -3, Q58),
+ Q60 = pqueue:in(-2, -2, Q59),
+ Q61 = pqueue:in(-1, -1, Q60),
+ Q62 = pqueue:in(0, 0, Q61),
+ Q63 = pqueue:in(1, 1, Q62),
+ Q64 = pqueue:in(2, 2, Q63),
+ Q65 = pqueue:in(3, 3, Q64),
+ Q66 = pqueue:in(4, 4, Q65),
+ Q67 = pqueue:in(5, 5, Q66),
+ Q68 = pqueue:in(6, 6, Q67),
+ Q69 = pqueue:in(7, 7, Q68),
+ Q70 = pqueue:in(8, 8, Q69),
+ Q71 = pqueue:in(9, 9, Q70),
+ Q72 = pqueue:in(10, 10, Q71),
+ Q73 = pqueue:in(11, 11, Q72),
+ Q74 = pqueue:in(12, 12, Q73),
+ Q75 = pqueue:in(13, 13, Q74),
+ Q76 = pqueue:in(14, 14, Q75),
+ Q77 = pqueue:in(15, 15, Q76),
+ Q78 = pqueue:in(16, 16, Q77),
+ Q79 = pqueue:in(17, 17, Q78),
+ Q80 = pqueue:in(18, 18, Q79),
+ Q81 = pqueue:in(19, 19, Q80),
+ Q82 = pqueue:in(20, 20, Q81),
+ true = pqueue:is_queue(Q82),
+ 82 = pqueue:len(Q82),
+ [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14,
+ -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6,
+ -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
+ 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue:to_list(Q82),
+ {{value, -20}, Q83} = pqueue:out(Q82),
+ {{value, -20}, Q84} = pqueue:out(Q83),
+ {{value, -19}, Q85} = pqueue:out(Q84),
+ {{value, -19}, Q86} = pqueue:out(Q85),
+ {{value, -18}, Q87} = pqueue:out(Q86),
+ {{value, -18}, Q88} = pqueue:out(Q87),
+ {{value, 0}, Q89} = pqueue:out(0, Q88),
+ {{value, 0}, Q90} = pqueue:out(0, Q89),
+ {empty, _} = pqueue:out(0, Q90),
+ {{value, -17, -17}, Q91} = pqueue:pout(Q90),
+ {{value, -17, -17}, Q92} = pqueue:pout(Q91),
+ {{value, -16, -16}, Q93} = pqueue:pout(Q92),
+ {{value, -16, -16}, Q94} = pqueue:pout(Q93),
+ {{value, -15, -15}, Q95} = pqueue:pout(Q94),
+ {{value, -15, -15}, Q96} = pqueue:pout(Q95),
+ {{value, -14, -14}, Q97} = pqueue:pout(Q96),
+ {{value, -14, -14}, Q98} = pqueue:pout(Q97),
+ {{value, -13, -13}, Q99} = pqueue:pout(Q98),
+ {{value, -13, -13}, Q100} = pqueue:pout(Q99),
+ {{value, -12, -12}, Q101} = pqueue:pout(Q100),
+ {{value, -12, -12}, Q102} = pqueue:pout(Q101),
+ {{value, -11, -11}, Q103} = pqueue:pout(Q102),
+ {{value, -11, -11}, Q104} = pqueue:pout(Q103),
+ {{value, -10, -10}, Q105} = pqueue:pout(Q104),
+ {{value, -10, -10}, Q106} = pqueue:pout(Q105),
+ {{value, -9, -9}, Q107} = pqueue:pout(Q106),
+ {{value, -9, -9}, Q108} = pqueue:pout(Q107),
+ {{value, -8, -8}, Q109} = pqueue:pout(Q108),
+ {{value, -8, -8}, Q110} = pqueue:pout(Q109),
+ {{value, -7, -7}, Q111} = pqueue:pout(Q110),
+ {{value, -7, -7}, Q112} = pqueue:pout(Q111),
+ {{value, -6, -6}, Q113} = pqueue:pout(Q112),
+ {{value, -6, -6}, Q114} = pqueue:pout(Q113),
+ {{value, -5, -5}, Q115} = pqueue:pout(Q114),
+ {{value, -5, -5}, Q116} = pqueue:pout(Q115),
+ {{value, -4, -4}, Q117} = pqueue:pout(Q116),
+ {{value, -4, -4}, Q118} = pqueue:pout(Q117),
+ {{value, -3, -3}, Q119} = pqueue:pout(Q118),
+ {{value, -3, -3}, Q120} = pqueue:pout(Q119),
+ {{value, -2, -2}, Q121} = pqueue:pout(Q120),
+ {{value, -2, -2}, Q122} = pqueue:pout(Q121),
+ {{value, -1, -1}, Q123} = pqueue:pout(Q122),
+ {{value, -1, -1}, Q124} = pqueue:pout(Q123),
+ {{value, 1, 1}, Q125} = pqueue:pout(Q124),
+ {{value, 1, 1}, Q126} = pqueue:pout(Q125),
+ {{value, 2, 2}, Q127} = pqueue:pout(Q126),
+ {{value, 2, 2}, Q128} = pqueue:pout(Q127),
+ {{value, 3, 3}, Q129} = pqueue:pout(Q128),
+ {{value, 3, 3}, Q130} = pqueue:pout(Q129),
+ {{value, 4, 4}, Q131} = pqueue:pout(Q130),
+ {{value, 4, 4}, Q132} = pqueue:pout(Q131),
+ {{value, 5, 5}, Q133} = pqueue:pout(Q132),
+ {{value, 5, 5}, Q134} = pqueue:pout(Q133),
+ {{value, 6, 6}, Q135} = pqueue:pout(Q134),
+ {{value, 6, 6}, Q136} = pqueue:pout(Q135),
+ {{value, 7, 7}, Q137} = pqueue:pout(Q136),
+ {{value, 7, 7}, Q138} = pqueue:pout(Q137),
+ {{value, 8, 8}, Q139} = pqueue:pout(Q138),
+ {{value, 8, 8}, Q140} = pqueue:pout(Q139),
+ {{value, 9, 9}, Q141} = pqueue:pout(Q140),
+ {{value, 9, 9}, Q142} = pqueue:pout(Q141),
+ {{value, 10, 10}, Q143} = pqueue:pout(Q142),
+ {{value, 10, 10}, Q144} = pqueue:pout(Q143),
+ {{value, 11, 11}, Q145} = pqueue:pout(Q144),
+ {{value, 11, 11}, Q146} = pqueue:pout(Q145),
+ {{value, 12, 12}, Q147} = pqueue:pout(Q146),
+ {{value, 12, 12}, Q148} = pqueue:pout(Q147),
+ {{value, 13, 13}, Q149} = pqueue:pout(Q148),
+ {{value, 13, 13}, Q150} = pqueue:pout(Q149),
+ {{value, 14, 14}, Q151} = pqueue:pout(Q150),
+ {{value, 14, 14}, Q152} = pqueue:pout(Q151),
+ {{value, 15, 15}, Q153} = pqueue:pout(Q152),
+ {{value, 15, 15}, Q154} = pqueue:pout(Q153),
+ {{value, 16, 16}, Q155} = pqueue:pout(Q154),
+ {{value, 16, 16}, Q156} = pqueue:pout(Q155),
+ {{value, 17, 17}, Q157} = pqueue:pout(Q156),
+ {{value, 17, 17}, Q158} = pqueue:pout(Q157),
+ {{value, 18, 18}, Q159} = pqueue:pout(Q158),
+ {{value, 18, 18}, Q160} = pqueue:pout(Q159),
+ {{value, 19, 19}, Q161} = pqueue:pout(Q160),
+ {{value, 19, 19}, Q162} = pqueue:pout(Q161),
+ {{value, 20, 20}, Q163} = pqueue:pout(Q162),
+ {{value, 20, 20}, Q164} = pqueue:pout(Q163),
+ true = pqueue:is_empty(Q164),
+ {empty, Q165} = pqueue:pout(Q164),
+ true = pqueue:is_empty(Q165),
+ ok.
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+in_higher(-20, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-20,
+ {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-19, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-19,
+ {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-18, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-18,
+ {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-17, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-17,
+ {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-16, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-16,
+ {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-15, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-15,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-14, {_,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-14,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-13, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-13, Qsn14,
+ {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-12, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-12, Qsn14,
+ {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-11, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-11, Qsn14,
+ {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-10, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-10, Qsn14,
+ {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-9, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-9, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-8, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-8, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-7, {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-7, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-6, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-6, Qsn14, Qsn7,
+ {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-5, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-5, Qsn14, Qsn7,
+ {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-4, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-4, Qsn14, Qsn7,
+ {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-3, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-3, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-2, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-2, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(-1, {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {-1, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_higher(0, {_, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {0, Qsn14, Qsn7, Qsn1,
+ queue:in(X, Q0),
+ Qsp1, Qsp7, Qsp14};
+in_higher(1, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {1, Qsn14, Qsn7, Qsn1, Q0,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(2, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {2, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(3, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {3, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(4, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {4, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6},
+ Qsp7, Qsp14};
+in_higher(5, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {5, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6},
+ Qsp7, Qsp14};
+in_higher(6, {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {6, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)},
+ Qsp7, Qsp14};
+in_higher(7, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(8, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(9, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(10, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13},
+ Qsp14};
+in_higher(11, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13},
+ Qsp14};
+in_higher(12, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13},
+ Qsp14};
+in_higher(13, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)},
+ Qsp14};
+in_higher(14, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_higher(15, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_higher(16, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}};
+in_higher(17, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}};
+in_higher(18, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}};
+in_higher(19, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}};
+in_higher(20, {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}.
+
+in_lower(-20, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {queue:in(X, Qn20), Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-19, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, queue:in(X, Qn19), Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-18, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, queue:in(X, Qn18), Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-17, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, queue:in(X, Qn17), Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-16, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, queue:in(X, Qn16), Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-15, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, queue:in(X, Qn15), Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-14, {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, queue:in(X, Qn14)},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-13, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {queue:in(X, Qn13), Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-12, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, queue:in(X, Qn12), Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-11, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-10, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-9, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-8, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-7, {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7)},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-6, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {queue:in(X, Qn6), Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-5, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-4, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-3, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-2, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(-1, {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)},
+ Q0, Qsp1, Qsp7, Qsp14};
+in_lower(0, {Pc, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1,
+ queue:in(X, Q0),
+ Qsp1, Qsp7, Qsp14};
+in_lower(1, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(2, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(3, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(4, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5, Qp6},
+ Qsp7, Qsp14};
+in_lower(5, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5), Qp6},
+ Qsp7, Qsp14};
+in_lower(6, {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, queue:in(X, Qp6)},
+ Qsp7, Qsp14};
+in_lower(7, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(8, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(9, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(10, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11, Qp12, Qp13},
+ Qsp14};
+in_lower(11, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11), Qp12, Qp13},
+ Qsp14};
+in_lower(12, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, queue:in(X, Qp12), Qp13},
+ Qsp14};
+in_lower(13, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, queue:in(X, Qp13)},
+ Qsp14};
+in_lower(14, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {queue:in(X, Qp14), Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_lower(15, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, queue:in(X, Qp15), Qp16, Qp17, Qp18, Qp19, Qp20}};
+in_lower(16, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, queue:in(X, Qp16), Qp17, Qp18, Qp19, Qp20}};
+in_lower(17, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, queue:in(X, Qp17), Qp18, Qp19, Qp20}};
+in_lower(18, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, queue:in(X, Qp18), Qp19, Qp20}};
+in_lower(19, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, queue:in(X, Qp19), Qp20}};
+in_lower(20, {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}, X) ->
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, queue:in(X, Qp20)}}.
+
+out_current(-20,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn20} = queue:out(Qn20),
+ if
+ Value =:= empty ->
+ out_current(-19, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -20};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-20,
+ {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-19,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn19} = queue:out(Qn19),
+ if
+ Value =:= empty ->
+ out_current(-18, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -19};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-19,
+ {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-18,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn18} = queue:out(Qn18),
+ if
+ Value =:= empty ->
+ out_current(-17, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -18};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-18,
+ {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-17,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn17} = queue:out(Qn17),
+ if
+ Value =:= empty ->
+ out_current(-16, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -17};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-17,
+ {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-16,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn16} = queue:out(Qn16),
+ if
+ Value =:= empty ->
+ out_current(-15, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -16};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-16,
+ {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-15,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn15} = queue:out(Qn15),
+ if
+ Value =:= empty ->
+ out_current(-14, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -15};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-15,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-14,
+ {_, {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn14} = queue:out(Qn14),
+ if
+ Value =:= empty ->
+ out_current(-13, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -14};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-14,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-13,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn13} = queue:out(Qn13),
+ if
+ Value =:= empty ->
+ out_current(-12, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -13};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-13, Qsn14,
+ {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-12,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn12} = queue:out(Qn12),
+ if
+ Value =:= empty ->
+ out_current(-11, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -12};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-12, Qsn14,
+ {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-11,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn11} = queue:out(Qn11),
+ if
+ Value =:= empty ->
+ out_current(-10, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -11};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-11, Qsn14,
+ {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-10,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn10} = queue:out(Qn10),
+ if
+ Value =:= empty ->
+ out_current(-9, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -10};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-10, Qsn14,
+ {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-9,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn9} = queue:out(Qn9),
+ if
+ Value =:= empty ->
+ out_current(-8, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -9};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-9, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-8,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn8} = queue:out(Qn8),
+ if
+ Value =:= empty ->
+ out_current(-7, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -8};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-8, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-7,
+ {_, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn7} = queue:out(Qn7),
+ if
+ Value =:= empty ->
+ out_current(-6, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -7};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-7, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-6,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn6} = queue:out(Qn6),
+ if
+ Value =:= empty ->
+ out_current(-5, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -6};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-6, Qsn14, Qsn7,
+ {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-5,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn5} = queue:out(Qn5),
+ if
+ Value =:= empty ->
+ out_current(-4, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -5};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-5, Qsn14, Qsn7,
+ {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-4,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn4} = queue:out(Qn4),
+ if
+ Value =:= empty ->
+ out_current(-3, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -4};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-4, Qsn14, Qsn7,
+ {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-3,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn3} = queue:out(Qn3),
+ if
+ Value =:= empty ->
+ out_current(-2, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -3};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-3, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-2,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn2} = queue:out(Qn2),
+ if
+ Value =:= empty ->
+ out_current(-1, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -2};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-2, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(-1,
+ {_, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQn1} = queue:out(Qn1),
+ if
+ Value =:= empty ->
+ out_current(0, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, -1};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {-1, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1},
+ Q0, Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(0,
+ {_, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQ0} = queue:out(Q0),
+ if
+ Value =:= empty ->
+ out_current(1, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 0};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {0, Qsn14, Qsn7, Qsn1,
+ NewQ0,
+ Qsp1, Qsp7, Qsp14}}
+ end;
+out_current(1,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp1} = queue:out(Qp1),
+ if
+ Value =:= empty ->
+ out_current(2, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 1};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {1, Qsn14, Qsn7, Qsn1, Q0,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(2,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp2} = queue:out(Qp2),
+ if
+ Value =:= empty ->
+ out_current(3, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 2};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {2, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(3,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp3} = queue:out(Qp3),
+ if
+ Value =:= empty ->
+ out_current(4, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 3};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {3, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(4,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp4} = queue:out(Qp4),
+ if
+ Value =:= empty ->
+ out_current(5, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 4};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {4, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(5,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp5} = queue:out(Qp5),
+ if
+ Value =:= empty ->
+ out_current(6, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 5};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {5, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(6,
+ {_, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14} = Q, ReturnType) ->
+ {Value, NewQp6} = queue:out(Qp6),
+ if
+ Value =:= empty ->
+ out_current(7, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 6};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {6, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6},
+ Qsp7, Qsp14}}
+ end;
+out_current(7,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp7} = queue:out(Qp7),
+ if
+ Value =:= empty ->
+ out_current(8, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 7};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {7, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(8,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp8} = queue:out(Qp8),
+ if
+ Value =:= empty ->
+ out_current(9, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 8};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {8, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(9,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp9} = queue:out(Qp9),
+ if
+ Value =:= empty ->
+ out_current(10, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 9};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {9, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(10,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp10} = queue:out(Qp10),
+ if
+ Value =:= empty ->
+ out_current(11, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 10};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {10, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(11,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp11} = queue:out(Qp11),
+ if
+ Value =:= empty ->
+ out_current(12, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 11};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {11, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13},
+ Qsp14}}
+ end;
+out_current(12,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp12} = queue:out(Qp12),
+ if
+ Value =:= empty ->
+ out_current(13, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 12};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {12, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13},
+ Qsp14}}
+ end;
+out_current(13,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14} = Q, ReturnType) ->
+ {Value, NewQp13} = queue:out(Qp13),
+ if
+ Value =:= empty ->
+ out_current(14, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 13};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {13, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13},
+ Qsp14}}
+ end;
+out_current(14,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp14} = queue:out(Qp14),
+ if
+ Value =:= empty ->
+ out_current(15, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 14};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {14, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(15,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp15} = queue:out(Qp15),
+ if
+ Value =:= empty ->
+ out_current(16, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 15};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {15, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(16,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp16} = queue:out(Qp16),
+ if
+ Value =:= empty ->
+ out_current(17, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 16};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {16, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(17,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp17} = queue:out(Qp17),
+ if
+ Value =:= empty ->
+ out_current(18, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 17};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {17, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}}
+ end;
+out_current(18,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp18} = queue:out(Qp18),
+ if
+ Value =:= empty ->
+ out_current(19, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 18};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {18, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}}
+ end;
+out_current(19,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}} = Q, ReturnType) ->
+ {Value, NewQp19} = queue:out(Qp19),
+ if
+ Value =:= empty ->
+ out_current(20, Q, ReturnType);
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 19};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {19, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}}
+ end;
+out_current(20,
+ {_, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20} = Qsp14}, ReturnType) ->
+ {Value, NewQp20} = queue:out(Qp20),
+ if
+ Value =:= empty ->
+ {empty, {empty, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+ true ->
+ NewValue = if
+ ReturnType =:= priority ->
+ {value, Contents} = Value,
+ {value, Contents, 20};
+ true ->
+ Value
+ end,
+ {NewValue,
+ {20, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}}
+ end.
+
+out_specific(-20,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn20} = queue:out(Qn20),
+ {Value,
+ {Pc,
+ {NewQn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-19,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn19} = queue:out(Qn19),
+ {Value,
+ {Pc,
+ {Qn20, NewQn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-18,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn18} = queue:out(Qn18),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, NewQn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-17,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn17} = queue:out(Qn17),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, NewQn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-16,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn16} = queue:out(Qn16),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, NewQn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-15,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn15} = queue:out(Qn15),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, NewQn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-14,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, Qn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn14} = queue:out(Qn14),
+ {Value,
+ {Pc,
+ {Qn20, Qn19, Qn18, Qn17, Qn16, Qn15, NewQn14},
+ Qsn7, Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-13,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn13} = queue:out(Qn13),
+ {Value,
+ {Pc, Qsn14,
+ {NewQn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-12,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn12} = queue:out(Qn12),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, NewQn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-11,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn11} = queue:out(Qn11),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, NewQn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-10,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn10} = queue:out(Qn10),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, NewQn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-9,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn9} = queue:out(Qn9),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, NewQn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-8,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn8} = queue:out(Qn8),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, NewQn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-7,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, Qn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn7} = queue:out(Qn7),
+ {Value,
+ {Pc, Qsn14,
+ {Qn13, Qn12, Qn11, Qn10, Qn9, Qn8, NewQn7},
+ Qsn1, Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-6,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn6} = queue:out(Qn6),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {NewQn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-5,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn5} = queue:out(Qn5),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, NewQn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-4,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn4} = queue:out(Qn4),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, NewQn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-3,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn3} = queue:out(Qn3),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, NewQn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-2,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn2} = queue:out(Qn2),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, NewQn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(-1,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQn1} = queue:out(Qn1),
+ {Value,
+ {Pc, Qsn14, Qsn7,
+ {Qn6, Qn5, Qn4, Qn3, Qn2, NewQn1},
+ Q0, Qsp1, Qsp7, Qsp14}};
+out_specific(0,
+ {Pc, Qsn14, Qsn7, Qsn1,
+ Q0, Qsp1, Qsp7, Qsp14}) ->
+ {Value, NewQ0} = queue:out(Q0),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1,
+ NewQ0,
+ Qsp1, Qsp7, Qsp14}};
+out_specific(1,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp1} = queue:out(Qp1),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(2,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp2} = queue:out(Qp2),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(3,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp3} = queue:out(Qp3),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(4,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp4} = queue:out(Qp4),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(5,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp5} = queue:out(Qp5),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5, Qp6},
+ Qsp7, Qsp14}};
+out_specific(6,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6},
+ Qsp7, Qsp14}) ->
+ {Value, NewQp6} = queue:out(Qp6),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, NewQp6},
+ Qsp7, Qsp14}};
+out_specific(7,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp7} = queue:out(Qp7),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {NewQp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(8,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp8} = queue:out(Qp8),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, NewQp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(9,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp9} = queue:out(Qp9),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, NewQp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(10,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp10} = queue:out(Qp10),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, NewQp10, Qp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(11,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp11} = queue:out(Qp11),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, NewQp11, Qp12, Qp13},
+ Qsp14}};
+out_specific(12,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp12} = queue:out(Qp12),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, NewQp12, Qp13},
+ Qsp14}};
+out_specific(13,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, Qp13},
+ Qsp14}) ->
+ {Value, NewQp13} = queue:out(Qp13),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1,
+ {Qp7, Qp8, Qp9, Qp10, Qp11, Qp12, NewQp13},
+ Qsp14}};
+out_specific(14,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp14} = queue:out(Qp14),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {NewQp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}};
+out_specific(15,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp15} = queue:out(Qp15),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, NewQp15, Qp16, Qp17, Qp18, Qp19, Qp20}}};
+out_specific(16,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp16} = queue:out(Qp16),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, NewQp16, Qp17, Qp18, Qp19, Qp20}}};
+out_specific(17,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp17} = queue:out(Qp17),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, NewQp17, Qp18, Qp19, Qp20}}};
+out_specific(18,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp18} = queue:out(Qp18),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, NewQp18, Qp19, Qp20}}};
+out_specific(19,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp19} = queue:out(Qp19),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, NewQp19, Qp20}}};
+out_specific(20,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, Qp20}}) ->
+ {Value, NewQp20} = queue:out(Qp20),
+ {Value,
+ {Pc, Qsn14, Qsn7, Qsn1, Q0, Qsp1, Qsp7,
+ {Qp14, Qp15, Qp16, Qp17, Qp18, Qp19, NewQp20}}}.
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("pqueue_test.hrl").
+
+module_test_() ->
+ {timeout, ?TEST_TIMEOUT, [
+ {"internal tests", ?_assertOk(test())}
+ ]}.
+
+long_test_() ->
+ test_condition([
+ {"proper tests", ?_assert(pqueue_proper:qc_pq())}
+ ], ?CLOUDI_LONG_TEST_TIMEOUT).
+
+-endif.
+
diff --git a/aoc2023/build/packages/pqueue/src/pqueue2.erl b/aoc2023/build/packages/pqueue/src/pqueue2.erl
new file mode 100644
index 0000000..bbdeaaf
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/src/pqueue2.erl
@@ -0,0 +1,483 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==Skew Heap Priority Queue.==
+%%% Ulf Wiger suggested pursuing a skew heap as an optimal Erlang priority
+%%% queue implementation. Unfortunately, testing has shown this solution to
+%%% be more than 2 times slower than pqueue.
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue2).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([in/2,
+ in/3,
+ is_empty/1,
+ is_queue/1,
+ len/1,
+ new/0,
+ out/1,
+ out/2,
+ pout/1,
+ to_list/1,
+ test/0]).
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-ifdef(ERLANG_OTP_VERSION_16).
+-type pqueue2() ::
+ empty |
+ {integer(), pqueue2(), pqueue2(), element, term()} |
+ {integer(), pqueue2(), pqueue2(), queue, queue()}.
+-else.
+-type pqueue2() ::
+ empty |
+ {integer(), pqueue2(), pqueue2(), element, term()} |
+ {integer(), pqueue2(), pqueue2(), queue, queue:queue()}.
+-endif.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), pqueue2()) -> pqueue2().
+
+in(Value, H) ->
+ in(Value, 0, H).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), integer(), pqueue2()) -> pqueue2().
+
+in(Value, P, H) ->
+ merge({P, empty, empty, element, Value}, H).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue2()) -> 'true' | 'false'.
+
+is_empty(empty) ->
+ true;
+is_empty({_, HL, HR, queue, Queue}) ->
+ is_empty(HL) andalso is_empty(HR) andalso queue:is_empty(Queue);
+is_empty(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue2()) -> 'true' | 'false'.
+
+is_queue(empty) ->
+ true;
+is_queue({P, _, _, element, _})
+ when is_integer(P) ->
+ true;
+is_queue({P, _, _, queue, Queue})
+ when is_integer(P) ->
+ queue:is_queue(Queue);
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue2()) -> non_neg_integer().
+
+len(H) ->
+ len(0, out(H)).
+len(I, {empty, _}) ->
+ I;
+len(I, {{value, _}, H}) ->
+ len(I + 1, out(H)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue2().
+
+new() ->
+ empty.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue2()) ->
+ {{'value', term()}, pqueue2()} | {'empty', pqueue2()}.
+
+out(empty) ->
+ {empty, empty};
+out({_, HL, HR, element, Value}) ->
+ {{value, Value}, merge(HL, HR)};
+out({P, HL, HR, queue, Queue}) ->
+ case queue:out(Queue) of
+ {{value, _} = Result, NewQueue} ->
+ {Result, {P, HL, HR, queue, NewQueue}};
+ {empty, _} ->
+ out(merge(HL, HR))
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue2()) ->
+ {{'value', term()}, pqueue2()} | {'empty', pqueue2()}.
+
+out(_, empty) ->
+ {empty, empty};
+out(P, {P1, _, _, _, _} = H) when P < P1 ->
+ {empty, H};
+out(P, {P1, HL1, HR1, T, D}) when P > P1 ->
+ case out(P, HL1) of
+ {{value, _} = Result, HL2} ->
+ {Result, {P1, HL2, HR1, T, D}};
+ {empty, HL2} ->
+ case out(P, HR1) of
+ {{value, _} = Result, HR2} ->
+ {Result, {P1, HL2, HR2, T, D}};
+ {empty, HR2} ->
+ {empty, {P1, HL2, HR2, T, D}}
+ end
+ end;
+out(P, {P, HL, HR, element, Value}) ->
+ {{value, Value}, merge(HL, HR)};
+out(P, {P, HL, HR, queue, Queue}) ->
+ case queue:out(Queue) of
+ {{value, _} = Result, NewQueue} ->
+ {Result, {P, HL, HR, queue, NewQueue}};
+ {empty, _} ->
+ out(P, merge(HL, HR))
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue2()) ->
+ {{'value', term(), integer()}, pqueue2()} | {'empty', pqueue2()}.
+
+pout(empty) ->
+ {empty, empty};
+pout({P, HL, HR, element, Value}) ->
+ {{value, Value, P}, merge(HL, HR)};
+pout({P, HL, HR, queue, Queue}) ->
+ case queue:out(Queue) of
+ {{value, Value}, NewQueue} ->
+ {{value, Value, P}, {P, HL, HR, queue, NewQueue}};
+ {empty, _} ->
+ pout(merge(HL, HR))
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue2()) -> list(term()).
+
+to_list(H) ->
+ to_list([], out(H)).
+to_list(L, {empty, _}) ->
+ lists:reverse(L);
+to_list(L, {{value, Value}, H}) ->
+ to_list([Value | L], out(H)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Regression test.===
+%% @end
+%%-------------------------------------------------------------------------
+
+test() ->
+ Q0 = pqueue2:new(),
+ true = pqueue2:is_queue(Q0),
+ Q1 = pqueue2:in(20, 20, Q0),
+ Q2 = pqueue2:in(19, 19, Q1),
+ Q3 = pqueue2:in(18, 18, Q2),
+ Q4 = pqueue2:in(17, 17, Q3),
+ Q5 = pqueue2:in(16, 16, Q4),
+ Q6 = pqueue2:in(15, 15, Q5),
+ Q7 = pqueue2:in(14, 14, Q6),
+ Q8 = pqueue2:in(13, 13, Q7),
+ Q9 = pqueue2:in(12, 12, Q8),
+ Q10 = pqueue2:in(11, 11, Q9),
+ Q11 = pqueue2:in(10, 10, Q10),
+ Q12 = pqueue2:in(9, 9, Q11),
+ Q13 = pqueue2:in(8, 8, Q12),
+ Q14 = pqueue2:in(7, 7, Q13),
+ Q15 = pqueue2:in(6, 6, Q14),
+ Q16 = pqueue2:in(5, 5, Q15),
+ Q17 = pqueue2:in(4, 4, Q16),
+ Q18 = pqueue2:in(3, 3, Q17),
+ Q19 = pqueue2:in(2, 2, Q18),
+ Q20 = pqueue2:in(1, 1, Q19),
+ Q21 = pqueue2:in(0, 0, Q20),
+ Q22 = pqueue2:in(-1, -1, Q21),
+ Q23 = pqueue2:in(-2, -2, Q22),
+ Q24 = pqueue2:in(-3, -3, Q23),
+ Q25 = pqueue2:in(-4, -4, Q24),
+ Q26 = pqueue2:in(-5, -5, Q25),
+ Q27 = pqueue2:in(-6, -6, Q26),
+ Q28 = pqueue2:in(-7, -7, Q27),
+ Q29 = pqueue2:in(-8, -8, Q28),
+ Q30 = pqueue2:in(-9, -9, Q29),
+ Q31 = pqueue2:in(-10, -10, Q30),
+ Q32 = pqueue2:in(-11, -11, Q31),
+ Q33 = pqueue2:in(-12, -12, Q32),
+ Q34 = pqueue2:in(-13, -13, Q33),
+ Q35 = pqueue2:in(-14, -14, Q34),
+ Q36 = pqueue2:in(-15, -15, Q35),
+ Q37 = pqueue2:in(-16, -16, Q36),
+ Q38 = pqueue2:in(-17, -17, Q37),
+ Q39 = pqueue2:in(-18, -18, Q38),
+ Q40 = pqueue2:in(-19, -19, Q39),
+ Q41 = pqueue2:in(-20, -20, Q40),
+ Q42 = pqueue2:in(-20, -20, Q41),
+ Q43 = pqueue2:in(-19, -19, Q42),
+ Q44 = pqueue2:in(-18, -18, Q43),
+ Q45 = pqueue2:in(-17, -17, Q44),
+ Q46 = pqueue2:in(-16, -16, Q45),
+ Q47 = pqueue2:in(-15, -15, Q46),
+ Q48 = pqueue2:in(-14, -14, Q47),
+ Q49 = pqueue2:in(-13, -13, Q48),
+ Q50 = pqueue2:in(-12, -12, Q49),
+ Q51 = pqueue2:in(-11, -11, Q50),
+ Q52 = pqueue2:in(-10, -10, Q51),
+ Q53 = pqueue2:in(-9, -9, Q52),
+ Q54 = pqueue2:in(-8, -8, Q53),
+ Q55 = pqueue2:in(-7, -7, Q54),
+ Q56 = pqueue2:in(-6, -6, Q55),
+ Q57 = pqueue2:in(-5, -5, Q56),
+ Q58 = pqueue2:in(-4, -4, Q57),
+ Q59 = pqueue2:in(-3, -3, Q58),
+ Q60 = pqueue2:in(-2, -2, Q59),
+ Q61 = pqueue2:in(-1, -1, Q60),
+ Q62 = pqueue2:in(0, 0, Q61),
+ Q63 = pqueue2:in(1, 1, Q62),
+ Q64 = pqueue2:in(2, 2, Q63),
+ Q65 = pqueue2:in(3, 3, Q64),
+ Q66 = pqueue2:in(4, 4, Q65),
+ Q67 = pqueue2:in(5, 5, Q66),
+ Q68 = pqueue2:in(6, 6, Q67),
+ Q69 = pqueue2:in(7, 7, Q68),
+ Q70 = pqueue2:in(8, 8, Q69),
+ Q71 = pqueue2:in(9, 9, Q70),
+ Q72 = pqueue2:in(10, 10, Q71),
+ Q73 = pqueue2:in(11, 11, Q72),
+ Q74 = pqueue2:in(12, 12, Q73),
+ Q75 = pqueue2:in(13, 13, Q74),
+ Q76 = pqueue2:in(14, 14, Q75),
+ Q77 = pqueue2:in(15, 15, Q76),
+ Q78 = pqueue2:in(16, 16, Q77),
+ Q79 = pqueue2:in(17, 17, Q78),
+ Q80 = pqueue2:in(18, 18, Q79),
+ Q81 = pqueue2:in(19, 19, Q80),
+ Q82 = pqueue2:in(20, 20, Q81),
+ true = pqueue2:is_queue(Q82),
+ 82 = pqueue2:len(Q82),
+ [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14,
+ -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6,
+ -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
+ 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue2:to_list(Q82),
+ {{value, -20}, Q83} = pqueue2:out(Q82),
+ {{value, -20}, Q84} = pqueue2:out(Q83),
+ {{value, -19}, Q85} = pqueue2:out(Q84),
+ {{value, -19}, Q86} = pqueue2:out(Q85),
+ {{value, -18}, Q87} = pqueue2:out(Q86),
+ {{value, -18}, Q88} = pqueue2:out(Q87),
+ {{value, 0}, Q89} = pqueue2:out(0, Q88),
+ {{value, 0}, Q90} = pqueue2:out(0, Q89),
+ {empty, _} = pqueue2:out(0, Q90),
+ {{value, -17, -17}, Q91} = pqueue2:pout(Q90),
+ {{value, -17, -17}, Q92} = pqueue2:pout(Q91),
+ {{value, -16, -16}, Q93} = pqueue2:pout(Q92),
+ {{value, -16, -16}, Q94} = pqueue2:pout(Q93),
+ {{value, -15, -15}, Q95} = pqueue2:pout(Q94),
+ {{value, -15, -15}, Q96} = pqueue2:pout(Q95),
+ {{value, -14, -14}, Q97} = pqueue2:pout(Q96),
+ {{value, -14, -14}, Q98} = pqueue2:pout(Q97),
+ {{value, -13, -13}, Q99} = pqueue2:pout(Q98),
+ {{value, -13, -13}, Q100} = pqueue2:pout(Q99),
+ {{value, -12, -12}, Q101} = pqueue2:pout(Q100),
+ {{value, -12, -12}, Q102} = pqueue2:pout(Q101),
+ {{value, -11, -11}, Q103} = pqueue2:pout(Q102),
+ {{value, -11, -11}, Q104} = pqueue2:pout(Q103),
+ {{value, -10, -10}, Q105} = pqueue2:pout(Q104),
+ {{value, -10, -10}, Q106} = pqueue2:pout(Q105),
+ {{value, -9, -9}, Q107} = pqueue2:pout(Q106),
+ {{value, -9, -9}, Q108} = pqueue2:pout(Q107),
+ {{value, -8, -8}, Q109} = pqueue2:pout(Q108),
+ {{value, -8, -8}, Q110} = pqueue2:pout(Q109),
+ {{value, -7, -7}, Q111} = pqueue2:pout(Q110),
+ {{value, -7, -7}, Q112} = pqueue2:pout(Q111),
+ {{value, -6, -6}, Q113} = pqueue2:pout(Q112),
+ {{value, -6, -6}, Q114} = pqueue2:pout(Q113),
+ {{value, -5, -5}, Q115} = pqueue2:pout(Q114),
+ {{value, -5, -5}, Q116} = pqueue2:pout(Q115),
+ {{value, -4, -4}, Q117} = pqueue2:pout(Q116),
+ {{value, -4, -4}, Q118} = pqueue2:pout(Q117),
+ {{value, -3, -3}, Q119} = pqueue2:pout(Q118),
+ {{value, -3, -3}, Q120} = pqueue2:pout(Q119),
+ {{value, -2, -2}, Q121} = pqueue2:pout(Q120),
+ {{value, -2, -2}, Q122} = pqueue2:pout(Q121),
+ {{value, -1, -1}, Q123} = pqueue2:pout(Q122),
+ {{value, -1, -1}, Q124} = pqueue2:pout(Q123),
+ {{value, 1, 1}, Q125} = pqueue2:pout(Q124),
+ {{value, 1, 1}, Q126} = pqueue2:pout(Q125),
+ {{value, 2, 2}, Q127} = pqueue2:pout(Q126),
+ {{value, 2, 2}, Q128} = pqueue2:pout(Q127),
+ {{value, 3, 3}, Q129} = pqueue2:pout(Q128),
+ {{value, 3, 3}, Q130} = pqueue2:pout(Q129),
+ {{value, 4, 4}, Q131} = pqueue2:pout(Q130),
+ {{value, 4, 4}, Q132} = pqueue2:pout(Q131),
+ {{value, 5, 5}, Q133} = pqueue2:pout(Q132),
+ {{value, 5, 5}, Q134} = pqueue2:pout(Q133),
+ {{value, 6, 6}, Q135} = pqueue2:pout(Q134),
+ {{value, 6, 6}, Q136} = pqueue2:pout(Q135),
+ {{value, 7, 7}, Q137} = pqueue2:pout(Q136),
+ {{value, 7, 7}, Q138} = pqueue2:pout(Q137),
+ {{value, 8, 8}, Q139} = pqueue2:pout(Q138),
+ {{value, 8, 8}, Q140} = pqueue2:pout(Q139),
+ {{value, 9, 9}, Q141} = pqueue2:pout(Q140),
+ {{value, 9, 9}, Q142} = pqueue2:pout(Q141),
+ {{value, 10, 10}, Q143} = pqueue2:pout(Q142),
+ {{value, 10, 10}, Q144} = pqueue2:pout(Q143),
+ {{value, 11, 11}, Q145} = pqueue2:pout(Q144),
+ {{value, 11, 11}, Q146} = pqueue2:pout(Q145),
+ {{value, 12, 12}, Q147} = pqueue2:pout(Q146),
+ {{value, 12, 12}, Q148} = pqueue2:pout(Q147),
+ {{value, 13, 13}, Q149} = pqueue2:pout(Q148),
+ {{value, 13, 13}, Q150} = pqueue2:pout(Q149),
+ {{value, 14, 14}, Q151} = pqueue2:pout(Q150),
+ {{value, 14, 14}, Q152} = pqueue2:pout(Q151),
+ {{value, 15, 15}, Q153} = pqueue2:pout(Q152),
+ {{value, 15, 15}, Q154} = pqueue2:pout(Q153),
+ {{value, 16, 16}, Q155} = pqueue2:pout(Q154),
+ {{value, 16, 16}, Q156} = pqueue2:pout(Q155),
+ {{value, 17, 17}, Q157} = pqueue2:pout(Q156),
+ {{value, 17, 17}, Q158} = pqueue2:pout(Q157),
+ {{value, 18, 18}, Q159} = pqueue2:pout(Q158),
+ {{value, 18, 18}, Q160} = pqueue2:pout(Q159),
+ {{value, 19, 19}, Q161} = pqueue2:pout(Q160),
+ {{value, 19, 19}, Q162} = pqueue2:pout(Q161),
+ {{value, 20, 20}, Q163} = pqueue2:pout(Q162),
+ {{value, 20, 20}, Q164} = pqueue2:pout(Q163),
+ true = pqueue2:is_empty(Q164),
+ {empty, Q165} = pqueue2:pout(Q164),
+ true = pqueue2:is_empty(Q165),
+ % test case 1, based on proper testing
+ C1V0 = pqueue2:in(-18, pqueue2:new()),
+ C1V1 = pqueue2:in(9, C1V0),
+ C1V2 = pqueue2:in(-10, -4, C1V1),
+ C1V3 = pqueue2:in(-29, C1V2),
+ C1V4 = pqueue2:in(11, C1V3),
+ 5 = pqueue2:len(C1V4),
+ [-10, -18, 9, -29, 11] = pqueue2:to_list(C1V4),
+ % test case 2, based on proper testing
+ C2V0 = pqueue2:in(-4, -15, pqueue2:new()),
+ C2V1 = pqueue2:in(13, C2V0),
+ C2V2 = pqueue2:in(2, C2V1),
+ [-4, 13, 2] = to_list(C2V2),
+ ok.
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+merge(empty, empty) ->
+ empty;
+merge(empty, {_, _, _, _, _} = H) ->
+ H;
+merge({_, _, _, _, _} = H, empty) ->
+ H;
+merge({P1, HL1, HR1, T, D}, {P2, _, _, _, _} = H2) when P1 < P2 ->
+ {P1, HL1, merge(HR1, H2), T, D};
+merge({P1, _, _, _, _} = H1, {P2, HL2, HR2, T, D}) when P1 > P2 ->
+ {P2, HL2, merge(H1, HR2), T, D};
+merge({P, HL1, HR1, element, Value1}, {P, HL2, HR2, element, Value2}) ->
+ {P, merge(HL1, HR1), merge(HL2, HR2), queue,
+ queue:from_list([Value2, Value1])};
+merge({P, HL1, HR1, queue, Queue}, {P, HL2, HR2, element, Value}) ->
+ {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)};
+merge({P, HL1, HR1, element, Value}, {P, HL2, HR2, queue, Queue}) ->
+ {P, merge(HL1, HR1), merge(HL2, HR2), queue, queue:in(Value, Queue)}.
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("pqueue_test.hrl").
+
+module_test_() ->
+ {timeout, ?TEST_TIMEOUT, [
+ {"internal tests", ?_assertOk(test())}
+ ]}.
+
+long_test_() ->
+ test_condition([
+ {"proper tests", ?_assert(pqueue_proper:qc_pq2())}
+ ], ?CLOUDI_LONG_TEST_TIMEOUT).
+
+-endif.
+
diff --git a/aoc2023/build/packages/pqueue/src/pqueue3.erl b/aoc2023/build/packages/pqueue/src/pqueue3.erl
new file mode 100644
index 0000000..03b370a
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/src/pqueue3.erl
@@ -0,0 +1,404 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==A Large Priority Queue.==
+%%% This priority queue implementation depends on layered tuples, so that tuple
+%%% access times can be exploited for quick in/out priority queue operations
+%%% when using 64 or more total priorities. This implementation was created
+%%% to avoid the slowness within the priority queue used by
+%%% both RabbitMQ and Riak
+%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue3).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([in/2, % O(1)
+ in/3, % O(1)
+ is_empty/1, % O(1)
+ is_queue/1, % O(1)
+ len/1, % O(N)
+ new/0, % O(1)
+ new/1, % O(1)
+ out/1, % O(1) amortized, O(N) worst case
+ out/2, % O(1) amortized, O(N) worst case
+ pout/1, % O(1) amortized, O(N) worst case
+ to_list/1]). % O(N)
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-type pqueue3() :: {integer(), integer(), empty | integer(), tuple()}.
+-type pqueue3_empty() :: {integer(), integer(), empty, tuple()}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), pqueue3()) -> pqueue3().
+
+in(Value, Q) ->
+ in(Value, 0, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(term(), integer(), pqueue3()) -> pqueue3().
+
+in(_, P, {Size, Offset, _, _})
+ when (P + Offset) < 0; (P + Offset) > Size ->
+ erlang:exit(badarg);
+in(Value, P, {Size, Offset, empty, Bins}) ->
+ PriorityIndex = P + Offset,
+ {Size, Offset, PriorityIndex,
+ in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)};
+in(Value, P, {Size, Offset, I, Bins})
+ when (P + Offset) < I ->
+ PriorityIndex = P + Offset,
+ {Size, Offset, PriorityIndex,
+ in_queue(layer_indexes(Size, PriorityIndex), Value, Bins)};
+in(Value, P, {Size, Offset, I, Bins}) ->
+ {Size, Offset, I,
+ in_queue(layer_indexes(Size, P + Offset), Value, Bins)}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue3()) -> 'true' | 'false'.
+
+is_empty({_, _, empty, _}) ->
+ true;
+is_empty({_, _, _, _} = Q) ->
+ case out(Q) of
+ {empty, _} ->
+ true;
+ {{value, _}, _} ->
+ false
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue3()) -> 'true' | 'false'.
+
+is_queue({Size, Offset, I, Bins})
+ when is_integer(Size), is_integer(Offset), is_tuple(Bins) ->
+ (I =:= empty) or is_integer(I);
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue3()) -> non_neg_integer().
+
+len(Q) ->
+ len(0, out(Q)).
+len(I, {empty, _}) ->
+ I;
+len(I, {{value, _}, Q}) ->
+ len(I + 1, out(Q)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue3_empty().
+
+new() ->
+ new([]).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue with customization options.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new(list({atom(), term()})) -> pqueue3().
+
+new(Options) ->
+ Size = proplists:get_value(priorities, Options, 256),
+ MiddleZero = proplists:get_value(middle_priority_zero, Options, true),
+ Offset = if
+ MiddleZero =:= true ->
+ erlang:round((Size / 2) + 0.5) - 1;
+ true ->
+ 0
+ end,
+ {Size, Offset, empty, create(layer_sizes(Size))}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue3()) ->
+ {{'value', term()}, pqueue3()} | {'empty', pqueue3()}.
+
+out({_, _, empty, _} = Q) ->
+ {empty, Q};
+out({Size, Offset, I, Bins}) ->
+ {Result, NewI, NewBins} = out_check(
+ I, Size, out_queue(layer_indexes(Size, I), Bins)
+ ),
+ {Result, {Size, Offset, NewI, NewBins}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue3()) ->
+ {{'value', term()}, pqueue3()} | {'empty', pqueue3()}.
+
+out(P, {Size, Offset, _, _})
+ when (P + Offset) < 0; (P + Offset) > Size ->
+ erlang:exit(badarg);
+out(_, {_, _, empty, _} = Q) ->
+ {empty, Q};
+out(P, {Size, Offset, I, Bins}) ->
+ {Result, NewBins} = out_queue(layer_indexes(Size, P + Offset), Bins),
+ {Result, {Size, Offset, I, NewBins}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue3()) ->
+ {{'value', term(), integer()}, pqueue3()} | {'empty', pqueue3()}.
+
+pout({_, _, empty, _} = Q) ->
+ {empty, Q};
+pout({Size, Offset, I, Bins}) ->
+ {Result, NewI, NewBins} = pout_check(
+ I, Size, Offset, out_queue(layer_indexes(Size, I), Bins)
+ ),
+ {Result, {Size, Offset, NewI, NewBins}}.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue3()) -> list(term()).
+
+to_list(Q) ->
+ to_list([], out(Q)).
+to_list(L, {empty, _}) ->
+ lists:reverse(L);
+to_list(L, {{value, Value}, Q}) ->
+ to_list([Value | L], out(Q)).
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+create([]) ->
+ queue:new();
+
+create([I | Is]) ->
+ erlang:make_tuple(I + 1, create(Is)).
+
+in_queue({I1}, Value, Bins1) ->
+ erlang:setelement(I1, Bins1, queue:in(Value, erlang:element(I1, Bins1)));
+
+in_queue({I1, I2}, Value, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2, queue:in(Value, erlang:element(I2, Bins2))));
+
+in_queue({I1, I2, I3}, Value, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3, queue:in(Value, erlang:element(I3, Bins3)))));
+
+in_queue({I1, I2, I3, I4}, Value, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ Bins4 = erlang:element(I3, Bins3),
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3,
+ erlang:setelement(I4, Bins4, queue:in(Value, erlang:element(I4, Bins4)))))).
+
+pout_check(Size, Size, _, {empty, Bins}) ->
+ {empty, empty, Bins};
+pout_check(I, _, Offset, {{value, Value}, Bins}) ->
+ {{value, Value, I - Offset}, I, Bins};
+pout_check(I, Size, Offset, {empty, Bins}) ->
+ NewI = I + 1,
+ pout_check(NewI, Size, Offset, out_queue(layer_indexes(Size, NewI), Bins)).
+
+out_check(Size, Size, {empty, Bins}) ->
+ {empty, empty, Bins};
+out_check(I, _, {{value, _} = Result, Bins}) ->
+ {Result, I, Bins};
+out_check(I, Size, {empty, Bins}) ->
+ NewI = I + 1,
+ out_check(NewI, Size, out_queue(layer_indexes(Size, NewI), Bins)).
+
+out_queue({I1}, Bins1) ->
+ {Result, NewQueue} = queue:out(erlang:element(I1, Bins1)),
+ {Result,
+ erlang:setelement(I1, Bins1, NewQueue)};
+
+out_queue({I1, I2}, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ {Result, NewQueue} = queue:out(erlang:element(I2, Bins2)),
+ {Result,
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2, NewQueue))};
+
+out_queue({I1, I2, I3}, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ {Result, NewQueue} = queue:out(erlang:element(I3, Bins3)),
+ {Result,
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3, NewQueue)))};
+
+out_queue({I1, I2, I3, I4}, Bins1) ->
+ Bins2 = erlang:element(I1, Bins1),
+ Bins3 = erlang:element(I2, Bins2),
+ Bins4 = erlang:element(I3, Bins3),
+ {Result, NewQueue} = queue:out(erlang:element(I4, Bins4)),
+ {Result,
+ erlang:setelement(I1, Bins1,
+ erlang:setelement(I2, Bins2,
+ erlang:setelement(I3, Bins3,
+ erlang:setelement(I4, Bins4, NewQueue))))}.
+
+layer_indexes(Size, PriorityIndex) ->
+ if
+ Size =< 127 ->
+ {PriorityIndex + 1};
+ Size =< 255 ->
+ <<I1:4, I2:4>> = <<PriorityIndex:8>>,
+ {I1 + 1, I2 + 1};
+ Size =< 511 ->
+ <<I1:4, I2:5>> = <<PriorityIndex:9>>,
+ {I1 + 1, I2 + 1};
+ Size =< 1023 ->
+ <<I1:3, I2:3, I3:4>> = <<PriorityIndex:10>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 2047 ->
+ <<I1:3, I2:4, I3:4>> = <<PriorityIndex:11>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 4095 ->
+ <<I1:4, I2:4, I3:4>> = <<PriorityIndex:12>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 8191 ->
+ <<I1:4, I2:4, I3:5>> = <<PriorityIndex:13>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 16383 ->
+ <<I1:4, I2:5, I3:5>> = <<PriorityIndex:14>>,
+ {I1 + 1, I2 + 1, I3 + 1};
+ Size =< 32767 ->
+ <<I1:3, I2:4, I3:4, I4:4>> = <<PriorityIndex:15>>,
+ {I1 + 1, I2 + 1, I3 + 1, I4 + 1};
+ Size =< 65535 ->
+ <<I1:4, I2:4, I3:4, I4:4>> = <<PriorityIndex:16>>,
+ {I1 + 1, I2 + 1, I3 + 1, I4 + 1}
+ end.
+
+layer_sizes(Size) ->
+ if
+ Size =< 127 ->
+ <<I1:7>> = <<127:7>>,
+ [I1];
+ Size =< 255 ->
+ <<I1:4, I2:4>> = <<255:8>>,
+ [I1, I2];
+ Size =< 511 ->
+ <<I1:4, I2:5>> = <<511:9>>,
+ [I1, I2];
+ Size =< 1023 ->
+ <<I1:3, I2:3, I3:4>> = <<1023:10>>,
+ [I1, I2, I3];
+ Size =< 2047 ->
+ <<I1:3, I2:4, I3:4>> = <<2047:11>>,
+ [I1, I2, I3];
+ Size =< 4095 ->
+ <<I1:4, I2:4, I3:4>> = <<4095:12>>,
+ [I1, I2, I3];
+ Size =< 8191 ->
+ <<I1:4, I2:4, I3:5>> = <<8191:13>>,
+ [I1, I2, I3];
+ Size =< 16383 ->
+ <<I1:4, I2:5, I3:5>> = <<16383:14>>,
+ [I1, I2, I3];
+ Size =< 32767 ->
+ <<I1:3, I2:4, I3:4, I4:4>> = <<32767:15>>,
+ [I1, I2, I3, I4];
+ Size =< 65535 ->
+ <<I1:4, I2:4, I3:4, I4:4>> = <<65535:16>>,
+ [I1, I2, I3, I4]
+ end.
+
diff --git a/aoc2023/build/packages/pqueue/src/pqueue4.erl b/aoc2023/build/packages/pqueue/src/pqueue4.erl
new file mode 100644
index 0000000..30b188d
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/src/pqueue4.erl
@@ -0,0 +1,11662 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% @doc
+%%% ==Static Priority Queue.==
+%%% This priority queue implementation depends on a static number of priorities
+%%% (-128 (high) to 128 (low)) so that tuple access times can be exploited for
+%%% quick in/out priority queue operations. This implementation was created to
+%%% avoid the slowness within the priority queue used by both RabbitMQ and Riak
+%%% (https://github.com/basho/riak_core/blob/master/src/priority_queue.erl).
+%%% @end
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%%
+%%% queue_remove_unique/2 is based on queue:filter/2
+%%% which is under the Apache License 2.0:
+%%%
+%%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
+%%%
+%%% Licensed under the Apache License, Version 2.0 (the "License");
+%%% you may not use this file except in compliance with the License.
+%%% You may obtain a copy of the License at
+%%%
+%%% http://www.apache.org/licenses/LICENSE-2.0
+%%%
+%%% Unless required by applicable law or agreed to in writing, software
+%%% distributed under the License is distributed on an "AS IS" BASIS,
+%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+%%% See the License for the specific language governing permissions and
+%%% limitations under the License.
+%%%
+%%% @author Michael Truog <mjtruog at protonmail dot com>
+%%% @copyright 2011-2020 Michael Truog
+%%% @version 2.0.1 {@date} {@time}
+%%%------------------------------------------------------------------------
+
+-module(pqueue4).
+-author('mjtruog at protonmail dot com').
+
+%% external interface
+-export([filter/2, % O(N)
+ filter/3, % O(N)
+ in/2, % O(1)
+ in/3, % O(1)
+ is_empty/1, % O(1)
+ is_queue/1, % O(1)
+ len/1, % O(1)
+ new/0, % O(1)
+ out/1, % O(1) amortized, O(N) worst case
+ out/2, % O(1) amortized, O(N) worst case
+ pout/1, % O(1) amortized, O(N) worst case
+ remove_unique/2, % O(N) but smaller constant than filter/2
+ remove_unique/3, % O(N) but smaller constant than filter/3
+ to_list/1, % O(N)
+ to_plist/1, % O(N)
+ test/0]).
+
+%%%------------------------------------------------------------------------
+%%% External interface functions
+%%%------------------------------------------------------------------------
+
+-type priority() :: -128..128.
+-ifdef(ERLANG_OTP_VERSION_16).
+-type pqueue4(_) ::
+ {priority() | 'empty', % current priority
+ non_neg_integer(), % total size
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ queue(),
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()},
+ {queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue(),
+ queue(), queue(), queue(), queue(), queue(), queue(), queue(), queue()}}.
+-else.
+-type pqueue4(T) ::
+ {priority() | 'empty', % current priority
+ non_neg_integer(), % total size
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ queue:queue(T),
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)},
+ {queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T),
+ queue:queue(T), queue:queue(T), queue:queue(T), queue:queue(T)}}.
+-endif.
+-type pqueue4() :: pqueue4(any()).
+-export_type([pqueue4/0, pqueue4/1]).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Filter the priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec filter(fun((any()) -> boolean()), pqueue4()) -> pqueue4().
+
+filter(F, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ Q;
+filter(F, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ filter_all(Pc, F, Q).
+
+filter_all(_, _, {_, 0, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _} = Q) ->
+ Q;
+filter_all(128, F, Q) ->
+ filter_priority(128, F, Q);
+filter_all(P, F, Q) when is_integer(P) ->
+ filter_all(P + 1, F, filter_priority(P, F, Q)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Filter a specific priority within the priority queue.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec filter(fun((any()) -> boolean()), integer(), pqueue4()) -> pqueue4().
+
+filter(_, P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+filter(F, P, Q) when is_function(F, 1) ->
+ filter_priority(P, F, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of the 0 priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(any(), pqueue4()) -> pqueue4().
+
+in(X, Q) ->
+ in(X, 0, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Append an item to the tail of a specific priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec in(any(), integer(), pqueue4()) -> pqueue4().
+
+in(_, P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+in(X, P, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ in_higher(P, Q, X); % (in a higher priority)
+in(X, P, {Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q)
+ when P < Pc ->
+ in_higher(P, Q, X); % (in a higher priority)
+in(X, P, Q) ->
+ in_lower(P, Q, X). % (in a lower priority)
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue is empty.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_empty(pqueue4()) -> 'true' | 'false'.
+
+is_empty({_, 0, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
+ true;
+is_empty({_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Check if the priority queue type is as expected.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec is_queue(pqueue4()) -> 'true' | 'false'.
+
+is_queue({Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128})
+ when is_integer(Size),
+ tuple_size(Qn128) == 16, tuple_size(Qn112) == 16,
+ tuple_size(Qn96) == 16, tuple_size(Qn80) == 16,
+ tuple_size(Qn64) == 16, tuple_size(Qn48) == 16,
+ tuple_size(Qn32) == 16, tuple_size(Qn16) == 16,
+ tuple_size(Qp16) == 16, tuple_size(Qp32) == 16,
+ tuple_size(Qp48) == 16, tuple_size(Qp64) == 16,
+ tuple_size(Qp80) == 16, tuple_size(Qp96) == 16,
+ tuple_size(Qp112) == 16, tuple_size(Qp128) == 16 ->
+ (((Pc =:= empty) or is_integer(Pc)) and queue:is_queue(Q0));
+is_queue(_) ->
+ false.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Determine the length of a priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec len(pqueue4()) -> non_neg_integer().
+
+len({_, Size, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
+ Size.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Create a new priority queue.===
+%% O(1)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec new() -> pqueue4().
+
+new() ->
+ {empty, % current priority
+ 0, % current size
+ erlang:make_tuple(16, queue:new()), % priority [-128..-113]
+ erlang:make_tuple(16, queue:new()), % priority [-112.. -97]
+ erlang:make_tuple(16, queue:new()), % priority [ -96.. -81]
+ erlang:make_tuple(16, queue:new()), % priority [ -80.. -65]
+ erlang:make_tuple(16, queue:new()), % priority [ -64.. -49]
+ erlang:make_tuple(16, queue:new()), % priority [ -48.. -33]
+ erlang:make_tuple(16, queue:new()), % priority [ -32.. -17]
+ erlang:make_tuple(16, queue:new()), % priority [ -16.. -1]
+ queue:new(), % priority 0 (default)
+ erlang:make_tuple(16, queue:new()), % priority [ 1.. 16]
+ erlang:make_tuple(16, queue:new()), % priority [ 17.. 32]
+ erlang:make_tuple(16, queue:new()), % priority [ 33.. 48]
+ erlang:make_tuple(16, queue:new()), % priority [ 49.. 64]
+ erlang:make_tuple(16, queue:new()), % priority [ 65.. 80]
+ erlang:make_tuple(16, queue:new()), % priority [ 81.. 96]
+ erlang:make_tuple(16, queue:new()), % priority [ 97.. 112]
+ erlang:make_tuple(16, queue:new())}. % priority [ 113.. 128]
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(pqueue4()) ->
+ {{'value', any()}, pqueue4()} | {'empty', pqueue4()}.
+
+out({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ out_current(Pc, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item of a specific priority from the head of the queue.===
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec out(integer(), pqueue4()) ->
+ {{'value', any()}, pqueue4()} | {'empty', pqueue4()}.
+
+out(P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+out(_, {empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+out(P, Q) ->
+ out_specific(P, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Take an item from the head of the priority queue.===
+%% Includes the priority in the return value.
+%% O(1) amortized, O(N) worst case
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec pout(pqueue4()) ->
+ {{'value', any(), integer()}, pqueue4()} | {'empty', pqueue4()}.
+
+pout({empty, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ {empty, Q};
+pout({Pc, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _} = Q) ->
+ out_current_p(Pc, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Remove a unique value from the priority queue with a binary predicate.===
+%% O(N) but smaller constant than filter/2
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec remove_unique(fun((any()) -> boolean()), pqueue4()) ->
+ {boolean(), pqueue4()}.
+
+remove_unique(F, {_, 0, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ {false, Q};
+remove_unique(F, {Pc, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _} = Q)
+ when is_function(F, 1) ->
+ remove_unique_all(Pc, F, Q).
+
+remove_unique_all(128, F, Q) ->
+ remove_unique_p(128, F, Q);
+remove_unique_all(P, F, Q) when is_integer(P) ->
+ case remove_unique_p(P, F, Q) of
+ {true, _} = Result ->
+ Result;
+ {false, Q} ->
+ remove_unique_all(P + 1, F, Q)
+ end.
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Remove a unique value in a specific priority within the priority queue with a binary predicate.===
+%% O(N) but smaller constant than filter/3
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec remove_unique(fun((any()) -> boolean()), integer(), pqueue4()) ->
+ {boolean(), pqueue4()}.
+
+remove_unique(_, P, _)
+ when P < -128; P > 128 ->
+ erlang:exit(badarg);
+remove_unique(F, P, Q) when is_function(F, 1) ->
+ remove_unique_p(P, F, Q).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_list(pqueue4()) -> list().
+
+to_list(Q) ->
+ to_list([], out(Q)).
+to_list(L, {empty, _}) ->
+ lists:reverse(L);
+to_list(L, {{value, Value}, Q}) ->
+ to_list([Value | L], out(Q)).
+
+%%-------------------------------------------------------------------------
+%% @doc
+%% ===Convert the priority queue to a list with priorities.===
+%% O(N)
+%% @end
+%%-------------------------------------------------------------------------
+
+-spec to_plist(pqueue4()) -> list({priority(), list()}).
+
+to_plist(Q) ->
+ to_plist([], [], undefined, pout(Q)).
+to_plist(L, [], _, {empty, _}) ->
+ lists:reverse(L);
+to_plist(L, Lp, Pc, {empty, _}) ->
+ lists:reverse([{Pc, lists:reverse(Lp)} | L]);
+to_plist(L, Lp, Pc, {{value, Value, Pc}, Q}) ->
+ to_plist(L, [Value | Lp], Pc, pout(Q));
+to_plist(L, [], _, {{value, Value, Pc}, Q}) ->
+ to_plist(L, [Value], Pc, pout(Q));
+to_plist(L, Lp, P, {{value, Value, Pc}, Q}) ->
+ to_plist([{P, lists:reverse(Lp)} | L], [Value], Pc, pout(Q)).
+
+%%-------------------------------------------------------------------------
+%% @private
+%% @doc
+%% ===Regression test.===
+%% @end
+%%-------------------------------------------------------------------------
+
+test() ->
+ Q0 = pqueue4:new(),
+ true = pqueue4:is_queue(Q0),
+ Q1 = pqueue4:in(20, 20, Q0),
+ Q2 = pqueue4:in(19, 19, Q1),
+ Q3 = pqueue4:in(18, 18, Q2),
+ Q4 = pqueue4:in(17, 17, Q3),
+ Q5 = pqueue4:in(16, 16, Q4),
+ Q6 = pqueue4:in(15, 15, Q5),
+ Q7 = pqueue4:in(14, 14, Q6),
+ Q8 = pqueue4:in(13, 13, Q7),
+ Q9 = pqueue4:in(12, 12, Q8),
+ Q10 = pqueue4:in(11, 11, Q9),
+ Q11 = pqueue4:in(10, 10, Q10),
+ Q12 = pqueue4:in(9, 9, Q11),
+ Q13 = pqueue4:in(8, 8, Q12),
+ Q14 = pqueue4:in(7, 7, Q13),
+ Q15 = pqueue4:in(6, 6, Q14),
+ Q16 = pqueue4:in(5, 5, Q15),
+ Q17 = pqueue4:in(4, 4, Q16),
+ Q18 = pqueue4:in(3, 3, Q17),
+ Q19 = pqueue4:in(2, 2, Q18),
+ Q20 = pqueue4:in(1, 1, Q19),
+ Q21 = pqueue4:in(0, 0, Q20),
+ Q22 = pqueue4:in(-1, -1, Q21),
+ Q23 = pqueue4:in(-2, -2, Q22),
+ Q24 = pqueue4:in(-3, -3, Q23),
+ Q25 = pqueue4:in(-4, -4, Q24),
+ Q26 = pqueue4:in(-5, -5, Q25),
+ Q27 = pqueue4:in(-6, -6, Q26),
+ Q28 = pqueue4:in(-7, -7, Q27),
+ Q29 = pqueue4:in(-8, -8, Q28),
+ Q30 = pqueue4:in(-9, -9, Q29),
+ Q31 = pqueue4:in(-10, -10, Q30),
+ Q32 = pqueue4:in(-11, -11, Q31),
+ Q33 = pqueue4:in(-12, -12, Q32),
+ Q34 = pqueue4:in(-13, -13, Q33),
+ Q35 = pqueue4:in(-14, -14, Q34),
+ Q36 = pqueue4:in(-15, -15, Q35),
+ Q37 = pqueue4:in(-16, -16, Q36),
+ Q38 = pqueue4:in(-17, -17, Q37),
+ Q39 = pqueue4:in(-18, -18, Q38),
+ Q40 = pqueue4:in(-19, -19, Q39),
+ Q41 = pqueue4:in(-20, -20, Q40),
+ Q42 = pqueue4:in(-20, -20, Q41),
+ Q43 = pqueue4:in(-19, -19, Q42),
+ Q44 = pqueue4:in(-18, -18, Q43),
+ Q45 = pqueue4:in(-17, -17, Q44),
+ Q46 = pqueue4:in(-16, -16, Q45),
+ Q47 = pqueue4:in(-15, -15, Q46),
+ Q48 = pqueue4:in(-14, -14, Q47),
+ Q49 = pqueue4:in(-13, -13, Q48),
+ Q50 = pqueue4:in(-12, -12, Q49),
+ Q51 = pqueue4:in(-11, -11, Q50),
+ Q52 = pqueue4:in(-10, -10, Q51),
+ Q53 = pqueue4:in(-9, -9, Q52),
+ Q54 = pqueue4:in(-8, -8, Q53),
+ Q55 = pqueue4:in(-7, -7, Q54),
+ Q56 = pqueue4:in(-6, -6, Q55),
+ Q57 = pqueue4:in(-5, -5, Q56),
+ Q58 = pqueue4:in(-4, -4, Q57),
+ Q59 = pqueue4:in(-3, -3, Q58),
+ Q60 = pqueue4:in(-2, -2, Q59),
+ Q61 = pqueue4:in(-1, -1, Q60),
+ Q62 = pqueue4:in(0, 0, Q61),
+ Q63 = pqueue4:in(1, 1, Q62),
+ Q64 = pqueue4:in(2, 2, Q63),
+ Q65 = pqueue4:in(3, 3, Q64),
+ Q66 = pqueue4:in(4, 4, Q65),
+ Q67 = pqueue4:in(5, 5, Q66),
+ Q68 = pqueue4:in(6, 6, Q67),
+ Q69 = pqueue4:in(7, 7, Q68),
+ Q70 = pqueue4:in(8, 8, Q69),
+ Q71 = pqueue4:in(9, 9, Q70),
+ Q72 = pqueue4:in(10, 10, Q71),
+ Q73 = pqueue4:in(11, 11, Q72),
+ Q74 = pqueue4:in(12, 12, Q73),
+ Q75 = pqueue4:in(13, 13, Q74),
+ Q76 = pqueue4:in(14, 14, Q75),
+ Q77 = pqueue4:in(15, 15, Q76),
+ Q78 = pqueue4:in(16, 16, Q77),
+ Q79 = pqueue4:in(17, 17, Q78),
+ Q80 = pqueue4:in(18, 18, Q79),
+ Q81 = pqueue4:in(19, 19, Q80),
+ Q82 = pqueue4:in(20, 20, Q81),
+ true = pqueue4:is_queue(Q82),
+ 82 = pqueue4:len(Q82),
+ [-20, -20, -19, -19, -18, -18, -17, -17, -16, -16, -15, -15, -14, -14,
+ -13, -13, -12, -12, -11, -11, -10, -10, -9, -9, -8, -8, -7, -7, -6, -6,
+ -5, -5, -4, -4, -3, -3, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14,
+ 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20] = pqueue4:to_list(Q82),
+ [{-20, [-20, -20]}, {-19, [-19, -19]}, {-18, [-18, -18]},
+ {-17, [-17, -17]}, {-16, [-16, -16]}, {-15, [-15, -15]},
+ {-14, [-14, -14]}, {-13, [-13, -13]}, {-12, [-12, -12]},
+ {-11, [-11, -11]}, {-10, [-10, -10]}, {-9, [-9, -9]},
+ {-8, [-8, -8]}, {-7, [-7, -7]}, {-6, [-6, -6]},
+ {-5, [-5, -5]}, {-4, [-4, -4]}, {-3, [-3, -3]},
+ {-2, [-2, -2]}, {-1, [-1, -1]}, {0, [0, 0]},
+ {1, [1, 1]}, {2, [2, 2]}, {3, [3, 3]},
+ {4, [4, 4]}, {5, [5, 5]}, {6, [6, 6]},
+ {7, [7, 7]}, {8, [8, 8]}, {9, [9, 9]},
+ {10, [10, 10]}, {11, [11, 11]}, {12, [12, 12]},
+ {13, [13, 13]}, {14, [14, 14]}, {15, [15, 15]},
+ {16, [16, 16]}, {17, [17, 17]}, {18, [18, 18]},
+ {19, [19, 19]}, {20, [20, 20]}] = pqueue4:to_plist(Q82),
+ {{value, -20}, Q83} = pqueue4:out(Q82),
+ {{value, -20}, Q84} = pqueue4:out(Q83),
+ {{value, -19}, Q85} = pqueue4:out(Q84),
+ {{value, -19}, Q86} = pqueue4:out(Q85),
+ {{value, -18}, Q87} = pqueue4:out(Q86),
+ {{value, -18}, Q88} = pqueue4:out(Q87),
+ {{value, 0}, Q89} = pqueue4:out(0, Q88),
+ {{value, 0}, Q90} = pqueue4:out(0, Q89),
+ {empty, _} = pqueue4:out(0, Q90),
+ {{value, -17, -17}, Q91} = pqueue4:pout(Q90),
+ {{value, -17, -17}, Q92} = pqueue4:pout(Q91),
+ {{value, -16, -16}, Q93} = pqueue4:pout(Q92),
+ {{value, -16, -16}, Q94} = pqueue4:pout(Q93),
+ {{value, -15, -15}, Q95} = pqueue4:pout(Q94),
+ {{value, -15, -15}, Q96} = pqueue4:pout(Q95),
+ {{value, -14, -14}, Q97} = pqueue4:pout(Q96),
+ {{value, -14, -14}, Q98} = pqueue4:pout(Q97),
+ {{value, -13, -13}, Q99} = pqueue4:pout(Q98),
+ {{value, -13, -13}, Q100} = pqueue4:pout(Q99),
+ {{value, -12, -12}, Q101} = pqueue4:pout(Q100),
+ {{value, -12, -12}, Q102} = pqueue4:pout(Q101),
+ {{value, -11, -11}, Q103} = pqueue4:pout(Q102),
+ {{value, -11, -11}, Q104} = pqueue4:pout(Q103),
+ {{value, -10, -10}, Q105} = pqueue4:pout(Q104),
+ {{value, -10, -10}, Q106} = pqueue4:pout(Q105),
+ {{value, -9, -9}, Q107} = pqueue4:pout(Q106),
+ {{value, -9, -9}, Q108} = pqueue4:pout(Q107),
+ {{value, -8, -8}, Q109} = pqueue4:pout(Q108),
+ {{value, -8, -8}, Q110} = pqueue4:pout(Q109),
+ {{value, -7, -7}, Q111} = pqueue4:pout(Q110),
+ {{value, -7, -7}, Q112} = pqueue4:pout(Q111),
+ {{value, -6, -6}, Q113} = pqueue4:pout(Q112),
+ {{value, -6, -6}, Q114} = pqueue4:pout(Q113),
+ {{value, -5, -5}, Q115} = pqueue4:pout(Q114),
+ {{value, -5, -5}, Q116} = pqueue4:pout(Q115),
+ {{value, -4, -4}, Q117} = pqueue4:pout(Q116),
+ {{value, -4, -4}, Q118} = pqueue4:pout(Q117),
+ {{value, -3, -3}, Q119} = pqueue4:pout(Q118),
+ {{value, -3, -3}, Q120} = pqueue4:pout(Q119),
+ {{value, -2, -2}, Q121} = pqueue4:pout(Q120),
+ {{value, -2, -2}, Q122} = pqueue4:pout(Q121),
+ {{value, -1, -1}, Q123} = pqueue4:pout(Q122),
+ {{value, -1, -1}, Q124} = pqueue4:pout(Q123),
+ {{value, 1, 1}, Q125} = pqueue4:pout(Q124),
+ {{value, 1, 1}, Q126} = pqueue4:pout(Q125),
+ {{value, 2, 2}, Q127} = pqueue4:pout(Q126),
+ {{value, 2, 2}, Q128} = pqueue4:pout(Q127),
+ {{value, 3, 3}, Q129} = pqueue4:pout(Q128),
+ {{value, 3, 3}, Q130} = pqueue4:pout(Q129),
+ {{value, 4, 4}, Q131} = pqueue4:pout(Q130),
+ {{value, 4, 4}, Q132} = pqueue4:pout(Q131),
+ {{value, 5, 5}, Q133} = pqueue4:pout(Q132),
+ {{value, 5, 5}, Q134} = pqueue4:pout(Q133),
+ {{value, 6, 6}, Q135} = pqueue4:pout(Q134),
+ {{value, 6, 6}, Q136} = pqueue4:pout(Q135),
+ {{value, 7, 7}, Q137} = pqueue4:pout(Q136),
+ {{value, 7, 7}, Q138} = pqueue4:pout(Q137),
+ {{value, 8, 8}, Q139} = pqueue4:pout(Q138),
+ {{value, 8, 8}, Q140} = pqueue4:pout(Q139),
+ {{value, 9, 9}, Q141} = pqueue4:pout(Q140),
+ {{value, 9, 9}, Q142} = pqueue4:pout(Q141),
+ {{value, 10, 10}, Q143} = pqueue4:pout(Q142),
+ {{value, 10, 10}, Q144} = pqueue4:pout(Q143),
+ {{value, 11, 11}, Q145} = pqueue4:pout(Q144),
+ {{value, 11, 11}, Q146} = pqueue4:pout(Q145),
+ {{value, 12, 12}, Q147} = pqueue4:pout(Q146),
+ {{value, 12, 12}, Q148} = pqueue4:pout(Q147),
+ {{value, 13, 13}, Q149} = pqueue4:pout(Q148),
+ {{value, 13, 13}, Q150} = pqueue4:pout(Q149),
+ {{value, 14, 14}, Q151} = pqueue4:pout(Q150),
+ {{value, 14, 14}, Q152} = pqueue4:pout(Q151),
+ {{value, 15, 15}, Q153} = pqueue4:pout(Q152),
+ {{value, 15, 15}, Q154} = pqueue4:pout(Q153),
+ {{value, 16, 16}, Q155} = pqueue4:pout(Q154),
+ {{value, 16, 16}, Q156} = pqueue4:pout(Q155),
+ {{value, 17, 17}, Q157} = pqueue4:pout(Q156),
+ {{value, 17, 17}, Q158} = pqueue4:pout(Q157),
+ {{value, 18, 18}, Q159} = pqueue4:pout(Q158),
+ {{value, 18, 18}, Q160} = pqueue4:pout(Q159),
+ {{value, 19, 19}, Q161} = pqueue4:pout(Q160),
+ {{value, 19, 19}, Q162} = pqueue4:pout(Q161),
+ {{value, 20, 20}, Q163} = pqueue4:pout(Q162),
+ {{value, 20, 20}, Q164} = pqueue4:pout(Q163),
+ {{value, 20}, Q164} = pqueue4:out(Q163),
+ {{value, 20}, Q164} = pqueue4:out(20, Q163),
+ true = pqueue4:is_empty(Q164),
+ empty = erlang:element(1, Q164), % current priority
+ 0 = erlang:element(2, Q164), % size
+ {empty, Q164} = pqueue4:pout(Q164),
+ {empty, Q164} = pqueue4:out(Q164),
+ {empty, Q164} = pqueue4:out(20, Q164),
+
+ Queue0 = queue:new(),
+ "{[],[]}" = lists:flatten(io_lib:format("~p", [Queue0])),
+ Queue1 = queue:in(1, Queue0),
+ Queue2 = queue:in(2, Queue1),
+ Queue3 = queue:in(3, Queue2),
+ {{value, 1}, _} = queue:out(Queue2),
+ "{[3,2],[1]}" = lists:flatten(io_lib:format("~p", [Queue3])),
+ {true, {[3],[1]}} = queue_remove_unique(fun(I) -> I == 2 end, {[3,2],[1]}),
+ Queue4 = queue:filter(fun(I) -> not (I == 2) end, Queue3),
+ "{[3],[1]}" = lists:flatten(io_lib:format("~p", [Queue4])),
+ 2 = queue:len(Queue4),
+ {{value, 1}, _} = queue:out(Queue4),
+ [1, 3] = queue:to_list(Queue4),
+
+ Q166 = pqueue4:new(),
+ true = pqueue4:is_queue(Q166),
+ Q167 = pqueue4:in(6, 1, Q166),
+ Q168 = pqueue4:in(7, 1, Q167),
+ Q169 = pqueue4:in(8, 1, Q168),
+ Q170 = pqueue4:in(3, 0, Q169),
+ Q171 = pqueue4:in(4, 0, Q170),
+ Q172 = pqueue4:in(5, 0, Q171),
+ Q173 = pqueue4:in(0, -1, Q172),
+ Q174 = pqueue4:in(1, -1, Q173),
+ Q175 = pqueue4:in(2, -1, Q174),
+ [{-1, [0, 1, 2]}, {0, [3, 4, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q175),
+ 3 = pqueue4:len(pqueue4:filter(fun(I) -> I > 5 end, Q175)),
+ 3 = pqueue4:len(pqueue4:filter(fun(I) -> I < 3 end, Q175)),
+ 3 = pqueue4:len(pqueue4:filter(fun(I) -> (I < 1) orelse (I > 6) end, Q175)),
+ {true, Q176} = pqueue4:remove_unique(fun(I) -> I == 4 end, Q175),
+ [{-1, [0, 1, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q176),
+ {true, Q177} = pqueue4:remove_unique(fun(I) -> I == 1 end, Q176),
+ [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 7, 8]}] = pqueue4:to_plist(Q177),
+ {true, Q178} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q177),
+ [{-1, [0, 2]}, {0, [3, 5]}, {1, [6, 8]}] = pqueue4:to_plist(Q178),
+ 6 = pqueue4:len(Q178),
+ {{value, 0, -1}, Q179} = pqueue4:pout(Q178),
+ {{value, 2}, Q180} = pqueue4:out(Q179),
+ {{value, 6}, Q181} = pqueue4:out(1, Q180),
+ {false, Q181} = pqueue4:remove_unique(fun(I) -> I == 7 end, Q181),
+ [{0, [3, 5]}, {1, [8]}] = pqueue4:to_plist(Q181),
+ {true, Q182} = pqueue4:remove_unique(fun(I) -> I == 5 end, Q181),
+ {true, Q183} = pqueue4:remove_unique(fun(I) -> I == 8 end, 1, Q182),
+ {true, Q184} = pqueue4:remove_unique(fun(I) -> I == 3 end, Q183),
+ {empty, Q184} = pqueue4:pout(Q184),
+ {empty, Q184} = pqueue4:out(Q184),
+ {empty, Q184} = pqueue4:out(0, Q184),
+ ok.
+
+%%%------------------------------------------------------------------------
+%%% Private functions
+%%%------------------------------------------------------------------------
+
+%% @hidden
+-define(FILTER_P_Qn128(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn112(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn96(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn80(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn64(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn48(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn32(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qn16(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp16(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp32(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp48(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp64(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp80(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}).
+-define(FILTER_P_Qp96(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}).
+-define(FILTER_P_Qp112(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}).
+-define(FILTER_P_Qp128(P, V1, V2, V3),
+filter_priority(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ V2 = queue:filter(F, V1),
+ NewSize = Size - (queue:len(V1) - queue:len(V2)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}).
+
+?FILTER_P_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?FILTER_P_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?FILTER_P_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?FILTER_P_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?FILTER_P_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?FILTER_P_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?FILTER_P_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?FILTER_P_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?FILTER_P_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?FILTER_P_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?FILTER_P_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?FILTER_P_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?FILTER_P_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?FILTER_P_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?FILTER_P_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?FILTER_P_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?FILTER_P_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?FILTER_P_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?FILTER_P_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?FILTER_P_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?FILTER_P_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?FILTER_P_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?FILTER_P_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?FILTER_P_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?FILTER_P_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?FILTER_P_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?FILTER_P_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?FILTER_P_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?FILTER_P_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?FILTER_P_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?FILTER_P_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?FILTER_P_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+filter_priority(0, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ NewQ0 = queue:filter(F, Q0),
+ NewSize = Size - (queue:len(Q0) - queue:len(NewQ0)),
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128};
+?FILTER_P_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?FILTER_P_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?FILTER_P_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?FILTER_P_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?FILTER_P_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?FILTER_P_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?FILTER_P_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?FILTER_P_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?FILTER_P_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?FILTER_P_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?FILTER_P_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?FILTER_P_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?FILTER_P_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?FILTER_P_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?FILTER_P_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?FILTER_P_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?FILTER_P_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?FILTER_P_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?FILTER_P_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?FILTER_P_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?FILTER_P_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?FILTER_P_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?FILTER_P_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?FILTER_P_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?FILTER_P_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?FILTER_P_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?FILTER_P_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?FILTER_P_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?FILTER_P_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?FILTER_P_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?FILTER_P_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+?FILTER_P_Qp128(128,
+ Qp128, NewQp128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, NewQp128}).
+
+%% @hidden
+-define(IN_HIGHER_Qn128(P, V),
+in_higher(P,
+ {_,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ V,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn112(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128,
+ V,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn96(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112,
+ V,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn80(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96,
+ V,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn64(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80,
+ V,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn48(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn32(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qn16(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp16(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp32(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp48(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V,
+ Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp64(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V,
+ Qp80, Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp80(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V,
+ Qp96, Qp112, Qp128}).
+-define(IN_HIGHER_Qp96(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V,
+ Qp112, Qp128}).
+-define(IN_HIGHER_Qp112(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V,
+ Qp128}).
+-define(IN_HIGHER_Qp128(P, V),
+in_higher(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) ->
+ {P,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V}).
+
+?IN_HIGHER_Qn128(-128,
+ {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-127,
+ {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-126,
+ {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-125,
+ {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-124,
+ {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124),
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118),
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113});
+?IN_HIGHER_Qn128(-115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113});
+?IN_HIGHER_Qn128(-114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113});
+?IN_HIGHER_Qn128(-113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)});
+?IN_HIGHER_Qn112(-112,
+ {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-111,
+ {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-110,
+ {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-109,
+ {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-108,
+ {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108),
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102),
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97});
+?IN_HIGHER_Qn112(-99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97});
+?IN_HIGHER_Qn112(-98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97});
+?IN_HIGHER_Qn112(-97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)});
+?IN_HIGHER_Qn96(-96,
+ {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-95,
+ {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-94,
+ {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-93,
+ {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-92,
+ {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92),
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86),
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81});
+?IN_HIGHER_Qn96(-83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81});
+?IN_HIGHER_Qn96(-82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81});
+?IN_HIGHER_Qn96(-81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)});
+?IN_HIGHER_Qn80(-80,
+ {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-79,
+ {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-78,
+ {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-77,
+ {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-76,
+ {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76),
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70),
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65});
+?IN_HIGHER_Qn80(-67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65});
+?IN_HIGHER_Qn80(-66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65});
+?IN_HIGHER_Qn80(-65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)});
+?IN_HIGHER_Qn64(-64,
+ {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-63,
+ {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-62,
+ {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-61,
+ {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-60,
+ {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60),
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54),
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49});
+?IN_HIGHER_Qn64(-51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49});
+?IN_HIGHER_Qn64(-50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49});
+?IN_HIGHER_Qn64(-49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)});
+?IN_HIGHER_Qn48(-48,
+ {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-47,
+ {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-46,
+ {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-45,
+ {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-44,
+ {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44),
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38),
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33});
+?IN_HIGHER_Qn48(-35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33});
+?IN_HIGHER_Qn48(-34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33});
+?IN_HIGHER_Qn48(-33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)});
+?IN_HIGHER_Qn32(-32,
+ {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-31,
+ {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-30,
+ {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-29,
+ {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-28,
+ {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28),
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22),
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17});
+?IN_HIGHER_Qn32(-19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17});
+?IN_HIGHER_Qn32(-18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17});
+?IN_HIGHER_Qn32(-17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)});
+?IN_HIGHER_Qn16(-16,
+ {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-15,
+ {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-14,
+ {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-13,
+ {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-12,
+ {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12),
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6),
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1});
+?IN_HIGHER_Qn16(-3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1});
+?IN_HIGHER_Qn16(-2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1});
+?IN_HIGHER_Qn16(-1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)});
+in_higher(0,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {0,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ queue:in(X, Q0),
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128};
+?IN_HIGHER_Qp16(1,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(2,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(3,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(4,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(5,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5),
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11),
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16});
+?IN_HIGHER_Qp16(14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16});
+?IN_HIGHER_Qp16(15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16});
+?IN_HIGHER_Qp16(16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)});
+?IN_HIGHER_Qp32(17,
+ {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(18,
+ {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(19,
+ {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(20,
+ {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(21,
+ {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21),
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27),
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32});
+?IN_HIGHER_Qp32(30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32});
+?IN_HIGHER_Qp32(31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32});
+?IN_HIGHER_Qp32(32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)});
+?IN_HIGHER_Qp48(33,
+ {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(34,
+ {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(35,
+ {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(36,
+ {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(37,
+ {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37),
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43),
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48});
+?IN_HIGHER_Qp48(46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48});
+?IN_HIGHER_Qp48(47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48});
+?IN_HIGHER_Qp48(48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)});
+?IN_HIGHER_Qp64(49,
+ {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(50,
+ {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(51,
+ {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(52,
+ {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(53,
+ {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53),
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59),
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64});
+?IN_HIGHER_Qp64(62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64});
+?IN_HIGHER_Qp64(63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64});
+?IN_HIGHER_Qp64(64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)});
+?IN_HIGHER_Qp80(65,
+ {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(66,
+ {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(67,
+ {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(68,
+ {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(69,
+ {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69),
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75),
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80});
+?IN_HIGHER_Qp80(78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80});
+?IN_HIGHER_Qp80(79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80});
+?IN_HIGHER_Qp80(80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)});
+?IN_HIGHER_Qp96(81,
+ {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(82,
+ {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(83,
+ {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(84,
+ {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(85,
+ {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85),
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91),
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96});
+?IN_HIGHER_Qp96(94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96});
+?IN_HIGHER_Qp96(95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96});
+?IN_HIGHER_Qp96(96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)});
+?IN_HIGHER_Qp112(97,
+ {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(98,
+ {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(99,
+ {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(100,
+ {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(101,
+ {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101),
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107),
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112});
+?IN_HIGHER_Qp112(110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112});
+?IN_HIGHER_Qp112(111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112});
+?IN_HIGHER_Qp112(112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)});
+?IN_HIGHER_Qp128(113,
+ {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(114,
+ {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(115,
+ {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(116,
+ {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(117,
+ {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117),
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123),
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128});
+?IN_HIGHER_Qp128(126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128});
+?IN_HIGHER_Qp128(127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128});
+?IN_HIGHER_Qp128(128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}).
+
+%% @hidden
+-define(IN_LOWER_Qn128(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ V,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn112(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128,
+ V,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn96(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112,
+ V,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn80(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96,
+ V,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn64(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80,
+ V,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn48(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn32(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qn16(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp16(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp32(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp48(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V,
+ Qp64, Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp64(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V,
+ Qp80, Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp80(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V,
+ Qp96, Qp112, Qp128}).
+-define(IN_LOWER_Qp96(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V,
+ Qp112, Qp128}).
+-define(IN_LOWER_Qp112(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V,
+ Qp128}).
+-define(IN_LOWER_Qp128(P, V),
+in_lower(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V}).
+
+?IN_LOWER_Qn128(-128,
+ {queue:in(X, Qn128), Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-127,
+ {Qn128, queue:in(X, Qn127), Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-126,
+ {Qn128, Qn127, queue:in(X, Qn126), Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-125,
+ {Qn128, Qn127, Qn126, queue:in(X, Qn125), Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-124,
+ {Qn128, Qn127, Qn126, Qn125, queue:in(X, Qn124),
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ queue:in(X, Qn123), Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, queue:in(X, Qn122), Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, queue:in(X, Qn121), Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, queue:in(X, Qn120), Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, queue:in(X, Qn119), Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, queue:in(X, Qn118),
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ queue:in(X, Qn117), Qn116, Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, queue:in(X, Qn116), Qn115, Qn114, Qn113});
+?IN_LOWER_Qn128(-115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, queue:in(X, Qn115), Qn114, Qn113});
+?IN_LOWER_Qn128(-114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, queue:in(X, Qn114), Qn113});
+?IN_LOWER_Qn128(-113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, queue:in(X, Qn113)});
+?IN_LOWER_Qn112(-112,
+ {queue:in(X, Qn112), Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-111,
+ {Qn112, queue:in(X, Qn111), Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-110,
+ {Qn112, Qn111, queue:in(X, Qn110), Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-109,
+ {Qn112, Qn111, Qn110, queue:in(X, Qn109), Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-108,
+ {Qn112, Qn111, Qn110, Qn109, queue:in(X, Qn108),
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ queue:in(X, Qn107), Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, queue:in(X, Qn106), Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, queue:in(X, Qn105), Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, queue:in(X, Qn104), Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, queue:in(X, Qn103), Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, queue:in(X, Qn102),
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ queue:in(X, Qn101), Qn100, Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, queue:in(X, Qn100), Qn99, Qn98, Qn97});
+?IN_LOWER_Qn112(-99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, queue:in(X, Qn99), Qn98, Qn97});
+?IN_LOWER_Qn112(-98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, queue:in(X, Qn98), Qn97});
+?IN_LOWER_Qn112(-97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, queue:in(X, Qn97)});
+?IN_LOWER_Qn96(-96,
+ {queue:in(X, Qn96), Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-95,
+ {Qn96, queue:in(X, Qn95), Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-94,
+ {Qn96, Qn95, queue:in(X, Qn94), Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-93,
+ {Qn96, Qn95, Qn94, queue:in(X, Qn93), Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-92,
+ {Qn96, Qn95, Qn94, Qn93, queue:in(X, Qn92),
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ queue:in(X, Qn91), Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, queue:in(X, Qn90), Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, queue:in(X, Qn89), Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, queue:in(X, Qn88), Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, queue:in(X, Qn87), Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, queue:in(X, Qn86),
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ queue:in(X, Qn85), Qn84, Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, queue:in(X, Qn84), Qn83, Qn82, Qn81});
+?IN_LOWER_Qn96(-83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, queue:in(X, Qn83), Qn82, Qn81});
+?IN_LOWER_Qn96(-82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, queue:in(X, Qn82), Qn81});
+?IN_LOWER_Qn96(-81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, queue:in(X, Qn81)});
+?IN_LOWER_Qn80(-80,
+ {queue:in(X, Qn80), Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-79,
+ {Qn80, queue:in(X, Qn79), Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-78,
+ {Qn80, Qn79, queue:in(X, Qn78), Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-77,
+ {Qn80, Qn79, Qn78, queue:in(X, Qn77), Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-76,
+ {Qn80, Qn79, Qn78, Qn77, queue:in(X, Qn76),
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ queue:in(X, Qn75), Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, queue:in(X, Qn74), Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, queue:in(X, Qn73), Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, queue:in(X, Qn72), Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, queue:in(X, Qn71), Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, queue:in(X, Qn70),
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ queue:in(X, Qn69), Qn68, Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, queue:in(X, Qn68), Qn67, Qn66, Qn65});
+?IN_LOWER_Qn80(-67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, queue:in(X, Qn67), Qn66, Qn65});
+?IN_LOWER_Qn80(-66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, queue:in(X, Qn66), Qn65});
+?IN_LOWER_Qn80(-65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, queue:in(X, Qn65)});
+?IN_LOWER_Qn64(-64,
+ {queue:in(X, Qn64), Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-63,
+ {Qn64, queue:in(X, Qn63), Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-62,
+ {Qn64, Qn63, queue:in(X, Qn62), Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-61,
+ {Qn64, Qn63, Qn62, queue:in(X, Qn61), Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-60,
+ {Qn64, Qn63, Qn62, Qn61, queue:in(X, Qn60),
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ queue:in(X, Qn59), Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, queue:in(X, Qn58), Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, queue:in(X, Qn57), Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, queue:in(X, Qn56), Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, queue:in(X, Qn55), Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, queue:in(X, Qn54),
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ queue:in(X, Qn53), Qn52, Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, queue:in(X, Qn52), Qn51, Qn50, Qn49});
+?IN_LOWER_Qn64(-51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, queue:in(X, Qn51), Qn50, Qn49});
+?IN_LOWER_Qn64(-50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, queue:in(X, Qn50), Qn49});
+?IN_LOWER_Qn64(-49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, queue:in(X, Qn49)});
+?IN_LOWER_Qn48(-48,
+ {queue:in(X, Qn48), Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-47,
+ {Qn48, queue:in(X, Qn47), Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-46,
+ {Qn48, Qn47, queue:in(X, Qn46), Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-45,
+ {Qn48, Qn47, Qn46, queue:in(X, Qn45), Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-44,
+ {Qn48, Qn47, Qn46, Qn45, queue:in(X, Qn44),
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ queue:in(X, Qn43), Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, queue:in(X, Qn42), Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, queue:in(X, Qn41), Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, queue:in(X, Qn40), Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, queue:in(X, Qn39), Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, queue:in(X, Qn38),
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ queue:in(X, Qn37), Qn36, Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, queue:in(X, Qn36), Qn35, Qn34, Qn33});
+?IN_LOWER_Qn48(-35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, queue:in(X, Qn35), Qn34, Qn33});
+?IN_LOWER_Qn48(-34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, queue:in(X, Qn34), Qn33});
+?IN_LOWER_Qn48(-33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, queue:in(X, Qn33)});
+?IN_LOWER_Qn32(-32,
+ {queue:in(X, Qn32), Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-31,
+ {Qn32, queue:in(X, Qn31), Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-30,
+ {Qn32, Qn31, queue:in(X, Qn30), Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-29,
+ {Qn32, Qn31, Qn30, queue:in(X, Qn29), Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-28,
+ {Qn32, Qn31, Qn30, Qn29, queue:in(X, Qn28),
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ queue:in(X, Qn27), Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, queue:in(X, Qn26), Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, queue:in(X, Qn25), Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, queue:in(X, Qn24), Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, queue:in(X, Qn23), Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, queue:in(X, Qn22),
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ queue:in(X, Qn21), Qn20, Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, queue:in(X, Qn20), Qn19, Qn18, Qn17});
+?IN_LOWER_Qn32(-19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, queue:in(X, Qn19), Qn18, Qn17});
+?IN_LOWER_Qn32(-18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, queue:in(X, Qn18), Qn17});
+?IN_LOWER_Qn32(-17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, queue:in(X, Qn17)});
+?IN_LOWER_Qn16(-16,
+ {queue:in(X, Qn16), Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-15,
+ {Qn16, queue:in(X, Qn15), Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-14,
+ {Qn16, Qn15, queue:in(X, Qn14), Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-13,
+ {Qn16, Qn15, Qn14, queue:in(X, Qn13), Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-12,
+ {Qn16, Qn15, Qn14, Qn13, queue:in(X, Qn12),
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ queue:in(X, Qn11), Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, queue:in(X, Qn10), Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, queue:in(X, Qn9), Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, queue:in(X, Qn8), Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, queue:in(X, Qn7), Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, queue:in(X, Qn6),
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ queue:in(X, Qn5), Qn4, Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, queue:in(X, Qn4), Qn3, Qn2, Qn1});
+?IN_LOWER_Qn16(-3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, queue:in(X, Qn3), Qn2, Qn1});
+?IN_LOWER_Qn16(-2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, queue:in(X, Qn2), Qn1});
+?IN_LOWER_Qn16(-1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, queue:in(X, Qn1)});
+in_lower(0,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}, X) ->
+ {Pc,
+ Size + 1,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ queue:in(X, Q0),
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128};
+?IN_LOWER_Qp16(1,
+ {queue:in(X, Qp1), Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(2,
+ {Qp1, queue:in(X, Qp2), Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(3,
+ {Qp1, Qp2, queue:in(X, Qp3), Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(4,
+ {Qp1, Qp2, Qp3, queue:in(X, Qp4), Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(5,
+ {Qp1, Qp2, Qp3, Qp4, queue:in(X, Qp5),
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ queue:in(X, Qp6), Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, queue:in(X, Qp7), Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, queue:in(X, Qp8), Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, queue:in(X, Qp9), Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, queue:in(X, Qp10), Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, queue:in(X, Qp11),
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ queue:in(X, Qp12), Qp13, Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, queue:in(X, Qp13), Qp14, Qp15, Qp16});
+?IN_LOWER_Qp16(14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, queue:in(X, Qp14), Qp15, Qp16});
+?IN_LOWER_Qp16(15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, queue:in(X, Qp15), Qp16});
+?IN_LOWER_Qp16(16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, queue:in(X, Qp16)});
+?IN_LOWER_Qp32(17,
+ {queue:in(X, Qp17), Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(18,
+ {Qp17, queue:in(X, Qp18), Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(19,
+ {Qp17, Qp18, queue:in(X, Qp19), Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(20,
+ {Qp17, Qp18, Qp19, queue:in(X, Qp20), Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(21,
+ {Qp17, Qp18, Qp19, Qp20, queue:in(X, Qp21),
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ queue:in(X, Qp22), Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, queue:in(X, Qp23), Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, queue:in(X, Qp24), Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, queue:in(X, Qp25), Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, queue:in(X, Qp26), Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, queue:in(X, Qp27),
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ queue:in(X, Qp28), Qp29, Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, queue:in(X, Qp29), Qp30, Qp31, Qp32});
+?IN_LOWER_Qp32(30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, queue:in(X, Qp30), Qp31, Qp32});
+?IN_LOWER_Qp32(31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, queue:in(X, Qp31), Qp32});
+?IN_LOWER_Qp32(32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, queue:in(X, Qp32)});
+?IN_LOWER_Qp48(33,
+ {queue:in(X, Qp33), Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(34,
+ {Qp33, queue:in(X, Qp34), Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(35,
+ {Qp33, Qp34, queue:in(X, Qp35), Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(36,
+ {Qp33, Qp34, Qp35, queue:in(X, Qp36), Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(37,
+ {Qp33, Qp34, Qp35, Qp36, queue:in(X, Qp37),
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ queue:in(X, Qp38), Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, queue:in(X, Qp39), Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, queue:in(X, Qp40), Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, queue:in(X, Qp41), Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, queue:in(X, Qp42), Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, queue:in(X, Qp43),
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ queue:in(X, Qp44), Qp45, Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, queue:in(X, Qp45), Qp46, Qp47, Qp48});
+?IN_LOWER_Qp48(46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, queue:in(X, Qp46), Qp47, Qp48});
+?IN_LOWER_Qp48(47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, queue:in(X, Qp47), Qp48});
+?IN_LOWER_Qp48(48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, queue:in(X, Qp48)});
+?IN_LOWER_Qp64(49,
+ {queue:in(X, Qp49), Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(50,
+ {Qp49, queue:in(X, Qp50), Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(51,
+ {Qp49, Qp50, queue:in(X, Qp51), Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(52,
+ {Qp49, Qp50, Qp51, queue:in(X, Qp52), Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(53,
+ {Qp49, Qp50, Qp51, Qp52, queue:in(X, Qp53),
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ queue:in(X, Qp54), Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, queue:in(X, Qp55), Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, queue:in(X, Qp56), Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, queue:in(X, Qp57), Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, queue:in(X, Qp58), Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, queue:in(X, Qp59),
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ queue:in(X, Qp60), Qp61, Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, queue:in(X, Qp61), Qp62, Qp63, Qp64});
+?IN_LOWER_Qp64(62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, queue:in(X, Qp62), Qp63, Qp64});
+?IN_LOWER_Qp64(63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, queue:in(X, Qp63), Qp64});
+?IN_LOWER_Qp64(64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, queue:in(X, Qp64)});
+?IN_LOWER_Qp80(65,
+ {queue:in(X, Qp65), Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(66,
+ {Qp65, queue:in(X, Qp66), Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(67,
+ {Qp65, Qp66, queue:in(X, Qp67), Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(68,
+ {Qp65, Qp66, Qp67, queue:in(X, Qp68), Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(69,
+ {Qp65, Qp66, Qp67, Qp68, queue:in(X, Qp69),
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ queue:in(X, Qp70), Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, queue:in(X, Qp71), Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, queue:in(X, Qp72), Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, queue:in(X, Qp73), Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, queue:in(X, Qp74), Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, queue:in(X, Qp75),
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ queue:in(X, Qp76), Qp77, Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, queue:in(X, Qp77), Qp78, Qp79, Qp80});
+?IN_LOWER_Qp80(78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, queue:in(X, Qp78), Qp79, Qp80});
+?IN_LOWER_Qp80(79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, queue:in(X, Qp79), Qp80});
+?IN_LOWER_Qp80(80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, queue:in(X, Qp80)});
+?IN_LOWER_Qp96(81,
+ {queue:in(X, Qp81), Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(82,
+ {Qp81, queue:in(X, Qp82), Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(83,
+ {Qp81, Qp82, queue:in(X, Qp83), Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(84,
+ {Qp81, Qp82, Qp83, queue:in(X, Qp84), Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(85,
+ {Qp81, Qp82, Qp83, Qp84, queue:in(X, Qp85),
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ queue:in(X, Qp86), Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, queue:in(X, Qp87), Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, queue:in(X, Qp88), Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, queue:in(X, Qp89), Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, queue:in(X, Qp90), Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, queue:in(X, Qp91),
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ queue:in(X, Qp92), Qp93, Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, queue:in(X, Qp93), Qp94, Qp95, Qp96});
+?IN_LOWER_Qp96(94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, queue:in(X, Qp94), Qp95, Qp96});
+?IN_LOWER_Qp96(95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, queue:in(X, Qp95), Qp96});
+?IN_LOWER_Qp96(96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, queue:in(X, Qp96)});
+?IN_LOWER_Qp112(97,
+ {queue:in(X, Qp97), Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(98,
+ {Qp97, queue:in(X, Qp98), Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(99,
+ {Qp97, Qp98, queue:in(X, Qp99), Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(100,
+ {Qp97, Qp98, Qp99, queue:in(X, Qp100), Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(101,
+ {Qp97, Qp98, Qp99, Qp100, queue:in(X, Qp101),
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ queue:in(X, Qp102), Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, queue:in(X, Qp103), Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, queue:in(X, Qp104), Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, queue:in(X, Qp105), Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, queue:in(X, Qp106), Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, queue:in(X, Qp107),
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ queue:in(X, Qp108), Qp109, Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, queue:in(X, Qp109), Qp110, Qp111, Qp112});
+?IN_LOWER_Qp112(110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, queue:in(X, Qp110), Qp111, Qp112});
+?IN_LOWER_Qp112(111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, queue:in(X, Qp111), Qp112});
+?IN_LOWER_Qp112(112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, queue:in(X, Qp112)});
+?IN_LOWER_Qp128(113,
+ {queue:in(X, Qp113), Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(114,
+ {Qp113, queue:in(X, Qp114), Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(115,
+ {Qp113, Qp114, queue:in(X, Qp115), Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(116,
+ {Qp113, Qp114, Qp115, queue:in(X, Qp116), Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(117,
+ {Qp113, Qp114, Qp115, Qp116, queue:in(X, Qp117),
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ queue:in(X, Qp118), Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, queue:in(X, Qp119), Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, queue:in(X, Qp120), Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, queue:in(X, Qp121), Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, queue:in(X, Qp122), Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, queue:in(X, Qp123),
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ queue:in(X, Qp124), Qp125, Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, queue:in(X, Qp125), Qp126, Qp127, Qp128});
+?IN_LOWER_Qp128(126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, queue:in(X, Qp126), Qp127, Qp128});
+?IN_LOWER_Qp128(127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, queue:in(X, Qp127), Qp128});
+?IN_LOWER_Qp128(128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, queue:in(X, Qp128)}).
+
+%% @hidden
+-define(OUT_CURRENT_Qn128(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn112(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn96(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn80(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn64(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn48(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn32(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qn16(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp16(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp32(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp48(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp64(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp80(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp96(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_Qp112(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}
+ end).
+-define(OUT_CURRENT_Qp128(P, V1, V2, V3),
+out_current(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) ->
+ {Value, V2} = queue:out(V1),
+ if
+ Value =:= empty ->
+ out_current(P + 1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}
+ end).
+
+?OUT_CURRENT_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?OUT_CURRENT_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?OUT_CURRENT_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?OUT_CURRENT_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?OUT_CURRENT_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?OUT_CURRENT_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?OUT_CURRENT_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?OUT_CURRENT_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?OUT_CURRENT_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?OUT_CURRENT_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?OUT_CURRENT_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?OUT_CURRENT_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?OUT_CURRENT_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?OUT_CURRENT_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?OUT_CURRENT_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?OUT_CURRENT_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?OUT_CURRENT_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?OUT_CURRENT_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?OUT_CURRENT_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?OUT_CURRENT_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?OUT_CURRENT_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?OUT_CURRENT_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?OUT_CURRENT_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?OUT_CURRENT_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+out_current(0,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ {Value, NewQ0} = queue:out(Q0),
+ if
+ Value =:= empty ->
+ out_current(1, Q);
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> 0 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end;
+?OUT_CURRENT_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?OUT_CURRENT_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?OUT_CURRENT_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?OUT_CURRENT_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?OUT_CURRENT_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?OUT_CURRENT_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?OUT_CURRENT_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?OUT_CURRENT_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?OUT_CURRENT_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?OUT_CURRENT_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?OUT_CURRENT_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?OUT_CURRENT_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?OUT_CURRENT_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?OUT_CURRENT_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?OUT_CURRENT_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?OUT_CURRENT_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?OUT_CURRENT_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?OUT_CURRENT_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?OUT_CURRENT_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?OUT_CURRENT_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?OUT_CURRENT_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?OUT_CURRENT_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?OUT_CURRENT_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+out_current(128,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ {Value, NewQp128} = queue:out(Qp128),
+ if
+ Value =:= empty ->
+ {empty,
+ {empty,
+ 0,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}};
+ true ->
+ NewSize = Size - 1,
+ {Value,
+ {if NewSize == 0 -> empty; true -> 128 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}}
+ end.
+
+%% @hidden
+-define(OUT_CURRENT_P_Qn128(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn112(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn96(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn80(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn64(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn48(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn32(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qn16(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp16(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp32(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp48(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp64(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp80(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp96(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp112(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}
+ end).
+-define(OUT_CURRENT_P_Qp128(P, V1, V2, V3),
+out_current_p(P,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}} = Q) ->
+ case queue:out(V1) of
+ {empty, _} ->
+ out_current_p(P + 1, Q);
+ {{value, X}, V2} ->
+ NewSize = Size - 1,
+ {{value, X, P},
+ {if NewSize == 0 -> empty; true -> P end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}
+ end).
+
+?OUT_CURRENT_P_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?OUT_CURRENT_P_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?OUT_CURRENT_P_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?OUT_CURRENT_P_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?OUT_CURRENT_P_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?OUT_CURRENT_P_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?OUT_CURRENT_P_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?OUT_CURRENT_P_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?OUT_CURRENT_P_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?OUT_CURRENT_P_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?OUT_CURRENT_P_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?OUT_CURRENT_P_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?OUT_CURRENT_P_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?OUT_CURRENT_P_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?OUT_CURRENT_P_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?OUT_CURRENT_P_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?OUT_CURRENT_P_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?OUT_CURRENT_P_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?OUT_CURRENT_P_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?OUT_CURRENT_P_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?OUT_CURRENT_P_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?OUT_CURRENT_P_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?OUT_CURRENT_P_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?OUT_CURRENT_P_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+out_current_p(0,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128} = Q) ->
+ case queue:out(Q0) of
+ {empty, _} ->
+ out_current_p(1, Q);
+ {{value, X}, NewQ0} ->
+ NewSize = Size - 1,
+ {{value, X, 0},
+ {if NewSize == 0 -> empty; true -> 0 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}
+ end;
+?OUT_CURRENT_P_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?OUT_CURRENT_P_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?OUT_CURRENT_P_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?OUT_CURRENT_P_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?OUT_CURRENT_P_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?OUT_CURRENT_P_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?OUT_CURRENT_P_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?OUT_CURRENT_P_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?OUT_CURRENT_P_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?OUT_CURRENT_P_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?OUT_CURRENT_P_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?OUT_CURRENT_P_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?OUT_CURRENT_P_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?OUT_CURRENT_P_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?OUT_CURRENT_P_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?OUT_CURRENT_P_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?OUT_CURRENT_P_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?OUT_CURRENT_P_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?OUT_CURRENT_P_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?OUT_CURRENT_P_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?OUT_CURRENT_P_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?OUT_CURRENT_P_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?OUT_CURRENT_P_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+out_current_p(128,
+ {_,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ case queue:out(Qp128) of
+ {empty, _} ->
+ {empty,
+ {empty,
+ 0,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}};
+ {{value, X}, NewQp128} ->
+ NewSize = Size - 1,
+ {{value, X, 128},
+ {if NewSize == 0 -> empty; true -> 128 end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, NewQp128}}}
+ end.
+
+%% @hidden
+-define(OUT_SPECIFIC_Qn128(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn112(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn96(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn80(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn64(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn48(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn32(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qn16(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp16(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp32(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp48(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp64(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp80(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp96(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}).
+-define(OUT_SPECIFIC_Qp112(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}).
+-define(OUT_SPECIFIC_Qp128(P, V1, V2, V3),
+out_specific(P,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ {Value, V2} = queue:out(V1),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}).
+
+?OUT_SPECIFIC_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?OUT_SPECIFIC_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?OUT_SPECIFIC_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?OUT_SPECIFIC_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?OUT_SPECIFIC_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?OUT_SPECIFIC_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?OUT_SPECIFIC_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?OUT_SPECIFIC_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?OUT_SPECIFIC_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?OUT_SPECIFIC_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?OUT_SPECIFIC_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?OUT_SPECIFIC_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?OUT_SPECIFIC_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?OUT_SPECIFIC_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?OUT_SPECIFIC_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?OUT_SPECIFIC_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?OUT_SPECIFIC_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?OUT_SPECIFIC_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?OUT_SPECIFIC_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?OUT_SPECIFIC_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?OUT_SPECIFIC_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?OUT_SPECIFIC_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?OUT_SPECIFIC_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?OUT_SPECIFIC_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+out_specific(0,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, NewQ0} = queue:out(Q0),
+ NewSize = if Value =/= empty -> Size - 1; true -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}};
+?OUT_SPECIFIC_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?OUT_SPECIFIC_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?OUT_SPECIFIC_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?OUT_SPECIFIC_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?OUT_SPECIFIC_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?OUT_SPECIFIC_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?OUT_SPECIFIC_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?OUT_SPECIFIC_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?OUT_SPECIFIC_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?OUT_SPECIFIC_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?OUT_SPECIFIC_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?OUT_SPECIFIC_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?OUT_SPECIFIC_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?OUT_SPECIFIC_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?OUT_SPECIFIC_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?OUT_SPECIFIC_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?OUT_SPECIFIC_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?OUT_SPECIFIC_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?OUT_SPECIFIC_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?OUT_SPECIFIC_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?OUT_SPECIFIC_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?OUT_SPECIFIC_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?OUT_SPECIFIC_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+?OUT_SPECIFIC_Qp128(128,
+ Qp128, NewQp128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, NewQp128}).
+
+%% @hidden
+-define(REMOVE_UNIQ_P_Qn128(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ {Qn128, Qn127, Qn126, Qn125, Qn124, Qn123, Qn122, Qn121,
+ Qn120, Qn119, Qn118, Qn117, Qn116, Qn115, Qn114, Qn113},
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ V3,
+ Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn112(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128,
+ {Qn112, Qn111, Qn110, Qn109, Qn108, Qn107, Qn106, Qn105,
+ Qn104, Qn103, Qn102, Qn101, Qn100, Qn99, Qn98, Qn97},
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128,
+ V3,
+ Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn96(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112,
+ {Qn96, Qn95, Qn94, Qn93, Qn92, Qn91, Qn90, Qn89,
+ Qn88, Qn87, Qn86, Qn85, Qn84, Qn83, Qn82, Qn81},
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112,
+ V3,
+ Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn80(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96,
+ {Qn80, Qn79, Qn78, Qn77, Qn76, Qn75, Qn74, Qn73,
+ Qn72, Qn71, Qn70, Qn69, Qn68, Qn67, Qn66, Qn65},
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96,
+ V3,
+ Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn64(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80,
+ {Qn64, Qn63, Qn62, Qn61, Qn60, Qn59, Qn58, Qn57,
+ Qn56, Qn55, Qn54, Qn53, Qn52, Qn51, Qn50, Qn49},
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80,
+ V3,
+ Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn48(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ {Qn48, Qn47, Qn46, Qn45, Qn44, Qn43, Qn42, Qn41,
+ Qn40, Qn39, Qn38, Qn37, Qn36, Qn35, Qn34, Qn33},
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64,
+ V3,
+ Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn32(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ {Qn32, Qn31, Qn30, Qn29, Qn28, Qn27, Qn26, Qn25,
+ Qn24, Qn23, Qn22, Qn21, Qn20, Qn19, Qn18, Qn17},
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48,
+ V3,
+ Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qn16(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ {Qn16, Qn15, Qn14, Qn13, Qn12, Qn11, Qn10, Qn9,
+ Qn8, Qn7, Qn6, Qn5, Qn4, Qn3, Qn2, Qn1},
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32,
+ V3,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp16(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ {Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8,
+ Qp9, Qp10, Qp11, Qp12, Qp13, Qp14, Qp15, Qp16},
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ V3,
+ Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp32(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ {Qp17, Qp18, Qp19, Qp20, Qp21, Qp22, Qp23, Qp24,
+ Qp25, Qp26, Qp27, Qp28, Qp29, Qp30, Qp31, Qp32},
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16,
+ V3,
+ Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp48(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ {Qp33, Qp34, Qp35, Qp36, Qp37, Qp38, Qp39, Qp40,
+ Qp41, Qp42, Qp43, Qp44, Qp45, Qp46, Qp47, Qp48},
+ Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32,
+ V3,
+ Qp64, Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp64(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ {Qp49, Qp50, Qp51, Qp52, Qp53, Qp54, Qp55, Qp56,
+ Qp57, Qp58, Qp59, Qp60, Qp61, Qp62, Qp63, Qp64},
+ Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48,
+ V3,
+ Qp80, Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp80(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ {Qp65, Qp66, Qp67, Qp68, Qp69, Qp70, Qp71, Qp72,
+ Qp73, Qp74, Qp75, Qp76, Qp77, Qp78, Qp79, Qp80},
+ Qp96, Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64,
+ V3,
+ Qp96, Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp96(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ {Qp81, Qp82, Qp83, Qp84, Qp85, Qp86, Qp87, Qp88,
+ Qp89, Qp90, Qp91, Qp92, Qp93, Qp94, Qp95, Qp96},
+ Qp112, Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80,
+ V3,
+ Qp112, Qp128}}).
+-define(REMOVE_UNIQ_P_Qp112(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ {Qp97, Qp98, Qp99, Qp100, Qp101, Qp102, Qp103, Qp104,
+ Qp105, Qp106, Qp107, Qp108, Qp109, Qp110, Qp111, Qp112},
+ Qp128}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96,
+ V3,
+ Qp128}}).
+-define(REMOVE_UNIQ_P_Qp128(P, V1, V2, V3),
+remove_unique_p(P, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ {Qp113, Qp114, Qp115, Qp116, Qp117, Qp118, Qp119, Qp120,
+ Qp121, Qp122, Qp123, Qp124, Qp125, Qp126, Qp127, Qp128}}) ->
+ {Value, V2} = queue_remove_unique(F, V1),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112,
+ V3}}).
+
+?REMOVE_UNIQ_P_Qn128(-128,
+ Qn128, NewQn128,
+ {NewQn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-127,
+ Qn127, NewQn127,
+ {Qn128, NewQn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-126,
+ Qn126, NewQn126,
+ {Qn128, Qn127, NewQn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-125,
+ Qn125, NewQn125,
+ {Qn128, Qn127, Qn126, NewQn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-124,
+ Qn124, NewQn124,
+ {Qn128, Qn127, Qn126, Qn125, NewQn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-123,
+ Qn123, NewQn123,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ NewQn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-122,
+ Qn122, NewQn122,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, NewQn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-121,
+ Qn121, NewQn121,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, NewQn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-120,
+ Qn120, NewQn120,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, NewQn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-119,
+ Qn119, NewQn119,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, NewQn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-118,
+ Qn118, NewQn118,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, NewQn118,
+ Qn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-117,
+ Qn117, NewQn117,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ NewQn117, Qn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-116,
+ Qn116, NewQn116,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, NewQn116, Qn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-115,
+ Qn115, NewQn115,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, NewQn115, Qn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-114,
+ Qn114, NewQn114,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, NewQn114, Qn113});
+?REMOVE_UNIQ_P_Qn128(-113,
+ Qn113, NewQn113,
+ {Qn128, Qn127, Qn126, Qn125, Qn124,
+ Qn123, Qn122, Qn121, Qn120, Qn119, Qn118,
+ Qn117, Qn116, Qn115, Qn114, NewQn113});
+?REMOVE_UNIQ_P_Qn112(-112,
+ Qn112, NewQn112,
+ {NewQn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-111,
+ Qn111, NewQn111,
+ {Qn112, NewQn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-110,
+ Qn110, NewQn110,
+ {Qn112, Qn111, NewQn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-109,
+ Qn109, NewQn109,
+ {Qn112, Qn111, Qn110, NewQn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-108,
+ Qn108, NewQn108,
+ {Qn112, Qn111, Qn110, Qn109, NewQn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-107,
+ Qn107, NewQn107,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ NewQn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-106,
+ Qn106, NewQn106,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, NewQn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-105,
+ Qn105, NewQn105,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, NewQn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-104,
+ Qn104, NewQn104,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, NewQn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-103,
+ Qn103, NewQn103,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, NewQn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-102,
+ Qn102, NewQn102,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, NewQn102,
+ Qn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-101,
+ Qn101, NewQn101,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ NewQn101, Qn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-100,
+ Qn100, NewQn100,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, NewQn100, Qn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-99,
+ Qn99, NewQn99,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, NewQn99, Qn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-98,
+ Qn98, NewQn98,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, NewQn98, Qn97});
+?REMOVE_UNIQ_P_Qn112(-97,
+ Qn97, NewQn97,
+ {Qn112, Qn111, Qn110, Qn109, Qn108,
+ Qn107, Qn106, Qn105, Qn104, Qn103, Qn102,
+ Qn101, Qn100, Qn99, Qn98, NewQn97});
+?REMOVE_UNIQ_P_Qn96(-96,
+ Qn96, NewQn96,
+ {NewQn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-95,
+ Qn95, NewQn95,
+ {Qn96, NewQn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-94,
+ Qn94, NewQn94,
+ {Qn96, Qn95, NewQn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-93,
+ Qn93, NewQn93,
+ {Qn96, Qn95, Qn94, NewQn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-92,
+ Qn92, NewQn92,
+ {Qn96, Qn95, Qn94, Qn93, NewQn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-91,
+ Qn91, NewQn91,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ NewQn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-90,
+ Qn90, NewQn90,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, NewQn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-89,
+ Qn89, NewQn89,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, NewQn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-88,
+ Qn88, NewQn88,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, NewQn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-87,
+ Qn87, NewQn87,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, NewQn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-86,
+ Qn86, NewQn86,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, NewQn86,
+ Qn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-85,
+ Qn85, NewQn85,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ NewQn85, Qn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-84,
+ Qn84, NewQn84,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, NewQn84, Qn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-83,
+ Qn83, NewQn83,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, NewQn83, Qn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-82,
+ Qn82, NewQn82,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, NewQn82, Qn81});
+?REMOVE_UNIQ_P_Qn96(-81,
+ Qn81, NewQn81,
+ {Qn96, Qn95, Qn94, Qn93, Qn92,
+ Qn91, Qn90, Qn89, Qn88, Qn87, Qn86,
+ Qn85, Qn84, Qn83, Qn82, NewQn81});
+?REMOVE_UNIQ_P_Qn80(-80,
+ Qn80, NewQn80,
+ {NewQn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-79,
+ Qn79, NewQn79,
+ {Qn80, NewQn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-78,
+ Qn78, NewQn78,
+ {Qn80, Qn79, NewQn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-77,
+ Qn77, NewQn77,
+ {Qn80, Qn79, Qn78, NewQn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-76,
+ Qn76, NewQn76,
+ {Qn80, Qn79, Qn78, Qn77, NewQn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-75,
+ Qn75, NewQn75,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ NewQn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-74,
+ Qn74, NewQn74,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, NewQn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-73,
+ Qn73, NewQn73,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, NewQn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-72,
+ Qn72, NewQn72,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, NewQn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-71,
+ Qn71, NewQn71,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, NewQn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-70,
+ Qn70, NewQn70,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, NewQn70,
+ Qn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-69,
+ Qn69, NewQn69,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ NewQn69, Qn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-68,
+ Qn68, NewQn68,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, NewQn68, Qn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-67,
+ Qn67, NewQn67,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, NewQn67, Qn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-66,
+ Qn66, NewQn66,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, NewQn66, Qn65});
+?REMOVE_UNIQ_P_Qn80(-65,
+ Qn65, NewQn65,
+ {Qn80, Qn79, Qn78, Qn77, Qn76,
+ Qn75, Qn74, Qn73, Qn72, Qn71, Qn70,
+ Qn69, Qn68, Qn67, Qn66, NewQn65});
+?REMOVE_UNIQ_P_Qn64(-64,
+ Qn64, NewQn64,
+ {NewQn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-63,
+ Qn63, NewQn63,
+ {Qn64, NewQn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-62,
+ Qn62, NewQn62,
+ {Qn64, Qn63, NewQn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-61,
+ Qn61, NewQn61,
+ {Qn64, Qn63, Qn62, NewQn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-60,
+ Qn60, NewQn60,
+ {Qn64, Qn63, Qn62, Qn61, NewQn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-59,
+ Qn59, NewQn59,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ NewQn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-58,
+ Qn58, NewQn58,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, NewQn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-57,
+ Qn57, NewQn57,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, NewQn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-56,
+ Qn56, NewQn56,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, NewQn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-55,
+ Qn55, NewQn55,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, NewQn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-54,
+ Qn54, NewQn54,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, NewQn54,
+ Qn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-53,
+ Qn53, NewQn53,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ NewQn53, Qn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-52,
+ Qn52, NewQn52,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, NewQn52, Qn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-51,
+ Qn51, NewQn51,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, NewQn51, Qn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-50,
+ Qn50, NewQn50,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, NewQn50, Qn49});
+?REMOVE_UNIQ_P_Qn64(-49,
+ Qn49, NewQn49,
+ {Qn64, Qn63, Qn62, Qn61, Qn60,
+ Qn59, Qn58, Qn57, Qn56, Qn55, Qn54,
+ Qn53, Qn52, Qn51, Qn50, NewQn49});
+?REMOVE_UNIQ_P_Qn48(-48,
+ Qn48, NewQn48,
+ {NewQn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-47,
+ Qn47, NewQn47,
+ {Qn48, NewQn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-46,
+ Qn46, NewQn46,
+ {Qn48, Qn47, NewQn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-45,
+ Qn45, NewQn45,
+ {Qn48, Qn47, Qn46, NewQn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-44,
+ Qn44, NewQn44,
+ {Qn48, Qn47, Qn46, Qn45, NewQn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-43,
+ Qn43, NewQn43,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ NewQn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-42,
+ Qn42, NewQn42,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, NewQn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-41,
+ Qn41, NewQn41,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, NewQn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-40,
+ Qn40, NewQn40,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, NewQn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-39,
+ Qn39, NewQn39,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, NewQn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-38,
+ Qn38, NewQn38,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, NewQn38,
+ Qn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-37,
+ Qn37, NewQn37,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ NewQn37, Qn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-36,
+ Qn36, NewQn36,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, NewQn36, Qn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-35,
+ Qn35, NewQn35,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, NewQn35, Qn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-34,
+ Qn34, NewQn34,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, NewQn34, Qn33});
+?REMOVE_UNIQ_P_Qn48(-33,
+ Qn33, NewQn33,
+ {Qn48, Qn47, Qn46, Qn45, Qn44,
+ Qn43, Qn42, Qn41, Qn40, Qn39, Qn38,
+ Qn37, Qn36, Qn35, Qn34, NewQn33});
+?REMOVE_UNIQ_P_Qn32(-32,
+ Qn32, NewQn32,
+ {NewQn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-31,
+ Qn31, NewQn31,
+ {Qn32, NewQn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-30,
+ Qn30, NewQn30,
+ {Qn32, Qn31, NewQn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-29,
+ Qn29, NewQn29,
+ {Qn32, Qn31, Qn30, NewQn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-28,
+ Qn28, NewQn28,
+ {Qn32, Qn31, Qn30, Qn29, NewQn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-27,
+ Qn27, NewQn27,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ NewQn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-26,
+ Qn26, NewQn26,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, NewQn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-25,
+ Qn25, NewQn25,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, NewQn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-24,
+ Qn24, NewQn24,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, NewQn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-23,
+ Qn23, NewQn23,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, NewQn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-22,
+ Qn22, NewQn22,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, NewQn22,
+ Qn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-21,
+ Qn21, NewQn21,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ NewQn21, Qn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-20,
+ Qn20, NewQn20,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, NewQn20, Qn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-19,
+ Qn19, NewQn19,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, NewQn19, Qn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-18,
+ Qn18, NewQn18,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, NewQn18, Qn17});
+?REMOVE_UNIQ_P_Qn32(-17,
+ Qn17, NewQn17,
+ {Qn32, Qn31, Qn30, Qn29, Qn28,
+ Qn27, Qn26, Qn25, Qn24, Qn23, Qn22,
+ Qn21, Qn20, Qn19, Qn18, NewQn17});
+?REMOVE_UNIQ_P_Qn16(-16,
+ Qn16, NewQn16,
+ {NewQn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-15,
+ Qn15, NewQn15,
+ {Qn16, NewQn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-14,
+ Qn14, NewQn14,
+ {Qn16, Qn15, NewQn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-13,
+ Qn13, NewQn13,
+ {Qn16, Qn15, Qn14, NewQn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-12,
+ Qn12, NewQn12,
+ {Qn16, Qn15, Qn14, Qn13, NewQn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-11,
+ Qn11, NewQn11,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ NewQn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-10,
+ Qn10, NewQn10,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, NewQn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-9,
+ Qn9, NewQn9,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, NewQn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-8,
+ Qn8, NewQn8,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, NewQn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-7,
+ Qn7, NewQn7,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, NewQn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-6,
+ Qn6, NewQn6,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, NewQn6,
+ Qn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-5,
+ Qn5, NewQn5,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ NewQn5, Qn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-4,
+ Qn4, NewQn4,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, NewQn4, Qn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-3,
+ Qn3, NewQn3,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, NewQn3, Qn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-2,
+ Qn2, NewQn2,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, NewQn2, Qn1});
+?REMOVE_UNIQ_P_Qn16(-1,
+ Qn1, NewQn1,
+ {Qn16, Qn15, Qn14, Qn13, Qn12,
+ Qn11, Qn10, Qn9, Qn8, Qn7, Qn6,
+ Qn5, Qn4, Qn3, Qn2, NewQn1});
+remove_unique_p(0, F,
+ {Pc,
+ Size,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ Q0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}) ->
+ {Value, NewQ0} = queue_remove_unique(F, Q0),
+ NewSize = if Value =:= true -> Size - 1; Value =:= false -> Size end,
+ {Value,
+ {if NewSize == 0 -> empty; true -> Pc end,
+ NewSize,
+ Qn128, Qn112, Qn96, Qn80, Qn64, Qn48, Qn32, Qn16,
+ NewQ0,
+ Qp16, Qp32, Qp48, Qp64, Qp80, Qp96, Qp112, Qp128}};
+?REMOVE_UNIQ_P_Qp16(1,
+ Qp1, NewQp1,
+ {NewQp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(2,
+ Qp2, NewQp2,
+ {Qp1, NewQp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(3,
+ Qp3, NewQp3,
+ {Qp1, Qp2, NewQp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(4,
+ Qp4, NewQp4,
+ {Qp1, Qp2, Qp3, NewQp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(5,
+ Qp5, NewQp5,
+ {Qp1, Qp2, Qp3, Qp4, NewQp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(6,
+ Qp6, NewQp6,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ NewQp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(7,
+ Qp7, NewQp7,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, NewQp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(8,
+ Qp8, NewQp8,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, NewQp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(9,
+ Qp9, NewQp9,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, NewQp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(10,
+ Qp10, NewQp10,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, NewQp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(11,
+ Qp11, NewQp11,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, NewQp11,
+ Qp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(12,
+ Qp12, NewQp12,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ NewQp12, Qp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(13,
+ Qp13, NewQp13,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, NewQp13, Qp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(14,
+ Qp14, NewQp14,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, NewQp14, Qp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(15,
+ Qp15, NewQp15,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, NewQp15, Qp16});
+?REMOVE_UNIQ_P_Qp16(16,
+ Qp16, NewQp16,
+ {Qp1, Qp2, Qp3, Qp4, Qp5,
+ Qp6, Qp7, Qp8, Qp9, Qp10, Qp11,
+ Qp12, Qp13, Qp14, Qp15, NewQp16});
+?REMOVE_UNIQ_P_Qp32(17,
+ Qp17, NewQp17,
+ {NewQp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(18,
+ Qp18, NewQp18,
+ {Qp17, NewQp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(19,
+ Qp19, NewQp19,
+ {Qp17, Qp18, NewQp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(20,
+ Qp20, NewQp20,
+ {Qp17, Qp18, Qp19, NewQp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(21,
+ Qp21, NewQp21,
+ {Qp17, Qp18, Qp19, Qp20, NewQp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(22,
+ Qp22, NewQp22,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ NewQp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(23,
+ Qp23, NewQp23,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, NewQp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(24,
+ Qp24, NewQp24,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, NewQp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(25,
+ Qp25, NewQp25,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, NewQp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(26,
+ Qp26, NewQp26,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, NewQp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(27,
+ Qp27, NewQp27,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, NewQp27,
+ Qp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(28,
+ Qp28, NewQp28,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ NewQp28, Qp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(29,
+ Qp29, NewQp29,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, NewQp29, Qp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(30,
+ Qp30, NewQp30,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, NewQp30, Qp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(31,
+ Qp31, NewQp31,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, NewQp31, Qp32});
+?REMOVE_UNIQ_P_Qp32(32,
+ Qp32, NewQp32,
+ {Qp17, Qp18, Qp19, Qp20, Qp21,
+ Qp22, Qp23, Qp24, Qp25, Qp26, Qp27,
+ Qp28, Qp29, Qp30, Qp31, NewQp32});
+?REMOVE_UNIQ_P_Qp48(33,
+ Qp33, NewQp33,
+ {NewQp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(34,
+ Qp34, NewQp34,
+ {Qp33, NewQp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(35,
+ Qp35, NewQp35,
+ {Qp33, Qp34, NewQp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(36,
+ Qp36, NewQp36,
+ {Qp33, Qp34, Qp35, NewQp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(37,
+ Qp37, NewQp37,
+ {Qp33, Qp34, Qp35, Qp36, NewQp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(38,
+ Qp38, NewQp38,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ NewQp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(39,
+ Qp39, NewQp39,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, NewQp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(40,
+ Qp40, NewQp40,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, NewQp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(41,
+ Qp41, NewQp41,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, NewQp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(42,
+ Qp42, NewQp42,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, NewQp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(43,
+ Qp43, NewQp43,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, NewQp43,
+ Qp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(44,
+ Qp44, NewQp44,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ NewQp44, Qp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(45,
+ Qp45, NewQp45,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, NewQp45, Qp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(46,
+ Qp46, NewQp46,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, NewQp46, Qp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(47,
+ Qp47, NewQp47,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, NewQp47, Qp48});
+?REMOVE_UNIQ_P_Qp48(48,
+ Qp48, NewQp48,
+ {Qp33, Qp34, Qp35, Qp36, Qp37,
+ Qp38, Qp39, Qp40, Qp41, Qp42, Qp43,
+ Qp44, Qp45, Qp46, Qp47, NewQp48});
+?REMOVE_UNIQ_P_Qp64(49,
+ Qp49, NewQp49,
+ {NewQp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(50,
+ Qp50, NewQp50,
+ {Qp49, NewQp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(51,
+ Qp51, NewQp51,
+ {Qp49, Qp50, NewQp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(52,
+ Qp52, NewQp52,
+ {Qp49, Qp50, Qp51, NewQp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(53,
+ Qp53, NewQp53,
+ {Qp49, Qp50, Qp51, Qp52, NewQp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(54,
+ Qp54, NewQp54,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ NewQp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(55,
+ Qp55, NewQp55,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, NewQp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(56,
+ Qp56, NewQp56,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, NewQp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(57,
+ Qp57, NewQp57,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, NewQp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(58,
+ Qp58, NewQp58,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, NewQp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(59,
+ Qp59, NewQp59,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, NewQp59,
+ Qp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(60,
+ Qp60, NewQp60,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ NewQp60, Qp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(61,
+ Qp61, NewQp61,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, NewQp61, Qp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(62,
+ Qp62, NewQp62,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, NewQp62, Qp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(63,
+ Qp63, NewQp63,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, NewQp63, Qp64});
+?REMOVE_UNIQ_P_Qp64(64,
+ Qp64, NewQp64,
+ {Qp49, Qp50, Qp51, Qp52, Qp53,
+ Qp54, Qp55, Qp56, Qp57, Qp58, Qp59,
+ Qp60, Qp61, Qp62, Qp63, NewQp64});
+?REMOVE_UNIQ_P_Qp80(65,
+ Qp65, NewQp65,
+ {NewQp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(66,
+ Qp66, NewQp66,
+ {Qp65, NewQp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(67,
+ Qp67, NewQp67,
+ {Qp65, Qp66, NewQp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(68,
+ Qp68, NewQp68,
+ {Qp65, Qp66, Qp67, NewQp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(69,
+ Qp69, NewQp69,
+ {Qp65, Qp66, Qp67, Qp68, NewQp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(70,
+ Qp70, NewQp70,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ NewQp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(71,
+ Qp71, NewQp71,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, NewQp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(72,
+ Qp72, NewQp72,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, NewQp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(73,
+ Qp73, NewQp73,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, NewQp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(74,
+ Qp74, NewQp74,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, NewQp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(75,
+ Qp75, NewQp75,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, NewQp75,
+ Qp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(76,
+ Qp76, NewQp76,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ NewQp76, Qp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(77,
+ Qp77, NewQp77,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, NewQp77, Qp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(78,
+ Qp78, NewQp78,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, NewQp78, Qp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(79,
+ Qp79, NewQp79,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, NewQp79, Qp80});
+?REMOVE_UNIQ_P_Qp80(80,
+ Qp80, NewQp80,
+ {Qp65, Qp66, Qp67, Qp68, Qp69,
+ Qp70, Qp71, Qp72, Qp73, Qp74, Qp75,
+ Qp76, Qp77, Qp78, Qp79, NewQp80});
+?REMOVE_UNIQ_P_Qp96(81,
+ Qp81, NewQp81,
+ {NewQp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(82,
+ Qp82, NewQp82,
+ {Qp81, NewQp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(83,
+ Qp83, NewQp83,
+ {Qp81, Qp82, NewQp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(84,
+ Qp84, NewQp84,
+ {Qp81, Qp82, Qp83, NewQp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(85,
+ Qp85, NewQp85,
+ {Qp81, Qp82, Qp83, Qp84, NewQp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(86,
+ Qp86, NewQp86,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ NewQp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(87,
+ Qp87, NewQp87,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, NewQp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(88,
+ Qp88, NewQp88,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, NewQp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(89,
+ Qp89, NewQp89,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, NewQp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(90,
+ Qp90, NewQp90,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, NewQp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(91,
+ Qp91, NewQp91,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, NewQp91,
+ Qp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(92,
+ Qp92, NewQp92,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ NewQp92, Qp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(93,
+ Qp93, NewQp93,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, NewQp93, Qp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(94,
+ Qp94, NewQp94,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, NewQp94, Qp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(95,
+ Qp95, NewQp95,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, NewQp95, Qp96});
+?REMOVE_UNIQ_P_Qp96(96,
+ Qp96, NewQp96,
+ {Qp81, Qp82, Qp83, Qp84, Qp85,
+ Qp86, Qp87, Qp88, Qp89, Qp90, Qp91,
+ Qp92, Qp93, Qp94, Qp95, NewQp96});
+?REMOVE_UNIQ_P_Qp112(97,
+ Qp97, NewQp97,
+ {NewQp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(98,
+ Qp98, NewQp98,
+ {Qp97, NewQp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(99,
+ Qp99, NewQp99,
+ {Qp97, Qp98, NewQp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(100,
+ Qp100, NewQp100,
+ {Qp97, Qp98, Qp99, NewQp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(101,
+ Qp101, NewQp101,
+ {Qp97, Qp98, Qp99, Qp100, NewQp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(102,
+ Qp102, NewQp102,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ NewQp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(103,
+ Qp103, NewQp103,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, NewQp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(104,
+ Qp104, NewQp104,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, NewQp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(105,
+ Qp105, NewQp105,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, NewQp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(106,
+ Qp106, NewQp106,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, NewQp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(107,
+ Qp107, NewQp107,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, NewQp107,
+ Qp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(108,
+ Qp108, NewQp108,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ NewQp108, Qp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(109,
+ Qp109, NewQp109,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, NewQp109, Qp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(110,
+ Qp110, NewQp110,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, NewQp110, Qp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(111,
+ Qp111, NewQp111,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, NewQp111, Qp112});
+?REMOVE_UNIQ_P_Qp112(112,
+ Qp112, NewQp112,
+ {Qp97, Qp98, Qp99, Qp100, Qp101,
+ Qp102, Qp103, Qp104, Qp105, Qp106, Qp107,
+ Qp108, Qp109, Qp110, Qp111, NewQp112});
+?REMOVE_UNIQ_P_Qp128(113,
+ Qp113, NewQp113,
+ {NewQp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(114,
+ Qp114, NewQp114,
+ {Qp113, NewQp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(115,
+ Qp115, NewQp115,
+ {Qp113, Qp114, NewQp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(116,
+ Qp116, NewQp116,
+ {Qp113, Qp114, Qp115, NewQp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(117,
+ Qp117, NewQp117,
+ {Qp113, Qp114, Qp115, Qp116, NewQp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(118,
+ Qp118, NewQp118,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ NewQp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(119,
+ Qp119, NewQp119,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, NewQp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(120,
+ Qp120, NewQp120,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, NewQp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(121,
+ Qp121, NewQp121,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, NewQp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(122,
+ Qp122, NewQp122,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, NewQp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(123,
+ Qp123, NewQp123,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, NewQp123,
+ Qp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(124,
+ Qp124, NewQp124,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ NewQp124, Qp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(125,
+ Qp125, NewQp125,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, NewQp125, Qp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(126,
+ Qp126, NewQp126,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, NewQp126, Qp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(127,
+ Qp127, NewQp127,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, NewQp127, Qp128});
+?REMOVE_UNIQ_P_Qp128(128,
+ Qp128, NewQp128,
+ {Qp113, Qp114, Qp115, Qp116, Qp117,
+ Qp118, Qp119, Qp120, Qp121, Qp122, Qp123,
+ Qp124, Qp125, Qp126, Qp127, NewQp128}).
+
+-ifdef(TEST).
+-include_lib("eunit/include/eunit.hrl").
+
+-include("pqueue_test.hrl").
+
+module_test_() ->
+ {timeout, ?TEST_TIMEOUT, [
+ {"internal tests", ?_assertOk(test())}
+ ]}.
+
+long_test_() ->
+ test_condition([
+ {"proper tests", ?_assert(pqueue_proper:qc_pq4())}
+ ], ?CLOUDI_LONG_TEST_TIMEOUT).
+
+-endif.
+
+%%-------------------------------------------------------------------------
+%% @hidden
+%% remove a unique value from a queue based on a binary predicate,
+%% traversal order is undefined to keep it efficient (i.e., shouldn't matter)
+%% (based on the implementation of queue:filter/2
+%% which is under the Apache License 2.0)
+%%-------------------------------------------------------------------------
+
+-spec queue_remove_unique(F :: fun((any()) -> boolean()),
+ Q :: {list(), list()}) ->
+ {boolean(), {list(), list()}}.
+
+queue_remove_unique(Fun, {R0, F0} = Q)
+ when is_function(Fun, 1), is_list(R0), is_list(F0) ->
+ case queue_remove_unique_f(Fun, F0) of
+ {true, []} ->
+ {true, queue_r2f(R0)};
+ {true, F1} ->
+ {true, {R0, F1}};
+ {false, F1} ->
+ %true = F1 == F0,
+ case queue_remove_unique_f(Fun, R0) of % backwards
+ {true, []} ->
+ {true, queue_f2r(F1)};
+ {true, R1} ->
+ {true, {R1, F1}};
+ {false, _} ->
+ {false, Q}
+ end
+ end;
+queue_remove_unique(Fun, Q) ->
+ erlang:error(badarg, [Fun,Q]).
+
+% Call Fun in front to back order
+queue_remove_unique_f(_, [] = F) ->
+ {false, F};
+queue_remove_unique_f(Fun, F) ->
+ queue_remove_unique_f(F, [], F, Fun).
+
+queue_remove_unique_f([], _, F, _) ->
+ {false, F};
+queue_remove_unique_f([X | F0], F1, F, Fun) ->
+ case Fun(X) of
+ true ->
+ {true, lists:reverse(F1, F0)};
+ false ->
+ queue_remove_unique_f(F0, [X | F1], F, Fun)
+ end.
+
+-compile({inline, [{queue_r2f,1},{queue_f2r,1}]}).
+
+% Move half of elements from R to F, if there are at least three
+queue_r2f([]) ->
+ {[],[]};
+queue_r2f([_]=R) ->
+ {[],R};
+queue_r2f([X,Y]) ->
+ {[X],[Y]};
+queue_r2f(List) ->
+ {FF,RR} = lists:split(length(List) div 2 + 1, List),
+ {FF,lists:reverse(RR, [])}.
+
+% Move half of elements from F to R, if there are enough
+queue_f2r([]) ->
+ {[],[]};
+queue_f2r([_]=F) ->
+ {F,[]};
+queue_f2r([X,Y]) ->
+ {[Y],[X]};
+queue_f2r(List) ->
+ {FF,RR} = lists:split(length(List) div 2 + 1, List),
+ {lists:reverse(RR, []),FF}.
+
diff --git a/aoc2023/build/packages/pqueue/src/pqueue_test.hrl b/aoc2023/build/packages/pqueue/src/pqueue_test.hrl
new file mode 100644
index 0000000..cedffe0
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/src/pqueue_test.hrl
@@ -0,0 +1,49 @@
+%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
+% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
+%%%
+%%%------------------------------------------------------------------------
+%%% pqueue eunit common functionality
+%%%
+%%% MIT License
+%%%
+%%% Copyright (c) 2020 Michael Truog <mjtruog at protonmail dot com>
+%%%
+%%% Permission is hereby granted, free of charge, to any person obtaining a
+%%% copy of this software and associated documentation files (the "Software"),
+%%% to deal in the Software without restriction, including without limitation
+%%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%%% and/or sell copies of the Software, and to permit persons to whom the
+%%% Software is furnished to do so, subject to the following conditions:
+%%%
+%%% The above copyright notice and this permission notice shall be included in
+%%% all copies or substantial portions of the Software.
+%%%
+%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+%%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+%%% DEALINGS IN THE SOFTWARE.
+%%%
+%%%------------------------------------------------------------------------
+
+-ifndef(_assertOk).
+-define(_assertOk(Expr), ?_assertEqual(ok, Expr)).
+-endif.
+
+-ifdef(CLOUDI_TEST_TIMEOUT).
+-define(TEST_TIMEOUT, ?CLOUDI_TEST_TIMEOUT). % seconds
+-else.
+-define(TEST_TIMEOUT, 10). % seconds
+-endif.
+-ifndef(CLOUDI_LONG_TEST_TIMEOUT).
+-define(CLOUDI_LONG_TEST_TIMEOUT, 60). % minutes
+-endif.
+
+test_condition(_, 0) ->
+ [];
+test_condition(L, LongTestTimeout)
+ when LongTestTimeout > 0 ->
+ {timeout, LongTestTimeout * 60, L}.
+
diff --git a/aoc2023/build/packages/pqueue/test/pqueue_proper.erl b/aoc2023/build/packages/pqueue/test/pqueue_proper.erl
new file mode 100644
index 0000000..6702960
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/test/pqueue_proper.erl
@@ -0,0 +1,156 @@
+-module(pqueue_proper).
+-ifdef(TEST).
+-include_lib("proper/include/proper.hrl").
+
+-behaviour(proper_statem).
+
+-export([qc_pq/0, qc_pq2/0, qc_pq3/0, qc_pq4/0, correct/1]).
+
+-export([command/1, initial_state/0, next_state/3, postcondition/3,
+ precondition/2]).
+
+-type value() :: integer().
+-record(state, { in_queue :: [{value(), term()}] }).
+-define(SERVER, queue_srv).
+
+priority() ->
+ integer(-20, 20).
+
+%% Selects priorities we have added
+priority(InQ) ->
+ elements([P || {P, _} <- InQ]).
+
+value() ->
+ integer().
+
+initial_state() ->
+ #state { in_queue = [] }.
+
+command(#state { in_queue = InQ }) ->
+ oneof([{call, ?SERVER, in, [value()]},
+ {call, ?SERVER, in, [value(), priority()]},
+ {call, ?SERVER, is_empty, []},
+ {call, ?SERVER, is_queue, []},
+ {call, ?SERVER, len, []},
+ {call, ?SERVER, out, []}] ++
+ [{call, ?SERVER, out, [priority(InQ)]} || InQ =/= []] ++
+ [{call, ?SERVER, pout, []},
+ {call, ?SERVER, to_list, []}]).
+
+next_state(#state { in_queue = InQ } = S, _V, {call, _, out, []}) ->
+ S#state { in_queue = listq_rem(InQ) };
+next_state(#state { in_queue = InQ } = S, _V, {call, _, out, [Prio]}) ->
+ S#state { in_queue = listq_rem(InQ, Prio) };
+next_state(#state { in_queue = InQ } = S, _V, {call, _, pout, _}) ->
+ S#state { in_queue = listq_rem(InQ) };
+next_state(S, _V, {call, _, to_list, _}) -> S;
+next_state(S, _V, {call, _, is_queue, _}) -> S;
+next_state(S, _V, {call, _, is_empty, _}) -> S;
+next_state(S, _V, {call, _, len, _}) -> S;
+next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value, Prio]}) ->
+ S#state { in_queue = listq_insert({Prio, Value}, InQ) };
+next_state(#state { in_queue = InQ } = S, _V, {call, _, in, [Value]}) ->
+ S#state { in_queue = listq_insert({0, Value}, InQ) }.
+
+precondition(_S, _Call) ->
+ true. % No limitation on the things we can call at all.
+
+postcondition(#state { in_queue = InQ }, {call, _, out, [Prio]}, R) ->
+ R == listq_prio_peek(InQ, Prio);
+postcondition(#state { in_queue = InQ }, {call, _, pout, _}, R) ->
+ R == listq_ppeek(InQ);
+postcondition(#state { in_queue = InQ }, {call, _, out, _}, R) ->
+ R == listq_peek(InQ);
+postcondition(S, {call, _, to_list, _}, R) ->
+ R == listq_to_list(S#state.in_queue);
+postcondition(S, {call, _, len, _}, L) ->
+ L == listq_length(S#state.in_queue);
+postcondition(_S, {call, _, is_queue, _}, true) -> true;
+postcondition(S, {call, _, is_empty, _}, Res) ->
+ Res == (S#state.in_queue == []);
+postcondition(_S, {call, _, in, _}, _) ->
+ true;
+postcondition(_, _, _) ->
+ false.
+
+correct(M) ->
+ ?FORALL(Cmds, commands(?MODULE),
+ ?TRAPEXIT(
+ begin
+ ?SERVER:start_link(M),
+ {History,State,Result} = run_commands(?MODULE, Cmds),
+ ?SERVER:stop(),
+ ?WHENFAIL(io:format("History: ~w\nState: ~w\nResult: ~w\n",
+ [History,State,Result]),
+ aggregate(command_names(Cmds), Result =:= ok))
+ end)).
+
+qc_opts() ->
+ [{numtests, 10000}].
+
+qc_pq() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue), qc_opts()).
+
+qc_pq2() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue2), qc_opts()).
+
+qc_pq3() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue3), qc_opts()).
+
+qc_pq4() ->
+ proper:quickcheck(pqueue_proper:correct(pqueue4), qc_opts()).
+
+%% ----------------------------------------------------------------------
+
+%% A listq is a sorted list of priorities
+listq_insert({P, V}, []) ->
+ [{P, [V]}];
+listq_insert({P, V}, [{P1, _} | _] = LQ) when P < P1 ->
+ [{P, [V]} | LQ];
+listq_insert({P, V}, [{P1, Vs} | Next]) when P == P1 ->
+ [{P, Vs ++ [V]} | Next];
+listq_insert({P, V}, [{P1, Vs} | Next]) when P > P1 ->
+ [{P1, Vs} | listq_insert({P, V}, Next)].
+
+listq_to_list(L) ->
+ lists:concat(
+ [ Vals || {_Prio, Vals} <- L]).
+
+listq_length(L) ->
+ lists:sum(
+ [ length(Vs) || {_Prio, Vs} <- L]).
+
+listq_rem([]) ->
+ [];
+listq_rem([{_P, [_V]} | Next]) ->
+ Next;
+listq_rem([{P, [_V1 | Vs]} | Next]) ->
+ [{P, Vs} | Next].
+
+listq_rem([], _P) ->
+ [];
+listq_rem([{P, [_]} | Next], P) ->
+ Next;
+listq_rem([{P, [_ | Vs]} | Next], P) ->
+ [{P, Vs} | Next];
+listq_rem([{P1, Vs} | Next], P) ->
+ [{P1, Vs} | listq_rem(Next, P)].
+
+listq_peek([]) ->
+ empty;
+listq_peek([{_P, [V | _]} | _]) ->
+ {value, V}.
+
+listq_prio_peek([{P, [V | _]} | _], P) ->
+ {value, V};
+listq_prio_peek([{_P1, _} | Next], P) ->
+ listq_prio_peek(Next, P);
+listq_prio_peek([], _P) ->
+ empty.
+
+listq_ppeek([]) ->
+ empty;
+listq_ppeek([{P, [V | _]} | _]) ->
+ {value, V, P}.
+
+-endif.
diff --git a/aoc2023/build/packages/pqueue/test/queue_srv.erl b/aoc2023/build/packages/pqueue/test/queue_srv.erl
new file mode 100644
index 0000000..7fcb0a1
--- /dev/null
+++ b/aoc2023/build/packages/pqueue/test/queue_srv.erl
@@ -0,0 +1,183 @@
+%%%-------------------------------------------------------------------
+%%% @author Jesper Louis andersen <>
+%%% @copyright (C) 2011, Jesper Louis andersen
+%%% @doc
+%%%
+%%% @end
+%%% Created : 11 Nov 2011 by Jesper Louis andersen <>
+%%%-------------------------------------------------------------------
+-module(queue_srv).
+
+-behaviour(gen_server).
+
+%% API
+-export([start_link/1, stop/0, len/0, in/1, in/2, is_empty/0,
+ out/0, out/1, pout/0,
+ is_queue/0, to_list/0]).
+
+%% gen_server callbacks
+-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
+ terminate/2, code_change/3]).
+
+-define(SERVER, ?MODULE).
+
+-record(state, { mod, q }).
+
+%%%===================================================================
+%%% API
+%%%===================================================================
+
+%%--------------------------------------------------------------------
+%% @doc
+%% Starts the server
+%%
+%% @spec start_link(Mod) -> {ok, Pid} | ignore | {error, Error}
+%% @end
+%%--------------------------------------------------------------------
+start_link(Mod) ->
+ gen_server:start_link({local, ?SERVER}, ?MODULE, [Mod], []).
+
+stop() ->
+ gen_server:stop(?SERVER).
+
+call(M) ->
+ gen_server:call(?SERVER, M, infinity).
+
+in(I) ->
+ call({in, I}).
+
+in(I, P) ->
+ call({in, I, P}).
+
+len() ->
+ call(len).
+
+is_empty() ->
+ call(is_empty).
+
+is_queue() ->
+ call(is_queue).
+
+to_list() ->
+ call(to_list).
+
+out() ->
+ call(out).
+
+out(P) ->
+ call({out, P}).
+
+pout() ->
+ call(pout).
+
+%%%===================================================================
+%%% gen_server callbacks
+%%%===================================================================
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Initializes the server
+%%
+%% @spec init(Args) -> {ok, State} |
+%% {ok, State, Timeout} |
+%% ignore |
+%% {stop, Reason}
+%% @end
+%%--------------------------------------------------------------------
+init([Mod]) ->
+ {ok, #state{ mod = Mod,
+ q = Mod:new() }}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Handling call messages
+%%
+%% @spec handle_call(Request, From, State) ->
+%% {reply, Reply, State} |
+%% {reply, Reply, State, Timeout} |
+%% {noreply, State} |
+%% {noreply, State, Timeout} |
+%% {stop, Reason, Reply, State} |
+%% {stop, Reason, State}
+%% @end
+%%--------------------------------------------------------------------
+handle_call({in, Item}, _F, #state { q = Q, mod = M } = S) ->
+ NQ = M:in(Item, Q),
+ {reply, ok, S#state { q = NQ }};
+handle_call({in, Item, Prio}, _F, #state { q = Q, mod = M } = S) ->
+ NQ = M:in(Item, Prio, Q),
+ {reply, ok, S#state { q = NQ }};
+handle_call({out, P}, _F, #state { q = Q, mod = M } = S) ->
+ {R, NQ} = M:out(P, Q),
+ {reply, R, S#state { q = NQ }};
+handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == out;
+ Ty == pout ->
+ {R, NQ} = M:Ty(Q),
+ {reply, R, S#state { q = NQ }};
+handle_call(Ty, _F, #state { q = Q, mod = M } = S) when Ty == is_queue;
+ Ty == is_empty;
+ Ty == len;
+ Ty == to_list ->
+ R = M:Ty(Q),
+ {reply, R, S};
+handle_call(Req, From, State) ->
+ error_logger:info_report([{handle_call, Req, From, State}]),
+ Reply = ok,
+ {reply, Reply, State}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Handling cast messages
+%%
+%% @spec handle_cast(Msg, State) -> {noreply, State} |
+%% {noreply, State, Timeout} |
+%% {stop, Reason, State}
+%% @end
+%%--------------------------------------------------------------------
+handle_cast(_Msg, State) ->
+ {noreply, State}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Handling all non call/cast messages
+%%
+%% @spec handle_info(Info, State) -> {noreply, State} |
+%% {noreply, State, Timeout} |
+%% {stop, Reason, State}
+%% @end
+%%--------------------------------------------------------------------
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% This function is called by a gen_server when it is about to
+%% terminate. It should be the opposite of Module:init/1 and do any
+%% necessary cleaning up. When it returns, the gen_server terminates
+%% with Reason. The return value is ignored.
+%%
+%% @spec terminate(Reason, State) -> void()
+%% @end
+%%--------------------------------------------------------------------
+terminate(_Reason, _State) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% @private
+%% @doc
+%% Convert process state when code is changed
+%%
+%% @spec code_change(OldVsn, State, Extra) -> {ok, NewState}
+%% @end
+%%--------------------------------------------------------------------
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
diff --git a/aoc2023/build/packages/simplifile/README.md b/aoc2023/build/packages/simplifile/README.md
new file mode 100644
index 0000000..5e49113
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/README.md
@@ -0,0 +1,29 @@
+# simplifile
+
+[![Package Version](https://img.shields.io/hexpm/v/simplifile)](https://hex.pm/packages/simplifile)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/simplifile/)
+
+Simplifile provides basic file operations (read, write, append, and delete) that work
+for all targets (Erlang, Node, and Deno). It also provides functions for working with directories.
+
+Note: When upgrading versions, be sure to check the changelog.
+
+## Example
+```gleam
+let filepath = "./test/hello.txt"
+let assert Ok(_) = "Hello, World" |> write(to: filepath)
+let assert Ok(_) = "Goodbye, Mars" |> append(to: filepath)
+let assert Ok("Hello, WorldGoodbye, Mars") = read(from: filepath)
+let assert Ok(_) = delete(filepath)
+let assert Error(_) = read(from: filepath)
+```
+
+## Installation
+
+If available on Hex this package can be added to your Gleam project:
+
+```sh
+gleam add simplifile
+```
+
+and its documentation can be found at <https://hexdocs.pm/simplifile>.
diff --git a/aoc2023/build/packages/simplifile/gleam.toml b/aoc2023/build/packages/simplifile/gleam.toml
new file mode 100644
index 0000000..8e7523d
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/gleam.toml
@@ -0,0 +1,17 @@
+name = "simplifile"
+version = "1.0.0"
+description = "Basic file operations that work on all targets"
+
+licences = ["Apache-2.0"]
+repository = { type = "github", user = "bcpeinhardt", repo = "simplifile" }
+gleam = ">= 0.32.0"
+# links = [{ title = "Website", href = "https://gleam.run" }]
+
+[javascript.deno]
+allow_all = true
+
+[dependencies]
+gleam_stdlib = "~> 0.29"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/simplifile/src/simplifile.app.src b/aoc2023/build/packages/simplifile/src/simplifile.app.src
new file mode 100644
index 0000000..5b9d6ef
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/src/simplifile.app.src
@@ -0,0 +1,8 @@
+{application, simplifile, [
+ {vsn, "1.0.0"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "Basic file operations that work on all targets"},
+ {modules, [simplifile]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/simplifile/src/simplifile.erl b/aoc2023/build/packages/simplifile/src/simplifile.erl
new file mode 100644
index 0000000..0d3818c
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/src/simplifile.erl
@@ -0,0 +1,287 @@
+-module(simplifile).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([read/1, write/2, delete/1, delete_all/1, append/2, read_bits/1, write_bits/2, append_bits/2, is_directory/1, create_directory/1, read_directory/1, is_file/1, create_file/1, get_files/1, create_directory_all/1, copy_directory/2, rename_directory/2, copy_file/2, rename_file/2]).
+-export_type([file_error/0]).
+
+-type file_error() :: eacces |
+ eagain |
+ ebadf |
+ ebadmsg |
+ ebusy |
+ edeadlk |
+ edeadlock |
+ edquot |
+ eexist |
+ efault |
+ efbig |
+ eftype |
+ eintr |
+ einval |
+ eio |
+ eisdir |
+ eloop |
+ emfile |
+ emlink |
+ emultihop |
+ enametoolong |
+ enfile |
+ enobufs |
+ enodev |
+ enolck |
+ enolink |
+ enoent |
+ enomem |
+ enospc |
+ enosr |
+ enostr |
+ enosys |
+ enotblk |
+ enotdir |
+ enotsup |
+ enxio |
+ eopnotsupp |
+ eoverflow |
+ eperm |
+ epipe |
+ erange |
+ erofs |
+ espipe |
+ esrch |
+ estale |
+ etxtbsy |
+ exdev |
+ not_utf8 |
+ unknown.
+
+-spec do_append(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+do_append(Content, Filepath) ->
+ _pipe = Content,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ simplifile_erl:append_file(_pipe@1, Filepath).
+
+-spec do_write(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+do_write(Content, Filepath) ->
+ _pipe = Content,
+ _pipe@1 = gleam_stdlib:identity(_pipe),
+ simplifile_erl:write_file(_pipe@1, Filepath).
+
+-spec do_read(binary()) -> {ok, binary()} | {error, file_error()}.
+do_read(Filepath) ->
+ case simplifile_erl:read_file(Filepath) of
+ {ok, Bits} ->
+ case gleam@bit_array:to_string(Bits) of
+ {ok, Str} ->
+ {ok, Str};
+
+ _ ->
+ {error, not_utf8}
+ end;
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec cast_error({ok, FIL} | {error, file_error()}) -> {ok, FIL} |
+ {error, file_error()}.
+cast_error(Input) ->
+ Input.
+
+-spec read(binary()) -> {ok, binary()} | {error, file_error()}.
+read(Filepath) ->
+ _pipe = do_read(Filepath),
+ cast_error(_pipe).
+
+-spec write(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+write(Filepath, Contents) ->
+ _pipe = do_write(Contents, Filepath),
+ cast_error(_pipe).
+
+-spec delete(binary()) -> {ok, nil} | {error, file_error()}.
+delete(Path) ->
+ _pipe = simplifile_erl:recursive_delete(Path),
+ cast_error(_pipe).
+
+-spec delete_all(list(binary())) -> {ok, nil} | {error, file_error()}.
+delete_all(Paths) ->
+ case Paths of
+ [] ->
+ {ok, nil};
+
+ [Path | Rest] ->
+ case delete(Path) of
+ {ok, nil} ->
+ delete_all(Rest);
+
+ {error, enoent} ->
+ delete_all(Rest);
+
+ E ->
+ E
+ end
+ end.
+
+-spec append(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+append(Filepath, Contents) ->
+ _pipe = do_append(Contents, Filepath),
+ cast_error(_pipe).
+
+-spec read_bits(binary()) -> {ok, bitstring()} | {error, file_error()}.
+read_bits(Filepath) ->
+ _pipe = simplifile_erl:read_file(Filepath),
+ cast_error(_pipe).
+
+-spec write_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}.
+write_bits(Filepath, Bits) ->
+ _pipe = simplifile_erl:write_file(Bits, Filepath),
+ cast_error(_pipe).
+
+-spec append_bits(binary(), bitstring()) -> {ok, nil} | {error, file_error()}.
+append_bits(Filepath, Bits) ->
+ _pipe = simplifile_erl:append_file(Bits, Filepath),
+ cast_error(_pipe).
+
+-spec is_directory(binary()) -> boolean().
+is_directory(Filepath) ->
+ filelib:is_dir(Filepath).
+
+-spec create_directory(binary()) -> {ok, nil} | {error, file_error()}.
+create_directory(Filepath) ->
+ _pipe = simplifile_erl:make_directory(Filepath),
+ cast_error(_pipe).
+
+-spec read_directory(binary()) -> {ok, list(binary())} | {error, file_error()}.
+read_directory(Path) ->
+ _pipe = simplifile_erl:list_directory(Path),
+ cast_error(_pipe).
+
+-spec is_file(binary()) -> boolean().
+is_file(Filepath) ->
+ simplifile_erl:is_file(Filepath).
+
+-spec create_file(binary()) -> {ok, nil} | {error, file_error()}.
+create_file(Filepath) ->
+ case begin
+ _pipe = Filepath,
+ is_file(_pipe)
+ end
+ orelse begin
+ _pipe@1 = Filepath,
+ is_directory(_pipe@1)
+ end of
+ true ->
+ {error, eexist};
+
+ false ->
+ write_bits(Filepath, <<>>)
+ end.
+
+-spec do_copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+do_copy_directory(Src, Dest) ->
+ gleam@result:'try'(
+ read_directory(Src),
+ fun(Segments) ->
+ _pipe = Segments,
+ gleam@list:each(
+ _pipe,
+ fun(Segment) ->
+ Src_path = <<<<Src/binary, "/"/utf8>>/binary,
+ Segment/binary>>,
+ Dest_path = <<<<Dest/binary, "/"/utf8>>/binary,
+ Segment/binary>>,
+ case {is_file(Src_path), is_directory(Src_path)} of
+ {true, false} ->
+ gleam@result:'try'(
+ read_bits(Src_path),
+ fun(Content) -> _pipe@1 = Content,
+ write_bits(Dest_path, _pipe@1) end
+ );
+
+ {false, true} ->
+ gleam@result:'try'(
+ create_directory(Dest_path),
+ fun(_) ->
+ do_copy_directory(Src_path, Dest_path)
+ end
+ );
+
+ {_, _} ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"unreachable"/utf8>>,
+ module => <<"simplifile"/utf8>>,
+ function => <<"do_copy_directory"/utf8>>,
+ line => 341})
+ end
+ end
+ ),
+ {ok, nil}
+ end
+ ).
+
+-spec get_files(binary()) -> {ok, list(binary())} | {error, file_error()}.
+get_files(Directory) ->
+ gleam@result:'try'(
+ read_directory(Directory),
+ fun(Contents) ->
+ Paths = gleam@list:map(
+ Contents,
+ fun(Segment) ->
+ <<<<Directory/binary, "/"/utf8>>/binary, Segment/binary>>
+ end
+ ),
+ Files = gleam@list:filter(Paths, fun is_file/1),
+ case gleam@list:filter(Paths, fun is_directory/1) of
+ [] ->
+ {ok, Files};
+
+ Directories ->
+ gleam@result:'try'(
+ gleam@list:try_map(Directories, fun get_files/1),
+ fun(Nested_files) ->
+ {ok,
+ gleam@list:append(
+ Files,
+ gleam@list:flatten(Nested_files)
+ )}
+ end
+ )
+ end
+ end
+ ).
+
+-spec create_directory_all(binary()) -> {ok, nil} | {error, file_error()}.
+create_directory_all(Dirpath) ->
+ Path = case begin
+ _pipe = Dirpath,
+ gleam@string:ends_with(_pipe, <<"/"/utf8>>)
+ end of
+ true ->
+ Dirpath;
+
+ false ->
+ <<Dirpath/binary, "/"/utf8>>
+ end,
+ _pipe@1 = simplifile_erl:create_dir_all(Path),
+ cast_error(_pipe@1).
+
+-spec copy_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+copy_directory(Src, Dest) ->
+ gleam@result:'try'(
+ create_directory_all(Dest),
+ fun(_) -> do_copy_directory(Src, Dest) end
+ ).
+
+-spec rename_directory(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+rename_directory(Src, Dest) ->
+ gleam@result:'try'(copy_directory(Src, Dest), fun(_) -> delete(Src) end).
+
+-spec copy_file(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+copy_file(Src, Dest) ->
+ _pipe = file:copy(Src, Dest),
+ _pipe@1 = gleam@result:replace(_pipe, nil),
+ cast_error(_pipe@1).
+
+-spec rename_file(binary(), binary()) -> {ok, nil} | {error, file_error()}.
+rename_file(Src, Dest) ->
+ _pipe = simplifile_erl:rename_file(Src, Dest),
+ cast_error(_pipe).
diff --git a/aoc2023/build/packages/simplifile/src/simplifile.gleam b/aoc2023/build/packages/simplifile/src/simplifile.gleam
new file mode 100644
index 0000000..eff0306
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/src/simplifile.gleam
@@ -0,0 +1,580 @@
+import gleam/bit_array
+import gleam/string
+import gleam/result
+import gleam/list
+
+/// This type represents all of the reasons for why a file system operation could fail.
+///
+/// Most of these reasons are POSIX errors, which come from the operating system
+/// and start with E. Others have been added to represent other issues that may
+/// arise specific to this library.
+///
+pub type FileError {
+ /// Permission denied.
+ Eacces
+ /// Resource temporarily unavailable.
+ Eagain
+ /// Bad file number
+ Ebadf
+ /// Bad message.
+ Ebadmsg
+ /// File busy.
+ Ebusy
+ /// Resource deadlock avoided.
+ Edeadlk
+ /// On most architectures, same as `Edeadlk`. On some architectures, it
+ /// means "File locking deadlock error."
+ Edeadlock
+ /// Disk quota exceeded.
+ Edquot
+ /// File already exists.
+ Eexist
+ /// Bad address in system call argument.
+ Efault
+ /// File too large.
+ Efbig
+ /// Inappropriate file type or format. Usually caused by trying to set the
+ /// "sticky bit" on a regular file (not a directory).
+ Eftype
+ /// Interrupted system call.
+ Eintr
+ /// Invalid argument.
+ Einval
+ /// I/O error.
+ Eio
+ /// Illegal operation on a directory.
+ Eisdir
+ /// Too many levels of symbolic links.
+ Eloop
+ /// Too many open files.
+ Emfile
+ /// Too many links.
+ Emlink
+ /// Multihop attempted.
+ Emultihop
+ /// Filename too long
+ Enametoolong
+ /// File table overflow
+ Enfile
+ /// No buffer space available.
+ Enobufs
+ /// No such device.
+ Enodev
+ /// No locks available.
+ Enolck
+ /// Link has been severed.
+ Enolink
+ /// No such file or directory.
+ Enoent
+ /// Not enough memory.
+ Enomem
+ /// No space left on device.
+ Enospc
+ /// No STREAM resources.
+ Enosr
+ /// Not a STREAM.
+ Enostr
+ /// Function not implemented.
+ Enosys
+ /// Block device required.
+ Enotblk
+ /// Not a directory.
+ Enotdir
+ /// Operation not supported.
+ Enotsup
+ /// No such device or address.
+ Enxio
+ /// Operation not supported on socket.
+ Eopnotsupp
+ /// Value too large to be stored in data type.
+ Eoverflow
+ /// Not owner.
+ Eperm
+ /// Broken pipe.
+ Epipe
+ /// Result too large.
+ Erange
+ /// Read-only file system.
+ Erofs
+ /// Invalid seek.
+ Espipe
+ /// No such process.
+ Esrch
+ /// Stale remote file handle.
+ Estale
+ /// Text file busy.
+ Etxtbsy
+ /// Cross-domain link.
+ Exdev
+ /// File was requested to be read as UTF-8, but is not UTF-8 encoded.
+ NotUtf8
+ /// Any error not accounted for by this type
+ Unknown
+}
+
+/// Read a files contents as a string
+/// ## Example
+/// ```gleam
+/// let assert Ok(records) = read(from: "./users.csv")
+/// ```
+///
+pub fn read(from filepath: String) -> Result(String, FileError) {
+ do_read(filepath)
+ |> cast_error
+}
+
+/// Write a string to a file at the given path
+/// ## Example
+/// ```gleam
+/// let assert Ok(Nil) = write("Hello, World!", to: "./hello_world.txt")
+/// ```
+///
+pub fn write(
+ to filepath: String,
+ contents contents: String,
+) -> Result(Nil, FileError) {
+ do_write(contents, to: filepath)
+ |> cast_error
+}
+
+/// Delete a file or directory at a given path. Performs a recursive
+/// delete on a directory.
+/// Throws an error if the path does not exist.
+/// ## Example
+/// ```gleam
+/// let assert Ok(Nil) = delete(file_at: "./delete_me.txt")
+/// ```
+///
+pub fn delete(file_or_dir_at path: String) -> Result(Nil, FileError) {
+ do_delete(path)
+ |> cast_error
+}
+
+/// Delete all files/directories specified in a list of paths.
+/// Recursively deletes provided directories.
+/// Does not return an error if one or more of the provided paths
+/// do not exist.
+///
+pub fn delete_all(paths paths: List(String)) -> Result(Nil, FileError) {
+ case paths {
+ [] -> Ok(Nil)
+ [path, ..rest] -> {
+ case delete(path) {
+ Ok(Nil) | Error(Enoent) -> delete_all(rest)
+ e -> e
+ }
+ }
+ }
+}
+
+/// Append a string to the contents of a file at the given path
+/// ## Example
+/// ```gleam
+/// let assert Ok(Nil) = append("more text", to: "./needs_more_text.txt")
+/// ```
+///
+pub fn append(
+ to filepath: String,
+ contents contents: String,
+) -> Result(Nil, FileError) {
+ do_append(contents, to: filepath)
+ |> cast_error
+}
+
+/// Read a files contents as a bitstring
+/// ## Example
+/// ```gleam
+/// let assert Ok(records) = read_bits(from: "./users.csv")
+/// ```
+///
+pub fn read_bits(from filepath: String) -> Result(BitArray, FileError) {
+ do_read_bits(filepath)
+ |> cast_error
+}
+
+/// Write a bitstring to a file at the given path
+/// ## Example
+/// ```gleam
+/// let assert Ok(Nil) = write_bits(<<"Hello, World!":utf8>>, to: "./hello_world.txt")
+/// ```
+///
+pub fn write_bits(
+ to filepath: String,
+ bits bits: BitArray,
+) -> Result(Nil, FileError) {
+ do_write_bits(bits, filepath)
+ |> cast_error
+}
+
+/// Append a bitstring to the contents of a file at the given path
+/// ## Example
+/// ```gleam
+/// let assert Ok(Nil) = append_bits(<<"more text":utf8>>, to: "./needs_more_text.txt")
+/// ```
+///
+pub fn append_bits(
+ to filepath: String,
+ bits bits: BitArray,
+) -> Result(Nil, FileError) {
+ do_append_bits(bits, filepath)
+ |> cast_error
+}
+
+/// Checks if the provided filepath is a directory
+/// ## Example
+/// ```gleam
+/// let assert True = is_directory("./test")
+/// ```
+pub fn is_directory(filepath: String) -> Bool {
+ do_is_directory(filepath)
+}
+
+/// Create a directory at the provided filepath. Returns an error if
+/// the directory already exists.
+///
+/// ## Example
+/// ```gleam
+/// create_directory("./test")
+/// ```
+pub fn create_directory(filepath: String) -> Result(Nil, FileError) {
+ do_make_directory(filepath)
+ |> cast_error
+}
+
+/// Lists the contents of a directory.
+/// The list contains directory and file names, and is not recursive.
+///
+/// ## Example
+/// ```gleam
+/// let assert Ok(files_and_folders) = read_directory(at: "./Folder1")
+/// ```
+///
+pub fn read_directory(at path: String) -> Result(List(String), FileError) {
+ do_read_directory(path)
+ |> cast_error
+}
+
+/// Returns `True` if there is a file at the given path, false otherwise.
+///
+pub fn is_file(filepath: String) -> Bool {
+ do_is_file(filepath)
+}
+
+/// Creates an empty file at the given filepath. Returns an `Error(Eexist)`
+/// if the file already exists.
+///
+pub fn create_file(at filepath: String) -> Result(Nil, FileError) {
+ case
+ filepath
+ |> is_file || filepath
+ |> is_directory
+ {
+ True -> Error(Eexist)
+ False -> write_bits(<<>>, to: filepath)
+ }
+}
+
+/// Recursively creates necessary directories for a given directory
+/// path. Note that if you pass a path that "looks like" a file, i.e.
+/// `./a/b.txt`, a folder named `b.txt` will be created, so be sure
+/// to pass only the path to the required directory.
+pub fn create_directory_all(dirpath: String) -> Result(Nil, FileError) {
+ let path = case
+ dirpath
+ |> string.ends_with("/")
+ {
+ True -> dirpath
+ False -> dirpath <> "/"
+ }
+ do_create_dir_all(path)
+ |> cast_error
+}
+
+/// Copy a file at a given path to another path.
+/// Note: destination should include the filename, not just the directory
+pub fn copy_file(at src: String, to dest: String) -> Result(Nil, FileError) {
+ do_copy_file(src, dest)
+ |> result.replace(Nil)
+ |> cast_error
+}
+
+/// Rename a file at a given path to another path.
+/// Note: destination should include the filename, not just the directory
+pub fn rename_file(at src: String, to dest: String) -> Result(Nil, FileError) {
+ do_rename_file(src, dest)
+ |> cast_error
+}
+
+/// Copy a directory recursively
+pub fn copy_directory(at src: String, to dest: String) -> Result(Nil, FileError) {
+ // Erlang does not provide a built in `copy_dir` function,
+ // and Deno doesn't support Node's `fs.cpSync`, so we'll just roll
+ // our own for now.
+ use _ <- result.try(create_directory_all(dest))
+ do_copy_directory(src, dest)
+}
+
+fn do_copy_directory(src: String, dest: String) -> Result(Nil, FileError) {
+ // Iterate over the segments of the file
+ use segments <- result.try(read_directory(src))
+ segments
+ |> list.each(fn(segment) {
+ let src_path = src <> "/" <> segment
+ let dest_path = dest <> "/" <> segment
+
+ case is_file(src_path), is_directory(src_path) {
+ True, False -> {
+ // For a file, create the file in the new directory
+ use content <- result.try(read_bits(src_path))
+ content
+ |> write_bits(to: dest_path)
+ }
+ False, True -> {
+ // Create the target directory and recurs
+ use _ <- result.try(create_directory(dest_path))
+ do_copy_directory(src_path, dest_path)
+ }
+ _, _ -> {
+ // This should be unreachable. The src_path can't be both a file
+ // and a directory, and it's definitely one of the two because it's
+ // coming from list_contents
+ panic as "unreachable"
+ }
+ }
+ })
+ Ok(Nil)
+}
+
+/// Copy a directory recursively and then delete the old one.
+pub fn rename_directory(
+ at src: String,
+ to dest: String,
+) -> Result(Nil, FileError) {
+ use _ <- result.try(copy_directory(src, dest))
+ delete(src)
+}
+
+/// Returns a list of filepaths for every file in the directory, including nested
+/// files.
+///
+pub fn get_files(in directory: String) -> Result(List(String), FileError) {
+ use contents <- result.try(read_directory(directory))
+ let paths = list.map(contents, fn(segment) { directory <> "/" <> segment })
+ let files = list.filter(paths, is_file)
+ case list.filter(paths, is_directory) {
+ [] -> Ok(files)
+ directories -> {
+ use nested_files <- result.try(list.try_map(directories, get_files))
+ Ok(list.append(files, list.flatten(nested_files)))
+ }
+ }
+}
+
+@target(javascript)
+fn do_read(from filepath: String) -> Result(String, String) {
+ case do_read_bits(filepath) {
+ Ok(bits) -> {
+ case bit_array.to_string(bits) {
+ Ok(str) -> Ok(str)
+ _ -> Error("NOTUTF8")
+ }
+ }
+ Error(e) -> Error(e)
+ }
+}
+
+@target(javascript)
+fn do_write(content: String, to filepath: String) -> Result(Nil, String) {
+ content
+ |> bit_array.from_string
+ |> do_write_bits(to: filepath)
+}
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "deleteFileOrDirRecursive")
+fn do_delete(file_or_dir_at: String) -> Result(Nil, String)
+
+@target(javascript)
+fn do_append(content: String, to filepath: String) -> Result(Nil, String) {
+ content
+ |> bit_array.from_string
+ |> do_append_bits(to: filepath)
+}
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "readBits")
+fn do_read_bits(from: String) -> Result(BitArray, String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "writeBits")
+fn do_write_bits(content: BitArray, to filepath: String) -> Result(Nil, String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "appendBits")
+fn do_append_bits(content: BitArray, to filepath: String) -> Result(Nil, String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "isDirectory")
+fn do_is_directory(filepath: String) -> Bool
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "makeDirectory")
+fn do_make_directory(filepath: String) -> Result(Nil, String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "createDirAll")
+fn do_create_dir_all(dirpath: String) -> Result(Nil, String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "listContents")
+fn do_read_directory(directory_path: String) -> Result(List(String), String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "copyFile")
+fn do_copy_file(at: String, to: String) -> Result(Nil, String)
+
+@target(javascript)
+@external(javascript, "./simplifile_js.mjs", "renameFile")
+fn do_rename_file(at: String, to: String) -> Result(Nil, String)
+
+@target(javascript)
+fn cast_error(input: Result(a, String)) -> Result(a, FileError) {
+ result.map_error(
+ input,
+ fn(e) {
+ case e {
+ "EACCES" -> Eacces
+ "EAGAIN" -> Eagain
+ "EBADF" -> Ebadf
+ "EBADMSG" -> Ebadmsg
+ "EBUSY" -> Ebusy
+ "EDEADLK" -> Edeadlk
+ "EDEADLOCK" -> Edeadlock
+ "EDQUOT" -> Edquot
+ "EEXIST" -> Eexist
+ "EFAULT" -> Efault
+ "EFBIG" -> Efbig
+ "EFTYPE" -> Eftype
+ "EINTR" -> Eintr
+ "EINVAL" -> Einval
+ "EIO" -> Eio
+ "EISDIR" -> Eisdir
+ "ELOOP" -> Eloop
+ "EMFILE" -> Emfile
+ "EMLINK" -> Emlink
+ "EMULTIHOP" -> Emultihop
+ "ENAMETOOLONG" -> Enametoolong
+ "ENFILE" -> Enfile
+ "ENOBUFS" -> Enobufs
+ "ENODEV" -> Enodev
+ "ENOLCK" -> Enolck
+ "ENOLINK" -> Enolink
+ "ENOENT" -> Enoent
+ "ENOMEM" -> Enomem
+ "ENOSPC" -> Enospc
+ "ENOSR" -> Enosr
+ "ENOSTR" -> Enostr
+ "ENOSYS" -> Enosys
+ "ENOBLK" -> Enotblk
+ "ENODIR" -> Enotdir
+ "ENOTSUP" -> Enotsup
+ "ENXIO" -> Enxio
+ "EOPNOTSUPP" -> Eopnotsupp
+ "EOVERFLOW" -> Eoverflow
+ "EPERM" -> Eperm
+ "EPIPE" -> Epipe
+ "ERANGE" -> Erange
+ "EROFS" -> Erofs
+ "ESPIPE" -> Espipe
+ "ESRCH" -> Esrch
+ "ESTALE" -> Estale
+ "ETXTBSY" -> Etxtbsy
+ "EXDEV" -> Exdev
+ "NOTUTF8" -> NotUtf8
+ _ -> Unknown
+ }
+ },
+ )
+}
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "append_file")
+fn do_append_bits(
+ content: BitArray,
+ to filepath: String,
+) -> Result(Nil, FileError)
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "write_file")
+fn do_write_bits(
+ content: BitArray,
+ to filepath: String,
+) -> Result(Nil, FileError)
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "read_file")
+fn do_read_bits(from: String) -> Result(BitArray, FileError)
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "recursive_delete")
+fn do_delete(file_or_dir_at: String) -> Result(Nil, FileError)
+
+@target(erlang)
+fn do_append(content: String, to filepath: String) -> Result(Nil, FileError) {
+ content
+ |> bit_array.from_string
+ |> do_append_bits(filepath)
+}
+
+@target(erlang)
+fn do_write(content: String, to filepath: String) -> Result(Nil, FileError) {
+ content
+ |> bit_array.from_string
+ |> do_write_bits(filepath)
+}
+
+@target(erlang)
+fn do_read(from filepath: String) -> Result(String, FileError) {
+ case do_read_bits(filepath) {
+ Ok(bits) -> {
+ case bit_array.to_string(bits) {
+ Ok(str) -> Ok(str)
+ _ -> Error(NotUtf8)
+ }
+ }
+ Error(e) -> Error(e)
+ }
+}
+
+@target(erlang)
+fn cast_error(input: Result(a, FileError)) -> Result(a, FileError) {
+ input
+}
+
+@target(erlang)
+@external(erlang, "filelib", "is_dir")
+fn do_is_directory(path: String) -> Bool
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "make_directory")
+fn do_make_directory(directory: String) -> Result(Nil, FileError)
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "list_directory")
+fn do_read_directory(directory: String) -> Result(List(String), FileError)
+
+@external(erlang, "simplifile_erl", "is_file")
+@external(javascript, "./simplifile_js.mjs", "isFile")
+fn do_is_file(filepath: String) -> Bool
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "create_dir_all")
+fn do_create_dir_all(dirpath: String) -> Result(Nil, FileError)
+
+@target(erlang)
+@external(erlang, "file", "copy")
+fn do_copy_file(src: String, dest: String) -> Result(Int, FileError)
+
+@target(erlang)
+@external(erlang, "simplifile_erl", "rename_file")
+fn do_rename_file(src: String, dest: String) -> Result(Nil, FileError)
diff --git a/aoc2023/build/packages/simplifile/src/simplifile_erl.erl b/aoc2023/build/packages/simplifile/src/simplifile_erl.erl
new file mode 100644
index 0000000..dac135a
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/src/simplifile_erl.erl
@@ -0,0 +1,70 @@
+-module(simplifile_erl).
+-export([
+ read_file/1,
+ append_file/2, write_file/2, delete_file/1, delete_directory/1, recursive_delete/1,
+ list_directory/1, make_directory/1, is_file/1, create_dir_all/1, rename_file/2
+]).
+
+-define(is_posix_error(Error),
+ Error =:= eacces orelse Error =:= eagain orelse Error =:= ebadf orelse
+ Error =:= ebadmsg orelse Error =:= ebusy orelse Error =:= edeadlk orelse
+ Error =:= edeadlock orelse Error =:= edquot orelse Error =:= eexist orelse
+ Error =:= efault orelse Error =:= efbig orelse Error =:= eftype orelse
+ Error =:= eintr orelse Error =:= einval orelse Error =:= eio orelse
+ Error =:= eisdir orelse Error =:= eloop orelse Error =:= emfile orelse
+ Error =:= emlink orelse Error =:= emultihop orelse Error =:= enametoolong orelse
+ Error =:= enfile orelse Error =:= enobufs orelse Error =:= enodev orelse
+ Error =:= enolck orelse Error =:= enolink orelse Error =:= enoent orelse
+ Error =:= enomem orelse Error =:= enospc orelse Error =:= enosr orelse
+ Error =:= enostr orelse Error =:= enosys orelse Error =:= enotblk orelse
+ Error =:= enotdir orelse Error =:= enotsup orelse Error =:= enxio orelse
+ Error =:= eopnotsupp orelse Error =:= eoverflow orelse Error =:= eperm orelse
+ Error =:= epipe orelse Error =:= erange orelse Error =:= erofs orelse
+ Error =:= espipe orelse Error =:= esrch orelse Error =:= estale orelse
+ Error =:= etxtbsy orelse Error =:= exdev
+).
+
+posix_result(Result) ->
+ case Result of
+ ok -> {ok, nil};
+ {ok, Value} -> {ok, Value};
+ {error, Reason} when ?is_posix_error(Reason) -> {error, Reason}
+ end.
+
+read_file(Filename) ->
+ posix_result(file:read_file(Filename)).
+
+write_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents)).
+
+append_file(Contents, Filename) ->
+ posix_result(file:write_file(Filename, Contents, [append])).
+
+delete_file(Filename) ->
+ posix_result(file:delete(Filename)).
+
+make_directory(Dir) ->
+ posix_result(file:make_dir(Dir)).
+
+list_directory(Dir) ->
+ case file:list_dir(Dir) of
+ {ok, Filenames} ->
+ {ok, [list_to_binary(Filename) || Filename <- Filenames]};
+ {error, Reason} when ?is_posix_error(Reason) ->
+ {error, Reason}
+ end.
+
+delete_directory(Dir) ->
+ posix_result(file:del_dir(Dir)).
+
+recursive_delete(Dir) ->
+ posix_result(file:del_dir_r(Dir)).
+
+is_file(Filename) ->
+ not (file:read_file_info(Filename) == {error, enoent}) and not filelib: is_dir(Filename).
+
+create_dir_all(Filename) ->
+ posix_result(filelib:ensure_dir(Filename)).
+
+rename_file(Source, Destination) ->
+ posix_result(file:rename(Source, Destination)).
diff --git a/aoc2023/build/packages/simplifile/src/simplifile_js.mjs b/aoc2023/build/packages/simplifile/src/simplifile_js.mjs
new file mode 100644
index 0000000..faf4109
--- /dev/null
+++ b/aoc2023/build/packages/simplifile/src/simplifile_js.mjs
@@ -0,0 +1,102 @@
+import fs from "node:fs"
+import path from "node:path"
+import { BitArray, Ok, Error as GError, toList} from "./gleam.mjs";
+
+export function readBits(filepath) {
+ try {
+ const contents = fs.readFileSync(path.normalize(filepath))
+ return new Ok(new BitArray(new Uint8Array(contents)))
+ } catch(e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function writeBits(contents, filepath) {
+ try {
+ fs.writeFileSync(path.normalize(filepath), contents.buffer)
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function appendBits(contents, filepath) {
+ try {
+ fs.appendFileSync(path.normalize(filepath), contents.buffer)
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+function stringifyError(e) {
+ return e.code
+}
+
+export function isFile(filepath) {
+ let fp = path.normalize(filepath)
+ return fs.existsSync(fp) && fs.lstatSync(fp).isFile();
+}
+
+export function isDirectory(filepath) {
+ let fp = path.normalize(filepath)
+ return fs.existsSync(fp) && fs.lstatSync(fp).isDirectory();
+}
+
+export function makeDirectory(filepath) {
+ try {
+ fs.mkdirSync(path.normalize(filepath))
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function createDirAll(filepath) {
+ try {
+ fs.mkdirSync(filepath, { recursive: true })
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function deleteFileOrDirRecursive(fileOrDirPath) {
+ try {
+ if (isDirectory(fileOrDirPath)) {
+ fs.rmSync(path.normalize(fileOrDirPath), { recursive: true })
+ } else {
+ fs.unlinkSync(path.normalize(fileOrDirPath))
+ }
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function listContents(filepath) {
+ try {
+ const stuff = toList(fs.readdirSync(path.normalize(filepath)))
+ return new Ok(stuff)
+ } catch(e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function copyFile(srcpath, destpath) {
+ try {
+ fs.copyFileSync(path.normalize(srcpath), path.normalize(destpath))
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+}
+
+export function renameFile(srcpath, destpath) {
+ try {
+ fs.renameSync(path.normalize(srcpath), path.normalize(destpath))
+ return new Ok(undefined)
+ } catch (e) {
+ return new GError(stringifyError(e))
+ }
+} \ No newline at end of file
diff --git a/aoc2023/build/packages/snag/LICENCE b/aoc2023/build/packages/snag/LICENCE
new file mode 100644
index 0000000..b8c2e9e
--- /dev/null
+++ b/aoc2023/build/packages/snag/LICENCE
@@ -0,0 +1,211 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2021 - present Louis Pilfold
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+## Runtime Library Exception to the Apache 2.0 License: ##
+
+
+ As an exception, if you use this Software to compile your source code and
+ portions of this Software are embedded into the binary product as a result,
+ you may redistribute such product without providing attribution as would
+ otherwise be required by Sections 4(a), 4(b) and 4(d) of the License.
diff --git a/aoc2023/build/packages/snag/README.md b/aoc2023/build/packages/snag/README.md
new file mode 100644
index 0000000..aaedcf5
--- /dev/null
+++ b/aoc2023/build/packages/snag/README.md
@@ -0,0 +1,81 @@
+# Snag
+
+A Snag is a boilerplate-free ad-hoc error type.
+
+Use `Result(value, Snag)` (or the `snag.Result(value)` alias) in functions
+that may fail.
+
+A low level message like "Unexpected status 401" or "No such file or
+directory" can be confusing or difficult to debug, so use the `snag.context`
+function to add extra contextual information.
+
+```gleam
+import gleam/io
+import my_app.{User}
+import snag.{Result}
+
+pub fn log_in(user_id: Int) -> Result(User) {
+ try api_key =
+ my_app.read_file("api_key.txt")
+ |> snag.context("Could not load API key")
+
+ try session_token =
+ user_id
+ |> my_app.create_session(api_key)
+ |> snag.context("Session creation failed")
+
+ Ok(session_token)
+}
+
+pub fn main() {
+ case log_in(42) {
+ Ok(session) -> io.println("Logged in!")
+ Error(snag) -> {
+ io.print(snag.pretty_print(snag))
+ my_app.exit(1)
+ }
+ }
+}
+```
+
+In this code when an error occurs within the `create_session` function an
+error message like this is printed using the added contextual information:
+
+```text
+error: Session creation failed
+
+cause:
+ 0: Unable to exchange token with authentication service
+ 1: Service authentication failed
+ 2: Unexpected HTTP status 401
+```
+
+## When should I use Snag?
+
+Snag is useful in code where it must either pass or fail, and when it fails we
+want good debugging information to print to the user. i.e. Command line
+tools, data processing pipelines, etc. Here Snag provides a convenient way to
+create errors with a reasonable amount of debugging information, without the
+boilerplate of a custom error type.
+
+It is not suited to code where the application needs to make a decision about
+what to do in the event of an error, such as whether to give up or to try
+again. i.e. Libraries, web application backends, API clients, etc. In these
+situations it is recommended to create a custom type for your errors as it
+can be pattern matched on and have any additional detail added as fields.
+
+## Installation
+
+Add `snag` to your Gleam project
+
+```
+gleam add snag
+```
+
+## Prior art
+
+This library is inspired by the following projects:
+
+- Rust's [`anyhow`](https://github.com/dtolnay/anyhow) and
+ [`std::error::Error`](https://doc.rust-lang.org/std/error/trait.Error.html)
+- Go's [`error`](https://golang.org/pkg/errors/).
diff --git a/aoc2023/build/packages/snag/gleam.toml b/aoc2023/build/packages/snag/gleam.toml
new file mode 100644
index 0000000..4f2d670
--- /dev/null
+++ b/aoc2023/build/packages/snag/gleam.toml
@@ -0,0 +1,16 @@
+name = "snag"
+version = "0.2.1"
+licences = ["Apache-2.0"]
+description = "A boilerplate-free ad-hoc error type"
+
+repository = { type = "github", user = "gleam-experiments", repo = "snag" }
+links = [
+ { title = "Website", href = "https://gleam.run" },
+ { title = "Sponsor", href = "https://github.com/sponsors/lpil" },
+]
+
+[dependencies]
+gleam_stdlib = "~> 0.18"
+
+[dev-dependencies]
+gleeunit = "~> 0.5"
diff --git a/aoc2023/build/packages/snag/include/snag_Snag.hrl b/aoc2023/build/packages/snag/include/snag_Snag.hrl
new file mode 100644
index 0000000..5d6614e
--- /dev/null
+++ b/aoc2023/build/packages/snag/include/snag_Snag.hrl
@@ -0,0 +1 @@
+-record(snag, {issue :: binary(), cause :: list(binary())}).
diff --git a/aoc2023/build/packages/snag/src/snag.app.src b/aoc2023/build/packages/snag/src/snag.app.src
new file mode 100644
index 0000000..175e326
--- /dev/null
+++ b/aoc2023/build/packages/snag/src/snag.app.src
@@ -0,0 +1,8 @@
+{application, snag, [
+ {vsn, "0.2.1"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "A boilerplate-free ad-hoc error type"},
+ {modules, [snag]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/snag/src/snag.erl b/aoc2023/build/packages/snag/src/snag.erl
new file mode 100644
index 0000000..a07f242
--- /dev/null
+++ b/aoc2023/build/packages/snag/src/snag.erl
@@ -0,0 +1,74 @@
+-module(snag).
+-compile([no_auto_import, nowarn_unused_vars]).
+
+-export([new/1, error/1, layer/2, context/2, pretty_print/1, line_print/1]).
+-export_type([snag/0]).
+
+-type snag() :: {snag, binary(), list(binary())}.
+
+-spec new(binary()) -> snag().
+new(Issue) ->
+ {snag, Issue, []}.
+
+-spec error(binary()) -> {ok, any()} | {error, snag()}.
+error(Issue) ->
+ {error, new(Issue)}.
+
+-spec layer(snag(), binary()) -> snag().
+layer(Snag, Issue) ->
+ {snag, Issue, [erlang:element(2, Snag) | erlang:element(3, Snag)]}.
+
+-spec context({ok, EXX} | {error, snag()}, binary()) -> {ok, EXX} |
+ {error, snag()}.
+context(Result, Issue) ->
+ case Result of
+ {ok, _} ->
+ Result;
+
+ {error, Snag} ->
+ {error, layer(Snag, Issue)}
+ end.
+
+-spec pretty_print_cause(list(binary())) -> gleam@string_builder:string_builder().
+pretty_print_cause(Cause) ->
+ _pipe = Cause,
+ _pipe@1 = gleam@list:index_map(
+ _pipe,
+ fun(Index, Line) ->
+ gleam@string:concat(
+ [<<" "/utf8>>,
+ gleam@int:to_string(Index),
+ <<": "/utf8>>,
+ Line,
+ <<"\n"/utf8>>]
+ )
+ end
+ ),
+ gleam@string_builder:from_strings(_pipe@1).
+
+-spec pretty_print(snag()) -> binary().
+pretty_print(Snag) ->
+ Builder = gleam@string_builder:from_strings(
+ [<<"error: "/utf8>>, erlang:element(2, Snag), <<"\n"/utf8>>]
+ ),
+ gleam@string_builder:to_string(case erlang:element(3, Snag) of
+ [] ->
+ Builder;
+
+ Cause ->
+ _pipe = Builder,
+ _pipe@1 = gleam@string_builder:append(
+ _pipe,
+ <<"\ncause:\n"/utf8>>
+ ),
+ gleam@string_builder:append_builder(
+ _pipe@1,
+ pretty_print_cause(Cause)
+ )
+ end).
+
+-spec line_print(snag()) -> binary().
+line_print(Snag) ->
+ _pipe = [gleam@string:append(<<"error: "/utf8>>, erlang:element(2, Snag)) |
+ erlang:element(3, Snag)],
+ gleam@string:join(_pipe, <<" <- "/utf8>>).
diff --git a/aoc2023/build/packages/snag/src/snag.gleam b/aoc2023/build/packages/snag/src/snag.gleam
new file mode 100644
index 0000000..8d39537
--- /dev/null
+++ b/aoc2023/build/packages/snag/src/snag.gleam
@@ -0,0 +1,141 @@
+import gleam
+import gleam/string_builder
+import gleam/string
+import gleam/list
+import gleam/int
+
+/// A Snag is a boilerplate-free error type that can be used to track why an
+/// error happened, though does not store as much detail on specific errors as a
+/// custom error type would.
+///
+/// It is useful in code where it must either pass or fail, and when it fails we
+/// want good debugging information to print to the user. i.e. Command line
+/// tools, data processing pipelines, etc.
+///
+/// If it not suited to code where the application needs to make a decision about
+/// what to do in the event of an error, such as whether to give up or to try
+/// again. i.e. Libraries, web application backends, API clients, etc.
+/// In these situations it is recommended to create a custom type for your errors
+/// as it can be pattern matched on and have any additional detail added as
+/// fields.
+pub type Snag {
+ Snag(issue: String, cause: List(String))
+}
+
+/// A concise alias for a `Result` that uses a `Snag` as the error value.
+pub type Result(t) =
+ gleam.Result(t, Snag)
+
+/// Create a new `Snag` with the given issue text.
+///
+/// See also the `error` function for creating a `Snag` wrapped in a `Result`.
+///
+/// # Example
+///
+/// ```gleam
+/// > new("Not enough credit")
+/// > |> line_print
+/// "error: Not enough credit"
+/// ```
+pub fn new(issue: String) -> Snag {
+ Snag(issue: issue, cause: [])
+}
+
+/// Create a new `Snag` wrapped in a `Result` with the given issue text.
+///
+/// # Example
+///
+/// ```gleam
+/// > error("Not enough credit")
+/// Error(new("Not enough credit"))
+/// ```
+pub fn error(issue: String) -> Result(success) {
+ Error(new(issue))
+}
+
+/// Add additional contextual information to a `Snag`.
+///
+/// See also the `context` function for adding contextual information to a `Snag`
+/// wrapped in a `Result`.
+///
+/// # Example
+///
+/// ```gleam
+/// > new("Not enough credit")
+/// > |> layer("Unable to make purchase")
+/// > |> line_print
+/// "error: Unable to make purchase <- Not enough credit"
+/// ```
+pub fn layer(snag: Snag, issue: String) -> Snag {
+ Snag(issue: issue, cause: [snag.issue, ..snag.cause])
+}
+
+/// Add additional contextual information to a `Snag` wrapped in a `Result`.
+///
+/// # Example
+///
+/// ```gleam
+/// > error("Not enough credit")
+/// > |> context("Unable to make purchase")
+/// > |> result.map_error(line_print)
+/// Error("error: Unable to make purchase <- Not enough credit")
+/// ```
+pub fn context(result: Result(success), issue: String) -> Result(success) {
+ case result {
+ Ok(_) -> result
+ Error(snag) -> Error(layer(snag, issue))
+ }
+}
+
+/// Turn a snag into a multi-line string, optimised for readability.
+///
+/// # Example
+///
+/// ```gleam
+/// > new("Not enough credit")
+/// > |> layer("Unable to make purchase")
+/// > |> layer("Character creation failed")
+/// > |> pretty_print
+/// "error: Character creation failed
+///
+/// cause:
+/// 0: Unable to make purchase
+/// 1: Not enough credit
+/// "
+/// ```
+pub fn pretty_print(snag: Snag) -> String {
+ let builder = string_builder.from_strings(["error: ", snag.issue, "\n"])
+
+ string_builder.to_string(case snag.cause {
+ [] -> builder
+ cause ->
+ builder
+ |> string_builder.append("\ncause:\n")
+ |> string_builder.append_builder(pretty_print_cause(cause))
+ })
+}
+
+fn pretty_print_cause(cause) {
+ cause
+ |> list.index_map(fn(index, line) {
+ string.concat([" ", int.to_string(index), ": ", line, "\n"])
+ })
+ |> string_builder.from_strings
+}
+
+/// Turn a snag into a single-line string, optimised for compactness. This may be
+/// useful for logging snags.
+///
+/// # Example
+///
+/// ```gleam
+/// > new("Not enough credit")
+/// > |> layer("Unable to make purchase")
+/// > |> layer("Character creation failed")
+/// > |> pretty_print
+/// "error: Character creation failed <- Unable to make purchase <- Not enough credit"
+/// ```
+pub fn line_print(snag: Snag) -> String {
+ [string.append("error: ", snag.issue), ..snag.cause]
+ |> string.join(" <- ")
+}
diff --git a/aoc2023/build/packages/tom/README.md b/aoc2023/build/packages/tom/README.md
new file mode 100644
index 0000000..e6adcbe
--- /dev/null
+++ b/aoc2023/build/packages/tom/README.md
@@ -0,0 +1,47 @@
+# tom
+
+A Gleam TOML parser!
+
+[![Package Version](https://img.shields.io/hexpm/v/tom)](https://hex.pm/packages/tom)
+[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/tom/)
+
+
+```sh
+gleam add tom
+```
+```gleam
+import tom
+
+const config = "
+ [person]
+ name = \"Lucy\"
+ is_cool = true
+"
+
+pub fn main() {
+ // Parse a string of TOML
+ let assert Ok(parsed) = tom.parse(config)
+
+ // Now you can work with the data directly, or you can use the `get_*`
+ // functions to retrieve values.
+
+ tom.get_string(parsed, ["person", "name"])
+ // -> Ok("Lucy")
+
+ let is_cool = tom.get_bool(parsed, ["person", "is_cool"])
+ // -> Ok(True)
+}
+```
+
+Further documentation can be found at <https://hexdocs.pm/tom>.
+
+## Status
+
+The following string escape sequences are not supported yet:
+
+- `\b`
+- `\f`
+- `\e`
+- `\xHH`
+- `\uHHHH`
+- `\UHHHHHHHH`
diff --git a/aoc2023/build/packages/tom/gleam.toml b/aoc2023/build/packages/tom/gleam.toml
new file mode 100644
index 0000000..f131d09
--- /dev/null
+++ b/aoc2023/build/packages/tom/gleam.toml
@@ -0,0 +1,13 @@
+name = "tom"
+version = "0.2.1"
+
+description = "A pure Gleam TOML parser!"
+licences = ["Apache-2.0"]
+repository = { type = "github", user = "lpil", repo = "tom" }
+links = [{ title = "TOML website", href = "https://toml.io/en/" }]
+
+[dependencies]
+gleam_stdlib = "~> 0.32"
+
+[dev-dependencies]
+gleeunit = "~> 1.0"
diff --git a/aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl b/aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl
new file mode 100644
index 0000000..3b1e660
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_DateTimeValue.hrl
@@ -0,0 +1,5 @@
+-record(date_time_value, {
+ date :: tom:date(),
+ time :: tom:time(),
+ offset :: tom:offset()
+}).
diff --git a/aoc2023/build/packages/tom/include/tom_DateValue.hrl b/aoc2023/build/packages/tom/include/tom_DateValue.hrl
new file mode 100644
index 0000000..c41f901
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_DateValue.hrl
@@ -0,0 +1 @@
+-record(date_value, {year :: integer(), month :: integer(), day :: integer()}).
diff --git a/aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl b/aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl
new file mode 100644
index 0000000..930df26
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_KeyAlreadyInUse.hrl
@@ -0,0 +1 @@
+-record(key_already_in_use, {key :: list(binary())}).
diff --git a/aoc2023/build/packages/tom/include/tom_NotFound.hrl b/aoc2023/build/packages/tom/include/tom_NotFound.hrl
new file mode 100644
index 0000000..19c9a17
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_NotFound.hrl
@@ -0,0 +1 @@
+-record(not_found, {key :: list(binary())}).
diff --git a/aoc2023/build/packages/tom/include/tom_Offset.hrl b/aoc2023/build/packages/tom/include/tom_Offset.hrl
new file mode 100644
index 0000000..a58a8e1
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_Offset.hrl
@@ -0,0 +1,5 @@
+-record(offset, {
+ direction :: tom:sign(),
+ hours :: integer(),
+ minutes :: integer()
+}).
diff --git a/aoc2023/build/packages/tom/include/tom_TimeValue.hrl b/aoc2023/build/packages/tom/include/tom_TimeValue.hrl
new file mode 100644
index 0000000..e1275de
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_TimeValue.hrl
@@ -0,0 +1,6 @@
+-record(time_value, {
+ hour :: integer(),
+ minute :: integer(),
+ second :: integer(),
+ millisecond :: integer()
+}).
diff --git a/aoc2023/build/packages/tom/include/tom_Unexpected.hrl b/aoc2023/build/packages/tom/include/tom_Unexpected.hrl
new file mode 100644
index 0000000..ab1091c
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_Unexpected.hrl
@@ -0,0 +1 @@
+-record(unexpected, {got :: binary(), expected :: binary()}).
diff --git a/aoc2023/build/packages/tom/include/tom_WrongType.hrl b/aoc2023/build/packages/tom/include/tom_WrongType.hrl
new file mode 100644
index 0000000..ae57352
--- /dev/null
+++ b/aoc2023/build/packages/tom/include/tom_WrongType.hrl
@@ -0,0 +1,5 @@
+-record(wrong_type, {
+ key :: list(binary()),
+ expected :: binary(),
+ got :: binary()
+}).
diff --git a/aoc2023/build/packages/tom/src/tom.app.src b/aoc2023/build/packages/tom/src/tom.app.src
new file mode 100644
index 0000000..051649c
--- /dev/null
+++ b/aoc2023/build/packages/tom/src/tom.app.src
@@ -0,0 +1,8 @@
+{application, tom, [
+ {vsn, "0.2.1"},
+ {applications, [gleam_stdlib,
+ gleeunit]},
+ {description, "A pure Gleam TOML parser!"},
+ {modules, [tom]},
+ {registered, []}
+]}.
diff --git a/aoc2023/build/packages/tom/src/tom.erl b/aoc2023/build/packages/tom/src/tom.erl
new file mode 100644
index 0000000..4f5c071
--- /dev/null
+++ b/aoc2023/build/packages/tom/src/tom.erl
@@ -0,0 +1,2140 @@
+-module(tom).
+-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
+
+-export([get/2, get_int/2, get_float/2, get_bool/2, get_string/2, get_date/2, get_time/2, get_date_time/2, get_array/2, get_table/2, get_number/2, parse/1]).
+-export_type([toml/0, date_time/0, date/0, time/0, offset/0, sign/0, parse_error/0, number_/0, get_error/0]).
+
+-type toml() :: {int, integer()} |
+ {float, float()} |
+ {infinity, sign()} |
+ {nan, sign()} |
+ {bool, boolean()} |
+ {string, binary()} |
+ {date, date()} |
+ {time, time()} |
+ {date_time, date_time()} |
+ {array, list(toml())} |
+ {array_of_tables, list(gleam@map:map_(binary(), toml()))} |
+ {table, gleam@map:map_(binary(), toml())} |
+ {inline_table, gleam@map:map_(binary(), toml())}.
+
+-type date_time() :: {date_time_value, date(), time(), offset()}.
+
+-type date() :: {date_value, integer(), integer(), integer()}.
+
+-type time() :: {time_value, integer(), integer(), integer(), integer()}.
+
+-type offset() :: local | {offset, sign(), integer(), integer()}.
+
+-type sign() :: positive | negative.
+
+-type parse_error() :: {unexpected, binary(), binary()} |
+ {key_already_in_use, list(binary())}.
+
+-type number_() :: {number_int, integer()} |
+ {number_float, float()} |
+ {number_infinity, sign()} |
+ {number_nan, sign()}.
+
+-type get_error() :: {not_found, list(binary())} |
+ {wrong_type, list(binary()), binary(), binary()}.
+
+-spec classify(toml()) -> binary().
+classify(Toml) ->
+ case Toml of
+ {int, _} ->
+ <<"Int"/utf8>>;
+
+ {float, _} ->
+ <<"Float"/utf8>>;
+
+ {nan, positive} ->
+ <<"NaN"/utf8>>;
+
+ {nan, negative} ->
+ <<"Negative NaN"/utf8>>;
+
+ {infinity, positive} ->
+ <<"Infinity"/utf8>>;
+
+ {infinity, negative} ->
+ <<"Negative Infinity"/utf8>>;
+
+ {bool, _} ->
+ <<"Bool"/utf8>>;
+
+ {string, _} ->
+ <<"String"/utf8>>;
+
+ {date, _} ->
+ <<"Date"/utf8>>;
+
+ {time, _} ->
+ <<"Time"/utf8>>;
+
+ {date_time, _} ->
+ <<"DateTime"/utf8>>;
+
+ {array, _} ->
+ <<"Array"/utf8>>;
+
+ {array_of_tables, _} ->
+ <<"Array"/utf8>>;
+
+ {table, _} ->
+ <<"Table"/utf8>>;
+
+ {inline_table, _} ->
+ <<"Table"/utf8>>
+ end.
+
+-spec push_key({ok, FIU} | {error, get_error()}, binary()) -> {ok, FIU} |
+ {error, get_error()}.
+push_key(Result, Key) ->
+ case Result of
+ {ok, T} ->
+ {ok, T};
+
+ {error, {not_found, Path}} ->
+ {error, {not_found, [Key | Path]}};
+
+ {error, {wrong_type, Path@1, Expected, Got}} ->
+ {error, {wrong_type, [Key | Path@1], Expected, Got}}
+ end.
+
+-spec get(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, toml()} |
+ {error, get_error()}.
+get(Toml, Key) ->
+ case Key of
+ [] ->
+ {error, {not_found, []}};
+
+ [K] ->
+ gleam@result:replace_error(gleam@map:get(Toml, K), {not_found, [K]});
+
+ [K@1 | Key@1] ->
+ case gleam@map:get(Toml, K@1) of
+ {ok, {table, T}} ->
+ push_key(get(T, Key@1), K@1);
+
+ {ok, Other} ->
+ {error,
+ {wrong_type, [K@1], <<"Table"/utf8>>, classify(Other)}};
+
+ {error, _} ->
+ {error, {not_found, [K@1]}}
+ end
+ end.
+
+-spec get_int(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ integer()} |
+ {error, get_error()}.
+get_int(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {int, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Int"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_float(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ float()} |
+ {error, get_error()}.
+get_float(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {float, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Float"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_bool(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ boolean()} |
+ {error, get_error()}.
+get_bool(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {bool, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Bool"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_string(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ binary()} |
+ {error, get_error()}.
+get_string(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {string, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"String"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_date(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, date()} |
+ {error, get_error()}.
+get_date(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {date, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Date"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_time(gleam@map:map_(binary(), toml()), list(binary())) -> {ok, time()} |
+ {error, get_error()}.
+get_time(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {time, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Time"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_date_time(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ date_time()} |
+ {error, get_error()}.
+get_date_time(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {date_time, I}} ->
+ {ok, I};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"DateTime"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_array(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ list(toml())} |
+ {error, get_error()}.
+get_array(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {array, I}} ->
+ {ok, I};
+
+ {ok, {array_of_tables, I@1}} ->
+ {ok, gleam@list:map(I@1, fun(Field@0) -> {table, Field@0} end)};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Array"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_table(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ gleam@map:map_(binary(), toml())} |
+ {error, get_error()}.
+get_table(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {table, I}} ->
+ {ok, I};
+
+ {ok, {inline_table, I@1}} ->
+ {ok, I@1};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Table"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec get_number(gleam@map:map_(binary(), toml()), list(binary())) -> {ok,
+ number_()} |
+ {error, get_error()}.
+get_number(Toml, Key) ->
+ case get(Toml, Key) of
+ {ok, {int, X}} ->
+ {ok, {number_int, X}};
+
+ {ok, {float, X@1}} ->
+ {ok, {number_float, X@1}};
+
+ {ok, {nan, X@2}} ->
+ {ok, {number_nan, X@2}};
+
+ {ok, {infinity, X@3}} ->
+ {ok, {number_infinity, X@3}};
+
+ {ok, Other} ->
+ {error, {wrong_type, Key, <<"Number"/utf8>>, classify(Other)}};
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec merge(gleam@map:map_(binary(), toml()), binary(), toml(), toml()) -> {ok,
+ gleam@map:map_(binary(), toml())} |
+ {error, list(binary())}.
+merge(Table, Key, Old, New) ->
+ case {Old, New} of
+ {{array_of_tables, Tables}, {array_of_tables, New@1}} ->
+ {ok,
+ gleam@map:insert(
+ Table,
+ Key,
+ {array_of_tables, gleam@list:append(New@1, Tables)}
+ )};
+
+ {_, _} ->
+ {error, [Key]}
+ end.
+
+-spec insert_loop(gleam@map:map_(binary(), toml()), list(binary()), toml()) -> {ok,
+ gleam@map:map_(binary(), toml())} |
+ {error, list(binary())}.
+insert_loop(Table, Key, Value) ->
+ case Key of
+ [] ->
+ erlang:error(#{gleam_error => panic,
+ message => <<"unreachable"/utf8>>,
+ module => <<"tom"/utf8>>,
+ function => <<"insert_loop"/utf8>>,
+ line => 511});
+
+ [K] ->
+ case gleam@map:get(Table, K) of
+ {error, nil} ->
+ {ok, gleam@map:insert(Table, K, Value)};
+
+ {ok, Old} ->
+ merge(Table, K, Old, Value)
+ end;
+
+ [K@1 | Key@1] ->
+ case gleam@map:get(Table, K@1) of
+ {error, nil} ->
+ case insert_loop(gleam@map:new(), Key@1, Value) of
+ {ok, Inner} ->
+ {ok, gleam@map:insert(Table, K@1, {table, Inner})};
+
+ {error, Path} ->
+ {error, [K@1 | Path]}
+ end;
+
+ {ok, {array_of_tables, [Inner@1 | Rest]}} ->
+ case insert_loop(Inner@1, Key@1, Value) of
+ {ok, Inner@2} ->
+ {ok,
+ gleam@map:insert(
+ Table,
+ K@1,
+ {array_of_tables, [Inner@2 | Rest]}
+ )};
+
+ {error, Path@1} ->
+ {error, [K@1 | Path@1]}
+ end;
+
+ {ok, {table, Inner@3}} ->
+ case insert_loop(Inner@3, Key@1, Value) of
+ {ok, Inner@4} ->
+ {ok, gleam@map:insert(Table, K@1, {table, Inner@4})};
+
+ {error, Path@2} ->
+ {error, [K@1 | Path@2]}
+ end;
+
+ {ok, _} ->
+ {error, [K@1]}
+ end
+ end.
+
+-spec insert(gleam@map:map_(binary(), toml()), list(binary()), toml()) -> {ok,
+ gleam@map:map_(binary(), toml())} |
+ {error, parse_error()}.
+insert(Table, Key, Value) ->
+ case insert_loop(Table, Key, Value) of
+ {ok, Table@1} ->
+ {ok, Table@1};
+
+ {error, Path} ->
+ {error, {key_already_in_use, Path}}
+ end.
+
+-spec expect_end_of_line(
+ list(binary()),
+ fun((list(binary())) -> {ok, {FKZ, list(binary())}} | {error, parse_error()})
+) -> {ok, {FKZ, list(binary())}} | {error, parse_error()}.
+expect_end_of_line(Input, Next) ->
+ case Input of
+ [<<"\n"/utf8>> | Input@1] ->
+ Next(Input@1);
+
+ [<<"\r\n"/utf8>> | Input@2] ->
+ Next(Input@2);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"\n"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\n"/utf8>>}}
+ end.
+
+-spec parse_key_quoted(list(binary()), binary(), binary()) -> {ok,
+ {binary(), list(binary())}} |
+ {error, parse_error()}.
+parse_key_quoted(Input, Close, Name) ->
+ case Input of
+ [G | Input@1] when G =:= Close ->
+ {ok, {Name, Input@1}};
+
+ [G@1 | Input@2] ->
+ parse_key_quoted(Input@2, Close, <<Name/binary, G@1/binary>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, Close}}
+ end.
+
+-spec parse_key_bare(list(binary()), binary()) -> {ok,
+ {binary(), list(binary())}} |
+ {error, parse_error()}.
+parse_key_bare(Input, Name) ->
+ case Input of
+ [<<" "/utf8>> | Input@1] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input@1}};
+
+ [<<"="/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input}};
+
+ [<<"."/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input}};
+
+ [<<"]"/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {ok, {Name, Input}};
+
+ [<<","/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {error, {unexpected, <<","/utf8>>, <<"="/utf8>>}};
+
+ [<<"\n"/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"="/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] when Name =/= <<""/utf8>> ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"="/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"key"/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"key"/utf8>>}};
+
+ [<<"]"/utf8>> | _] ->
+ {error, {unexpected, <<"]"/utf8>>, <<"key"/utf8>>}};
+
+ [<<","/utf8>> | _] ->
+ {error, {unexpected, <<","/utf8>>, <<"key"/utf8>>}};
+
+ [G | Input@2] ->
+ parse_key_bare(Input@2, <<Name/binary, G/binary>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"key"/utf8>>}}
+ end.
+
+-spec skip_line_whitespace(list(binary())) -> list(binary()).
+skip_line_whitespace(Input) ->
+ gleam@list:drop_while(
+ Input,
+ fun(G) -> (G =:= <<" "/utf8>>) orelse (G =:= <<"\t"/utf8>>) end
+ ).
+
+-spec parse_key_segment(list(binary())) -> {ok, {binary(), list(binary())}} |
+ {error, parse_error()}.
+parse_key_segment(Input) ->
+ Input@1 = skip_line_whitespace(Input),
+ case Input@1 of
+ [<<"="/utf8>> | _] ->
+ {error, {unexpected, <<"="/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"["/utf8>> | _] ->
+ {error, {unexpected, <<"["/utf8>>, <<"Key"/utf8>>}};
+
+ [<<"\""/utf8>> | Input@2] ->
+ parse_key_quoted(Input@2, <<"\""/utf8>>, <<""/utf8>>);
+
+ [<<"'"/utf8>> | Input@3] ->
+ parse_key_quoted(Input@3, <<"'"/utf8>>, <<""/utf8>>);
+
+ _ ->
+ parse_key_bare(Input@1, <<""/utf8>>)
+ end.
+
+-spec skip_whitespace(list(binary())) -> list(binary()).
+skip_whitespace(Input) ->
+ case Input of
+ [<<" "/utf8>> | Input@1] ->
+ skip_whitespace(Input@1);
+
+ [<<"\t"/utf8>> | Input@2] ->
+ skip_whitespace(Input@2);
+
+ [<<"\n"/utf8>> | Input@3] ->
+ skip_whitespace(Input@3);
+
+ [<<"\r\n"/utf8>> | Input@4] ->
+ skip_whitespace(Input@4);
+
+ Input@5 ->
+ Input@5
+ end.
+
+-spec drop_comments(list(binary()), list(binary())) -> list(binary()).
+drop_comments(Input, Acc) ->
+ case Input of
+ [<<"#"/utf8>> | Input@1] ->
+ _pipe = Input@1,
+ _pipe@1 = gleam@list:drop_while(
+ _pipe,
+ fun(G) -> G /= <<"\n"/utf8>> end
+ ),
+ drop_comments(_pipe@1, Acc);
+
+ [G@1 | Input@2] ->
+ drop_comments(Input@2, [G@1 | Acc]);
+
+ [] ->
+ gleam@list:reverse(Acc)
+ end.
+
+-spec do(
+ {ok, {FLK, list(binary())}} | {error, parse_error()},
+ fun((FLK, list(binary())) -> {ok, FLN} | {error, parse_error()})
+) -> {ok, FLN} | {error, parse_error()}.
+do(Result, Next) ->
+ case Result of
+ {ok, {A, Input}} ->
+ Next(A, Input);
+
+ {error, E} ->
+ {error, E}
+ end.
+
+-spec parse_key(list(binary()), list(binary())) -> {ok,
+ {list(binary()), list(binary())}} |
+ {error, parse_error()}.
+parse_key(Input, Segments) ->
+ do(
+ parse_key_segment(Input),
+ fun(Segment, Input@1) ->
+ Segments@1 = [Segment | Segments],
+ Input@2 = skip_line_whitespace(Input@1),
+ case Input@2 of
+ [<<"."/utf8>> | Input@3] ->
+ parse_key(Input@3, Segments@1);
+
+ _ ->
+ {ok, {gleam@list:reverse(Segments@1), Input@2}}
+ end
+ end
+ ).
+
+-spec expect(
+ list(binary()),
+ binary(),
+ fun((list(binary())) -> {ok, {FLS, list(binary())}} | {error, parse_error()})
+) -> {ok, {FLS, list(binary())}} | {error, parse_error()}.
+expect(Input, Expected, Next) ->
+ case Input of
+ [G | Input@1] when G =:= Expected ->
+ Next(Input@1);
+
+ [G@1 | _] ->
+ {error, {unexpected, G@1, Expected}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, Expected}}
+ end.
+
+-spec parse_table_header(list(binary())) -> {ok,
+ {list(binary()), list(binary())}} |
+ {error, parse_error()}.
+parse_table_header(Input) ->
+ Input@1 = skip_line_whitespace(Input),
+ do(
+ parse_key(Input@1, []),
+ fun(Key, Input@2) ->
+ expect(
+ Input@2,
+ <<"]"/utf8>>,
+ fun(Input@3) ->
+ Input@4 = skip_line_whitespace(Input@3),
+ expect_end_of_line(
+ Input@4,
+ fun(Input@5) -> {ok, {Key, Input@5}} end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_hex(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_hex(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_hex(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_hex(Input@2, (Number * 16) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_hex(Input@3, (Number * 16) + 1, Sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_hex(Input@4, (Number * 16) + 2, Sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_hex(Input@5, (Number * 16) + 3, Sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_hex(Input@6, (Number * 16) + 4, Sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_hex(Input@7, (Number * 16) + 5, Sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_hex(Input@8, (Number * 16) + 6, Sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_hex(Input@9, (Number * 16) + 7, Sign);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_hex(Input@10, (Number * 16) + 8, Sign);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_hex(Input@11, (Number * 16) + 9, Sign);
+
+ [<<"a"/utf8>> | Input@12] ->
+ parse_hex(Input@12, (Number * 16) + 10, Sign);
+
+ [<<"b"/utf8>> | Input@13] ->
+ parse_hex(Input@13, (Number * 16) + 11, Sign);
+
+ [<<"c"/utf8>> | Input@14] ->
+ parse_hex(Input@14, (Number * 16) + 12, Sign);
+
+ [<<"d"/utf8>> | Input@15] ->
+ parse_hex(Input@15, (Number * 16) + 13, Sign);
+
+ [<<"e"/utf8>> | Input@16] ->
+ parse_hex(Input@16, (Number * 16) + 14, Sign);
+
+ [<<"f"/utf8>> | Input@17] ->
+ parse_hex(Input@17, (Number * 16) + 15, Sign);
+
+ [<<"A"/utf8>> | Input@18] ->
+ parse_hex(Input@18, (Number * 16) + 10, Sign);
+
+ [<<"B"/utf8>> | Input@19] ->
+ parse_hex(Input@19, (Number * 16) + 11, Sign);
+
+ [<<"C"/utf8>> | Input@20] ->
+ parse_hex(Input@20, (Number * 16) + 12, Sign);
+
+ [<<"D"/utf8>> | Input@21] ->
+ parse_hex(Input@21, (Number * 16) + 13, Sign);
+
+ [<<"E"/utf8>> | Input@22] ->
+ parse_hex(Input@22, (Number * 16) + 14, Sign);
+
+ [<<"F"/utf8>> | Input@23] ->
+ parse_hex(Input@23, (Number * 16) + 15, Sign);
+
+ Input@24 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@24}}
+ end.
+
+-spec parse_octal(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_octal(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_octal(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_octal(Input@2, (Number * 8) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_octal(Input@3, (Number * 8) + 1, Sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_octal(Input@4, (Number * 8) + 2, Sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_octal(Input@5, (Number * 8) + 3, Sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_octal(Input@6, (Number * 8) + 4, Sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_octal(Input@7, (Number * 8) + 5, Sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_octal(Input@8, (Number * 8) + 6, Sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_octal(Input@9, (Number * 8) + 7, Sign);
+
+ Input@10 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@10}}
+ end.
+
+-spec parse_binary(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_binary(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_binary(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_binary(Input@2, (Number * 2) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_binary(Input@3, (Number * 2) + 1, Sign);
+
+ Input@4 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@4}}
+ end.
+
+-spec parse_exponent(list(binary()), float(), sign(), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_exponent(Input, N, N_sign, Ex, Ex_sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_exponent(Input@1, N, N_sign, Ex, Ex_sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_exponent(Input@2, N, N_sign, Ex * 10, Ex_sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_exponent(Input@3, N, N_sign, (Ex * 10) + 1, Ex_sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_exponent(Input@4, N, N_sign, (Ex * 10) + 2, Ex_sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_exponent(Input@5, N, N_sign, (Ex * 10) + 3, Ex_sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_exponent(Input@6, N, N_sign, (Ex * 10) + 4, Ex_sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_exponent(Input@7, N, N_sign, (Ex * 10) + 5, Ex_sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_exponent(Input@8, N, N_sign, (Ex * 10) + 6, Ex_sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_exponent(Input@9, N, N_sign, (Ex * 10) + 7, Ex_sign);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_exponent(Input@10, N, N_sign, (Ex * 10) + 8, Ex_sign);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_exponent(Input@11, N, N_sign, (Ex * 10) + 9, Ex_sign);
+
+ Input@12 ->
+ Number = case N_sign of
+ positive ->
+ N;
+
+ negative ->
+ N * -1.0
+ end,
+ Exponent = gleam@int:to_float(case Ex_sign of
+ positive ->
+ Ex;
+
+ negative ->
+ - Ex
+ end),
+ Multiplier@1 = case gleam@float:power(10.0, Exponent) of
+ {ok, Multiplier} ->
+ Multiplier;
+
+ {error, _} ->
+ 1.0
+ end,
+ {ok, {{float, Number * Multiplier@1}, Input@12}}
+ end.
+
+-spec parse_float(list(binary()), float(), sign(), float()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_float(Input, Number, Sign, Unit) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_float(Input@1, Number, Sign, Unit);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_float(Input@2, Number, Sign, Unit * 0.1);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_float(Input@3, Number + (1.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_float(Input@4, Number + (2.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_float(Input@5, Number + (3.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_float(Input@6, Number + (4.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_float(Input@7, Number + (5.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_float(Input@8, Number + (6.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_float(Input@9, Number + (7.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_float(Input@10, Number + (8.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_float(Input@11, Number + (9.0 * Unit), Sign, Unit * 0.1);
+
+ [<<"e"/utf8>>, <<"+"/utf8>> | Input@12] ->
+ parse_exponent(Input@12, Number, Sign, 0, positive);
+
+ [<<"e"/utf8>>, <<"-"/utf8>> | Input@13] ->
+ parse_exponent(Input@13, Number, Sign, 0, negative);
+
+ [<<"e"/utf8>> | Input@14] ->
+ parse_exponent(Input@14, Number, Sign, 0, positive);
+
+ [<<"E"/utf8>>, <<"+"/utf8>> | Input@15] ->
+ parse_exponent(Input@15, Number, Sign, 0, positive);
+
+ [<<"E"/utf8>>, <<"-"/utf8>> | Input@16] ->
+ parse_exponent(Input@16, Number, Sign, 0, negative);
+
+ [<<"E"/utf8>> | Input@17] ->
+ parse_exponent(Input@17, Number, Sign, 0, positive);
+
+ Input@18 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ Number * -1.0
+ end,
+ {ok, {{float, Number@1}, Input@18}}
+ end.
+
+-spec parse_string(list(binary()), binary()) -> {ok, {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_string(Input, String) ->
+ case Input of
+ [<<"\""/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [<<"\\"/utf8>>, <<"t"/utf8>> | Input@2] ->
+ parse_string(Input@2, <<String/binary, "\t"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"n"/utf8>> | Input@3] ->
+ parse_string(Input@3, <<String/binary, "\n"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"r"/utf8>> | Input@4] ->
+ parse_string(Input@4, <<String/binary, "\r"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\""/utf8>> | Input@5] ->
+ parse_string(Input@5, <<String/binary, "\""/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@6] ->
+ parse_string(Input@6, <<String/binary, "\\"/utf8>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"\""/utf8>>}};
+
+ [G | Input@7] ->
+ parse_string(Input@7, <<String/binary, G/binary>>)
+ end.
+
+-spec parse_multi_line_string(list(binary()), binary()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_multi_line_string(Input, String) ->
+ case Input of
+ [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [<<"\\"/utf8>>, <<"\n"/utf8>> | Input@2] ->
+ parse_multi_line_string(skip_whitespace(Input@2), String);
+
+ [<<"\\"/utf8>>, <<"\r\n"/utf8>> | Input@3] ->
+ parse_multi_line_string(skip_whitespace(Input@3), String);
+
+ [<<"\r\n"/utf8>> | Input@4] when String =:= <<""/utf8>> ->
+ parse_multi_line_string(Input@4, String);
+
+ [<<"\n"/utf8>> | Input@5] when String =:= <<""/utf8>> ->
+ parse_multi_line_string(Input@5, String);
+
+ [<<"\r\n"/utf8>> | Input@6] when String =:= <<""/utf8>> ->
+ parse_multi_line_string(Input@6, String);
+
+ [<<"\\"/utf8>>, <<"t"/utf8>> | Input@7] ->
+ parse_multi_line_string(Input@7, <<String/binary, "\t"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"n"/utf8>> | Input@8] ->
+ parse_multi_line_string(Input@8, <<String/binary, "\n"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"r"/utf8>> | Input@9] ->
+ parse_multi_line_string(Input@9, <<String/binary, "\r"/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\""/utf8>> | Input@10] ->
+ parse_multi_line_string(Input@10, <<String/binary, "\""/utf8>>);
+
+ [<<"\\"/utf8>>, <<"\\"/utf8>> | Input@11] ->
+ parse_multi_line_string(Input@11, <<String/binary, "\\"/utf8>>);
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [G | Input@12] ->
+ parse_multi_line_string(Input@12, <<String/binary, G/binary>>)
+ end.
+
+-spec parse_multi_line_literal_string(list(binary()), binary()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_multi_line_literal_string(Input, String) ->
+ case Input of
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | _] ->
+ {error, {unexpected, <<"''''"/utf8>>, <<"'''"/utf8>>}};
+
+ [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [<<"\n"/utf8>> | Input@2] when String =:= <<""/utf8>> ->
+ parse_multi_line_literal_string(Input@2, String);
+
+ [<<"\r\n"/utf8>> | Input@3] when String =:= <<""/utf8>> ->
+ parse_multi_line_literal_string(Input@3, String);
+
+ [G | Input@4] ->
+ parse_multi_line_literal_string(
+ Input@4,
+ <<String/binary, G/binary>>
+ )
+ end.
+
+-spec parse_literal_string(list(binary()), binary()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_literal_string(Input, String) ->
+ case Input of
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"\""/utf8>>}};
+
+ [<<"\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\n"/utf8>>, <<"'"/utf8>>}};
+
+ [<<"\r\n"/utf8>> | _] ->
+ {error, {unexpected, <<"\r\n"/utf8>>, <<"'"/utf8>>}};
+
+ [<<"'"/utf8>> | Input@1] ->
+ {ok, {{string, String}, Input@1}};
+
+ [G | Input@2] ->
+ parse_literal_string(Input@2, <<String/binary, G/binary>>)
+ end.
+
+-spec parse_time_ms(list(binary()), integer(), integer()) -> {ok,
+ {{integer(), integer()}, list(binary())}} |
+ {error, parse_error()}.
+parse_time_ms(Input, Seconds, Ms) ->
+ case Input of
+ [<<"0"/utf8>> | Input@1] when Ms < 100000 ->
+ parse_time_ms(Input@1, Seconds, (Ms * 10) + 0);
+
+ [<<"1"/utf8>> | Input@2] when Ms < 100000 ->
+ parse_time_ms(Input@2, Seconds, (Ms * 10) + 1);
+
+ [<<"2"/utf8>> | Input@3] when Ms < 100000 ->
+ parse_time_ms(Input@3, Seconds, (Ms * 10) + 2);
+
+ [<<"3"/utf8>> | Input@4] when Ms < 100000 ->
+ parse_time_ms(Input@4, Seconds, (Ms * 10) + 3);
+
+ [<<"4"/utf8>> | Input@5] when Ms < 100000 ->
+ parse_time_ms(Input@5, Seconds, (Ms * 10) + 4);
+
+ [<<"5"/utf8>> | Input@6] when Ms < 100000 ->
+ parse_time_ms(Input@6, Seconds, (Ms * 10) + 5);
+
+ [<<"6"/utf8>> | Input@7] when Ms < 100000 ->
+ parse_time_ms(Input@7, Seconds, (Ms * 10) + 6);
+
+ [<<"7"/utf8>> | Input@8] when Ms < 100000 ->
+ parse_time_ms(Input@8, Seconds, (Ms * 10) + 7);
+
+ [<<"8"/utf8>> | Input@9] when Ms < 100000 ->
+ parse_time_ms(Input@9, Seconds, (Ms * 10) + 8);
+
+ [<<"9"/utf8>> | Input@10] when Ms < 100000 ->
+ parse_time_ms(Input@10, Seconds, (Ms * 10) + 9);
+
+ _ ->
+ {ok, {{Seconds, Ms}, Input}}
+ end.
+
+-spec parse_number_under_60(list(binary()), binary()) -> {ok,
+ {integer(), list(binary())}} |
+ {error, parse_error()}.
+parse_number_under_60(Input, Expected) ->
+ case Input of
+ [<<"0"/utf8>>, <<"0"/utf8>> | Input@1] ->
+ {ok, {0, Input@1}};
+
+ [<<"0"/utf8>>, <<"1"/utf8>> | Input@2] ->
+ {ok, {1, Input@2}};
+
+ [<<"0"/utf8>>, <<"2"/utf8>> | Input@3] ->
+ {ok, {2, Input@3}};
+
+ [<<"0"/utf8>>, <<"3"/utf8>> | Input@4] ->
+ {ok, {3, Input@4}};
+
+ [<<"0"/utf8>>, <<"4"/utf8>> | Input@5] ->
+ {ok, {4, Input@5}};
+
+ [<<"0"/utf8>>, <<"5"/utf8>> | Input@6] ->
+ {ok, {5, Input@6}};
+
+ [<<"0"/utf8>>, <<"6"/utf8>> | Input@7] ->
+ {ok, {6, Input@7}};
+
+ [<<"0"/utf8>>, <<"7"/utf8>> | Input@8] ->
+ {ok, {7, Input@8}};
+
+ [<<"0"/utf8>>, <<"8"/utf8>> | Input@9] ->
+ {ok, {8, Input@9}};
+
+ [<<"0"/utf8>>, <<"9"/utf8>> | Input@10] ->
+ {ok, {9, Input@10}};
+
+ [<<"1"/utf8>>, <<"0"/utf8>> | Input@11] ->
+ {ok, {10, Input@11}};
+
+ [<<"1"/utf8>>, <<"1"/utf8>> | Input@12] ->
+ {ok, {11, Input@12}};
+
+ [<<"1"/utf8>>, <<"2"/utf8>> | Input@13] ->
+ {ok, {12, Input@13}};
+
+ [<<"1"/utf8>>, <<"3"/utf8>> | Input@14] ->
+ {ok, {13, Input@14}};
+
+ [<<"1"/utf8>>, <<"4"/utf8>> | Input@15] ->
+ {ok, {14, Input@15}};
+
+ [<<"1"/utf8>>, <<"5"/utf8>> | Input@16] ->
+ {ok, {15, Input@16}};
+
+ [<<"1"/utf8>>, <<"6"/utf8>> | Input@17] ->
+ {ok, {16, Input@17}};
+
+ [<<"1"/utf8>>, <<"7"/utf8>> | Input@18] ->
+ {ok, {17, Input@18}};
+
+ [<<"1"/utf8>>, <<"8"/utf8>> | Input@19] ->
+ {ok, {18, Input@19}};
+
+ [<<"1"/utf8>>, <<"9"/utf8>> | Input@20] ->
+ {ok, {19, Input@20}};
+
+ [<<"2"/utf8>>, <<"0"/utf8>> | Input@21] ->
+ {ok, {20, Input@21}};
+
+ [<<"2"/utf8>>, <<"1"/utf8>> | Input@22] ->
+ {ok, {21, Input@22}};
+
+ [<<"2"/utf8>>, <<"2"/utf8>> | Input@23] ->
+ {ok, {22, Input@23}};
+
+ [<<"2"/utf8>>, <<"3"/utf8>> | Input@24] ->
+ {ok, {23, Input@24}};
+
+ [<<"2"/utf8>>, <<"4"/utf8>> | Input@25] ->
+ {ok, {24, Input@25}};
+
+ [<<"2"/utf8>>, <<"5"/utf8>> | Input@26] ->
+ {ok, {25, Input@26}};
+
+ [<<"2"/utf8>>, <<"6"/utf8>> | Input@27] ->
+ {ok, {26, Input@27}};
+
+ [<<"2"/utf8>>, <<"7"/utf8>> | Input@28] ->
+ {ok, {27, Input@28}};
+
+ [<<"2"/utf8>>, <<"8"/utf8>> | Input@29] ->
+ {ok, {28, Input@29}};
+
+ [<<"2"/utf8>>, <<"9"/utf8>> | Input@30] ->
+ {ok, {29, Input@30}};
+
+ [<<"3"/utf8>>, <<"0"/utf8>> | Input@31] ->
+ {ok, {30, Input@31}};
+
+ [<<"3"/utf8>>, <<"1"/utf8>> | Input@32] ->
+ {ok, {31, Input@32}};
+
+ [<<"3"/utf8>>, <<"2"/utf8>> | Input@33] ->
+ {ok, {32, Input@33}};
+
+ [<<"3"/utf8>>, <<"3"/utf8>> | Input@34] ->
+ {ok, {33, Input@34}};
+
+ [<<"3"/utf8>>, <<"4"/utf8>> | Input@35] ->
+ {ok, {34, Input@35}};
+
+ [<<"3"/utf8>>, <<"5"/utf8>> | Input@36] ->
+ {ok, {35, Input@36}};
+
+ [<<"3"/utf8>>, <<"6"/utf8>> | Input@37] ->
+ {ok, {36, Input@37}};
+
+ [<<"3"/utf8>>, <<"7"/utf8>> | Input@38] ->
+ {ok, {37, Input@38}};
+
+ [<<"3"/utf8>>, <<"8"/utf8>> | Input@39] ->
+ {ok, {38, Input@39}};
+
+ [<<"3"/utf8>>, <<"9"/utf8>> | Input@40] ->
+ {ok, {39, Input@40}};
+
+ [<<"4"/utf8>>, <<"0"/utf8>> | Input@41] ->
+ {ok, {40, Input@41}};
+
+ [<<"4"/utf8>>, <<"1"/utf8>> | Input@42] ->
+ {ok, {41, Input@42}};
+
+ [<<"4"/utf8>>, <<"2"/utf8>> | Input@43] ->
+ {ok, {42, Input@43}};
+
+ [<<"4"/utf8>>, <<"3"/utf8>> | Input@44] ->
+ {ok, {43, Input@44}};
+
+ [<<"4"/utf8>>, <<"4"/utf8>> | Input@45] ->
+ {ok, {44, Input@45}};
+
+ [<<"4"/utf8>>, <<"5"/utf8>> | Input@46] ->
+ {ok, {45, Input@46}};
+
+ [<<"4"/utf8>>, <<"6"/utf8>> | Input@47] ->
+ {ok, {46, Input@47}};
+
+ [<<"4"/utf8>>, <<"7"/utf8>> | Input@48] ->
+ {ok, {47, Input@48}};
+
+ [<<"4"/utf8>>, <<"8"/utf8>> | Input@49] ->
+ {ok, {48, Input@49}};
+
+ [<<"4"/utf8>>, <<"9"/utf8>> | Input@50] ->
+ {ok, {49, Input@50}};
+
+ [<<"5"/utf8>>, <<"0"/utf8>> | Input@51] ->
+ {ok, {50, Input@51}};
+
+ [<<"5"/utf8>>, <<"1"/utf8>> | Input@52] ->
+ {ok, {51, Input@52}};
+
+ [<<"5"/utf8>>, <<"2"/utf8>> | Input@53] ->
+ {ok, {52, Input@53}};
+
+ [<<"5"/utf8>>, <<"3"/utf8>> | Input@54] ->
+ {ok, {53, Input@54}};
+
+ [<<"5"/utf8>>, <<"4"/utf8>> | Input@55] ->
+ {ok, {54, Input@55}};
+
+ [<<"5"/utf8>>, <<"5"/utf8>> | Input@56] ->
+ {ok, {55, Input@56}};
+
+ [<<"5"/utf8>>, <<"6"/utf8>> | Input@57] ->
+ {ok, {56, Input@57}};
+
+ [<<"5"/utf8>>, <<"7"/utf8>> | Input@58] ->
+ {ok, {57, Input@58}};
+
+ [<<"5"/utf8>>, <<"8"/utf8>> | Input@59] ->
+ {ok, {58, Input@59}};
+
+ [<<"5"/utf8>>, <<"9"/utf8>> | Input@60] ->
+ {ok, {59, Input@60}};
+
+ [G | _] ->
+ {error, {unexpected, G, Expected}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, Expected}}
+ end.
+
+-spec parse_hour_minute(list(binary())) -> {ok,
+ {{integer(), integer()}, list(binary())}} |
+ {error, parse_error()}.
+parse_hour_minute(Input) ->
+ do(case Input of
+ [<<"0"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@1] ->
+ {ok, {0, Input@1}};
+
+ [<<"0"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@2] ->
+ {ok, {1, Input@2}};
+
+ [<<"0"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@3] ->
+ {ok, {2, Input@3}};
+
+ [<<"0"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@4] ->
+ {ok, {3, Input@4}};
+
+ [<<"0"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@5] ->
+ {ok, {4, Input@5}};
+
+ [<<"0"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@6] ->
+ {ok, {5, Input@6}};
+
+ [<<"0"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@7] ->
+ {ok, {6, Input@7}};
+
+ [<<"0"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@8] ->
+ {ok, {7, Input@8}};
+
+ [<<"0"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@9] ->
+ {ok, {8, Input@9}};
+
+ [<<"0"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@10] ->
+ {ok, {9, Input@10}};
+
+ [<<"1"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@11] ->
+ {ok, {10, Input@11}};
+
+ [<<"1"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@12] ->
+ {ok, {11, Input@12}};
+
+ [<<"1"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@13] ->
+ {ok, {12, Input@13}};
+
+ [<<"1"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@14] ->
+ {ok, {13, Input@14}};
+
+ [<<"1"/utf8>>, <<"4"/utf8>>, <<":"/utf8>> | Input@15] ->
+ {ok, {14, Input@15}};
+
+ [<<"1"/utf8>>, <<"5"/utf8>>, <<":"/utf8>> | Input@16] ->
+ {ok, {15, Input@16}};
+
+ [<<"1"/utf8>>, <<"6"/utf8>>, <<":"/utf8>> | Input@17] ->
+ {ok, {16, Input@17}};
+
+ [<<"1"/utf8>>, <<"7"/utf8>>, <<":"/utf8>> | Input@18] ->
+ {ok, {17, Input@18}};
+
+ [<<"1"/utf8>>, <<"8"/utf8>>, <<":"/utf8>> | Input@19] ->
+ {ok, {18, Input@19}};
+
+ [<<"1"/utf8>>, <<"9"/utf8>>, <<":"/utf8>> | Input@20] ->
+ {ok, {19, Input@20}};
+
+ [<<"2"/utf8>>, <<"0"/utf8>>, <<":"/utf8>> | Input@21] ->
+ {ok, {20, Input@21}};
+
+ [<<"2"/utf8>>, <<"1"/utf8>>, <<":"/utf8>> | Input@22] ->
+ {ok, {21, Input@22}};
+
+ [<<"2"/utf8>>, <<"2"/utf8>>, <<":"/utf8>> | Input@23] ->
+ {ok, {22, Input@23}};
+
+ [<<"2"/utf8>>, <<"3"/utf8>>, <<":"/utf8>> | Input@24] ->
+ {ok, {23, Input@24}};
+
+ [G | _] ->
+ {error, {unexpected, G, <<"time"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"time"/utf8>>}}
+ end, fun(Hours, Input@25) ->
+ do(
+ parse_number_under_60(Input@25, <<"minutes"/utf8>>),
+ fun(Minutes, Input@26) -> {ok, {{Hours, Minutes}, Input@26}} end
+ )
+ end).
+
+-spec parse_time_s_ms(list(binary())) -> {ok,
+ {{integer(), integer()}, list(binary())}} |
+ {error, parse_error()}.
+parse_time_s_ms(Input) ->
+ case Input of
+ [<<":"/utf8>> | Input@1] ->
+ do(
+ parse_number_under_60(Input@1, <<"seconds"/utf8>>),
+ fun(Seconds, Input@2) -> case Input@2 of
+ [<<"."/utf8>> | Input@3] ->
+ parse_time_ms(Input@3, Seconds, 0);
+
+ _ ->
+ {ok, {{Seconds, 0}, Input@2}}
+ end end
+ );
+
+ _ ->
+ {ok, {{0, 0}, Input}}
+ end.
+
+-spec parse_time_minute(list(binary()), integer()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_time_minute(Input, Hours) ->
+ do(
+ parse_number_under_60(Input, <<"minutes"/utf8>>),
+ fun(Minutes, Input@1) ->
+ do(
+ parse_time_s_ms(Input@1),
+ fun(_use0, Input@2) ->
+ {Seconds, Ms} = _use0,
+ Time = {time_value, Hours, Minutes, Seconds, Ms},
+ {ok, {{time, Time}, Input@2}}
+ end
+ )
+ end
+ ).
+
+-spec parse_time_value(list(binary())) -> {ok, {time(), list(binary())}} |
+ {error, parse_error()}.
+parse_time_value(Input) ->
+ do(
+ parse_hour_minute(Input),
+ fun(_use0, Input@1) ->
+ {Hours, Minutes} = _use0,
+ do(
+ parse_time_s_ms(Input@1),
+ fun(_use0@1, Input@2) ->
+ {Seconds, Ms} = _use0@1,
+ Time = {time_value, Hours, Minutes, Seconds, Ms},
+ {ok, {Time, Input@2}}
+ end
+ )
+ end
+ ).
+
+-spec parse_offset_hours(list(binary()), sign()) -> {ok,
+ {offset(), list(binary())}} |
+ {error, parse_error()}.
+parse_offset_hours(Input, Sign) ->
+ do(
+ parse_hour_minute(Input),
+ fun(_use0, Input@1) ->
+ {Hours, Minutes} = _use0,
+ {ok, {{offset, Sign, Hours, Minutes}, Input@1}}
+ end
+ ).
+
+-spec parse_offset(list(binary())) -> {ok, {offset(), list(binary())}} |
+ {error, parse_error()}.
+parse_offset(Input) ->
+ case Input of
+ [<<"Z"/utf8>> | Input@1] ->
+ {ok, {{offset, positive, 0, 0}, Input@1}};
+
+ [<<"+"/utf8>> | Input@2] ->
+ parse_offset_hours(Input@2, positive);
+
+ [<<"-"/utf8>> | Input@3] ->
+ parse_offset_hours(Input@3, negative);
+
+ _ ->
+ {ok, {local, Input}}
+ end.
+
+-spec parse_date_end(list(binary()), integer(), integer(), integer()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_date_end(Input, Year, Month, Day) ->
+ Date = {date_value, Year, Month, Day},
+ case Input of
+ [<<" "/utf8>> | Input@1] ->
+ do(
+ parse_time_value(Input@1),
+ fun(Time, Input@2) ->
+ do(
+ parse_offset(Input@2),
+ fun(Offset, Input@3) ->
+ {ok,
+ {{date_time,
+ {date_time_value, Date, Time, Offset}},
+ Input@3}}
+ end
+ )
+ end
+ );
+
+ [<<"T"/utf8>> | Input@1] ->
+ do(
+ parse_time_value(Input@1),
+ fun(Time, Input@2) ->
+ do(
+ parse_offset(Input@2),
+ fun(Offset, Input@3) ->
+ {ok,
+ {{date_time,
+ {date_time_value, Date, Time, Offset}},
+ Input@3}}
+ end
+ )
+ end
+ );
+
+ _ ->
+ {ok, {{date, Date}, Input}}
+ end.
+
+-spec parse_date_day(list(binary()), integer(), integer()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_date_day(Input, Year, Month) ->
+ case Input of
+ [<<"0"/utf8>>, <<"1"/utf8>> | Input@1] ->
+ parse_date_end(Input@1, Year, Month, 1);
+
+ [<<"0"/utf8>>, <<"2"/utf8>> | Input@2] ->
+ parse_date_end(Input@2, Year, Month, 2);
+
+ [<<"0"/utf8>>, <<"3"/utf8>> | Input@3] ->
+ parse_date_end(Input@3, Year, Month, 3);
+
+ [<<"0"/utf8>>, <<"4"/utf8>> | Input@4] ->
+ parse_date_end(Input@4, Year, Month, 4);
+
+ [<<"0"/utf8>>, <<"5"/utf8>> | Input@5] ->
+ parse_date_end(Input@5, Year, Month, 5);
+
+ [<<"0"/utf8>>, <<"6"/utf8>> | Input@6] ->
+ parse_date_end(Input@6, Year, Month, 6);
+
+ [<<"0"/utf8>>, <<"7"/utf8>> | Input@7] ->
+ parse_date_end(Input@7, Year, Month, 7);
+
+ [<<"0"/utf8>>, <<"8"/utf8>> | Input@8] ->
+ parse_date_end(Input@8, Year, Month, 8);
+
+ [<<"0"/utf8>>, <<"9"/utf8>> | Input@9] ->
+ parse_date_end(Input@9, Year, Month, 9);
+
+ [<<"1"/utf8>>, <<"0"/utf8>> | Input@10] ->
+ parse_date_end(Input@10, Year, Month, 10);
+
+ [<<"1"/utf8>>, <<"1"/utf8>> | Input@11] ->
+ parse_date_end(Input@11, Year, Month, 11);
+
+ [<<"1"/utf8>>, <<"2"/utf8>> | Input@12] ->
+ parse_date_end(Input@12, Year, Month, 12);
+
+ [<<"1"/utf8>>, <<"3"/utf8>> | Input@13] ->
+ parse_date_end(Input@13, Year, Month, 13);
+
+ [<<"1"/utf8>>, <<"4"/utf8>> | Input@14] ->
+ parse_date_end(Input@14, Year, Month, 14);
+
+ [<<"1"/utf8>>, <<"5"/utf8>> | Input@15] ->
+ parse_date_end(Input@15, Year, Month, 15);
+
+ [<<"1"/utf8>>, <<"6"/utf8>> | Input@16] ->
+ parse_date_end(Input@16, Year, Month, 16);
+
+ [<<"1"/utf8>>, <<"7"/utf8>> | Input@17] ->
+ parse_date_end(Input@17, Year, Month, 17);
+
+ [<<"1"/utf8>>, <<"8"/utf8>> | Input@18] ->
+ parse_date_end(Input@18, Year, Month, 18);
+
+ [<<"1"/utf8>>, <<"9"/utf8>> | Input@19] ->
+ parse_date_end(Input@19, Year, Month, 19);
+
+ [<<"2"/utf8>>, <<"0"/utf8>> | Input@20] ->
+ parse_date_end(Input@20, Year, Month, 20);
+
+ [<<"2"/utf8>>, <<"1"/utf8>> | Input@21] ->
+ parse_date_end(Input@21, Year, Month, 21);
+
+ [<<"2"/utf8>>, <<"2"/utf8>> | Input@22] ->
+ parse_date_end(Input@22, Year, Month, 22);
+
+ [<<"2"/utf8>>, <<"3"/utf8>> | Input@23] ->
+ parse_date_end(Input@23, Year, Month, 23);
+
+ [<<"2"/utf8>>, <<"4"/utf8>> | Input@24] ->
+ parse_date_end(Input@24, Year, Month, 24);
+
+ [<<"2"/utf8>>, <<"5"/utf8>> | Input@25] ->
+ parse_date_end(Input@25, Year, Month, 25);
+
+ [<<"2"/utf8>>, <<"6"/utf8>> | Input@26] ->
+ parse_date_end(Input@26, Year, Month, 26);
+
+ [<<"2"/utf8>>, <<"7"/utf8>> | Input@27] ->
+ parse_date_end(Input@27, Year, Month, 27);
+
+ [<<"2"/utf8>>, <<"8"/utf8>> | Input@28] ->
+ parse_date_end(Input@28, Year, Month, 28);
+
+ [<<"2"/utf8>>, <<"9"/utf8>> | Input@29] ->
+ parse_date_end(Input@29, Year, Month, 29);
+
+ [<<"3"/utf8>>, <<"0"/utf8>> | Input@30] ->
+ parse_date_end(Input@30, Year, Month, 30);
+
+ [<<"3"/utf8>>, <<"1"/utf8>> | Input@31] ->
+ parse_date_end(Input@31, Year, Month, 31);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"date day"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"date day"/utf8>>}}
+ end.
+
+-spec parse_date(list(binary()), integer()) -> {ok, {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_date(Input, Year) ->
+ case Input of
+ [<<"0"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@1] ->
+ parse_date_day(Input@1, Year, 1);
+
+ [<<"0"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@2] ->
+ parse_date_day(Input@2, Year, 2);
+
+ [<<"0"/utf8>>, <<"3"/utf8>>, <<"-"/utf8>> | Input@3] ->
+ parse_date_day(Input@3, Year, 3);
+
+ [<<"0"/utf8>>, <<"4"/utf8>>, <<"-"/utf8>> | Input@4] ->
+ parse_date_day(Input@4, Year, 4);
+
+ [<<"0"/utf8>>, <<"5"/utf8>>, <<"-"/utf8>> | Input@5] ->
+ parse_date_day(Input@5, Year, 5);
+
+ [<<"0"/utf8>>, <<"6"/utf8>>, <<"-"/utf8>> | Input@6] ->
+ parse_date_day(Input@6, Year, 6);
+
+ [<<"0"/utf8>>, <<"7"/utf8>>, <<"-"/utf8>> | Input@7] ->
+ parse_date_day(Input@7, Year, 7);
+
+ [<<"0"/utf8>>, <<"8"/utf8>>, <<"-"/utf8>> | Input@8] ->
+ parse_date_day(Input@8, Year, 8);
+
+ [<<"0"/utf8>>, <<"9"/utf8>>, <<"-"/utf8>> | Input@9] ->
+ parse_date_day(Input@9, Year, 9);
+
+ [<<"1"/utf8>>, <<"0"/utf8>>, <<"-"/utf8>> | Input@10] ->
+ parse_date_day(Input@10, Year, 10);
+
+ [<<"1"/utf8>>, <<"1"/utf8>>, <<"-"/utf8>> | Input@11] ->
+ parse_date_day(Input@11, Year, 11);
+
+ [<<"1"/utf8>>, <<"2"/utf8>>, <<"-"/utf8>> | Input@12] ->
+ parse_date_day(Input@12, Year, 12);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"date month"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"date month"/utf8>>}}
+ end.
+
+-spec parse_number(list(binary()), integer(), sign()) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_number(Input, Number, Sign) ->
+ case Input of
+ [<<"_"/utf8>> | Input@1] ->
+ parse_number(Input@1, Number, Sign);
+
+ [<<"0"/utf8>> | Input@2] ->
+ parse_number(Input@2, (Number * 10) + 0, Sign);
+
+ [<<"1"/utf8>> | Input@3] ->
+ parse_number(Input@3, (Number * 10) + 1, Sign);
+
+ [<<"2"/utf8>> | Input@4] ->
+ parse_number(Input@4, (Number * 10) + 2, Sign);
+
+ [<<"3"/utf8>> | Input@5] ->
+ parse_number(Input@5, (Number * 10) + 3, Sign);
+
+ [<<"4"/utf8>> | Input@6] ->
+ parse_number(Input@6, (Number * 10) + 4, Sign);
+
+ [<<"5"/utf8>> | Input@7] ->
+ parse_number(Input@7, (Number * 10) + 5, Sign);
+
+ [<<"6"/utf8>> | Input@8] ->
+ parse_number(Input@8, (Number * 10) + 6, Sign);
+
+ [<<"7"/utf8>> | Input@9] ->
+ parse_number(Input@9, (Number * 10) + 7, Sign);
+
+ [<<"8"/utf8>> | Input@10] ->
+ parse_number(Input@10, (Number * 10) + 8, Sign);
+
+ [<<"9"/utf8>> | Input@11] ->
+ parse_number(Input@11, (Number * 10) + 9, Sign);
+
+ [<<"-"/utf8>> | Input@12] ->
+ parse_date(Input@12, Number);
+
+ [<<":"/utf8>> | Input@13] when Number < 24 ->
+ parse_time_minute(Input@13, Number);
+
+ [<<"."/utf8>> | Input@14] ->
+ parse_float(Input@14, gleam@int:to_float(Number), Sign, 0.1);
+
+ [<<"e"/utf8>>, <<"+"/utf8>> | Input@15] ->
+ parse_exponent(
+ Input@15,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ [<<"e"/utf8>>, <<"-"/utf8>> | Input@16] ->
+ parse_exponent(
+ Input@16,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ negative
+ );
+
+ [<<"e"/utf8>> | Input@17] ->
+ parse_exponent(
+ Input@17,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ [<<"E"/utf8>>, <<"+"/utf8>> | Input@18] ->
+ parse_exponent(
+ Input@18,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ [<<"E"/utf8>>, <<"-"/utf8>> | Input@19] ->
+ parse_exponent(
+ Input@19,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ negative
+ );
+
+ [<<"E"/utf8>> | Input@20] ->
+ parse_exponent(
+ Input@20,
+ gleam@int:to_float(Number),
+ Sign,
+ 0,
+ positive
+ );
+
+ Input@21 ->
+ Number@1 = case Sign of
+ positive ->
+ Number;
+
+ negative ->
+ - Number
+ end,
+ {ok, {{int, Number@1}, Input@21}}
+ end.
+
+-spec reverse_arrays_of_tables(toml()) -> toml().
+reverse_arrays_of_tables(Toml) ->
+ case Toml of
+ {array_of_tables, Tables} ->
+ {array_of_tables, reverse_arrays_of_tables_array(Tables, [])};
+
+ {table, Table} ->
+ {table, reverse_arrays_of_tables_table(Table)};
+
+ _ ->
+ Toml
+ end.
+
+-spec reverse_arrays_of_tables_table(gleam@map:map_(binary(), toml())) -> gleam@map:map_(binary(), toml()).
+reverse_arrays_of_tables_table(Table) ->
+ gleam@map:map_values(Table, fun(_, V) -> reverse_arrays_of_tables(V) end).
+
+-spec reverse_arrays_of_tables_array(
+ list(gleam@map:map_(binary(), toml())),
+ list(gleam@map:map_(binary(), toml()))
+) -> list(gleam@map:map_(binary(), toml())).
+reverse_arrays_of_tables_array(Array, Acc) ->
+ case Array of
+ [] ->
+ Acc;
+
+ [First | Rest] ->
+ First@1 = reverse_arrays_of_tables_table(First),
+ reverse_arrays_of_tables_array(Rest, [First@1 | Acc])
+ end.
+
+-spec parse_inline_table_property(
+ list(binary()),
+ gleam@map:map_(binary(), toml())
+) -> {ok, {gleam@map:map_(binary(), toml()), list(binary())}} |
+ {error, parse_error()}.
+parse_inline_table_property(Input, Properties) ->
+ Input@1 = skip_whitespace(Input),
+ do(
+ parse_key(Input@1, []),
+ fun(Key, Input@2) ->
+ Input@3 = skip_line_whitespace(Input@2),
+ expect(
+ Input@3,
+ <<"="/utf8>>,
+ fun(Input@4) ->
+ Input@5 = skip_line_whitespace(Input@4),
+ do(
+ parse_value(Input@5),
+ fun(Value, Input@6) ->
+ case insert(Properties, Key, Value) of
+ {ok, Properties@1} ->
+ {ok, {Properties@1, Input@6}};
+
+ {error, E} ->
+ {error, E}
+ end
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_value(list(binary())) -> {ok, {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_value(Input) ->
+ case Input of
+ [<<"t"/utf8>>, <<"r"/utf8>>, <<"u"/utf8>>, <<"e"/utf8>> | Input@1] ->
+ {ok, {{bool, true}, Input@1}};
+
+ [<<"f"/utf8>>,
+ <<"a"/utf8>>,
+ <<"l"/utf8>>,
+ <<"s"/utf8>>,
+ <<"e"/utf8>> |
+ Input@2] ->
+ {ok, {{bool, false}, Input@2}};
+
+ [<<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@3] ->
+ {ok, {{nan, positive}, Input@3}};
+
+ [<<"+"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@4] ->
+ {ok, {{nan, positive}, Input@4}};
+
+ [<<"-"/utf8>>, <<"n"/utf8>>, <<"a"/utf8>>, <<"n"/utf8>> | Input@5] ->
+ {ok, {{nan, negative}, Input@5}};
+
+ [<<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@6] ->
+ {ok, {{infinity, positive}, Input@6}};
+
+ [<<"+"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@7] ->
+ {ok, {{infinity, positive}, Input@7}};
+
+ [<<"-"/utf8>>, <<"i"/utf8>>, <<"n"/utf8>>, <<"f"/utf8>> | Input@8] ->
+ {ok, {{infinity, negative}, Input@8}};
+
+ [<<"["/utf8>> | Input@9] ->
+ parse_array(Input@9, []);
+
+ [<<"{"/utf8>> | Input@10] ->
+ parse_inline_table(Input@10, gleam@map:new());
+
+ [<<"0"/utf8>>, <<"x"/utf8>> | Input@11] ->
+ parse_hex(Input@11, 0, positive);
+
+ [<<"+"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@12] ->
+ parse_hex(Input@12, 0, positive);
+
+ [<<"-"/utf8>>, <<"0"/utf8>>, <<"x"/utf8>> | Input@13] ->
+ parse_hex(Input@13, 0, negative);
+
+ [<<"0"/utf8>>, <<"o"/utf8>> | Input@14] ->
+ parse_octal(Input@14, 0, positive);
+
+ [<<"+"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@15] ->
+ parse_octal(Input@15, 0, positive);
+
+ [<<"-"/utf8>>, <<"0"/utf8>>, <<"o"/utf8>> | Input@16] ->
+ parse_octal(Input@16, 0, negative);
+
+ [<<"0"/utf8>>, <<"b"/utf8>> | Input@17] ->
+ parse_binary(Input@17, 0, positive);
+
+ [<<"+"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@18] ->
+ parse_binary(Input@18, 0, positive);
+
+ [<<"-"/utf8>>, <<"0"/utf8>>, <<"b"/utf8>> | Input@19] ->
+ parse_binary(Input@19, 0, negative);
+
+ [<<"+"/utf8>> | Input@20] ->
+ parse_number(Input@20, 0, positive);
+
+ [<<"-"/utf8>> | Input@21] ->
+ parse_number(Input@21, 0, negative);
+
+ [<<"0"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"1"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"2"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"3"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"4"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"5"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"6"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"7"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"8"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"9"/utf8>> | _] ->
+ parse_number(Input, 0, positive);
+
+ [<<"\""/utf8>>, <<"\""/utf8>>, <<"\""/utf8>> | Input@22] ->
+ parse_multi_line_string(Input@22, <<""/utf8>>);
+
+ [<<"\""/utf8>> | Input@23] ->
+ parse_string(Input@23, <<""/utf8>>);
+
+ [<<"'"/utf8>>, <<"'"/utf8>>, <<"'"/utf8>> | Input@24] ->
+ parse_multi_line_literal_string(Input@24, <<""/utf8>>);
+
+ [<<"'"/utf8>> | Input@25] ->
+ parse_literal_string(Input@25, <<""/utf8>>);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"value"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"value"/utf8>>}}
+ end.
+
+-spec parse_inline_table(list(binary()), gleam@map:map_(binary(), toml())) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_inline_table(Input, Properties) ->
+ Input@1 = skip_whitespace(Input),
+ case Input@1 of
+ [<<"}"/utf8>> | Input@2] ->
+ {ok, {{inline_table, Properties}, Input@2}};
+
+ _ ->
+ case parse_inline_table_property(Input@1, Properties) of
+ {ok, {Properties@1, Input@3}} ->
+ Input@4 = skip_whitespace(Input@3),
+ case Input@4 of
+ [<<"}"/utf8>> | Input@5] ->
+ {ok, {{inline_table, Properties@1}, Input@5}};
+
+ [<<","/utf8>> | Input@6] ->
+ Input@7 = skip_whitespace(Input@6),
+ parse_inline_table(Input@7, Properties@1);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"}"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"}"/utf8>>}}
+ end;
+
+ {error, E} ->
+ {error, E}
+ end
+ end.
+
+-spec parse_key_value(list(binary()), gleam@map:map_(binary(), toml())) -> {ok,
+ {gleam@map:map_(binary(), toml()), list(binary())}} |
+ {error, parse_error()}.
+parse_key_value(Input, Toml) ->
+ do(
+ parse_key(Input, []),
+ fun(Key, Input@1) ->
+ Input@2 = skip_line_whitespace(Input@1),
+ expect(
+ Input@2,
+ <<"="/utf8>>,
+ fun(Input@3) ->
+ Input@4 = skip_line_whitespace(Input@3),
+ do(
+ parse_value(Input@4),
+ fun(Value, Input@5) -> case insert(Toml, Key, Value) of
+ {ok, Toml@1} ->
+ {ok, {Toml@1, Input@5}};
+
+ {error, E} ->
+ {error, E}
+ end end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_table(list(binary()), gleam@map:map_(binary(), toml())) -> {ok,
+ {gleam@map:map_(binary(), toml()), list(binary())}} |
+ {error, parse_error()}.
+parse_table(Input, Toml) ->
+ Input@1 = skip_whitespace(Input),
+ case Input@1 of
+ [<<"["/utf8>> | _] ->
+ {ok, {Toml, Input@1}};
+
+ [] ->
+ {ok, {Toml, Input@1}};
+
+ _ ->
+ case parse_key_value(Input@1, Toml) of
+ {ok, {Toml@1, Input@2}} ->
+ case skip_line_whitespace(Input@2) of
+ [] ->
+ {ok, {Toml@1, []}};
+
+ [<<"\n"/utf8>> | In] ->
+ parse_table(In, Toml@1);
+
+ [<<"\r\n"/utf8>> | In] ->
+ parse_table(In, Toml@1);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"\n"/utf8>>}}
+ end;
+
+ E ->
+ E
+ end
+ end.
+
+-spec parse_array_of_tables(list(binary())) -> {ok,
+ {{list(binary()), gleam@map:map_(binary(), toml())}, list(binary())}} |
+ {error, parse_error()}.
+parse_array_of_tables(Input) ->
+ Input@1 = skip_line_whitespace(Input),
+ do(
+ parse_key(Input@1, []),
+ fun(Key, Input@2) ->
+ expect(
+ Input@2,
+ <<"]"/utf8>>,
+ fun(Input@3) ->
+ expect(
+ Input@3,
+ <<"]"/utf8>>,
+ fun(Input@4) ->
+ do(
+ parse_table(Input@4, gleam@map:new()),
+ fun(Table, Input@5) ->
+ {ok, {{Key, Table}, Input@5}}
+ end
+ )
+ end
+ )
+ end
+ )
+ end
+ ).
+
+-spec parse_table_and_header(list(binary())) -> {ok,
+ {{list(binary()), gleam@map:map_(binary(), toml())}, list(binary())}} |
+ {error, parse_error()}.
+parse_table_and_header(Input) ->
+ do(
+ parse_table_header(Input),
+ fun(Key, Input@1) ->
+ do(
+ parse_table(Input@1, gleam@map:new()),
+ fun(Table, Input@2) -> {ok, {{Key, Table}, Input@2}} end
+ )
+ end
+ ).
+
+-spec parse_tables(list(binary()), gleam@map:map_(binary(), toml())) -> {ok,
+ gleam@map:map_(binary(), toml())} |
+ {error, parse_error()}.
+parse_tables(Input, Toml) ->
+ case Input of
+ [<<"["/utf8>>, <<"["/utf8>> | Input@1] ->
+ case parse_array_of_tables(Input@1) of
+ {error, E} ->
+ {error, E};
+
+ {ok, {{Key, Table}, Input@2}} ->
+ case insert(Toml, Key, {array_of_tables, [Table]}) of
+ {ok, Toml@1} ->
+ parse_tables(Input@2, Toml@1);
+
+ {error, E@1} ->
+ {error, E@1}
+ end
+ end;
+
+ [<<"["/utf8>> | Input@3] ->
+ case parse_table_and_header(Input@3) of
+ {error, E@2} ->
+ {error, E@2};
+
+ {ok, {{Key@1, Table@1}, Input@4}} ->
+ case insert(Toml, Key@1, {table, Table@1}) of
+ {ok, Toml@2} ->
+ parse_tables(Input@4, Toml@2);
+
+ {error, E@3} ->
+ {error, E@3}
+ end
+ end;
+
+ [G | _] ->
+ {error, {unexpected, G, <<"["/utf8>>}};
+
+ [] ->
+ {ok, Toml}
+ end.
+
+-spec parse(binary()) -> {ok, gleam@map:map_(binary(), toml())} |
+ {error, parse_error()}.
+parse(Input) ->
+ Input@1 = gleam@string:to_graphemes(Input),
+ Input@2 = drop_comments(Input@1, []),
+ Input@3 = skip_whitespace(Input@2),
+ do(
+ parse_table(Input@3, gleam@map:new()),
+ fun(Toml, Input@4) -> case parse_tables(Input@4, Toml) of
+ {ok, Toml@1} ->
+ {ok, reverse_arrays_of_tables_table(Toml@1)};
+
+ {error, E} ->
+ {error, E}
+ end end
+ ).
+
+-spec parse_array(list(binary()), list(toml())) -> {ok,
+ {toml(), list(binary())}} |
+ {error, parse_error()}.
+parse_array(Input, Elements) ->
+ Input@1 = skip_whitespace(Input),
+ case Input@1 of
+ [<<"]"/utf8>> | Input@2] ->
+ {ok, {{array, gleam@list:reverse(Elements)}, Input@2}};
+
+ _ ->
+ do(
+ parse_value(Input@1),
+ fun(Element, Input@3) ->
+ Elements@1 = [Element | Elements],
+ Input@4 = skip_whitespace(Input@3),
+ case Input@4 of
+ [<<"]"/utf8>> | Input@5] ->
+ {ok,
+ {{array, gleam@list:reverse(Elements@1)},
+ Input@5}};
+
+ [<<","/utf8>> | Input@6] ->
+ Input@7 = skip_whitespace(Input@6),
+ parse_array(Input@7, Elements@1);
+
+ [G | _] ->
+ {error, {unexpected, G, <<"]"/utf8>>}};
+
+ [] ->
+ {error, {unexpected, <<"EOF"/utf8>>, <<"]"/utf8>>}}
+ end
+ end
+ )
+ end.
diff --git a/aoc2023/build/packages/tom/src/tom.gleam b/aoc2023/build/packages/tom/src/tom.gleam
new file mode 100644
index 0000000..e19ce3e
--- /dev/null
+++ b/aoc2023/build/packages/tom/src/tom.gleam
@@ -0,0 +1,1317 @@
+//// A pure Gleam TOML parser!
+////
+//// ```gleam
+//// import tom
+////
+//// const config = "
+//// [person]
+//// name = \"Lucy\"
+//// is_cool = true
+//// "
+////
+//// pub fn main() {
+//// // Parse a string of TOML
+//// let assert Ok(parsed) = tom.parse(config)
+////
+//// // Now you can work with the data directly, or you can use the `get_*`
+//// // functions to retrieve values.
+////
+//// tom.get_string(parsed, ["person", "name"])
+//// // -> Ok("Lucy")
+////
+//// let is_cool = tom.get_bool(parsed, ["person", "is_cool"])
+//// // -> Ok(True)
+//// }
+//// ```
+
+import gleam/int
+import gleam/list
+import gleam/float
+import gleam/string
+import gleam/result
+import gleam/map.{type Map}
+
+/// A TOML document.
+pub type Toml {
+ Int(Int)
+ Float(Float)
+ /// Infinity is a valid number in TOML but Gleam does not support it, so this
+ /// variant represents the infinity values.
+ Infinity(Sign)
+ /// NaN is a valid number in TOML but Gleam does not support it, so this
+ /// variant represents the NaN values.
+ Nan(Sign)
+ Bool(Bool)
+ String(String)
+ Date(Date)
+ Time(Time)
+ DateTime(DateTime)
+ Array(List(Toml))
+ ArrayOfTables(List(Map(String, Toml)))
+ Table(Map(String, Toml))
+ InlineTable(Map(String, Toml))
+}
+
+pub type DateTime {
+ DateTimeValue(date: Date, time: Time, offset: Offset)
+}
+
+pub type Date {
+ DateValue(year: Int, month: Int, day: Int)
+}
+
+pub type Time {
+ TimeValue(hour: Int, minute: Int, second: Int, millisecond: Int)
+}
+
+pub type Offset {
+ Local
+ Offset(direction: Sign, hours: Int, minutes: Int)
+}
+
+pub type Sign {
+ Positive
+ Negative
+}
+
+/// An error that can occur when parsing a TOML document.
+pub type ParseError {
+ /// An unexpected character was encountered when parsing the document.
+ Unexpected(got: String, expected: String)
+ /// More than one items have the same key in the document.
+ KeyAlreadyInUse(key: List(String))
+}
+
+type Tokens =
+ List(String)
+
+type Parsed(a) =
+ Result(#(a, Tokens), ParseError)
+
+/// A number of any kind, returned by the `get_number` function.
+pub type Number {
+ NumberInt(Int)
+ NumberFloat(Float)
+ NumberInfinity(Sign)
+ NumberNan(Sign)
+}
+
+/// An error that can occur when retrieving a value from a TOML document with
+/// one of the `get_*` functions.
+pub type GetError {
+ /// There was no value at the given key.
+ NotFound(key: List(String))
+ /// The value at the given key was not of the expected type.
+ WrongType(key: List(String), expected: String, got: String)
+}
+
+// TODO: test
+/// Get a value of any type from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = 1")
+/// get(parsed, ["a", "b", "c"])
+/// // -> Ok(Int(1))
+/// ```
+///
+pub fn get(toml: Map(String, Toml), key: List(String)) -> Result(Toml, GetError) {
+ case key {
+ [] -> Error(NotFound([]))
+ [k] -> result.replace_error(map.get(toml, k), NotFound([k]))
+ [k, ..key] -> {
+ case map.get(toml, k) {
+ Ok(Table(t)) -> push_key(get(t, key), k)
+ Ok(other) -> Error(WrongType([k], "Table", classify(other)))
+ Error(_) -> Error(NotFound([k]))
+ }
+ }
+ }
+}
+
+// TODO: test
+/// Get an int from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = 1")
+/// get_int(parsed, ["a", "b", "c"])
+/// // -> Ok(1)
+/// ```
+///
+pub fn get_int(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Int, GetError) {
+ case get(toml, key) {
+ Ok(Int(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "Int", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a float from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = 1.1")
+/// get_float(parsed, ["a", "b", "c"])
+/// // -> Ok(1.1)
+/// ```
+///
+pub fn get_float(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Float, GetError) {
+ case get(toml, key) {
+ Ok(Float(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "Float", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a bool from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = true")
+/// get_bool(parsed, ["a", "b", "c"])
+/// // -> Ok(True)
+/// ```
+///
+pub fn get_bool(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Bool, GetError) {
+ case get(toml, key) {
+ Ok(Bool(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "Bool", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a string from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = \"ok\"")
+/// get_string(parsed, ["a", "b", "c"])
+/// // -> Ok("ok")
+/// ```
+///
+pub fn get_string(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(String, GetError) {
+ case get(toml, key) {
+ Ok(String(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "String", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a date from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = 1979-05-27")
+/// get_date(parsed, ["a", "b", "c"])
+/// // -> Ok("1979-05-27")
+/// ```
+///
+pub fn get_date(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Date, GetError) {
+ case get(toml, key) {
+ Ok(Date(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "Date", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a time from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = 07:32:00")
+/// get_time(parsed, ["a", "b", "c"])
+/// // -> Ok("07:32:00")
+/// ```
+///
+pub fn get_time(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Time, GetError) {
+ case get(toml, key) {
+ Ok(Time(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "Time", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a date-time from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = 1979-05-27T07:32:00")
+/// get_date_time(parsed, ["a", "b", "c"])
+/// // -> Ok("1979-05-27T07:32:00")
+/// ```
+///
+pub fn get_date_time(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(DateTime, GetError) {
+ case get(toml, key) {
+ Ok(DateTime(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "DateTime", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get an array from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = [1, 2]")
+/// get_array(parsed, ["a", "b", "c"])
+/// // -> Ok([Int(1), Int(2)])
+/// ```
+///
+pub fn get_array(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(List(Toml), GetError) {
+ case get(toml, key) {
+ Ok(Array(i)) -> Ok(i)
+ Ok(ArrayOfTables(i)) -> Ok(list.map(i, Table))
+ Ok(other) -> Error(WrongType(key, "Array", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a table from a TOML document.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = { d = 1 }")
+/// get_table(parsed, ["a", "b", "c"])
+/// // -> Ok(map.from_list([#("d", Int(1))]))
+/// ```
+///
+pub fn get_table(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Map(String, Toml), GetError) {
+ case get(toml, key) {
+ Ok(Table(i)) -> Ok(i)
+ Ok(InlineTable(i)) -> Ok(i)
+ Ok(other) -> Error(WrongType(key, "Table", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+// TODO: test
+/// Get a number of any kind from a TOML document.
+/// This could be an int, a float, a NaN, or an infinity.
+///
+/// ## Examples
+///
+/// ```gleam
+/// let assert Ok(parsed) = parse("a.b.c = { d = inf }")
+/// get_number(parsed, ["a", "b", "c"])
+/// // -> Ok(NumberInfinity(Positive)))
+/// ```
+///
+pub fn get_number(
+ toml: Map(String, Toml),
+ key: List(String),
+) -> Result(Number, GetError) {
+ case get(toml, key) {
+ Ok(Int(x)) -> Ok(NumberInt(x))
+ Ok(Float(x)) -> Ok(NumberFloat(x))
+ Ok(Nan(x)) -> Ok(NumberNan(x))
+ Ok(Infinity(x)) -> Ok(NumberInfinity(x))
+ Ok(other) -> Error(WrongType(key, "Number", classify(other)))
+ Error(e) -> Error(e)
+ }
+}
+
+fn classify(toml: Toml) -> String {
+ case toml {
+ Int(_) -> "Int"
+ Float(_) -> "Float"
+ Nan(Positive) -> "NaN"
+ Nan(Negative) -> "Negative NaN"
+ Infinity(Positive) -> "Infinity"
+ Infinity(Negative) -> "Negative Infinity"
+ Bool(_) -> "Bool"
+ String(_) -> "String"
+ Date(_) -> "Date"
+ Time(_) -> "Time"
+ DateTime(_) -> "DateTime"
+ Array(_) -> "Array"
+ ArrayOfTables(_) -> "Array"
+ Table(_) -> "Table"
+ InlineTable(_) -> "Table"
+ }
+}
+
+fn push_key(result: Result(t, GetError), key: String) -> Result(t, GetError) {
+ case result {
+ Ok(t) -> Ok(t)
+ Error(NotFound(path)) -> Error(NotFound([key, ..path]))
+ Error(WrongType(path, expected, got)) ->
+ Error(WrongType([key, ..path], expected, got))
+ }
+}
+
+pub fn parse(input: String) -> Result(Map(String, Toml), ParseError) {
+ let input = string.to_graphemes(input)
+ let input = drop_comments(input, [])
+ let input = skip_whitespace(input)
+ use toml, input <- do(parse_table(input, map.new()))
+ case parse_tables(input, toml) {
+ Ok(toml) -> Ok(reverse_arrays_of_tables_table(toml))
+ Error(e) -> Error(e)
+ }
+}
+
+fn parse_tables(
+ input: Tokens,
+ toml: Map(String, Toml),
+) -> Result(Map(String, Toml), ParseError) {
+ case input {
+ ["[", "[", ..input] -> {
+ case parse_array_of_tables(input) {
+ Error(e) -> Error(e)
+ Ok(#(#(key, table), input)) -> {
+ case insert(toml, key, ArrayOfTables([table])) {
+ Ok(toml) -> parse_tables(input, toml)
+ Error(e) -> Error(e)
+ }
+ }
+ }
+ }
+ ["[", ..input] -> {
+ case parse_table_and_header(input) {
+ Error(e) -> Error(e)
+ Ok(#(#(key, table), input)) -> {
+ case insert(toml, key, Table(table)) {
+ Ok(toml) -> parse_tables(input, toml)
+ Error(e) -> Error(e)
+ }
+ }
+ }
+ }
+ [g, ..] -> Error(Unexpected(g, "["))
+ [] -> Ok(toml)
+ }
+}
+
+fn parse_array_of_tables(
+ input: Tokens,
+) -> Parsed(#(List(String), Map(String, Toml))) {
+ let input = skip_line_whitespace(input)
+ use key, input <- do(parse_key(input, []))
+ use input <- expect(input, "]")
+ use input <- expect(input, "]")
+ use table, input <- do(parse_table(input, map.new()))
+ Ok(#(#(key, table), input))
+}
+
+fn parse_table_header(input: Tokens) -> Parsed(List(String)) {
+ let input = skip_line_whitespace(input)
+ use key, input <- do(parse_key(input, []))
+ use input <- expect(input, "]")
+ let input = skip_line_whitespace(input)
+ use input <- expect_end_of_line(input)
+ Ok(#(key, input))
+}
+
+fn parse_table_and_header(
+ input: Tokens,
+) -> Parsed(#(List(String), Map(String, Toml))) {
+ use key, input <- do(parse_table_header(input))
+ use table, input <- do(parse_table(input, map.new()))
+ Ok(#(#(key, table), input))
+}
+
+fn parse_table(
+ input: Tokens,
+ toml: Map(String, Toml),
+) -> Parsed(Map(String, Toml)) {
+ let input = skip_whitespace(input)
+ case input {
+ ["[", ..] | [] -> Ok(#(toml, input))
+ _ ->
+ case parse_key_value(input, toml) {
+ Ok(#(toml, input)) ->
+ case skip_line_whitespace(input) {
+ [] -> Ok(#(toml, []))
+ ["\n", ..in] | ["\r\n", ..in] -> parse_table(in, toml)
+ [g, ..] -> Error(Unexpected(g, "\n"))
+ }
+ e -> e
+ }
+ }
+}
+
+fn parse_key_value(
+ input: Tokens,
+ toml: Map(String, Toml),
+) -> Parsed(Map(String, Toml)) {
+ use key, input <- do(parse_key(input, []))
+ let input = skip_line_whitespace(input)
+ use input <- expect(input, "=")
+ let input = skip_line_whitespace(input)
+ use value, input <- do(parse_value(input))
+ case insert(toml, key, value) {
+ Ok(toml) -> Ok(#(toml, input))
+ Error(e) -> Error(e)
+ }
+}
+
+fn insert(
+ table: Map(String, Toml),
+ key: List(String),
+ value: Toml,
+) -> Result(Map(String, Toml), ParseError) {
+ case insert_loop(table, key, value) {
+ Ok(table) -> Ok(table)
+ Error(path) -> Error(KeyAlreadyInUse(path))
+ }
+}
+
+fn insert_loop(
+ table: Map(String, Toml),
+ key: List(String),
+ value: Toml,
+) -> Result(Map(String, Toml), List(String)) {
+ case key {
+ [] -> panic as "unreachable"
+ [k] -> {
+ case map.get(table, k) {
+ Error(Nil) -> Ok(map.insert(table, k, value))
+ Ok(old) -> merge(table, k, old, value)
+ }
+ }
+ [k, ..key] -> {
+ case map.get(table, k) {
+ Error(Nil) -> {
+ case insert_loop(map.new(), key, value) {
+ Ok(inner) -> Ok(map.insert(table, k, Table(inner)))
+ Error(path) -> Error([k, ..path])
+ }
+ }
+ Ok(ArrayOfTables([inner, ..rest])) -> {
+ case insert_loop(inner, key, value) {
+ Ok(inner) ->
+ Ok(map.insert(table, k, ArrayOfTables([inner, ..rest])))
+ Error(path) -> Error([k, ..path])
+ }
+ }
+ Ok(Table(inner)) -> {
+ case insert_loop(inner, key, value) {
+ Ok(inner) -> Ok(map.insert(table, k, Table(inner)))
+ Error(path) -> Error([k, ..path])
+ }
+ }
+ Ok(_) -> Error([k])
+ }
+ }
+ }
+}
+
+fn merge(
+ table: Map(String, Toml),
+ key: String,
+ old: Toml,
+ new: Toml,
+) -> Result(Map(String, Toml), List(String)) {
+ case old, new {
+ // When both are arrays of tables then they are merged together
+ ArrayOfTables(tables), ArrayOfTables(new) ->
+ Ok(map.insert(table, key, ArrayOfTables(list.append(new, tables))))
+
+ _, _ -> Error([key])
+ }
+}
+
+fn expect_end_of_line(input: Tokens, next: fn(Tokens) -> Parsed(a)) -> Parsed(a) {
+ case input {
+ ["\n", ..input] -> next(input)
+ ["\r\n", ..input] -> next(input)
+ [g, ..] -> Error(Unexpected(g, "\n"))
+ [] -> Error(Unexpected("EOF", "\n"))
+ }
+}
+
+fn parse_value(input) -> Parsed(Toml) {
+ case input {
+ ["t", "r", "u", "e", ..input] -> Ok(#(Bool(True), input))
+ ["f", "a", "l", "s", "e", ..input] -> Ok(#(Bool(False), input))
+
+ ["n", "a", "n", ..input] -> Ok(#(Nan(Positive), input))
+ ["+", "n", "a", "n", ..input] -> Ok(#(Nan(Positive), input))
+ ["-", "n", "a", "n", ..input] -> Ok(#(Nan(Negative), input))
+
+ ["i", "n", "f", ..input] -> Ok(#(Infinity(Positive), input))
+ ["+", "i", "n", "f", ..input] -> Ok(#(Infinity(Positive), input))
+ ["-", "i", "n", "f", ..input] -> Ok(#(Infinity(Negative), input))
+
+ ["[", ..input] -> parse_array(input, [])
+ ["{", ..input] -> parse_inline_table(input, map.new())
+
+ ["0", "x", ..input] -> parse_hex(input, 0, Positive)
+ ["+", "0", "x", ..input] -> parse_hex(input, 0, Positive)
+ ["-", "0", "x", ..input] -> parse_hex(input, 0, Negative)
+
+ ["0", "o", ..input] -> parse_octal(input, 0, Positive)
+ ["+", "0", "o", ..input] -> parse_octal(input, 0, Positive)
+ ["-", "0", "o", ..input] -> parse_octal(input, 0, Negative)
+
+ ["0", "b", ..input] -> parse_binary(input, 0, Positive)
+ ["+", "0", "b", ..input] -> parse_binary(input, 0, Positive)
+ ["-", "0", "b", ..input] -> parse_binary(input, 0, Negative)
+
+ ["+", ..input] -> parse_number(input, 0, Positive)
+ ["-", ..input] -> parse_number(input, 0, Negative)
+ ["0", ..]
+ | ["1", ..]
+ | ["2", ..]
+ | ["3", ..]
+ | ["4", ..]
+ | ["5", ..]
+ | ["6", ..]
+ | ["7", ..]
+ | ["8", ..]
+ | ["9", ..] -> parse_number(input, 0, Positive)
+
+ ["\"", "\"", "\"", ..input] -> parse_multi_line_string(input, "")
+ ["\"", ..input] -> parse_string(input, "")
+
+ ["'", "'", "'", ..input] -> parse_multi_line_literal_string(input, "")
+ ["'", ..input] -> parse_literal_string(input, "")
+
+ [g, ..] -> Error(Unexpected(g, "value"))
+ [] -> Error(Unexpected("EOF", "value"))
+ }
+}
+
+fn parse_key(input: Tokens, segments: List(String)) -> Parsed(List(String)) {
+ use segment, input <- do(parse_key_segment(input))
+ let segments = [segment, ..segments]
+ let input = skip_line_whitespace(input)
+
+ case input {
+ [".", ..input] -> parse_key(input, segments)
+ _ -> Ok(#(list.reverse(segments), input))
+ }
+}
+
+fn parse_key_segment(input: Tokens) -> Parsed(String) {
+ let input = skip_line_whitespace(input)
+ case input {
+ ["=", ..] -> Error(Unexpected("=", "Key"))
+ ["\n", ..] -> Error(Unexpected("\n", "Key"))
+ ["\r\n", ..] -> Error(Unexpected("\r\n", "Key"))
+ ["[", ..] -> Error(Unexpected("[", "Key"))
+ ["\"", ..input] -> parse_key_quoted(input, "\"", "")
+ ["'", ..input] -> parse_key_quoted(input, "'", "")
+ _ -> parse_key_bare(input, "")
+ }
+}
+
+fn parse_key_quoted(
+ input: Tokens,
+ close: String,
+ name: String,
+) -> Parsed(String) {
+ case input {
+ [g, ..input] if g == close -> Ok(#(name, input))
+ [g, ..input] -> parse_key_quoted(input, close, name <> g)
+ [] -> Error(Unexpected("EOF", close))
+ }
+}
+
+fn parse_key_bare(input: Tokens, name: String) -> Parsed(String) {
+ case input {
+ [" ", ..input] if name != "" -> Ok(#(name, input))
+ ["=", ..] if name != "" -> Ok(#(name, input))
+ [".", ..] if name != "" -> Ok(#(name, input))
+ ["]", ..] if name != "" -> Ok(#(name, input))
+ [",", ..] if name != "" -> Error(Unexpected(",", "="))
+ ["\n", ..] if name != "" -> Error(Unexpected("\n", "="))
+ ["\r\n", ..] if name != "" -> Error(Unexpected("\r\n", "="))
+ ["\n", ..] -> Error(Unexpected("\n", "key"))
+ ["\r\n", ..] -> Error(Unexpected("\r\n", "key"))
+ ["]", ..] -> Error(Unexpected("]", "key"))
+ [",", ..] -> Error(Unexpected(",", "key"))
+ [g, ..input] -> parse_key_bare(input, name <> g)
+ [] -> Error(Unexpected("EOF", "key"))
+ }
+}
+
+fn skip_line_whitespace(input: Tokens) -> Tokens {
+ list.drop_while(input, fn(g) { g == " " || g == "\t" })
+}
+
+fn skip_whitespace(input: Tokens) -> Tokens {
+ case input {
+ [" ", ..input] -> skip_whitespace(input)
+ ["\t", ..input] -> skip_whitespace(input)
+ ["\n", ..input] -> skip_whitespace(input)
+ ["\r\n", ..input] -> skip_whitespace(input)
+ input -> input
+ }
+}
+
+fn drop_comments(input: Tokens, acc: Tokens) -> Tokens {
+ case input {
+ ["#", ..input] ->
+ input
+ |> list.drop_while(fn(g) { g != "\n" })
+ |> drop_comments(acc)
+ [g, ..input] -> drop_comments(input, [g, ..acc])
+ [] -> list.reverse(acc)
+ }
+}
+
+fn do(
+ result: Result(#(a, Tokens), ParseError),
+ next: fn(a, Tokens) -> Result(b, ParseError),
+) -> Result(b, ParseError) {
+ case result {
+ Ok(#(a, input)) -> next(a, input)
+ Error(e) -> Error(e)
+ }
+}
+
+fn expect(
+ input: Tokens,
+ expected: String,
+ next: fn(Tokens) -> Parsed(a),
+) -> Parsed(a) {
+ case input {
+ [g, ..input] if g == expected -> next(input)
+ [g, ..] -> Error(Unexpected(g, expected))
+ [] -> Error(Unexpected("EOF", expected))
+ }
+}
+
+fn parse_inline_table(
+ input: Tokens,
+ properties: Map(String, Toml),
+) -> Parsed(Toml) {
+ let input = skip_whitespace(input)
+ case input {
+ ["}", ..input] -> Ok(#(InlineTable(properties), input))
+ _ ->
+ case parse_inline_table_property(input, properties) {
+ Ok(#(properties, input)) -> {
+ let input = skip_whitespace(input)
+ case input {
+ ["}", ..input] -> Ok(#(InlineTable(properties), input))
+ [",", ..input] -> {
+ let input = skip_whitespace(input)
+ parse_inline_table(input, properties)
+ }
+ [g, ..] -> Error(Unexpected(g, "}"))
+ [] -> Error(Unexpected("EOF", "}"))
+ }
+ }
+ Error(e) -> Error(e)
+ }
+ }
+}
+
+fn parse_inline_table_property(
+ input: Tokens,
+ properties: Map(String, Toml),
+) -> Parsed(Map(String, Toml)) {
+ let input = skip_whitespace(input)
+ use key, input <- do(parse_key(input, []))
+ let input = skip_line_whitespace(input)
+ use input <- expect(input, "=")
+ let input = skip_line_whitespace(input)
+ use value, input <- do(parse_value(input))
+ case insert(properties, key, value) {
+ Ok(properties) -> Ok(#(properties, input))
+ Error(e) -> Error(e)
+ }
+}
+
+fn parse_array(input: Tokens, elements: List(Toml)) -> Parsed(Toml) {
+ let input = skip_whitespace(input)
+ case input {
+ ["]", ..input] -> Ok(#(Array(list.reverse(elements)), input))
+ _ -> {
+ use element, input <- do(parse_value(input))
+ let elements = [element, ..elements]
+ let input = skip_whitespace(input)
+ case input {
+ ["]", ..input] -> Ok(#(Array(list.reverse(elements)), input))
+ [",", ..input] -> {
+ let input = skip_whitespace(input)
+ parse_array(input, elements)
+ }
+ [g, ..] -> Error(Unexpected(g, "]"))
+ [] -> Error(Unexpected("EOF", "]"))
+ }
+ }
+ }
+}
+
+fn parse_hex(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) {
+ case input {
+ ["_", ..input] -> parse_hex(input, number, sign)
+ ["0", ..input] -> parse_hex(input, number * 16 + 0, sign)
+ ["1", ..input] -> parse_hex(input, number * 16 + 1, sign)
+ ["2", ..input] -> parse_hex(input, number * 16 + 2, sign)
+ ["3", ..input] -> parse_hex(input, number * 16 + 3, sign)
+ ["4", ..input] -> parse_hex(input, number * 16 + 4, sign)
+ ["5", ..input] -> parse_hex(input, number * 16 + 5, sign)
+ ["6", ..input] -> parse_hex(input, number * 16 + 6, sign)
+ ["7", ..input] -> parse_hex(input, number * 16 + 7, sign)
+ ["8", ..input] -> parse_hex(input, number * 16 + 8, sign)
+ ["9", ..input] -> parse_hex(input, number * 16 + 9, sign)
+ ["a", ..input] -> parse_hex(input, number * 16 + 10, sign)
+ ["b", ..input] -> parse_hex(input, number * 16 + 11, sign)
+ ["c", ..input] -> parse_hex(input, number * 16 + 12, sign)
+ ["d", ..input] -> parse_hex(input, number * 16 + 13, sign)
+ ["e", ..input] -> parse_hex(input, number * 16 + 14, sign)
+ ["f", ..input] -> parse_hex(input, number * 16 + 15, sign)
+ ["A", ..input] -> parse_hex(input, number * 16 + 10, sign)
+ ["B", ..input] -> parse_hex(input, number * 16 + 11, sign)
+ ["C", ..input] -> parse_hex(input, number * 16 + 12, sign)
+ ["D", ..input] -> parse_hex(input, number * 16 + 13, sign)
+ ["E", ..input] -> parse_hex(input, number * 16 + 14, sign)
+ ["F", ..input] -> parse_hex(input, number * 16 + 15, sign)
+
+ // Anything else and the number is terminated
+ input -> {
+ let number = case sign {
+ Positive -> number
+ Negative -> -number
+ }
+ Ok(#(Int(number), input))
+ }
+ }
+}
+
+fn parse_octal(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) {
+ case input {
+ ["_", ..input] -> parse_octal(input, number, sign)
+ ["0", ..input] -> parse_octal(input, number * 8 + 0, sign)
+ ["1", ..input] -> parse_octal(input, number * 8 + 1, sign)
+ ["2", ..input] -> parse_octal(input, number * 8 + 2, sign)
+ ["3", ..input] -> parse_octal(input, number * 8 + 3, sign)
+ ["4", ..input] -> parse_octal(input, number * 8 + 4, sign)
+ ["5", ..input] -> parse_octal(input, number * 8 + 5, sign)
+ ["6", ..input] -> parse_octal(input, number * 8 + 6, sign)
+ ["7", ..input] -> parse_octal(input, number * 8 + 7, sign)
+
+ // Anything else and the number is terminated
+ input -> {
+ let number = case sign {
+ Positive -> number
+ Negative -> -number
+ }
+ Ok(#(Int(number), input))
+ }
+ }
+}
+
+fn parse_binary(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) {
+ case input {
+ ["_", ..input] -> parse_binary(input, number, sign)
+ ["0", ..input] -> parse_binary(input, number * 2 + 0, sign)
+ ["1", ..input] -> parse_binary(input, number * 2 + 1, sign)
+
+ // Anything else and the number is terminated
+ input -> {
+ let number = case sign {
+ Positive -> number
+ Negative -> -number
+ }
+ Ok(#(Int(number), input))
+ }
+ }
+}
+
+fn parse_number(input: Tokens, number: Int, sign: Sign) -> Parsed(Toml) {
+ case input {
+ ["_", ..input] -> parse_number(input, number, sign)
+ ["0", ..input] -> parse_number(input, number * 10 + 0, sign)
+ ["1", ..input] -> parse_number(input, number * 10 + 1, sign)
+ ["2", ..input] -> parse_number(input, number * 10 + 2, sign)
+ ["3", ..input] -> parse_number(input, number * 10 + 3, sign)
+ ["4", ..input] -> parse_number(input, number * 10 + 4, sign)
+ ["5", ..input] -> parse_number(input, number * 10 + 5, sign)
+ ["6", ..input] -> parse_number(input, number * 10 + 6, sign)
+ ["7", ..input] -> parse_number(input, number * 10 + 7, sign)
+ ["8", ..input] -> parse_number(input, number * 10 + 8, sign)
+ ["9", ..input] -> parse_number(input, number * 10 + 9, sign)
+
+ ["-", ..input] -> parse_date(input, number)
+ [":", ..input] if number < 24 -> parse_time_minute(input, number)
+
+ [".", ..input] -> parse_float(input, int.to_float(number), sign, 0.1)
+
+ ["e", "+", ..input] ->
+ parse_exponent(input, int.to_float(number), sign, 0, Positive)
+ ["e", "-", ..input] ->
+ parse_exponent(input, int.to_float(number), sign, 0, Negative)
+ ["e", ..input] ->
+ parse_exponent(input, int.to_float(number), sign, 0, Positive)
+ ["E", "+", ..input] ->
+ parse_exponent(input, int.to_float(number), sign, 0, Positive)
+ ["E", "-", ..input] ->
+ parse_exponent(input, int.to_float(number), sign, 0, Negative)
+ ["E", ..input] ->
+ parse_exponent(input, int.to_float(number), sign, 0, Positive)
+
+ // Anything else and the number is terminated
+ input -> {
+ let number = case sign {
+ Positive -> number
+ Negative -> -number
+ }
+ Ok(#(Int(number), input))
+ }
+ }
+}
+
+fn parse_exponent(
+ input: Tokens,
+ n: Float,
+ n_sign: Sign,
+ ex: Int,
+ ex_sign: Sign,
+) -> Parsed(Toml) {
+ case input {
+ ["_", ..input] -> parse_exponent(input, n, n_sign, ex, ex_sign)
+ ["0", ..input] -> parse_exponent(input, n, n_sign, ex * 10, ex_sign)
+ ["1", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 1, ex_sign)
+ ["2", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 2, ex_sign)
+ ["3", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 3, ex_sign)
+ ["4", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 4, ex_sign)
+ ["5", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 5, ex_sign)
+ ["6", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 6, ex_sign)
+ ["7", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 7, ex_sign)
+ ["8", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 8, ex_sign)
+ ["9", ..input] -> parse_exponent(input, n, n_sign, ex * 10 + 9, ex_sign)
+
+ // Anything else and the number is terminated
+ input -> {
+ let number = case n_sign {
+ Positive -> n
+ Negative -> n *. -1.0
+ }
+ let exponent =
+ int.to_float(case ex_sign {
+ Positive -> ex
+ Negative -> -ex
+ })
+ let multiplier = case float.power(10.0, exponent) {
+ Ok(multiplier) -> multiplier
+ Error(_) -> 1.0
+ }
+ Ok(#(Float(number *. multiplier), input))
+ }
+ }
+}
+
+fn parse_float(
+ input: Tokens,
+ number: Float,
+ sign: Sign,
+ unit: Float,
+) -> Parsed(Toml) {
+ case input {
+ ["_", ..input] -> parse_float(input, number, sign, unit)
+ ["0", ..input] -> parse_float(input, number, sign, unit *. 0.1)
+ ["1", ..input] ->
+ parse_float(input, number +. 1.0 *. unit, sign, unit *. 0.1)
+ ["2", ..input] ->
+ parse_float(input, number +. 2.0 *. unit, sign, unit *. 0.1)
+ ["3", ..input] ->
+ parse_float(input, number +. 3.0 *. unit, sign, unit *. 0.1)
+ ["4", ..input] ->
+ parse_float(input, number +. 4.0 *. unit, sign, unit *. 0.1)
+ ["5", ..input] ->
+ parse_float(input, number +. 5.0 *. unit, sign, unit *. 0.1)
+ ["6", ..input] ->
+ parse_float(input, number +. 6.0 *. unit, sign, unit *. 0.1)
+ ["7", ..input] ->
+ parse_float(input, number +. 7.0 *. unit, sign, unit *. 0.1)
+ ["8", ..input] ->
+ parse_float(input, number +. 8.0 *. unit, sign, unit *. 0.1)
+ ["9", ..input] ->
+ parse_float(input, number +. 9.0 *. unit, sign, unit *. 0.1)
+
+ ["e", "+", ..input] -> parse_exponent(input, number, sign, 0, Positive)
+ ["e", "-", ..input] -> parse_exponent(input, number, sign, 0, Negative)
+ ["e", ..input] -> parse_exponent(input, number, sign, 0, Positive)
+ ["E", "+", ..input] -> parse_exponent(input, number, sign, 0, Positive)
+ ["E", "-", ..input] -> parse_exponent(input, number, sign, 0, Negative)
+ ["E", ..input] -> parse_exponent(input, number, sign, 0, Positive)
+
+ // Anything else and the number is terminated
+ input -> {
+ let number = case sign {
+ Positive -> number
+ Negative -> number *. -1.0
+ }
+ Ok(#(Float(number), input))
+ }
+ }
+}
+
+fn parse_string(input: Tokens, string: String) -> Parsed(Toml) {
+ case input {
+ ["\"", ..input] -> Ok(#(String(string), input))
+ ["\\", "t", ..input] -> parse_string(input, string <> "\t")
+ ["\\", "n", ..input] -> parse_string(input, string <> "\n")
+ ["\\", "r", ..input] -> parse_string(input, string <> "\r")
+ ["\\", "\"", ..input] -> parse_string(input, string <> "\"")
+ ["\\", "\\", ..input] -> parse_string(input, string <> "\\")
+ [] -> Error(Unexpected("EOF", "\""))
+ ["\n", ..] -> Error(Unexpected("\n", "\""))
+ ["\r\n", ..] -> Error(Unexpected("\r\n", "\""))
+ [g, ..input] -> parse_string(input, string <> g)
+ }
+}
+
+fn parse_multi_line_string(input: Tokens, string: String) -> Parsed(Toml) {
+ case input {
+ ["\"", "\"", "\"", ..input] -> Ok(#(String(string), input))
+ ["\\", "\n", ..input] ->
+ parse_multi_line_string(skip_whitespace(input), string)
+ ["\\", "\r\n", ..input] ->
+ parse_multi_line_string(skip_whitespace(input), string)
+ ["\r\n", ..input] if string == "" -> parse_multi_line_string(input, string)
+ ["\n", ..input] if string == "" -> parse_multi_line_string(input, string)
+ ["\r\n", ..input] if string == "" -> parse_multi_line_string(input, string)
+ ["\\", "t", ..input] -> parse_multi_line_string(input, string <> "\t")
+ ["\\", "n", ..input] -> parse_multi_line_string(input, string <> "\n")
+ ["\\", "r", ..input] -> parse_multi_line_string(input, string <> "\r")
+ ["\\", "\"", ..input] -> parse_multi_line_string(input, string <> "\"")
+ ["\\", "\\", ..input] -> parse_multi_line_string(input, string <> "\\")
+ [] -> Error(Unexpected("EOF", "\""))
+ [g, ..input] -> parse_multi_line_string(input, string <> g)
+ }
+}
+
+fn parse_multi_line_literal_string(
+ input: Tokens,
+ string: String,
+) -> Parsed(Toml) {
+ case input {
+ [] -> Error(Unexpected("EOF", "\""))
+ ["'", "'", "'", "'", ..] -> Error(Unexpected("''''", "'''"))
+ ["'", "'", "'", ..input] -> Ok(#(String(string), input))
+ ["\n", ..input] if string == "" ->
+ parse_multi_line_literal_string(input, string)
+ ["\r\n", ..input] if string == "" ->
+ parse_multi_line_literal_string(input, string)
+ [g, ..input] -> parse_multi_line_literal_string(input, string <> g)
+ }
+}
+
+fn parse_literal_string(input: Tokens, string: String) -> Parsed(Toml) {
+ case input {
+ [] -> Error(Unexpected("EOF", "\""))
+ ["\n", ..] -> Error(Unexpected("\n", "'"))
+ ["\r\n", ..] -> Error(Unexpected("\r\n", "'"))
+ ["'", ..input] -> Ok(#(String(string), input))
+ [g, ..input] -> parse_literal_string(input, string <> g)
+ }
+}
+
+fn reverse_arrays_of_tables(toml: Toml) -> Toml {
+ case toml {
+ ArrayOfTables(tables) ->
+ ArrayOfTables(reverse_arrays_of_tables_array(tables, []))
+
+ Table(table) -> Table(reverse_arrays_of_tables_table(table))
+
+ _ -> toml
+ }
+}
+
+fn reverse_arrays_of_tables_table(table: Map(String, Toml)) -> Map(String, Toml) {
+ map.map_values(table, fn(_, v) { reverse_arrays_of_tables(v) })
+}
+
+fn reverse_arrays_of_tables_array(
+ array: List(Map(String, Toml)),
+ acc: List(Map(String, Toml)),
+) -> List(Map(String, Toml)) {
+ case array {
+ [] -> acc
+ [first, ..rest] -> {
+ let first = reverse_arrays_of_tables_table(first)
+ reverse_arrays_of_tables_array(rest, [first, ..acc])
+ }
+ }
+}
+
+fn parse_time_minute(input: Tokens, hours: Int) -> Parsed(Toml) {
+ use minutes, input <- do(parse_number_under_60(input, "minutes"))
+ use #(seconds, ms), input <- do(parse_time_s_ms(input))
+ let time = TimeValue(hours, minutes, seconds, ms)
+ Ok(#(Time(time), input))
+}
+
+fn parse_hour_minute(input: Tokens) -> Parsed(#(Int, Int)) {
+ use hours, input <- do(case input {
+ ["0", "0", ":", ..input] -> Ok(#(0, input))
+ ["0", "1", ":", ..input] -> Ok(#(1, input))
+ ["0", "2", ":", ..input] -> Ok(#(2, input))
+ ["0", "3", ":", ..input] -> Ok(#(3, input))
+ ["0", "4", ":", ..input] -> Ok(#(4, input))
+ ["0", "5", ":", ..input] -> Ok(#(5, input))
+ ["0", "6", ":", ..input] -> Ok(#(6, input))
+ ["0", "7", ":", ..input] -> Ok(#(7, input))
+ ["0", "8", ":", ..input] -> Ok(#(8, input))
+ ["0", "9", ":", ..input] -> Ok(#(9, input))
+ ["1", "0", ":", ..input] -> Ok(#(10, input))
+ ["1", "1", ":", ..input] -> Ok(#(11, input))
+ ["1", "2", ":", ..input] -> Ok(#(12, input))
+ ["1", "3", ":", ..input] -> Ok(#(13, input))
+ ["1", "4", ":", ..input] -> Ok(#(14, input))
+ ["1", "5", ":", ..input] -> Ok(#(15, input))
+ ["1", "6", ":", ..input] -> Ok(#(16, input))
+ ["1", "7", ":", ..input] -> Ok(#(17, input))
+ ["1", "8", ":", ..input] -> Ok(#(18, input))
+ ["1", "9", ":", ..input] -> Ok(#(19, input))
+ ["2", "0", ":", ..input] -> Ok(#(20, input))
+ ["2", "1", ":", ..input] -> Ok(#(21, input))
+ ["2", "2", ":", ..input] -> Ok(#(22, input))
+ ["2", "3", ":", ..input] -> Ok(#(23, input))
+ [g, ..] -> Error(Unexpected(g, "time"))
+ [] -> Error(Unexpected("EOF", "time"))
+ })
+
+ use minutes, input <- do(parse_number_under_60(input, "minutes"))
+ Ok(#(#(hours, minutes), input))
+}
+
+fn parse_time_value(input: Tokens) -> Parsed(Time) {
+ use #(hours, minutes), input <- do(parse_hour_minute(input))
+ use #(seconds, ms), input <- do(parse_time_s_ms(input))
+ let time = TimeValue(hours, minutes, seconds, ms)
+ Ok(#(time, input))
+}
+
+fn parse_time_s_ms(input: Tokens) -> Parsed(#(Int, Int)) {
+ case input {
+ [":", ..input] -> {
+ use seconds, input <- do(parse_number_under_60(input, "seconds"))
+ case input {
+ [".", ..input] -> parse_time_ms(input, seconds, 0)
+ _ -> Ok(#(#(seconds, 0), input))
+ }
+ }
+
+ _ -> Ok(#(#(0, 0), input))
+ }
+}
+
+fn parse_time_ms(input: Tokens, seconds: Int, ms: Int) -> Parsed(#(Int, Int)) {
+ case input {
+ ["0", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 0)
+ ["1", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 1)
+ ["2", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 2)
+ ["3", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 3)
+ ["4", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 4)
+ ["5", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 5)
+ ["6", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 6)
+ ["7", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 7)
+ ["8", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 8)
+ ["9", ..input] if ms < 100_000 -> parse_time_ms(input, seconds, ms * 10 + 9)
+
+ // Anything else and the number is terminated
+ _ -> Ok(#(#(seconds, ms), input))
+ }
+}
+
+fn parse_number_under_60(input: Tokens, expected: String) -> Parsed(Int) {
+ case input {
+ ["0", "0", ..input] -> Ok(#(0, input))
+ ["0", "1", ..input] -> Ok(#(1, input))
+ ["0", "2", ..input] -> Ok(#(2, input))
+ ["0", "3", ..input] -> Ok(#(3, input))
+ ["0", "4", ..input] -> Ok(#(4, input))
+ ["0", "5", ..input] -> Ok(#(5, input))
+ ["0", "6", ..input] -> Ok(#(6, input))
+ ["0", "7", ..input] -> Ok(#(7, input))
+ ["0", "8", ..input] -> Ok(#(8, input))
+ ["0", "9", ..input] -> Ok(#(9, input))
+ ["1", "0", ..input] -> Ok(#(10, input))
+ ["1", "1", ..input] -> Ok(#(11, input))
+ ["1", "2", ..input] -> Ok(#(12, input))
+ ["1", "3", ..input] -> Ok(#(13, input))
+ ["1", "4", ..input] -> Ok(#(14, input))
+ ["1", "5", ..input] -> Ok(#(15, input))
+ ["1", "6", ..input] -> Ok(#(16, input))
+ ["1", "7", ..input] -> Ok(#(17, input))
+ ["1", "8", ..input] -> Ok(#(18, input))
+ ["1", "9", ..input] -> Ok(#(19, input))
+ ["2", "0", ..input] -> Ok(#(20, input))
+ ["2", "1", ..input] -> Ok(#(21, input))
+ ["2", "2", ..input] -> Ok(#(22, input))
+ ["2", "3", ..input] -> Ok(#(23, input))
+ ["2", "4", ..input] -> Ok(#(24, input))
+ ["2", "5", ..input] -> Ok(#(25, input))
+ ["2", "6", ..input] -> Ok(#(26, input))
+ ["2", "7", ..input] -> Ok(#(27, input))
+ ["2", "8", ..input] -> Ok(#(28, input))
+ ["2", "9", ..input] -> Ok(#(29, input))
+ ["3", "0", ..input] -> Ok(#(30, input))
+ ["3", "1", ..input] -> Ok(#(31, input))
+ ["3", "2", ..input] -> Ok(#(32, input))
+ ["3", "3", ..input] -> Ok(#(33, input))
+ ["3", "4", ..input] -> Ok(#(34, input))
+ ["3", "5", ..input] -> Ok(#(35, input))
+ ["3", "6", ..input] -> Ok(#(36, input))
+ ["3", "7", ..input] -> Ok(#(37, input))
+ ["3", "8", ..input] -> Ok(#(38, input))
+ ["3", "9", ..input] -> Ok(#(39, input))
+ ["4", "0", ..input] -> Ok(#(40, input))
+ ["4", "1", ..input] -> Ok(#(41, input))
+ ["4", "2", ..input] -> Ok(#(42, input))
+ ["4", "3", ..input] -> Ok(#(43, input))
+ ["4", "4", ..input] -> Ok(#(44, input))
+ ["4", "5", ..input] -> Ok(#(45, input))
+ ["4", "6", ..input] -> Ok(#(46, input))
+ ["4", "7", ..input] -> Ok(#(47, input))
+ ["4", "8", ..input] -> Ok(#(48, input))
+ ["4", "9", ..input] -> Ok(#(49, input))
+ ["5", "0", ..input] -> Ok(#(50, input))
+ ["5", "1", ..input] -> Ok(#(51, input))
+ ["5", "2", ..input] -> Ok(#(52, input))
+ ["5", "3", ..input] -> Ok(#(53, input))
+ ["5", "4", ..input] -> Ok(#(54, input))
+ ["5", "5", ..input] -> Ok(#(55, input))
+ ["5", "6", ..input] -> Ok(#(56, input))
+ ["5", "7", ..input] -> Ok(#(57, input))
+ ["5", "8", ..input] -> Ok(#(58, input))
+ ["5", "9", ..input] -> Ok(#(59, input))
+
+ [g, ..] -> Error(Unexpected(g, expected))
+ [] -> Error(Unexpected("EOF", expected))
+ }
+}
+
+fn parse_date(input: Tokens, year: Int) -> Parsed(Toml) {
+ case input {
+ ["0", "1", "-", ..input] -> parse_date_day(input, year, 1)
+ ["0", "2", "-", ..input] -> parse_date_day(input, year, 2)
+ ["0", "3", "-", ..input] -> parse_date_day(input, year, 3)
+ ["0", "4", "-", ..input] -> parse_date_day(input, year, 4)
+ ["0", "5", "-", ..input] -> parse_date_day(input, year, 5)
+ ["0", "6", "-", ..input] -> parse_date_day(input, year, 6)
+ ["0", "7", "-", ..input] -> parse_date_day(input, year, 7)
+ ["0", "8", "-", ..input] -> parse_date_day(input, year, 8)
+ ["0", "9", "-", ..input] -> parse_date_day(input, year, 9)
+ ["1", "0", "-", ..input] -> parse_date_day(input, year, 10)
+ ["1", "1", "-", ..input] -> parse_date_day(input, year, 11)
+ ["1", "2", "-", ..input] -> parse_date_day(input, year, 12)
+
+ [g, ..] -> Error(Unexpected(g, "date month"))
+ [] -> Error(Unexpected("EOF", "date month"))
+ }
+}
+
+fn parse_date_day(input: Tokens, year: Int, month: Int) -> Parsed(Toml) {
+ case input {
+ ["0", "1", ..input] -> parse_date_end(input, year, month, 1)
+ ["0", "2", ..input] -> parse_date_end(input, year, month, 2)
+ ["0", "3", ..input] -> parse_date_end(input, year, month, 3)
+ ["0", "4", ..input] -> parse_date_end(input, year, month, 4)
+ ["0", "5", ..input] -> parse_date_end(input, year, month, 5)
+ ["0", "6", ..input] -> parse_date_end(input, year, month, 6)
+ ["0", "7", ..input] -> parse_date_end(input, year, month, 7)
+ ["0", "8", ..input] -> parse_date_end(input, year, month, 8)
+ ["0", "9", ..input] -> parse_date_end(input, year, month, 9)
+ ["1", "0", ..input] -> parse_date_end(input, year, month, 10)
+ ["1", "1", ..input] -> parse_date_end(input, year, month, 11)
+ ["1", "2", ..input] -> parse_date_end(input, year, month, 12)
+ ["1", "3", ..input] -> parse_date_end(input, year, month, 13)
+ ["1", "4", ..input] -> parse_date_end(input, year, month, 14)
+ ["1", "5", ..input] -> parse_date_end(input, year, month, 15)
+ ["1", "6", ..input] -> parse_date_end(input, year, month, 16)
+ ["1", "7", ..input] -> parse_date_end(input, year, month, 17)
+ ["1", "8", ..input] -> parse_date_end(input, year, month, 18)
+ ["1", "9", ..input] -> parse_date_end(input, year, month, 19)
+ ["2", "0", ..input] -> parse_date_end(input, year, month, 20)
+ ["2", "1", ..input] -> parse_date_end(input, year, month, 21)
+ ["2", "2", ..input] -> parse_date_end(input, year, month, 22)
+ ["2", "3", ..input] -> parse_date_end(input, year, month, 23)
+ ["2", "4", ..input] -> parse_date_end(input, year, month, 24)
+ ["2", "5", ..input] -> parse_date_end(input, year, month, 25)
+ ["2", "6", ..input] -> parse_date_end(input, year, month, 26)
+ ["2", "7", ..input] -> parse_date_end(input, year, month, 27)
+ ["2", "8", ..input] -> parse_date_end(input, year, month, 28)
+ ["2", "9", ..input] -> parse_date_end(input, year, month, 29)
+ ["3", "0", ..input] -> parse_date_end(input, year, month, 30)
+ ["3", "1", ..input] -> parse_date_end(input, year, month, 31)
+
+ [g, ..] -> Error(Unexpected(g, "date day"))
+ [] -> Error(Unexpected("EOF", "date day"))
+ }
+}
+
+fn parse_date_end(
+ input: Tokens,
+ year: Int,
+ month: Int,
+ day: Int,
+) -> Parsed(Toml) {
+ let date = DateValue(year, month, day)
+ case input {
+ [" ", ..input] | ["T", ..input] -> {
+ use time, input <- do(parse_time_value(input))
+ use offset, input <- do(parse_offset(input))
+ Ok(#(DateTime(DateTimeValue(date, time, offset)), input))
+ }
+
+ _ -> Ok(#(Date(date), input))
+ }
+}
+
+fn parse_offset(input: Tokens) -> Parsed(Offset) {
+ case input {
+ ["Z", ..input] -> Ok(#(Offset(Positive, 0, 0), input))
+ ["+", ..input] -> parse_offset_hours(input, Positive)
+ ["-", ..input] -> parse_offset_hours(input, Negative)
+ _ -> Ok(#(Local, input))
+ }
+}
+
+fn parse_offset_hours(input: Tokens, sign: Sign) -> Parsed(Offset) {
+ use #(hours, minutes), input <- do(parse_hour_minute(input))
+ Ok(#(Offset(sign, hours, minutes), input))
+}
diff --git a/aoc2023/build/prod/erlang/gleam.lock b/aoc2023/build/prod/erlang/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/prod/erlang/gleam.lock
diff --git a/aoc2023/build/prod/javascript/gleam.lock b/aoc2023/build/prod/javascript/gleam.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc2023/build/prod/javascript/gleam.lock
diff --git a/aoc2023/erl_crash.dump b/aoc2023/erl_crash.dump
new file mode 100644
index 0000000..ef1d35a
--- /dev/null
+++ b/aoc2023/erl_crash.dump
@@ -0,0 +1,67195 @@
+=erl_crash_dump:0.5
+Thu Dec 7 01:00:23 2023
+Slogan: Runtime terminating during boot ({,[{showtime@internal@reports@formatter,-create_test_report/1-fun-4-,1,[{_},{_}]},{gleam@list,do_filter_map,3,[{_},{_}]},{showtime@internal@reports@formatter,create_test_report,1,[{_},{_}]},{showtime@internal@erlang@event_handler,-start/0-fun-1-,2,[{_},{_}]},{gleam@otp@actor,loop,1,[{_},{_}]}]})
+System version: Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] [dtrace]
+Taints:
+Atoms: 11705
+Calling Thread: scheduler:1
+=scheduler:1
+Scheduler Sleep Info Flags:
+Scheduler Sleep Info Aux Work: THR_PRGR_LATER_OP
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 2
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: NONEMPTY_NORMAL | OUT_OF_WORK | HALFTIME_OUT_OF_WORK | NONEMPTY | EXEC
+Current Process: <0.0.0>
+Current Process State: Running
+Current Process Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | ACTIVE_SYS
+Current Process Program counter: 0x0000000103d889fc (init:boot_loop/2 + 84)
+Current Process Limited Stack Trace:
+0x0000000105dda900:SReturn addr 0x3D82348 (<terminate process normally>)
+=scheduler:2
+Scheduler Sleep Info Flags: SLEEPING | POLL_SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:3
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:4
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:5
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:6
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:7
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=scheduler:8
+Scheduler Sleep Info Flags: SLEEPING | TSE_SLEEPING | WAITING
+Scheduler Sleep Info Aux Work:
+Current Port:
+Run Queue Max Length: 0
+Run Queue High Length: 0
+Run Queue Normal Length: 0
+Run Queue Low Length: 0
+Run Queue Port Length: 0
+Run Queue Flags: OUT_OF_WORK | HALFTIME_OUT_OF_WORK
+Current Process:
+=memory
+total: 24121588
+processes: 7426424
+processes_used: 7419720
+system: 16695164
+atom: 327857
+atom_used: 307203
+binary: 475240
+code: 6109634
+ets: 600608
+=hash_table:atom_tab
+size: 8192
+used: 6198
+objs: 11705
+depth: 8
+=index_table:atom_tab
+size: 12288
+limit: 1048576
+entries: 11705
+=hash_table:module_code
+size: 128
+used: 106
+objs: 180
+depth: 4
+=index_table:module_code
+size: 1024
+limit: 65536
+entries: 180
+=hash_table:export_list
+size: 4096
+used: 2753
+objs: 4462
+depth: 7
+=index_table:export_list
+size: 5120
+limit: 524288
+entries: 4462
+=hash_table:export_list
+size: 4096
+used: 2746
+objs: 4441
+depth: 7
+=hash_table:process_reg
+size: 64
+used: 39
+objs: 52
+depth: 5
+=hash_table:fun_table
+size: 1024
+used: 641
+objs: 987
+depth: 5
+=hash_table:node_table
+size: 16
+used: 1
+objs: 1
+depth: 1
+=hash_table:dist_table
+size: 16
+used: 1
+objs: 1
+depth: 1
+=allocated_areas
+sys_misc: 57656
+static: 2107456
+atom_space: 163880 143226
+atom_table: 163977
+module_table: 107736
+export_table: 221604
+export_list: 892400
+register_table: 628
+fun_table: 8306
+module_refs: 8592
+loaded_code: 4870996
+dist_table: 691
+node_table: 291
+bits_bufs_size: 0
+bif_timer: 0
+process_table: 3145728
+port_table: 786432
+ets_misc: 131072
+external_alloc: 4870996
+=allocator:sys_alloc
+option e: true
+option m: libc
+=allocator:temp_alloc[0]
+versions: 2.1 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option mbsd: 3
+option as: gf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 5 5
+mbcs blocks[temp_alloc] size: 0 11288 11288
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1067
+temp_free calls: 1067
+temp_realloc calls: 1
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 1 5 5
+mbcs blocks[temp_alloc] size: 65544 655448 655448
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 1179648 1179648
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 9479
+temp_free calls: 9478
+temp_realloc calls: 134
+mseg_alloc calls: 4
+mseg_dealloc calls: 4
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 1 1
+mbcs blocks[temp_alloc] size: 0 56 56
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 1 1
+mbcs blocks[temp_alloc] size: 0 56 56
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 1 1
+mbcs blocks[temp_alloc] size: 0 56 56
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 1 1
+mbcs blocks[temp_alloc] size: 0 56 56
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1
+temp_free calls: 1
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 4 4
+mbcs blocks[temp_alloc] size: 0 6296 6296
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 616
+temp_free calls: 616
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 5 5
+mbcs blocks[temp_alloc] size: 0 11576 11576
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1049
+temp_free calls: 1049
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:temp_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 90
+option rsbcmt: 80
+option rmbcmt: 100
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: af
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 5 5
+mbcs blocks[temp_alloc] size: 0 6488 6488
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+temp_alloc calls: 1002
+temp_free calls: 1002
+temp_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 6 81 81
+mbcs blocks[sl_alloc] size: 576 41440 41440
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 294912 294912
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 665
+sl_free calls: 659
+sl_realloc calls: 0
+mseg_alloc calls: 2
+mseg_dealloc calls: 2
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 1 6337 6337
+mbcs blocks[sl_alloc] size: 112 1263320 1263320
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 3 3
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 1343488 1343488
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 11588
+sl_free calls: 11587
+sl_realloc calls: 1
+mseg_alloc calls: 19
+mseg_dealloc calls: 19
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 1 1
+mbcs blocks[sl_alloc] size: 0 64 64
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 1
+sl_free calls: 1
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 0
+sl_free calls: 0
+sl_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 156 156
+mbcs blocks[sl_alloc] size: 0 137448 137448
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 294912 294912
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 279
+sl_free calls: 279
+sl_realloc calls: 0
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 261 261
+mbcs blocks[sl_alloc] size: 0 214552 214552
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 294912 294912
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 619
+sl_free calls: 619
+sl_realloc calls: 1
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:sl_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 80
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: S
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 166 166
+mbcs blocks[sl_alloc] size: 0 139368 139368
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 294912 294912
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+sl_alloc calls: 411
+sl_free calls: 411
+sl_realloc calls: 0
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 41 45 45
+mbcs blocks[std_alloc] size: 399040 406936 406936
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 557056 557056 557056
+mbcs mseg carriers size: 524288
+mbcs sys_alloc carriers size: 32768
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 65
+std_free calls: 24
+std_realloc calls: 1
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 199 201 201
+mbcs blocks[std_alloc] size: 72664 79840 79840
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 294912 294912 294912
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 799
+std_free calls: 600
+std_realloc calls: 1
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 1 1
+mbcs blocks[std_alloc] size: 64 64 64
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 1
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 1 1
+mbcs blocks[std_alloc] size: 64 64 64
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 1
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 1 1
+mbcs blocks[std_alloc] size: 64 64 64
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 1
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 1 1
+mbcs blocks[std_alloc] size: 64 64 64
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 1
+std_free calls: 0
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 2 2
+mbcs blocks[std_alloc] size: 64 7232 7232
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 6
+std_free calls: 5
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 2 2
+mbcs blocks[std_alloc] size: 64 7232 7232
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 9
+std_free calls: 8
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:std_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: D
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 1 2 2
+mbcs blocks[std_alloc] size: 64 7232 7232
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+std_alloc calls: 11
+std_free calls: 10
+std_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 3909 3914 3914
+mbcs blocks[ll_alloc] size: 10112144 10146648 10146648
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 4 4 4
+mbcs mseg carriers: 3
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 12058624 12058624 12058624
+mbcs mseg carriers size: 11534336
+mbcs sys_alloc carriers size: 524288
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 3916
+ll_free calls: 7
+ll_realloc calls: 0
+mseg_alloc calls: 3
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 11782 11782 11782
+mbcs blocks[ll_alloc] size: 1693840 1693840 1693840
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 3 3 3
+mbcs mseg carriers: 2
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1835008 1835008 1835008
+mbcs mseg carriers size: 1310720
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 11784
+ll_free calls: 2
+ll_realloc calls: 0
+mseg_alloc calls: 2
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 0
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 668 668 668
+mbcs blocks[ll_alloc] size: 108808 108808 108808
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 668
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 1126 1126 1126
+mbcs blocks[ll_alloc] size: 113352 113352 113352
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 1126
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ll_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 524288
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 85
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: L
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 620 620 620
+mbcs blocks[ll_alloc] size: 56672 56672 56672
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 524288 524288 524288
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 524288
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ll_alloc calls: 620
+ll_free calls: 0
+ll_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 23 69 69
+mbcs blocks[eheap_alloc] size: 309312 314576 314576
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 393216 393216 393216
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 131072
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 101
+eheap_free calls: 78
+eheap_realloc calls: 0
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 95 104 104
+mbcs blocks[eheap_alloc] size: 1355616 2466824 2466824
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 4 4 4
+mbcs mseg carriers: 3
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 3538944 3538944 3538944
+mbcs mseg carriers size: 3407872
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 1 3 3
+sbcs blocks[eheap_alloc] size: 2545504 5091008 5091008
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 1 3 3
+sbcs mseg carriers: 1
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 2555904 5128192 5128192
+sbcs mseg carriers size: 2555904
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 1377
+eheap_free calls: 1281
+eheap_realloc calls: 139
+mseg_alloc calls: 8
+mseg_dealloc calls: 4
+mseg_realloc calls: 2
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 0
+eheap_free calls: 0
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 2 2
+mbcs blocks[eheap_alloc] size: 0 55336 55336
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 2
+eheap_free calls: 2
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 1 2 2
+mbcs blocks[eheap_alloc] size: 72 2800 2800
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 131072 131072
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 3
+eheap_free calls: 2
+eheap_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:eheap_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 50
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 131072
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 45
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: H
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 13 13
+mbcs blocks[eheap_alloc] size: 0 651688 651688
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 3 3
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 131072 1441792 1441792
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 131072
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+eheap_alloc calls: 30
+eheap_free calls: 30
+eheap_realloc calls: 1
+mseg_alloc calls: 2
+mseg_dealloc calls: 2
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 0 0 0
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 0
+mbcs carriers size: 0 0 0
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 0
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 633 633 633
+mbcs blocks[ets_alloc] size: 469536 469536 469536
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 3 3 3
+mbcs mseg carriers: 2
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1343488 1343488 1343488
+mbcs mseg carriers size: 1310720
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 634
+ets_free calls: 1
+ets_realloc calls: 9
+mseg_alloc calls: 2
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:ets_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: E
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+ets_alloc calls: 0
+ets_free calls: 0
+ets_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+fix type: enif_select_data_state 0 0
+fix type: driver_select_data_state 0 0
+fix type: link 0 0
+fix type: monitor 0 0
+fix type: sl_thr_q_element 448 0
+fix type: process_signal_queue_buffers 0 0
+fix type: magic_indirection 0 0
+fix type: nsched_pid_ref_entry 0 0
+fix type: nsched_magic_ref_entry 0 0
+fix type: bif_timer 0 0
+fix type: hl_ptimer 0 0
+fix type: ll_ptimer 0 0
+fix type: msg_ref 48 48
+fix type: receive_marker_block 0 0
+fix type: proc 4704 4704
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 35 35 35
+mbcs blocks[fix_alloc] size: 6608 6608 6608
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 189
+fix_free calls: 182
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 267 267 267
+mbcs blocks[fix_alloc] size: 71072 71072 71072
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 1
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 294912 294912 294912
+mbcs mseg carriers size: 262144
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 629
+fix_free calls: 399
+fix_realloc calls: 0
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:fix_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: false
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: F
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+fix_alloc calls: 0
+fix_free calls: 0
+fix_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:literal_alloc
+versions: 0.9 3.0
+option e: true
+option t: false
+option ramv: false
+option atags: false
+option sbct: 18446744073709551615
+option asbcst: 0
+option rsbcst: 0
+option rsbcmt: 0
+option rmbcmt: 0
+option mmbcs: 1048576
+option mmsbc: 0
+option mmmbc: 18446744073709551615
+option lmbcs: 10485760
+option smbcs: 1048576
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aobf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 209 209 209
+mbcs blocks[literal_alloc] size: 1447384 1447384 1447384
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 2 2 2
+mbcs mseg carriers: 2
+mbcs sys_alloc carriers: 0
+mbcs carriers size: 2097152 2097152 2097152
+mbcs mseg carriers size: 2097152
+mbcs sys_alloc carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+literal_alloc calls: 212
+literal_free calls: 3
+literal_realloc calls: 0
+mseg_alloc calls: 2
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 0
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 40 76 76
+mbcs blocks[binary_alloc] size: 459064 1258696 1258696
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 3 3 3
+mbcs mseg carriers: 2
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 1343488 1343488 1343488
+mbcs mseg carriers size: 1310720
+mbcs sys_alloc carriers size: 32768
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 1 1
+sbcs blocks[binary_alloc] size: 0 823888 823888
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 1 1
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 835584 835584
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 409
+binary_free calls: 369
+binary_realloc calls: 4
+mseg_alloc calls: 9
+mseg_dealloc calls: 7
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 30 143 143
+mbcs blocks[binary_alloc] size: 13056 47272 47272
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 2 2
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 294912 294912
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 15
+mbcs_pool blocks[binary_alloc] size: 3120
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 1
+mbcs_pool carriers size: 262144
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 3105
+binary_free calls: 3060
+binary_realloc calls: 23
+mseg_alloc calls: 1
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 0
+binary_free calls: 0
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 78 78
+mbcs blocks[binary_alloc] size: 0 12416 12416
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 82
+binary_free calls: 82
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 26 26
+mbcs blocks[binary_alloc] size: 0 6568 6568
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 32
+binary_free calls: 32
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:binary_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: B
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 143 143
+mbcs blocks[binary_alloc] size: 0 21808 21808
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+binary_alloc calls: 204
+binary_free calls: 204
+binary_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[0]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 0
+option acful: 0
+option acnl: 0
+option acfml: 0
+option cp: undefined
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 37 37 37
+mbcs blocks[driver_alloc] size: 8096 8096 8096
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 38
+driver_free calls: 1
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[1]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 17 18 18
+mbcs blocks[driver_alloc] size: 4496 15456 15456
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 26
+driver_free calls: 9
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[2]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[3]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[4]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[5]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[6]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[7]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:driver_alloc[8]
+versions: 0.9 3.0
+option e: true
+option t: 9
+option ramv: false
+option atags: true
+option sbct: 524288
+option asbcst: 4145152
+option rsbcst: 20
+option rsbcmt: 80
+option rmbcmt: 50
+option mmbcs: 32768
+option mmsbc: 256
+option mmmbc: 18446744073709551615
+option lmbcs: 5242880
+option smbcs: 262144
+option mbcgs: 10
+option acul: 60
+option acful: 0
+option acnl: 1000
+option acfml: 0
+option cp: R
+option as: aoffcbf
+mbcs blocks[sys_alloc] count: 0 0 0
+mbcs blocks[sys_alloc] size: 0 0 0
+mbcs blocks[temp_alloc] count: 0 0 0
+mbcs blocks[temp_alloc] size: 0 0 0
+mbcs blocks[sl_alloc] count: 0 0 0
+mbcs blocks[sl_alloc] size: 0 0 0
+mbcs blocks[std_alloc] count: 0 0 0
+mbcs blocks[std_alloc] size: 0 0 0
+mbcs blocks[ll_alloc] count: 0 0 0
+mbcs blocks[ll_alloc] size: 0 0 0
+mbcs blocks[eheap_alloc] count: 0 0 0
+mbcs blocks[eheap_alloc] size: 0 0 0
+mbcs blocks[ets_alloc] count: 0 0 0
+mbcs blocks[ets_alloc] size: 0 0 0
+mbcs blocks[fix_alloc] count: 0 0 0
+mbcs blocks[fix_alloc] size: 0 0 0
+mbcs blocks[literal_alloc] count: 0 0 0
+mbcs blocks[literal_alloc] size: 0 0 0
+mbcs blocks[binary_alloc] count: 0 0 0
+mbcs blocks[binary_alloc] size: 0 0 0
+mbcs blocks[driver_alloc] count: 0 0 0
+mbcs blocks[driver_alloc] size: 0 0 0
+mbcs blocks[test_alloc] count: 0 0 0
+mbcs blocks[test_alloc] size: 0 0 0
+mbcs carriers: 1 1 1
+mbcs mseg carriers: 0
+mbcs sys_alloc carriers: 1
+mbcs carriers size: 32768 32768 32768
+mbcs mseg carriers size: 0
+mbcs sys_alloc carriers size: 32768
+mbcs_pool blocks[sys_alloc] count: 0
+mbcs_pool blocks[sys_alloc] size: 0
+mbcs_pool blocks[temp_alloc] count: 0
+mbcs_pool blocks[temp_alloc] size: 0
+mbcs_pool blocks[sl_alloc] count: 0
+mbcs_pool blocks[sl_alloc] size: 0
+mbcs_pool blocks[std_alloc] count: 0
+mbcs_pool blocks[std_alloc] size: 0
+mbcs_pool blocks[ll_alloc] count: 0
+mbcs_pool blocks[ll_alloc] size: 0
+mbcs_pool blocks[eheap_alloc] count: 0
+mbcs_pool blocks[eheap_alloc] size: 0
+mbcs_pool blocks[ets_alloc] count: 0
+mbcs_pool blocks[ets_alloc] size: 0
+mbcs_pool blocks[fix_alloc] count: 0
+mbcs_pool blocks[fix_alloc] size: 0
+mbcs_pool blocks[literal_alloc] count: 0
+mbcs_pool blocks[literal_alloc] size: 0
+mbcs_pool blocks[binary_alloc] count: 0
+mbcs_pool blocks[binary_alloc] size: 0
+mbcs_pool blocks[driver_alloc] count: 0
+mbcs_pool blocks[driver_alloc] size: 0
+mbcs_pool blocks[test_alloc] count: 0
+mbcs_pool blocks[test_alloc] size: 0
+mbcs_pool carriers: 0
+mbcs_pool carriers size: 0
+sbcs blocks[sys_alloc] count: 0 0 0
+sbcs blocks[sys_alloc] size: 0 0 0
+sbcs blocks[temp_alloc] count: 0 0 0
+sbcs blocks[temp_alloc] size: 0 0 0
+sbcs blocks[sl_alloc] count: 0 0 0
+sbcs blocks[sl_alloc] size: 0 0 0
+sbcs blocks[std_alloc] count: 0 0 0
+sbcs blocks[std_alloc] size: 0 0 0
+sbcs blocks[ll_alloc] count: 0 0 0
+sbcs blocks[ll_alloc] size: 0 0 0
+sbcs blocks[eheap_alloc] count: 0 0 0
+sbcs blocks[eheap_alloc] size: 0 0 0
+sbcs blocks[ets_alloc] count: 0 0 0
+sbcs blocks[ets_alloc] size: 0 0 0
+sbcs blocks[fix_alloc] count: 0 0 0
+sbcs blocks[fix_alloc] size: 0 0 0
+sbcs blocks[literal_alloc] count: 0 0 0
+sbcs blocks[literal_alloc] size: 0 0 0
+sbcs blocks[binary_alloc] count: 0 0 0
+sbcs blocks[binary_alloc] size: 0 0 0
+sbcs blocks[driver_alloc] count: 0 0 0
+sbcs blocks[driver_alloc] size: 0 0 0
+sbcs blocks[test_alloc] count: 0 0 0
+sbcs blocks[test_alloc] size: 0 0 0
+sbcs carriers: 0 0 0
+sbcs mseg carriers: 0
+sbcs sys_alloc carriers: 0
+sbcs carriers size: 0 0 0
+sbcs mseg carriers size: 0
+sbcs sys_alloc carriers size: 0
+driver_alloc calls: 0
+driver_free calls: 0
+driver_realloc calls: 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+sys_alloc calls: 1
+sys_free calls: 0
+sys_realloc calls: 0
+=allocator:test_alloc
+option e: false
+=allocator:mseg_alloc[0]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 2
+cache_hits: 7
+segments: 7 8 8
+segments_watermark: 8
+segments_size: 13631488 14467072 14467072
+mseg_alloc calls: 16
+mseg_dealloc calls: 9
+mseg_realloc calls: 0
+mseg_create calls: 9
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[1]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 5
+cache_hits: 23
+segments: 11 13 13
+segments_watermark: 13
+segments_size: 9371648 11681792 11681792
+mseg_alloc calls: 38
+mseg_dealloc calls: 27
+mseg_realloc calls: 2
+mseg_create calls: 15
+mseg_create_resize calls: 0
+mseg_destroy calls: 1
+mseg_recreate calls: 1
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[2]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_watermark: 0
+segments_size: 0 0 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[3]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_watermark: 0
+segments_size: 0 0 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[4]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_watermark: 0
+segments_size: 0 0 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[5]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 0
+cache_hits: 0
+segments: 0 0 0
+segments_watermark: 0
+segments_size: 0 0 0
+mseg_alloc calls: 0
+mseg_dealloc calls: 0
+mseg_realloc calls: 0
+mseg_create calls: 0
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[6]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 1
+cache_hits: 0
+segments: 0 1 1
+segments_watermark: 1
+segments_size: 0 262144 262144
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+mseg_create calls: 1
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[7]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 1
+cache_hits: 0
+segments: 0 1 1
+segments_watermark: 1
+segments_size: 0 262144 262144
+mseg_alloc calls: 1
+mseg_dealloc calls: 1
+mseg_realloc calls: 0
+mseg_create calls: 1
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:mseg_alloc[8]
+version: 0.9
+option amcbf: 4194304
+option rmcbf: 20
+option mcs: 10
+memory kind: all memory
+cached_segments: 3
+cache_hits: 0
+segments: 0 3 3
+segments_watermark: 3
+segments_size: 0 1572864 1572864
+mseg_alloc calls: 3
+mseg_dealloc calls: 3
+mseg_realloc calls: 0
+mseg_create calls: 3
+mseg_create_resize calls: 0
+mseg_destroy calls: 0
+mseg_recreate calls: 0
+mseg_clear_cache calls: 0
+mseg_check_cache calls: 0
+=allocator:erts_mmap.default_mmap
+option scs: 0
+os mmap size used: 29966336
+=allocator:erts_mmap.literal_mmap
+option scs: 1073676288
+option sco: true
+option scrpm: false
+option scrfsd: 1024
+supercarrier total size: 1073741824
+supercarrier total sa size: 2097152
+supercarrier total sua size: 0
+supercarrier used size: 2162688
+supercarrier used sa size: 2097152
+supercarrier used sua size: 0
+supercarrier used free segs: 0
+supercarrier max free segs: 0
+supercarrier allocated free segs: 0
+supercarrier reserved free segs: 1024
+supercarrier sa free segs: 0
+supercarrier sua free segs: 0
+=allocator:alloc_util
+option mmc: 18446744073709551615
+option ycs: 1048576
+option sac: true
+=allocator:instr
+=proc:<0.0.0>
+State: Running
+Name: init
+Spawned as: erl_init:start/2
+Spawned by: []
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.10.0>, <0.44.0>, <0.42.0>]
+Reductions: 10269
+Stack+heap: 2586
+OldHeap: 4185
+Heap unused: 1928
+OldHeap unused: 2458
+BinVHeap: 0
+OldBinVHeap: 169
+BinVHeap unused: 46422
+OldBinVHeap unused: 46253
+Memory: 55072
+Program counter: 0x0000000103d889fc (init:boot_loop/2 + 84)
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | ACTIVE | RUNNING | ACTIVE_SYS
+=proc:<0.1.0>
+State: Waiting
+Name: erts_code_purger
+Spawned as: erts_code_purger:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 11
+Reductions: 23
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 228
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2736
+Program counter: 0x0000000103d82874 (erts_code_purger:wait_for_request/0 + 68)
+arity = 0
+Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | OFF_HEAP_MSGQ
+=proc:<0.2.0>
+State: Waiting
+Spawned as: erts_literal_area_collector:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 7
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 233
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2648
+Program counter: 0x0000000103e01368 (erts_literal_area_collector:msg_loop/4 + 136)
+arity = 0
+Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | OFF_HEAP_MSGQ
+=proc:<0.3.0>
+State: Waiting
+Spawned as: erts_dirty_process_signal_handler:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 7
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 233
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2648
+Program counter: 0x0000000103e025f8 (erts_dirty_process_signal_handler:msg_loop/0 + 80)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ
+=proc:<0.4.0>
+State: Waiting
+Spawned as: erts_dirty_process_signal_handler:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 7
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 233
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2648
+Program counter: 0x0000000103e025f8 (erts_dirty_process_signal_handler:msg_loop/0 + 80)
+arity = 0
+Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | OFF_HEAP_MSGQ
+=proc:<0.5.0>
+State: Waiting
+Spawned as: erts_dirty_process_signal_handler:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 7
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 233
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2648
+Program counter: 0x0000000103e025f8 (erts_dirty_process_signal_handler:msg_loop/0 + 80)
+arity = 0
+Internal State: ACT_PRIO_MAX | USR_PRIO_MAX | PRQ_PRIO_MAX | OFF_HEAP_MSGQ
+=proc:<0.6.0>
+State: Waiting
+Spawned as: prim_file:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 6
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 233
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2648
+Program counter: 0x0000000103daf94c (prim_file:helper_loop/0 + 68)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.7.0>
+State: Waiting
+Name: socket_registry
+Spawned as: socket_registry:start/0
+Spawned by: <0.0.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Reductions: 8
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 233
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2648
+Program counter: 0x0000000103dbe314 (socket_registry:loop/1 + 84)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.10.0>
+State: Waiting
+Name: erl_prim_loader
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>]
+Reductions: 468281
+Stack+heap: 6772
+OldHeap: 10958
+Heap unused: 3381
+OldHeap unused: 5568
+BinVHeap: 313
+OldBinVHeap: 0
+BinVHeap unused: 46109
+OldBinVHeap unused: 46422
+Memory: 142752
+Program counter: 0x0000000103dd7c4c (erl_prim_loader:loop/3 + 100)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.42.0>
+State: Waiting
+Name: logger
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.9.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.0.0>]
+Reductions: 883
+Stack+heap: 1598
+OldHeap: 376
+Heap unused: 1120
+OldHeap unused: 331
+BinVHeap: 100
+OldBinVHeap: 4
+BinVHeap unused: 46322
+OldBinVHeap unused: 46418
+Memory: 16792
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.44.0>
+State: Waiting
+Name: application_controller
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 8
+Link list: [<0.0.0>, <0.90.0>, <0.102.0>, <0.46.0>]
+Reductions: 92245
+Stack+heap: 28690
+OldHeap: 46422
+Heap unused: 12854
+OldHeap unused: 17270
+BinVHeap: 24
+OldBinVHeap: 0
+BinVHeap unused: 46398
+OldBinVHeap unused: 46422
+Memory: 602080
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.46.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.45.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.44.0>, <0.47.0>]
+Reductions: 40
+Stack+heap: 376
+OldHeap: 0
+Heap unused: 29
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 3960
+Program counter: 0x0000000103eb6264 (application_master:main_loop/2 + 76)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.47.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.46.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>, <0.46.0>]
+Reductions: 545
+Stack+heap: 376
+OldHeap: 376
+Heap unused: 336
+OldHeap unused: 370
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 6880
+Program counter: 0x0000000103eb7b08 (application_master:loop_it/4 + 88)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.49.0>
+State: Waiting
+Name: kernel_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.47.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 4
+Link list: [<0.47.0>, <0.51.0>, <0.50.0>, <0.55.0>, <0.58.0>, <0.56.0>, <0.63.0>, <0.70.0>, <0.75.0>, <0.74.0>, <0.73.0>, <0.64.0>, <0.61.0>, <0.53.0>]
+Reductions: 3772
+Stack+heap: 2586
+OldHeap: 2586
+Heap unused: 618
+OldHeap unused: 2304
+BinVHeap: 8812
+OldBinVHeap: 0
+BinVHeap unused: 37610
+OldBinVHeap unused: 46422
+Memory: 42840
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.50.0>
+State: Waiting
+Name: code_server
+Spawned as: erlang:apply/2
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>]
+Reductions: 221248
+Stack+heap: 28690
+OldHeap: 318187
+Heap unused: 24392
+OldHeap unused: 271366
+BinVHeap: 3930
+OldBinVHeap: 0
+BinVHeap unused: 42492
+OldBinVHeap unused: 46422
+Memory: 2775928
+Program counter: 0x0000000103ee8404 (code_server:loop/1 + 132)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.51.0>
+State: Waiting
+Name: standard_error_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.52.0>, <0.49.0>]
+Reductions: 57
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 128
+OldHeap unused: 0
+BinVHeap: 20
+OldBinVHeap: 0
+BinVHeap unused: 46402
+OldBinVHeap unused: 46422
+Memory: 2816
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.52.0>
+State: Waiting
+Name: standard_error
+Spawned as: erlang:apply/2
+Spawned by: <0.51.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [#Port<0.1>, <0.51.0>]
+Reductions: 134
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 118
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2816
+Program counter: 0x0000000103fbbafc (standard_error:server_loop/1 + 76)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.53.0>
+State: Waiting
+Name: file_server_2
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>]
+Reductions: 1025
+Stack+heap: 987
+OldHeap: 610
+Heap unused: 685
+OldHeap unused: 575
+BinVHeap: 7
+OldBinVHeap: 0
+BinVHeap unused: 46415
+OldBinVHeap unused: 46422
+Memory: 13776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.55.0>
+State: Waiting
+Name: inet_db
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>]
+Reductions: 420
+Stack+heap: 376
+OldHeap: 610
+Heap unused: 108
+OldHeap unused: 562
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 8888
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.56.0>
+State: Waiting
+Name: rex
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>, {to,<0.57.0>,#Ref<0.3756053351.4210294785.45059>}]
+Reductions: 41
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 149
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2840
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ
+=proc:<0.57.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.56.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 6
+Link list: [{from,<0.56.0>,#Ref<0.3756053351.4210294785.45059>}]
+Reductions: 69
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 12
+OldHeap unused: 0
+BinVHeap: 11010
+OldBinVHeap: 0
+BinVHeap unused: 35412
+OldBinVHeap unused: 46422
+Memory: 2908
+Program counter: 0x0000000103ff2290 (rpc:nodes_observer_loop/1 + 88)
+arity = 0
+Internal State: ACT_PRIO_HIGH | USR_PRIO_HIGH | PRQ_PRIO_HIGH | MAYBE_SELF_SIGS
+=proc:<0.58.0>
+State: Waiting
+Name: global_name_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 4
+Link list: [<0.49.0>, <0.60.0>, <0.59.0>]
+Reductions: 318
+Stack+heap: 610
+OldHeap: 610
+Heap unused: 345
+OldHeap unused: 559
+BinVHeap: 3003
+OldBinVHeap: 0
+BinVHeap unused: 43419
+OldBinVHeap unused: 46422
+Memory: 10932
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.59.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.58.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.58.0>]
+Reductions: 39
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 177
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2688
+Program counter: 0x0000000104002e4c (global:loop_the_locker/1 + 484)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.60.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.58.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.58.0>]
+Reductions: 7
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 231
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2688
+Program counter: 0x0000000104009898 (global:loop_the_registrar/0 + 80)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.61.0>
+State: Waiting
+Name: global_group
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.62.0>, <0.49.0>]
+Reductions: 112
+Stack+heap: 376
+OldHeap: 0
+Heap unused: 94
+OldHeap unused: 0
+BinVHeap: 4276
+OldBinVHeap: 0
+BinVHeap unused: 42146
+OldBinVHeap unused: 46422
+Memory: 4020
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_MAX | USR_PRIO_MAX | PRQ_PRIO_MAX
+=proc:<0.62.0>
+State: Waiting
+Name: global_group_check
+Spawned as: erlang:apply/2
+Spawned by: <0.61.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.61.0>]
+Reductions: 6
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 231
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2688
+Program counter: 0x0000000104040eec (global_group:global_group_check_dispatcher/0 + 68)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.63.0>
+State: Waiting
+Name: erl_signal_server
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>]
+Reductions: 48
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 157
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103edb214 (gen_event:fetch_msg/6 + 84)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.64.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.69.0>, <0.49.0>]
+Reductions: 213
+Stack+heap: 4185
+OldHeap: 0
+Heap unused: 387
+OldHeap unused: 0
+BinVHeap: 15452
+OldBinVHeap: 0
+BinVHeap unused: 30970
+OldBinVHeap unused: 46422
+Memory: 34432
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.65.0>
+State: Waiting
+Name: user_drv
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.64.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.67.0>, <0.69.0>, <0.68.0>]
+Reductions: 655
+Stack+heap: 610
+OldHeap: 610
+Heap unused: 208
+OldHeap unused: 487
+BinVHeap: 0
+OldBinVHeap: 82
+BinVHeap unused: 46422
+OldBinVHeap unused: 46340
+Memory: 10752
+Program counter: 0x000000010405efc0 (gen_statem:loop_receive/3 + 136)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.67.0>
+State: Waiting
+Name: user_drv_writer
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.65.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.65.0>]
+Reductions: 36
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 164
+OldHeap unused: 0
+BinVHeap: 2
+OldBinVHeap: 0
+BinVHeap unused: 46420
+OldBinVHeap unused: 46422
+Memory: 2864
+Program counter: 0x000000010406d4b4 (prim_tty:writer_loop/2 + 84)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.68.0>
+State: Waiting
+Name: user_drv_reader
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.65.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.65.0>, {from,{prim_tty,tty},#Ref<0.3756053351.4210294785.45124>}]
+Reductions: 33
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 165
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2848
+Program counter: 0x000000010406c5f4 (prim_tty:reader_loop/6 + 92)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.69.0>
+State: Waiting
+Name: user
+Spawned as: group:server/4
+Spawned by: <0.65.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.64.0>, <0.65.0>]
+Reductions: 287
+Stack+heap: 376
+OldHeap: 376
+Heap unused: 35
+OldHeap unused: 365
+BinVHeap: 2703
+OldBinVHeap: 0
+BinVHeap unused: 43719
+OldBinVHeap unused: 46422
+Memory: 6984
+Program counter: 0x0000000104081600 (group:server_loop/3 + 80)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.70.0>
+State: Waiting
+Name: logger_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>, <0.72.0>, <0.105.0>, <0.77.0>, <0.71.0>]
+Reductions: 556
+Stack+heap: 376
+OldHeap: 376
+Heap unused: 144
+OldHeap unused: 279
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 7088
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.71.0>
+State: Waiting
+Name: logger_handler_watcher
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.70.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.70.0>, {to,<0.105.0>,#Ref<0.3756053351.4210294785.45416>}, {to,<0.77.0>,#Ref<0.3756053351.4210294785.45193>}]
+Reductions: 81
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 84
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2904
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.72.0>
+State: Scheduled
+Name: logger_proxy
+Spawned as: proc_lib:init_p/5
+Current call: logger_olp:handle_info/2
+Spawned by: <0.70.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 1494
+Link list: [<0.70.0>]
+Reductions: 104
+Stack+heap: 376
+OldHeap: 0
+Heap unused: 211
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 15872
+Program counter: 0x0000000103f753c0 (logger_olp:handle_info/2 + 48)
+arity = 2
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | IN_PRQ_NORMAL | ACTIVE | IN_RUNQ | OFF_HEAP_MSGQ
+=proc:<0.73.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>]
+Reductions: 59
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 143
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.74.0>
+State: Waiting
+Name: kernel_refc
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 3
+Link list: [<0.49.0>]
+Reductions: 72
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 140
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2800
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.75.0>
+State: Waiting
+Name: kernel_safe_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.49.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.49.0>]
+Reductions: 90
+Stack+heap: 52
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1328
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.77.0>
+State: Waiting
+Name: logger_std_h_default
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.70.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.78.0>, <0.70.0>, {from,<0.71.0>,#Ref<0.3756053351.4210294785.45193>}]
+Reductions: 181
+Stack+heap: 610
+OldHeap: 610
+Heap unused: 546
+OldHeap unused: 516
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 10776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ
+=proc:<0.78.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.77.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.77.0>]
+Reductions: 9
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 209
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2688
+Program counter: 0x00000001040ba3ac (logger_std_h:file_ctrl_loop/1 + 84)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.90.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.89.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.44.0>, <0.91.0>]
+Reductions: 41
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 12
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2816
+Program counter: 0x0000000103eb6264 (application_master:main_loop/2 + 76)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.91.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.90.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.92.0>, <0.90.0>]
+Reductions: 141
+Stack+heap: 610
+OldHeap: 987
+Heap unused: 358
+OldHeap unused: 984
+BinVHeap: 504
+OldBinVHeap: 0
+BinVHeap unused: 45918
+OldBinVHeap unused: 46422
+Memory: 13640
+Program counter: 0x0000000103eb7b08 (application_master:loop_it/4 + 88)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.92.0>
+State: Waiting
+Name: inets_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.91.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.91.0>, <0.97.0>, <0.93.0>]
+Reductions: 347
+Stack+heap: 96
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1760
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.93.0>
+State: Waiting
+Name: httpc_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.92.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.92.0>, <0.96.0>, <0.94.0>]
+Reductions: 336
+Stack+heap: 94
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1744
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.94.0>
+State: Waiting
+Name: httpc_profile_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.93.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.95.0>, <0.93.0>]
+Reductions: 260
+Stack+heap: 84
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1624
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.95.0>
+State: Waiting
+Name: httpc_manager
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.94.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.94.0>]
+Reductions: 174
+Stack+heap: 610
+OldHeap: 610
+Heap unused: 217
+OldHeap unused: 568
+BinVHeap: 2781
+OldBinVHeap: 0
+BinVHeap unused: 43641
+OldBinVHeap unused: 46422
+Memory: 10760
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.96.0>
+State: Waiting
+Name: httpc_handler_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.93.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.93.0>]
+Reductions: 94
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 37
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.97.0>
+State: Waiting
+Name: httpd_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.92.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.92.0>]
+Reductions: 71
+Stack+heap: 54
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1344
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.102.0>
+State: Waiting
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.101.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.44.0>, <0.103.0>]
+Reductions: 59
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 26
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2816
+Program counter: 0x0000000103eb6264 (application_master:main_loop/2 + 76)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.103.0>
+State: Waiting
+Spawned as: application_master:start_it/4
+Spawned by: <0.102.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.107.0>, <0.102.0>]
+Reductions: 325
+Stack+heap: 987
+OldHeap: 987
+Heap unused: 741
+OldHeap unused: 984
+BinVHeap: 317
+OldBinVHeap: 0
+BinVHeap unused: 46105
+OldBinVHeap unused: 46422
+Memory: 16656
+Program counter: 0x0000000103eb7b08 (application_master:loop_it/4 + 88)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.105.0>
+State: Waiting
+Name: logger_std_h_ssl_handler
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.70.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.106.0>, <0.70.0>, {from,<0.71.0>,#Ref<0.3756053351.4210294785.45416>}]
+Reductions: 183
+Stack+heap: 610
+OldHeap: 610
+Heap unused: 496
+OldHeap unused: 516
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 10776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | OFF_HEAP_MSGQ
+=proc:<0.106.0>
+State: Waiting
+Spawned as: erlang:apply/2
+Spawned by: <0.105.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.105.0>]
+Reductions: 9
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 209
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2688
+Program counter: 0x00000001040ba3ac (logger_std_h:file_ctrl_loop/1 + 84)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.107.0>
+State: Waiting
+Name: ssl_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.103.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.103.0>, <0.112.0>, <0.108.0>]
+Reductions: 342
+Stack+heap: 82
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1648
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.108.0>
+State: Waiting
+Name: ssl_admin_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.107.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.107.0>, <0.111.0>, <0.110.0>, <0.109.0>]
+Reductions: 487
+Stack+heap: 112
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1928
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.109.0>
+State: Waiting
+Name: ssl_pem_cache
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.108.0>
+Message queue length: 0
+Number of heap fragments: 1
+Heap fragment data: 0
+Link list: [<0.108.0>]
+Reductions: 99
+Stack+heap: 376
+OldHeap: 0
+Heap unused: 101
+OldHeap unused: 0
+BinVHeap: 3373
+OldBinVHeap: 0
+BinVHeap unused: 43049
+OldBinVHeap unused: 46422
+Memory: 4008
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.110.0>
+State: Waiting
+Name: ssl_manager
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.108.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.108.0>]
+Reductions: 179
+Stack+heap: 610
+OldHeap: 987
+Heap unused: 288
+OldHeap unused: 944
+BinVHeap: 1821
+OldBinVHeap: 0
+BinVHeap unused: 44601
+OldBinVHeap unused: 46422
+Memory: 13776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.111.0>
+State: Waiting
+Name: tls_client_ticket_store
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.108.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.108.0>]
+Reductions: 42
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 147
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.112.0>
+State: Waiting
+Name: ssl_connection_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.107.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.107.0>, <0.120.0>, <0.113.0>]
+Reductions: 321
+Stack+heap: 84
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1664
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.113.0>
+State: Waiting
+Name: tls_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.112.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.112.0>, <0.115.0>, <0.114.0>]
+Reductions: 330
+Stack+heap: 86
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1680
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.114.0>
+State: Waiting
+Name: tls_connection_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.113.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.113.0>]
+Reductions: 92
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.115.0>
+State: Waiting
+Name: tls_server_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.113.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.113.0>, <0.117.0>, <0.119.0>, <0.118.0>, <0.116.0>]
+Reductions: 653
+Stack+heap: 116
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2000
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.116.0>
+State: Waiting
+Name: ssl_listen_tracker_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.115.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.115.0>]
+Reductions: 92
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.117.0>
+State: Waiting
+Name: tls_server_session_ticket_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.115.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.115.0>]
+Reductions: 92
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.118.0>
+State: Waiting
+Name: ssl_server_session_cache_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.115.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.115.0>]
+Reductions: 92
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.119.0>
+State: Waiting
+Name: ssl_upgrade_server_session_cache_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.115.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.115.0>]
+Reductions: 92
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.120.0>
+State: Waiting
+Name: dtls_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.112.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.112.0>, <0.122.0>, <0.121.0>]
+Reductions: 330
+Stack+heap: 86
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1680
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.121.0>
+State: Waiting
+Name: dtls_connection_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.120.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.120.0>]
+Reductions: 95
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 64
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.122.0>
+State: Waiting
+Name: dtls_server_sup
+Spawned as: proc_lib:init_p/5
+Current call: erlang:hibernate/3
+Spawned by: <0.120.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.120.0>, <0.124.0>, <0.123.0>]
+Reductions: 331
+Stack+heap: 88
+OldHeap: 0
+Heap unused: 4
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 1696
+Program counter: 0x0000000103d822c8 (unknown function)
+arity = 3
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.123.0>
+State: Waiting
+Name: dtls_listener_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.122.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.122.0>]
+Reductions: 93
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2864
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.124.0>
+State: Waiting
+Name: dtls_server_session_cache_sup
+Spawned as: proc_lib:init_p/5
+Spawned by: <0.122.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.122.0>]
+Reductions: 92
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 62
+OldHeap unused: 0
+BinVHeap: 0
+OldBinVHeap: 0
+BinVHeap unused: 46422
+OldBinVHeap unused: 46422
+Memory: 2776
+Program counter: 0x0000000103f1c0d8 (gen_server:loop/7 + 384)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL
+=proc:<0.135.0>
+State: Scheduled
+Spawned as: erlang:apply/2
+Spawned by: <0.9.0>
+Message queue length: 0
+Number of heap fragments: 0
+Heap fragment data: 0
+Link list: [<0.9.0>]
+Reductions: 111
+Stack+heap: 233
+OldHeap: 0
+Heap unused: 55
+OldHeap unused: 0
+BinVHeap: 1
+OldBinVHeap: 0
+BinVHeap unused: 46421
+OldBinVHeap unused: 46422
+Memory: 13976
+Program counter: 0x00000001041ff698 (gleam_erlang_ffi:select/2 + 192)
+arity = 0
+Internal State: ACT_PRIO_NORMAL | USR_PRIO_NORMAL | PRQ_PRIO_NORMAL | IN_PRQ_NORMAL | IN_RUNQ | SIG_IN_Q | ACTIVE_SYS
+=port:#Port<0.0>
+State: CONNECTED
+Slot: 0
+Connected: <0.0.0>
+Port controls forker process: forker
+Input: 0
+Output: 0
+Queue: 0
+=port:#Port<0.1>
+State: CONNECTED|BINARY_IO
+Slot: 8
+Connected: <0.52.0>
+Links: <0.52.0>
+Port is UNIX fd not opened by emulator: 2/2
+Input: 0
+Output: 0
+Queue: 0
+=ets:<0.42.0>
+Slot: 5110497728
+Table: logger
+Name: logger
+Buckets: 256
+Chain Length Avg: 0.015625
+Chain Length Max: 1
+Chain Length Min: 0
+Chain Length Std Dev: 0.124020
+Chain Length Expected Std Dev: 0.124756
+Fixed: false
+Objects: 4
+Words: 6813
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: true
+Read Concurrency: true
+=ets:<0.44.0>
+Slot: 5110509560
+Table: ac_tab
+Name: ac_tab
+Buckets: 256
+Chain Length Avg: 0.136719
+Chain Length Max: 3
+Chain Length Min: 0
+Chain Length Std Dev: 0.386363
+Chain Length Expected Std Dev: 0.369032
+Fixed: false
+Objects: 35
+Words: 4094
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: true
+=ets:<0.50.0>
+Slot: 5110518176
+Table: code_server
+Name: code_server
+Buckets: 448
+Chain Length Avg: 1.000000
+Chain Length Max: 8
+Chain Length Min: 0
+Chain Length Std Dev: 1.198958
+Chain Length Expected Std Dev: 0.998883
+Fixed: false
+Objects: 448
+Words: 34781
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.50.0>
+Slot: 4396206480
+Table: code_names
+Name: code_names
+Buckets: 256
+Chain Length Avg: 0.203125
+Chain Length Max: 3
+Chain Length Min: 0
+Chain Length Std Dev: 0.456881
+Chain Length Expected Std Dev: 0.449813
+Fixed: false
+Objects: 52
+Words: 9409
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396326720
+Table: inet_db
+Name: inet_db
+Buckets: 256
+Chain Length Avg: 0.121094
+Chain Length Max: 3
+Chain Length Min: 0
+Chain Length Std Dev: 0.360371
+Chain Length Expected Std Dev: 0.347305
+Fixed: false
+Objects: 31
+Words: 622
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396330840
+Table: inet_cache
+Name: inet_cache
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: bag
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396333344
+Table: inet_hosts_byname
+Name: inet_hosts_byname
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396335848
+Table: inet_hosts_byaddr
+Name: inet_hosts_byaddr
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396338352
+Table: inet_hosts_file_byname
+Name: inet_hosts_file_byname
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396340856
+Table: inet_hosts_file_byaddr
+Name: inet_hosts_file_byaddr
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.55.0>
+Slot: 4396343360
+Table: inet_sockets
+Name: inet_sockets
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.57.0>
+Slot: 4396353768
+Table: #Ref<0.3756053351.4210425857.45060>
+Name: rex_nodes_observer
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 391
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: true
+=ets:<0.58.0>
+Slot: 4396358992
+Table: global_locks
+Name: global_locks
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.58.0>
+Slot: 4396361496
+Table: global_names
+Name: global_names
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 391
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: true
+=ets:<0.58.0>
+Slot: 4396364000
+Table: global_names_ext
+Name: global_names_ext
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.58.0>
+Slot: 4396366504
+Table: global_pid_names
+Name: global_pid_names
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: bag
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.58.0>
+Slot: 4396369008
+Table: global_pid_ids
+Name: global_pid_ids
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: bag
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.58.0>
+Slot: 4396371512
+Table: global_lost_connections
+Name: global_lost_connections
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.58.0>
+Slot: 4396374016
+Table: global_node_resources
+Name: global_node_resources
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.95.0>
+Slot: 4412439352
+Table: httpc_manager__session_db
+Name: httpc_manager__session_db
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.95.0>
+Slot: 4412441856
+Table: httpc_manager__handler_db
+Name: httpc_manager__handler_db
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.95.0>
+Slot: 4412445768
+Table: #Ref<0.3756053351.4210425857.45356>
+Name: httpc_manager__session_cookie_db
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: bag
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.109.0>
+Slot: 4412458184
+Table: ssl_pem_cache
+Name: ssl_pem_cache
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.110.0>
+Slot: 4412471664
+Table: #Ref<0.3756053351.4210425857.45462>
+Name: client_ssl_otp_session_cache
+Ordered set (AVL tree), Elements: 0
+Objects: 0
+Words: 145
+Type: ordered_set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.110.0>
+Slot: 4412472840
+Table: #Ref<0.3756053351.4210425857.45463>
+Name: ssl_otp_cacertificate_db
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.110.0>
+Slot: 4412475344
+Table: #Ref<0.3756053351.4210425857.45464>
+Name: ssl_otp_ca_file_ref
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.110.0>
+Slot: 4412477848
+Table: #Ref<0.3756053351.4210425857.45465>
+Name: ssl_otp_ca_ref_file_mapping
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.110.0>
+Slot: 4412480352
+Table: #Ref<0.3756053351.4210425857.45466>
+Name: ssl_otp_crl_cache
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.110.0>
+Slot: 4412482856
+Table: #Ref<0.3756053351.4210425857.45467>
+Name: ssl_otp_crl_issuer_mapping
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: bag
+Protection: protected
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=ets:<0.123.0>
+Slot: 4412505024
+Table: dtls_listener_sup
+Name: dtls_listener_sup
+Buckets: 256
+Chain Length Avg: 0.000000
+Chain Length Max: 0
+Chain Length Min: 0
+Chain Length Std Dev: 0.000000
+Chain Length Expected Std Dev: 0.000000
+Fixed: false
+Objects: 0
+Words: 311
+Type: set
+Protection: public
+Compressed: false
+Write Concurrency: false
+Read Concurrency: false
+=timer:<0.55.0>
+Message: refresh_timeout
+Time left: 3599689
+=timer:<0.111.0>
+Message: remove_invalid_tickets
+Time left: 7199821
+=timer:<0.110.0>
+Message: validate_sessions
+Time left: 86404820
+=timer:<0.109.0>
+Message: clear_pem_cache
+Time left: 119817
+=node:'nonode@nohost'
+=no_distribution
+=loaded_modules
+Current code: 6279844
+Old code: 0
+=mod:erts_code_purger
+Current size: 13296
+=mod:erl_init
+Current size: 2480
+=mod:init
+Current size: 65275
+=mod:prim_buffer
+Current size: 4936
+=mod:prim_eval
+Current size: 1336
+=mod:prim_inet
+Current size: 108445
+=mod:prim_file
+Current size: 40897
+=mod:zlib
+Current size: 19904
+=mod:socket_registry
+Current size: 22176
+=mod:prim_socket
+Current size: 50952
+=mod:prim_net
+Current size: 10816
+=mod:prim_zip
+Current size: 24400
+=mod:erl_prim_loader
+Current size: 55760
+=mod:erlang
+Current size: 102432
+=mod:erts_internal
+Current size: 23968
+=mod:erl_tracer
+Current size: 1664
+=mod:erts_literal_area_collector
+Current size: 4856
+=mod:erts_dirty_process_signal_handler
+Current size: 2296
+=mod:atomics
+Current size: 3424
+=mod:counters
+Current size: 4112
+=mod:persistent_term
+Current size: 1456
+=mod:erl_parse
+Current size: 324787
+Current attributes: g2wAAAQxaAJ3A3ZzbmwAAAABbhAAWZz93qXsCLw4KSJjM+fEbWpoAncHcmVtb3ZlZGwAAAADaAN3CHNldF9saW5lYQJrABd1c2UgZXJsX2Fubm86c2V0X2xpbmUvMmgDdw5nZXRfYXR0cmlidXRlc2EBawAuZXJsX2Fubm86e2NvbHVtbixsaW5lLGxvY2F0aW9uLHRleHR9LzEgaW5zdGVhZGgDdw1nZXRfYXR0cmlidXRlYQJrAC5lcmxfYW5ubzp7Y29sdW1uLGxpbmUsbG9jYXRpb24sdGV4dH0vMSBpbnN0ZWFkamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwl5ZWNjcGFyczJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncLeWVjY3BhcnMyXzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzEwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMTJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzEzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xOGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzIwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8yMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzI0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8yNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMjZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8yOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzMxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8zMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzM0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8zNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzM4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8zOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl80M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNDRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzQ1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl80NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzQ4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl80OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzUxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl81MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzU0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl81NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzU3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl81OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl83MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNzJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzc0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl83OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfNzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzgwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl84MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzg3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfOTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzkyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfOTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzk1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfOTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzk5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEwMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTAyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTA1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEwOGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTA5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzExMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTEyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzExNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzExOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTIxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEyM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTI0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEyNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTMyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTM1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTM4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTQ0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNDVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTQ3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE0OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTUwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE1MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTUzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE1NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTU2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE1OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTU5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE2NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE2OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTcwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE3MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTczYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE3NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTc2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xNzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE3OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTgyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTg1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xODZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xOTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTkzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xOTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE5NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTk2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xOTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE5OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTk5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIwMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjAyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjA1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIwN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjA4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMDlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjEyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjE2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxOGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjIwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMjFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIyMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjIzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIyN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjI4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMjlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIzMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjMyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjM3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI0MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjQ0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNDVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI0NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjQ4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNDlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI1MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjUxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI1NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjU2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI1OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjYwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNjFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNjdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjY5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI3MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjczYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI3NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjc2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI3OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI4MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjgyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI4NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjg2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yODdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjk0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yOTVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI5NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjk3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yOThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI5OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzAxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzA2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzEyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzE1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzE5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMyMWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzIzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMyNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMyOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzMyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzM3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMzOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzQwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNDFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzQ1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM0N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzQ4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNDlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM1MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzUxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNTJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM1M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzU1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNTZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM1N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzU4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM2MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzYxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM2M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzY0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM2NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzY3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNjlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM3MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzcyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNzVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM3NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzc3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNzhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzgxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zODNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzg3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zODhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zOTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM5M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzk1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zOTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM5OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDAwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDA2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQwOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDEwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQxMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDEzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MTVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQxNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQyMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDIyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQyNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDI2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MjdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQyOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDMwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQzMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDMzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDM2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQzOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ0M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDQ1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ0N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDQ5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDUyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NTNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDU2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDU5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ2NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDY2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ3MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDcxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NzJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ3M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDc0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ3N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80ODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDgzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80ODRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDg2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80ODhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80OTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDkzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80OTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ5NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDk2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80OTdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ5OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDk5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUwM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTA0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MDVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUwNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTA3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MDhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUxMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTExYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MTJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUxNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTE2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUxOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTIwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MjFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTIzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTI3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTMwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUzM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTM0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MzZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUzN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTM4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NDBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU0MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTQyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NDNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU0NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTQ2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU0OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTUwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU1MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTUzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU1NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTU3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTYxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2M2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTY0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTY3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NjhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU2OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTcwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NzFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU3MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTczYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU3NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTc3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NzlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4MGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTg0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81ODVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4NmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTg3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81ODhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4OWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTkwYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81OTFhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU5MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTkzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81OTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU5NWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTk3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81OTlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYwMGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjAxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYwNGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjA1YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MDZhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYwN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjA5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYxM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjE0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MTVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYxNmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjE3YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MThhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYxOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjIxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MjJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYyM2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjI0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MjVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYyN2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjI4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYzMmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjMzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MzRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYzNWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjM2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82MzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzYzOWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjQxYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NDJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY0NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjQ2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NDdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY0OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjQ5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NTBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY1MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjUyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NTRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY1OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjU5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NjBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY2MmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjYzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NjRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY2N2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjY4YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NzBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY3MWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjcyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NzNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY3NGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjc2YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82NzdhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzY3OGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNjc5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl82ODBhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY2dvdG9fYWRkX29wYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX2FyZ3VtZW50X2xpc3RhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fYXRvbV9vcl92YXJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY2dvdG9fYXRvbWljYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX2F0dHJfdmFsYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX2F0dHJpYnV0ZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxZ5ZWNjZ290b19iaW5fYmFzZV90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX2Jpbl9lbGVtZW50YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FXllY2Nnb3RvX2Jpbl9lbGVtZW50c2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxZ5ZWNjZ290b19iaW5fdW5pdF90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2Nnb3RvX2JpbmFyeWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx15ZWNjZ290b19iaW5hcnlfY29tcHJlaGVuc2lvbmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b19iaW5hcnlfdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19iaXRfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxZ5ZWNjZ290b19iaXRfc2l6ZV9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX2JpdF90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX2JpdF90eXBlX2xpc3RhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncSeWVjY2dvdG9fY2FzZV9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX2NsYXVzZV9hcmdzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX2NsYXVzZV9ib2R5YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3GnllY2Nnb3RvX2NsYXVzZV9ib2R5X2V4cHJzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FXllY2Nnb3RvX2NsYXVzZV9ndWFyZGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjZ290b19jb21wX29wYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX2NyX2NsYXVzZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxN5ZWNjZ290b19jcl9jbGF1c2VzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2Nnb3RvX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZXhwcl9tYXhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fZXhwcl9yZW1vdGVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncOeWVjY2dvdG9fZXhwcnNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9fZmllbGRfdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b19maWVsZF90eXBlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjZ290b19mb3JtYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3E3llY2Nnb3RvX2Z1bl9jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fZnVuX2NsYXVzZXNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZnVuX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZnVuX3R5cGVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fZnVuY3Rpb25hB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncWeWVjY2dvdG9fZnVuY3Rpb25fY2FsbGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxh5ZWNjZ290b19mdW5jdGlvbl9jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncZeWVjY2dvdG9fZnVuY3Rpb25fY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjZ290b19ndWFyZGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b19pZl9jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9faWZfY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjZ290b19pZl9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3F3llY2Nnb3RvX2ludGVnZXJfb3JfdmFyYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2Nnb3RvX2xjX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY2dvdG9fbGNfZXhwcnNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY2dvdG9fbGlzdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxt5ZWNjZ290b19saXN0X2NvbXByZWhlbnNpb25hB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY2dvdG9fbGlzdF9vcGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19tYXBfY29tcHJlaGVuc2lvbmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19tYXBfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b19tYXBfZmllbGRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncYeWVjY2dvdG9fbWFwX2ZpZWxkX2Fzc29jYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3GHllY2Nnb3RvX21hcF9maWVsZF9leGFjdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxN5ZWNjZ290b19tYXBfZmllbGRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2Nnb3RvX21hcF9rZXlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncWeWVjY2dvdG9fbWFwX3BhaXJfdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxd5ZWNjZ290b19tYXBfcGFpcl90eXBlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjZ290b19tYXBfcGF0X2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncSeWVjY2dvdG9fbWFwX3R1cGxlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3E3llY2Nnb3RvX21heWJlX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fbWF5YmVfbWF0Y2hhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncaeWVjY2dvdG9fbWF5YmVfbWF0Y2hfZXhwcnNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY2dvdG9fbXVsdF9vcGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19vcHRfYml0X3NpemVfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19vcHRfYml0X3R5cGVfbGlzdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxp5ZWNjZ290b19wYXRfYXJndW1lbnRfbGlzdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19wYXRfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjZ290b19wYXRfZXhwcl9tYXhhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncSeWVjY2dvdG9fcGF0X2V4cHJzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX3ByZWZpeF9vcGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjZ290b19yZWNlaXZlX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncUeWVjY2dvdG9fcmVjb3JkX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncVeWVjY2dvdG9fcmVjb3JkX2ZpZWxkYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX3JlY29yZF9maWVsZHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncYeWVjY2dvdG9fcmVjb3JkX3BhdF9leHByYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FXllY2Nnb3RvX3JlY29yZF90dXBsZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b19zcGVjX2Z1bmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxd5ZWNjZ290b19zc2FfY2hlY2tfYW5ub2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx55ZWNjZ290b19zc2FfY2hlY2tfYW5ub19jbGF1c2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncfeWVjY2dvdG9fc3NhX2NoZWNrX2Fubm9fY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxd5ZWNjZ290b19zc2FfY2hlY2tfYXJnc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx15ZWNjZ290b19zc2FfY2hlY2tfYmluYXJ5X2xpdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyZ5ZWNjZ290b19zc2FfY2hlY2tfYmluYXJ5X2xpdF9ieXRlc19sc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyJ5ZWNjZ290b19zc2FfY2hlY2tfYmluYXJ5X2xpdF9yZXN0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3HnllY2Nnb3RvX3NzYV9jaGVja19jbGF1c2VfYXJnc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyF5ZWNjZ290b19zc2FfY2hlY2tfY2xhdXNlX2FyZ3NfbHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncXeWVjY2dvdG9fc3NhX2NoZWNrX2V4cHJhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncYeWVjY2dvdG9fc3NhX2NoZWNrX2V4cHJzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3GnllY2Nnb3RvX3NzYV9jaGVja19mdW5fcmVmYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3G3llY2Nnb3RvX3NzYV9jaGVja19saXN0X2xpdGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx55ZWNjZ290b19zc2FfY2hlY2tfbGlzdF9saXRfbHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncaeWVjY2dvdG9fc3NhX2NoZWNrX21hcF9rZXlhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncieWVjY2dvdG9fc3NhX2NoZWNrX21hcF9rZXlfZWxlbWVudGEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdyN5ZWNjZ290b19zc2FfY2hlY2tfbWFwX2tleV9lbGVtZW50c2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdx95ZWNjZ290b19zc2FfY2hlY2tfbWFwX2tleV9saXN0YQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3KXllY2Nnb3RvX3NzYV9jaGVja19tYXBfa2V5X3R1cGxlX2VsZW1lbnRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FnllY2Nnb3RvX3NzYV9jaGVja19wYXRhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncXeWVjY2dvdG9fc3NhX2NoZWNrX3BhdHNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAnceeWVjY2dvdG9fc3NhX2NoZWNrX3doZW5fY2xhdXNlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3H3llY2Nnb3RvX3NzYV9jaGVja193aGVuX2NsYXVzZXNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY2dvdG9fc3RyaW5nc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjZ290b190YWlsYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX3RvcF90eXBlYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX3RvcF90eXBlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b190cnlfY2F0Y2hhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9fdHJ5X2NsYXVzZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b190cnlfY2xhdXNlc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjZ290b190cnlfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxt5ZWNjZ290b190cnlfb3B0X3N0YWNrdHJhY2VhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncOeWVjY2dvdG9fdHVwbGVhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY2dvdG9fdHlwZWEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxN5ZWNjZ290b190eXBlX2d1YXJkYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3FHllY2Nnb3RvX3R5cGVfZ3VhcmRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EXllY2Nnb3RvX3R5cGVfc2lnYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2Nnb3RvX3R5cGVfc2lnc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjZ290b190eXBlX3NwZWNhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncXeWVjY2dvdG9fdHlwZWRfYXR0cl92YWxhB2poAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY2dvdG9fdHlwZWRfZXhwcmEHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjZ290b190eXBlZF9leHByc2EHamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxx5ZWNjZ290b190eXBlZF9yZWNvcmRfZmllbGRzYQdqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl8xX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdwx5ZWNjcGFyczJfMl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncMeWVjY3BhcnMyXzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DHllY2NwYXJzMl85X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xMl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzEzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8xN19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzE4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yMF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzIxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8yNV9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzI2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zMF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzMxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zM19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl8zNl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzM4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfMzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80NF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl80N19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzQ4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNDlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzUyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81NF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl81N19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzU4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl83Ml9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzc0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfNzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl84MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzgyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl85MF9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzkxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfOTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl85M19hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzk0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DXllY2NwYXJzMl85Nl9hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncNeWVjY3BhcnMyXzk3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw15ZWNjcGFyczJfOTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMDlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xMzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNDdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xNzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xODlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8xOTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yMzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yNzdfIWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjc3XylhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI3N18sYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2NwYXJzMl8yNzdfLT5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI3N186OmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfMjc3Xzo9YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yNzdfO2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfMjc3XzwtYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yNzdfPWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfMjc3Xz0+YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2NwYXJzMl8yNzdfPj5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI3N18/PWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjc3X11hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY3BhcnMyXzI3N19hZnRlcmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxV5ZWNjcGFyczJfMjc3X2FuZGFsc29hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncTeWVjY3BhcnMyXzI3N19jYXRjaGEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjcGFyczJfMjc3X2RvdGEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjcGFyczJfMjc3X2Vsc2VhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncReWVjY3BhcnMyXzI3N19lbmRhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI3N19vZmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxR5ZWNjcGFyczJfMjc3X29yZWxzZWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjcGFyczJfMjc3X3doZW5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI3N198YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHllY2NwYXJzMl8yNzdffHxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI3N199YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yNzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yODdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yOTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8yOTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl8yOTdfKWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjk3XyxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzI5N18tPmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMjk3XzphAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzI5N189YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EnllY2NwYXJzMl8yOTdfd2hlbmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMjk4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMjk5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzAxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzAzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzA0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzA2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzA4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzEwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzEyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzE0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzE2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzIxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzIzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzI2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzI4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzI5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzMyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzMzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzM1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzM3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzM5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzQ5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzUxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzUyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzUzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzU1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzU3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzYwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzYxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzYzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzY5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzcxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzcyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzc2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzc4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzgwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzgxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzgzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfMzg5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMzkwXyxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzM5MF8+PmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfMzkwX11hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzM5MF99YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl8zOThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MDlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80MzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80NzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODVfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80ODlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl80OTlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTJfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MThfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MjlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MzFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81MzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NDhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NTBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NTNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NTRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjFfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjRfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NjhfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzNfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzZfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzdfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81NzlfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DnllY2NwYXJzMl81ODBfYQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl81ODRfKWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfNTg0XyxhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzU4NF86PWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw95ZWNjcGFyczJfNTg0XzthAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncQeWVjY3BhcnMyXzU4NF89PmEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxB5ZWNjcGFyczJfNTg0Xz4+YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl81ODRfXWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxF5ZWNjcGFyczJfNTg0X2RvdGEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxJ5ZWNjcGFyczJfNTg0X3doZW5hAWpoAncIZGlhbHl6ZXJsAAAAAWgCdw9ub3dhcm5fZnVuY3Rpb25oAncPeWVjY3BhcnMyXzU4NF98YQFqaAJ3CGRpYWx5emVybAAAAAFoAncPbm93YXJuX2Z1bmN0aW9uaAJ3D3llY2NwYXJzMl81ODRffWEBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTg1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTg2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTg4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTkzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTk0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTk3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNTk5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjAxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjA2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjA3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjA5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjEwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjEzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjE0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjE3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjE5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjIxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjIzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjI0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjI1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjI3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjMwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjMyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjM0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjM1X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjM5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjQ5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjUwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjUxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjUyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjU4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjU5X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjYzX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjY0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjY3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjY4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjcwX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjcxX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjcyX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjczX2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc0X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc2X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc3X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjc4X2EBamgCdwhkaWFseXplcmwAAAABaAJ3D25vd2Fybl9mdW5jdGlvbmgCdw55ZWNjcGFyczJfNjgwX2EBamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACsvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfcGFyc2UuZXJsag==
+=mod:gen_server
+Current size: 63325
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAn6RHe9GB6oWz+pkuBfW8K2poAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwdtY19zZW5kYQZqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACwvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW5fc2VydmVyLmVybGo=
+=mod:lists
+Current size: 99909
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAOC+znQeEHQ4VS7RSlxghx2poAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwp1a2V5bWVyZ2VsYQNqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9saXN0cy5lcmxq
+=mod:logger_config
+Current size: 10240
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAb9Y3k+aGr3hN5q3KdYRHtWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9jb25maWcuZXJsag==
+=mod:logger_simple_h
+Current size: 14726
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZpGbBxoDz/i1DSNMxmWqyWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zaW1wbGVfaC5lcmxq
+=mod:logger_filters
+Current size: 4971
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAzwk48RcCYOF3ih2/kJrSm2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9maWx0ZXJzLmVybGo=
+=mod:error_logger
+Current size: 18021
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA9gWmGAB8sC+HfxKvyFw6Impq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2Vycm9yX2xvZ2dlci5lcmxq
+=mod:code_server
+Current size: 63936
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAALWQXUe7tZIQ9G/1/MX9D1Gpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2NvZGVfc2VydmVyLmVybGo=
+=mod:heart
+Current size: 15601
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAyNN9gP1SxPnm7mbH8bBrLmpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdw5zZW5kX2hlYXJ0X2NtZGECamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2hlYXJ0LmVybGo=
+=mod:gen_event
+Current size: 54224
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbZDZYq2ZehgrVmXuTdC9R2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACsvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW5fZXZlbnQuZXJsag==
+=mod:logger
+Current size: 53655
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAhEpn4LkeE+Ww1jrqwO/DAmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlci5lcmxq
+=mod:application_controller
+Current size: 112719
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA8aNg4vAvqQ7+MnTc6uXOCWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAOC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2FwcGxpY2F0aW9uX2NvbnRyb2xsZXIuZXJsag==
+=mod:application_master
+Current size: 17949
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAFPdt+BWDgI08/IO4pGy/Lmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsANC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2FwcGxpY2F0aW9uX21hc3Rlci5lcmxq
+=mod:erl_eval
+Current size: 90511
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAK4B/QUWPpeHDqFA51B7m72pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfZXZhbC5lcmxq
+=mod:kernel
+Current size: 16434
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAG5SBkG5rwhqTCCPgosVpj2poAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2tlcm5lbC5lcmxq
+=mod:proc_lib
+Current size: 44783
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAHPr2dE+lcIfVFaldy2suaGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9wcm9jX2xpYi5lcmxq
+=mod:file_io_server
+Current size: 45573
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA37XXQKgVyzgAhQMymk22nGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2ZpbGVfaW9fc2VydmVyLmVybGo=
+=mod:logger_server
+Current size: 31925
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA6Q4YfPDTeP55K3VJGDToJGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zZXJ2ZXIuZXJsag==
+=mod:erl_lint
+Current size: 310700
+Current attributes: g2wAAAAFaAJ3A3ZzbmwAAAABbhAAZov2Nvzfuz6qcuUHe4NKempoAncHcmVtb3ZlZGwAAAABaAN3C21vZGlmeV9saW5lYQJrACB1c2UgZXJsX3BhcnNlOm1hcF9hbm5vLzIgaW5zdGVhZGpoAncIZGlhbHl6ZXJsAAAAAWgCdwhub19tYXRjaGgCdwh0eXBlX2RlZmEGamgCdwhkaWFseXplcmwAAAABaAJ3CG5vX21hdGNoaAJ3E2RlcHJlY2F0ZWRfZnVuY3Rpb25hBWpoAncIZGlhbHl6ZXJsAAAAAWgCdwhub19tYXRjaGgCdw9kZXByZWNhdGVkX3R5cGVhBWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfbGludC5lcmxq
+=mod:supervisor
+Current size: 78800
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAvy8OsDDanMrThS86JgsLempoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACwvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zdXBlcnZpc29yLmVybGo=
+=mod:ets
+Current size: 58700
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAegV/9YrrRq9A7VQccwP0Ompq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9ldHMuZXJsag==
+=mod:filename
+Current size: 42212
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAxfgNPRE4P/8E8mNjf3nXyGpoAncHcmVtb3ZlZGwAAAABaAN3CGZpbmRfc3JjdwFfawAjdXNlIGZpbGVsaWI6ZmluZF9zb3VyY2UvMSwzIGluc3RlYWRqaAJ3B3JlbW92ZWRsAAAAAWgDdxJzYWZlX3JlbGF0aXZlX3BhdGhhAWsAKHVzZSBmaWxlbGliOnNhZmVfcmVsYXRpdmVfcGF0aC8yIGluc3RlYWRqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9maWxlbmFtZS5lcmxq
+=mod:application
+Current size: 15002
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAO3mC1yO32EqVKdQkgma7DGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2FwcGxpY2F0aW9uLmVybGo=
+=mod:code
+Current size: 45920
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA1rkrrsCyRltM8IqivNv2SWpoAncHcmVtb3ZlZGwAAAABaAN3BnJlaGFzaGEAawAsdGhlIGNvZGUgcGF0aCBjYWNoZSBmZWF0dXJlIGhhcyBiZWVuIHJlbW92ZWRqaAJ3B3JlbW92ZWRsAAAAAWgDdxBpc19tb2R1bGVfbmF0aXZlYQFrABVIaVBFIGhhcyBiZWVuIHJlbW92ZWRqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2NvZGUuZXJsag==
+=mod:file
+Current size: 44191
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAphblwlDFWwErKfvQJHHIAmpoAncKZGVwcmVjYXRlZGwAAAABaAN3CHBpZDJuYW1lYQFrACl0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2ZpbGUuZXJsag==
+=mod:gen
+Current size: 30362
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAKKwsTHEn6t3sqSA1qygYyWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwdkb19jYWxsYQRqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncPZG9fc2VuZF9yZXF1ZXN0YQNqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW4uZXJsag==
+=mod:error_handler
+Current size: 5146
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA4HX9MacsLFi2Dumg+HZ9nWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2Vycm9yX2hhbmRsZXIuZXJsag==
+=mod:logger_backend
+Current size: 7115
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAoZ+yGJmvZZw2G+8fUAejtmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9iYWNrZW5kLmVybGo=
+=mod:file_server
+Current size: 13379
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAS7N4uM27g+5Rn3kNnsFYOWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2ZpbGVfc2VydmVyLmVybGo=
+=mod:logger_proxy
+Current size: 8857
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZduPYGozFFaJ/GMceJxnQWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9wcm94eS5lcmxq
+=mod:logger_olp
+Current size: 24420
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAhELBVPfG1AFHg6Hw3ACHYmpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9vbHAuZXJsag==
+=mod:queue
+Current size: 26237
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA+pdK0iaAqDWnRiWIegfYd2poAncKZGVwcmVjYXRlZGwAAAABaAN3BGxhaXRhAWsAGHVzZSBxdWV1ZTpsaWF0LzEgaW5zdGVhZGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9xdWV1ZS5lcmxq
+=mod:proplists
+Current size: 13618
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA3DEXDWFyP/1Am4oxQYybO2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACsvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9wcm9wbGlzdHMuZXJsag==
+=mod:peer
+Current size: 56511
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA2E9Rc/B6+K6No16io4F+QWpoAncGYXV0aG9yawASbWF4aW1mY2FAZ21haWwuY29taAJ3CWJlaGF2aW91cmwAAAABdwpnZW5fc2VydmVyamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACYvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9wZWVyLmVybGo=
+=mod:beam_lib
+Current size: 65994
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAGAqMJUP/V7MaDY2WDvcZVmpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9iZWFtX2xpYi5lcmxq
+=mod:binary
+Current size: 21293
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAjusm/cmFBBM4V7Pu9tlybmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACgvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9iaW5hcnkuZXJsag==
+=mod:gb_sets
+Current size: 22658
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAjJKuKbdSxi4KHdHBwvnc2mpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nYl9zZXRzLmVybGo=
+=mod:gb_trees
+Current size: 15903
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA/9kxl1ANy9kH79Yem0U5aGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nYl90cmVlcy5lcmxq
+=mod:os
+Current size: 17693
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAe2HUBCvqya+anjsKRMYUTGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL29zLmVybGo=
+=mod:unicode
+Current size: 41929
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAq+fzNG8vRL24dz9E5ZlDaGpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwxkb19vX2JpbmFyeTJhAmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy91bmljb2RlLmVybGo=
+=mod:erl_features
+Current size: 41135
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAYXEynt+8kTRkG8V/OHR0VGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfZmVhdHVyZXMuZXJsag==
+=mod:standard_error
+Current size: 10663
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAkMo760coteTN1xzpRgHT6mpoAncJYmVoYXZpb3VybAAAAAF3EXN1cGVydmlzb3JfYnJpZGdlamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3N0YW5kYXJkX2Vycm9yLmVybGo=
+=mod:supervisor_bridge
+Current size: 19251
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA+ZJzPQgBcV7sQuq/XPk182poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrADMvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zdXBlcnZpc29yX2JyaWRnZS5lcmxq
+=mod:inet_db
+Current size: 68294
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAvdtm5APLt4opHuq1WdBdWGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfZGIuZXJsag==
+=mod:inet_config
+Current size: 25206
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAlZNV6TqRS7nNxz74j7FCe2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfY29uZmlnLmVybGo=
+=mod:inet_udp
+Current size: 6941
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAhrzZ8+DOe1LKVcGE3RxIN2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfdWRwLmVybGo=
+=mod:inet
+Current size: 81321
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAATt4eXjFDEUu+qumuN+EMfWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXQuZXJsag==
+=mod:inet_parse
+Current size: 38147
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAEf7OexUeePpkEPPFZJPf+mpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2luZXRfcGFyc2UuZXJsag==
+=mod:rpc
+Current size: 29484
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA6VB2VShMOzVQaYOrBGnThmpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqaAJ3B3JlbW92ZWRsAAAAAmgDdxZzYWZlX211bHRpX3NlcnZlcl9jYWxsYQJrACN1c2UgcnBjOm11bHRpX3NlcnZlcl9jYWxsLzIgaW5zdGVhZGgDdxZzYWZlX211bHRpX3NlcnZlcl9jYWxsYQNrACN1c2UgcnBjOm11bHRpX3NlcnZlcl9jYWxsLzMgaW5zdGVhZGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3JwYy5lcmxq
+=mod:global
+Current size: 117570
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA3Un4q7IE1kKFWWXOqg1fv2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dsb2JhbC5lcmxq
+=mod:net_kernel
+Current size: 95518
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAARVYlffpB+M9gMCitj2vQyGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL25ldF9rZXJuZWwuZXJsag==
+=mod:rand
+Current size: 82048
+Current attributes: g2wAAAAMaAJ3A3ZzbmwAAAABbhAASiW5LD/Qej4GU+MSRZDXfWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwxleHNwbHVzX3NlZWRhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwpleHNzc19zZWVkYQFqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncJZXhzcF9uZXh0YQFqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncKZXhzc3NfbmV4dGEBamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3DGV4c3BsdXNfanVtcGEBamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3CWV4c3BfanVtcGEBamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3DGV4c3BsdXNfanVtcGEEamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzaAJ3CmV4cm9wX3NlZWRhAWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwxleHJvcF9uZXh0X3NhAmpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwpleHJvcF9uZXh0YQFqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncKZXhyb3BfanVtcGEFamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACYvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9yYW5kLmVybGo=
+=mod:maps
+Current size: 22152
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA74KFUusq6FvLJdXoy86SW2poAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2wAAAACaAJ3CGl0ZXJhdG9yYQFoAncIaXRlcmF0b3JhAmpqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACYvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9tYXBzLmVybGo=
+=mod:erl_distribution
+Current size: 6886
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAADU5yO8e4eK+9kI484ejKXGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2VybF9kaXN0cmlidXRpb24uZXJsag==
+=mod:global_group
+Current size: 54044
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAh7yoy6UVXzAVQ4pFGW90/2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dsb2JhbF9ncm91cC5lcmxq
+=mod:erpc
+Current size: 42486
+Current attributes: g2wAAAALaAJ3A3ZzbmwAAAABbhAAE8Ii4JDYcOGscJTGZx5vtmpoAncIZGlhbHl6ZXJsAAAAAmgCdw9ub3dhcm5fZnVuY3Rpb25oAncEY2FsbGEFdwlub19yZXR1cm5qaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncMc2VuZF9yZXF1ZXN0YQRqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncMc2VuZF9yZXF1ZXN0YQZqaAJ3CGRpYWx5emVybAAAAAJoAncPbm93YXJuX2Z1bmN0aW9uaAJ3EHJlY2VpdmVfcmVzcG9uc2VhAncJbm9fcmV0dXJuamgCdwhkaWFseXplcmwAAAACaAJ3D25vd2Fybl9mdW5jdGlvbmgCdxByZWNlaXZlX3Jlc3BvbnNlYQN3CW5vX3JldHVybmpoAncIZGlhbHl6ZXJsAAAAAmgCdw9ub3dhcm5fZnVuY3Rpb25oAncNd2FpdF9yZXNwb25zZWECdwlub19yZXR1cm5qaAJ3CGRpYWx5emVybAAAAAJoAncPbm93YXJuX2Z1bmN0aW9uaAJ3DmNoZWNrX3Jlc3BvbnNlYQJ3CW5vX3JldHVybmpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2gCdwpyZXFpZHNfYWRkYQNqaAJ3CGRpYWx5emVybAAAAAFoAncRbm9faW1wcm9wZXJfbGlzdHNoAncOcmVxaWRzX3RvX2xpc3RhAWpoAncIZGlhbHl6ZXJsAAAAAmgCdw9ub3dhcm5fZnVuY3Rpb25oAncGcmVzdWx0YQR3CW5vX3JldHVybmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2VycGMuZXJsag==
+=mod:user_sup
+Current size: 5411
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAZjtvFsHpi2oYJNyK+BJegmpoAncJYmVoYXZpb3VybAAAAAF3EXN1cGVydmlzb3JfYnJpZGdlamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3VzZXJfc3VwLmVybGo=
+=mod:user_drv
+Current size: 50600
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAV06qfcXDHq1HAw73vMm622poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zdGF0ZW1qag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3VzZXJfZHJ2LmVybGo=
+=mod:gen_statem
+Current size: 78929
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA0LgXEqMkSoYlnYjTV7wab2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACwvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9nZW5fc3RhdGVtLmVybGo=
+=mod:prim_tty
+Current size: 71017
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAAqFwI4sYbIil9FhV3gj2j2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAKi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3ByaW1fdHR5LmVybGo=
+=mod:io
+Current size: 24369
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAApRaglMWA2VsOdFJPVz133Gpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACQvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9pby5lcmxq
+=mod:group
+Current size: 43672
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA851sQvKFjbfq7qcvrtJnqGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAJy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dyb3VwLmVybGo=
+=mod:edlin
+Current size: 38096
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAHOkgEIAXEUgr+NtGF+NeWmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lZGxpbi5lcmxq
+=mod:io_lib
+Current size: 37231
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAFFeN9kWE1DsEb/D+MxWXDGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACgvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9pb19saWIuZXJsag==
+=mod:logger_sup
+Current size: 1730
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAviM55aoW6hCnDVjE2ajfCGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zdXAuZXJsag==
+=mod:group_history
+Current size: 40520
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAArNDTXjp3PaP6UETyYRPOCWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2dyb3VwX2hpc3RvcnkuZXJsag==
+=mod:io_lib_format
+Current size: 36306
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAzwUVMCw5gpCCMKijxfMqt2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC8vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9pb19saWJfZm9ybWF0LmVybGo=
+=mod:logger_handler_watcher
+Current size: 3686
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAUSb4uQDBVYdufFjEDGNpDWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAOC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9oYW5kbGVyX3dhdGNoZXIuZXJsag==
+=mod:timer
+Current size: 19608
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA8aNh9jNZ5oP9N/HqUh4WWWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACcvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy90aW1lci5lcmxq
+=mod:kernel_config
+Current size: 7013
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAKNVWveNYHE/lG53RxdAyrWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALy9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2tlcm5lbF9jb25maWcuZXJsag==
+=mod:kernel_refc
+Current size: 6107
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAP51mX3wVLHv5Wt44rH/VNWpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2tlcm5lbF9yZWZjLmVybGo=
+=mod:erl_signal_handler
+Current size: 3791
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA49r9WmTF+h6BuvDW6CLhI2poAncJYmVoYXZpb3VybAAAAAF3CWdlbl9ldmVudGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsANC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2VybF9zaWduYWxfaGFuZGxlci5lcmxq
+=mod:logger_formatter
+Current size: 27269
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA3DgK6nIfXOBrGY11b3Ebc2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9mb3JtYXR0ZXIuZXJsag==
+=mod:logger_std_h
+Current size: 29691
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAHZBnbQf+yJ3LNQvEEyzqCGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALi9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9zdGRfaC5lcmxq
+=mod:logger_h_common
+Current size: 27015
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA8gXXQTDseI2RwAfchg+PjGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsAMS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL2xvZ2dlcl9oX2NvbW1vbi5lcmxq
+=mod:c
+Current size: 55738
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAx9sEY92lk5eCgdpeFRvl7Wpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACMvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9jLmVybGo=
+=mod:orddict
+Current size: 9632
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAjVNEV8MyenfougmvyJOIn2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9vcmRkaWN0LmVybGo=
+=mod:raw_file_io
+Current size: 3544
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAAfByFOutd4XmaTTyQZS+wGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAJ3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjLy4uL2luY2x1ZGVqaAJ3BnNvdXJjZWsALS9idWlsZHJvb3Qvb3RwL2xpYi9rZXJuZWwvc3JjL3Jhd19maWxlX2lvLmVybGo=
+=mod:erl_scan
+Current size: 80286
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAcWizQoku/ar098CvlBYw3GpoAncHcmVtb3ZlZGwAAAADaAN3DXNldF9hdHRyaWJ1dGVhA2sAH3VzZSBlcmxfYW5ubzpzZXRfbGluZS8yIGluc3RlYWRoA3cPYXR0cmlidXRlc19pbmZvdwFfawAydXNlIGVybF9hbm5vOntjb2x1bW4sbGluZSxsb2NhdGlvbix0ZXh0fS8xIGluc3RlYWRoA3cKdG9rZW5faW5mb3cBX2sAQnVzZSBlcmxfc2Nhbjp7Y2F0ZWdvcnksY29sdW1uLGxpbmUsbG9jYXRpb24sc3ltYm9sLHRleHR9LzEgaW5zdGVhZGpoAncMcmVtb3ZlZF90eXBlbAAAAANoA3cGY29sdW1uYQBrAB11c2UgZXJsX2Fubm86Y29sdW1uKCkgaW5zdGVhZGgDdwRsaW5lYQBrABt1c2UgZXJsX2Fubm86bGluZSgpIGluc3RlYWRoA3cIbG9jYXRpb25hAGsAH3VzZSBlcmxfYW5ubzpsb2NhdGlvbigpIGluc3RlYWRqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfc2Nhbi5lcmxq
+=mod:erl_anno
+Current size: 10627
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAkayPNmhEhCtPmVnzA+f9ompq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACovYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfYW5uby5lcmxq
+=mod:ordsets
+Current size: 5786
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAe8kg2+9uOF1cs2tFmVktbGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9vcmRzZXRzLmVybGo=
+=mod:otp_internal
+Current size: 74930
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAgb4GzSRirByHf+zgWa/J7mpoAncIZGlhbHl6ZXJsAAAAAWgCdwhub19tYXRjaGgCdwhvYnNvbGV0ZWEDamgCdwhkaWFseXplcmwAAAABaAJ3CG5vX21hdGNoaAJ3DW9ic29sZXRlX3R5cGVhA2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9vdHBfaW50ZXJuYWwuZXJsag==
+=mod:erl_internal
+Current size: 12465
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAH3E66VDgOMxAJ3swqD+T7Wpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcmxfaW50ZXJuYWwuZXJsag==
+=mod:'aoc2023@@main'
+Current size: 4742
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAPugzxohB3mrGKcTr3YDYhmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAby9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9hb2MyMDIzQEBtYWluLmVybGo=
+=mod:epp
+Current size: 96168
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAB23d4tmH4coUKKRIT0Ew7Wpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9lcHAuZXJsag==
+=mod:inets_app
+Current size: 1391
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAA4PrNF10KpcErAmiRnvRGo2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwthcHBsaWNhdGlvbmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA0L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9pbmV0c19hcHAvaW5ldHNfYXBwLmVybGo=
+=mod:inets_sup
+Current size: 4174
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAZYq0pFoYUy98UilKMAgr/2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA0L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9pbmV0c19hcHAvaW5ldHNfc3VwLmVybGo=
+=mod:httpc_sup
+Current size: 2503
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAgy7v3K4IkDuZDOu8Nwe8CGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA2L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19zdXAuZXJsag==
+=mod:httpc_profile_sup
+Current size: 3949
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAARi0bgARtwsiompJMTfZqgGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA+L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19wcm9maWxlX3N1cC5lcmxq
+=mod:httpc
+Current size: 51321
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAQJGijj06WciIsf9zWi9RRWpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdw1pbmV0c19zZXJ2aWNlamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawAyL2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwYy5lcmxq
+=mod:httpc_manager
+Current size: 45805
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAzA6/cmiSsI/VuMRE+DH5q2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpnZW5fc2VydmVyamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA6L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19tYW5hZ2VyLmVybGo=
+=mod:inets_trace
+Current size: 16599
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA13W3kiQ3DajF6u1MEp8wcGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA2L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9pbmV0c19hcHAvaW5ldHNfdHJhY2UuZXJsag==
+=mod:httpc_cookie
+Current size: 26127
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAj0Py8LgBp/5GCHesApuGKmpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA5L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19jb29raWUuZXJsag==
+=mod:httpc_handler_sup
+Current size: 2111
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAATMTRW8HC2a2GvzQjWwLttGpoAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oAncBaWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vLi4vaW5jbHVkZWgCdwFpawA1L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC8uLi9pbmV0c19hcHBoAncBaWsANC9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9jbGllbnQvLi4vaHR0cF9saWJoAncPcGFyc2VfdHJhbnNmb3JtdxJzeXNfcHJlX2F0dHJpYnV0ZXNoBHcJYXR0cmlidXRldwZpbnNlcnR3B2FwcF92c25rAAtpbmV0cy05LjAuMWpoAncGc291cmNlawA+L2J1aWxkcm9vdC9vdHAvbGliL2luZXRzL3NyYy9odHRwX2NsaWVudC9odHRwY19oYW5kbGVyX3N1cC5lcmxq
+=mod:httpd_sup
+Current size: 10999
+Current attributes: g2wAAAADaAJ3A3ZzbmwAAAABbhAAtKUXEBjK/e98uHvMb3rrF2poAncHYXBwX3ZzbmsAC2luZXRzLTkuMC4xaAJ3CWJlaGF2aW91cmwAAAABdwpzdXBlcnZpc29yamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAZ3CmRlYnVnX2luZm9oA3cBZHcPU0VSVkVSX1NPRlRXQVJFawALaW5ldHMvOS4wLjFoAncBaWsANS9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9zZXJ2ZXIvLi4vaW5ldHNfYXBwaAJ3AWlrADQvYnVpbGRyb290L290cC9saWIvaW5ldHMvc3JjL2h0dHBfc2VydmVyLy4uL2h0dHBfbGliaAJ3D3BhcnNlX3RyYW5zZm9ybXcSc3lzX3ByZV9hdHRyaWJ1dGVzaAR3CWF0dHJpYnV0ZXcGaW5zZXJ0dwdhcHBfdnNuawALaW5ldHMtOS4wLjFqaAJ3BnNvdXJjZWsANi9idWlsZHJvb3Qvb3RwL2xpYi9pbmV0cy9zcmMvaHR0cF9zZXJ2ZXIvaHR0cGRfc3VwLmVybGo=
+=mod:ssl_app
+Current size: 2100
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbg8A0DC0t7URrYxQKjqz0ymfamgCdwliZWhhdmlvdXJsAAAAAXcLYXBwbGljYXRpb25qag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAmL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2FwcC5lcmxq
+=mod:ssl_logger
+Current size: 40894
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA9nZNLNkysVW+ZQmCjJHduWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawApL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2xvZ2dlci5lcmxq
+=mod:ssl_sup
+Current size: 2196
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAo3LCwydF/2W9pRiIxy3DjmpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAmL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3N1cC5lcmxq
+=mod:ssl_admin_sup
+Current size: 4152
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA9wr0ynjnPAnTVBgUTNkR0mpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAsL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2FkbWluX3N1cC5lcmxq
+=mod:ssl_pem_cache
+Current size: 6752
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAinKSIwX0SCBgGNnR5VuBb2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAsL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3BlbV9jYWNoZS5lcmxq
+=mod:ssl_pkix_db
+Current size: 19921
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAUN9wTKLXhUyfxv7o/6pFYmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAqL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3BraXhfZGIuZXJsag==
+=mod:ssl_manager
+Current size: 20578
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAXyE921kAFR6srVwQYOzMTGpoAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAqL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX21hbmFnZXIuZXJsag==
+=mod:ssl_config
+Current size: 19916
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA6GmieDGRPQVKnnM+8AnHe2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawApL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2NvbmZpZy5lcmxq
+=mod:ssl_client_session_cache_db
+Current size: 4099
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAADmgKYfPII/p5bEqiJ5mcpWpoAncJYmVoYXZpb3VybAAAAAF3FXNzbF9zZXNzaW9uX2NhY2hlX2FwaWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA6L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2NsaWVudF9zZXNzaW9uX2NhY2hlX2RiLmVybGo=
+=mod:tls_client_ticket_store
+Current size: 13052
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAxBJUXnCWGs2oPQjBp6L9A2poAncJYmVoYXZpb3VybAAAAAF3Cmdlbl9zZXJ2ZXJqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA2L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX2NsaWVudF90aWNrZXRfc3RvcmUuZXJsag==
+=mod:ssl_connection_sup
+Current size: 2373
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA5ryHccs+ohUp1ydgfH9YvWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAxL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2Nvbm5lY3Rpb25fc3VwLmVybGo=
+=mod:tls_sup
+Current size: 2186
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAALTAE2+O6t5PW4UO1HK8EwWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAmL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX3N1cC5lcmxq
+=mod:tls_connection_sup
+Current size: 2221
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAJvmM1aYsddPoTZrW98XRumpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAxL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX2Nvbm5lY3Rpb25fc3VwLmVybGo=
+=mod:tls_server_sup
+Current size: 2971
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAz0U8v3nIm1ZY5f3kum4r5WpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAtL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX3NlcnZlcl9zdXAuZXJsag==
+=mod:ssl_listen_tracker_sup
+Current size: 2635
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAOGJZxWhtwUTvf1bKcQvuyGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA1L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX2xpc3Rlbl90cmFja2VyX3N1cC5lcmxq
+=mod:tls_server_session_ticket_sup
+Current size: 2770
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAARMHYqHUw2NS1m1UIvB3reGpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA8L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvdGxzX3NlcnZlcl9zZXNzaW9uX3RpY2tldF9zdXAuZXJsag==
+=mod:ssl_server_session_cache_sup
+Current size: 2269
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAByPBY6olcmybwiutwebctWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA7L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3NlcnZlcl9zZXNzaW9uX2NhY2hlX3N1cC5lcmxq
+=mod:ssl_upgrade_server_session_cache_sup
+Current size: 3355
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAMxn80z9MoSuZx9BdUpz512poAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawBDL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvc3NsX3VwZ3JhZGVfc2VydmVyX3Nlc3Npb25fY2FjaGVfc3VwLmVybGo=
+=mod:dtls_sup
+Current size: 2203
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAzEhJZ7CGB/FJN8cXbhi9UWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAnL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19zdXAuZXJsag==
+=mod:dtls_connection_sup
+Current size: 2302
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAARTy7MXOOcU51LrywTcn5CWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAyL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19jb25uZWN0aW9uX3N1cC5lcmxq
+=mod:dtls_server_sup
+Current size: 2332
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAA1ajQs9tDRTHhujDcDcscHmpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAuL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19zZXJ2ZXJfc3VwLmVybGo=
+=mod:dtls_listener_sup
+Current size: 3390
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAMsV5mY/deSztKjjCFxfzBWpoAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawAwL2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19saXN0ZW5lcl9zdXAuZXJsag==
+=mod:dtls_server_session_cache_sup
+Current size: 2286
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAYQzAm4CTe8XSrf2cwuhLS2poAncJYmVoYXZpb3VybAAAAAF3CnN1cGVydmlzb3Jqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAR3CmRlYnVnX2luZm9oA3cBZHcDVlNOawAGMTEuMC4yaAJ3AWlrAB0vYnVpbGRyb290L290cC9saWIva2VybmVsL3NyY3cQd2Fybl91bnVzZWRfdmFyc2poAncGc291cmNlawA8L2J1aWxkcm9vdC9vdHAvbGliL3NzbC9zcmMvZHRsc19zZXJ2ZXJfc2Vzc2lvbl9jYWNoZV9zdXAuZXJsag==
+=mod:aoc2023_test
+Current size: 3021
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAIDzQyy7+ohaS/lZYEnHV6mpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAbi9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9hb2MyMDIzX3Rlc3QuZXJsag==
+=mod:showtime
+Current size: 7589
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAASs9ziZ84gk8YQPJee7zfKmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAai9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZS5lcmxq
+=mod:'gleam@erlang'
+Current size: 5630
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAtN0gkiNwSV+DDvuhn5+jrGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2VybGFuZy9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGVybGFuZy5lcmxq
+=mod:'gleam@list'
+Current size: 33260
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAnSllczgawr65cI3tzxLzUGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGxpc3QuZXJsag==
+=mod:'glint@flag'
+Current size: 25019
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAWH/YkAkx0LbtUA424nvbMGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAai9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsaW50L19nbGVhbV9hcnRlZmFjdHMvZ2xpbnRAZmxhZy5lcmxq
+=mod:'glint@flag@constraint'
+Current size: 7000
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAqroPg4gdgq3ImnzPTggyoGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsaW50L19nbGVhbV9hcnRlZmFjdHMvZ2xpbnRAZmxhZ0Bjb25zdHJhaW50LmVybGo=
+=mod:'gleam@set'
+Current size: 6639
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZnB2CU+bKlUidhVR0LnxHWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHNldC5lcmxq
+=mod:'gleam@dict'
+Current size: 6120
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAAUASYtitXRdExDDzR4vPOGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGRpY3QuZXJsag==
+=mod:glint
+Current size: 18505
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA8af8T+Jw5viRaaFGJe+TImpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAZS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsaW50L19nbGVhbV9hcnRlZmFjdHMvZ2xpbnQuZXJsag==
+=mod:'gleam@map'
+Current size: 5055
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbOLYAgbwbyWo2C1h7jpfH2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQG1hcC5lcmxq
+=mod:'gleam_community@colour'
+Current size: 24404
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAljaAlIiPJ6KY0wAzgFEHsGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAhy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2NvbW11bml0eV9jb2xvdXIvX2dsZWFtX2FydGVmYWN0cy9nbGVhbV9jb21tdW5pdHlAY29sb3VyLmVybGo=
+=mod:'gleam@int'
+Current size: 11239
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAvfyk3FUpUDfPJUBGvGzaM2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGludC5lcmxq
+=mod:'gleam@float'
+Current size: 8605
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAwvf3WDPwF8eL3tZjwLdPvGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAci9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGZsb2F0LmVybGo=
+=mod:'gleam@result'
+Current size: 8298
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAdINyuhBKzZsZG3pV5EZaVWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHJlc3VsdC5lcmxq
+=mod:'gleam@function'
+Current size: 10100
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAABwPVPBZqz4aY1ziaTMPL82pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGZ1bmN0aW9uLmVybGo=
+=mod:'gleam@string'
+Current size: 12638
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbnTY1/YcMIh38pIxTgLMm2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHN0cmluZy5lcmxq
+=mod:gleam_stdlib
+Current size: 35605
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAfiGJYP8AkzvoXZ0YMrXSlmpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtX3N0ZGxpYi5lcmxq
+=mod:string
+Current size: 113669
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAWQd6Le8JB4/gRSVlV2lBNWpoAncIZGlhbHl6ZXJsAAAAAWgCdxFub19pbXByb3Blcl9saXN0c2wAAAACaAJ3BXN0YWNrYQJoAncIbGVuZ3RoX2JhA2pqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACgvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zdHJpbmcuZXJsag==
+=mod:unicode_util
+Current size: 1073461
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbg8AXORlGYYDsuY+eHtBuoYFamgCdwhkaWFseXplcmwAAAABaAJ3EW5vX2ltcHJvcGVyX2xpc3RzbAAAAANoAncCY3BhAWgCdwJnY2EBaAJ3CmdjX3ByZXBlbmRhAmpqag==
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrAC4vYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy91bmljb2RlX3V0aWwuZXJsag==
+=mod:snag
+Current size: 4922
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAG5uviABLq1rTj5x/VJZ0uGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAYy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL3NuYWcvX2dsZWFtX2FydGVmYWN0cy9zbmFnLmVybGo=
+=mod:'gleam@string_builder'
+Current size: 5894
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA60rqd/vw/4Yk1Xn9mUIvUGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAey9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQHN0cmluZ19idWlsZGVyLmVybGo=
+=mod:'showtime@internal@erlang@event_handler'
+Current size: 6427
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAesteT6kF6RvqO2kV/0gQ7Wpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAiC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAZXZlbnRfaGFuZGxlci5lcmxq
+=mod:'gleam@otp@actor'
+Current size: 10710
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAiu2xMkLOQbtFaM3BzoGdrGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX290cC9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQG90cEBhY3Rvci5lcmxq
+=mod:'gleam@erlang@process'
+Current size: 15774
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAtSkhind80R8EMukoR6vkNWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAey9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2VybGFuZy9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGVybGFuZ0Bwcm9jZXNzLmVybGo=
+=mod:gleam_erlang_ffi
+Current size: 18854
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAMiyJ/P+Ak/snrkTct7KA+Wpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX2VybGFuZy9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtX2VybGFuZ19mZmkuZXJsag==
+=mod:sys
+Current size: 25414
+Current attributes: g2wAAAACaAJ3A3ZzbmwAAAABbhAAqJumm2a32a1+cgYA+0oFeGpoAncKZGVwcmVjYXRlZGwAAAABaAN3CWdldF9kZWJ1Z2EDawBaaW5jb3JyZWN0bHkgZG9jdW1lbnRlZCBhbmQgb25seSBmb3IgaW50ZXJuYWwgdXNlLiBDYW4gb2Z0ZW4gYmUgcmVwbGFjZWQgd2l0aCBzeXM6Z2V0X2xvZy8xamo=
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACUvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9zeXMuZXJsag==
+=mod:'showtime@internal@erlang@module_handler'
+Current size: 5600
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA266xv4+Y/ZBeOm9hxQclbWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAiS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAbW9kdWxlX2hhbmRsZXIuZXJsag==
+=mod:'showtime@internal@erlang@discover'
+Current size: 10957
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAACiFC4pbvgv+igrT/QELa0Wpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAgy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAZGlzY292ZXIuZXJsag==
+=mod:'showtime@internal@common@common_event_handler'
+Current size: 6222
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAATc4tRrLUrjDY13p3a0mfM2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAjy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBjb21tb25AY29tbW9uX2V2ZW50X2hhbmRsZXIuZXJsag==
+=mod:simplifile
+Current size: 11471
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAg7QYQ/6hEp7KUPQeePbxIGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAby9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL3NpbXBsaWZpbGUvX2dsZWFtX2FydGVmYWN0cy9zaW1wbGlmaWxlLmVybGo=
+=mod:'gleam@option'
+Current size: 6842
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA7ba+EZRfQIRK4LJH6y8VQGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQG9wdGlvbi5lcmxq
+=mod:simplifile_erl
+Current size: 6790
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAALrwXLSXXrQUhBuYY6MoxsWpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL3NpbXBsaWZpbGUvX2dsZWFtX2FydGVmYWN0cy9zaW1wbGlmaWxlX2VybC5lcmxq
+=mod:filelib
+Current size: 31796
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAA3TrIJYJQZ31EtFlP1T81tGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjIuNGgCdwdvcHRpb25zbAAAAAN3CmRlYnVnX2luZm9oAncBaWsAKC9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uL2luY2x1ZGVoAncBaWsAMi9idWlsZHJvb3Qvb3RwL2xpYi9zdGRsaWIvc3JjLy4uLy4uL2tlcm5lbC9pbmNsdWRlamgCdwZzb3VyY2VrACkvYnVpbGRyb290L290cC9saWIvc3RkbGliL3NyYy9maWxlbGliLmVybGo=
+=mod:'gleam@dynamic'
+Current size: 38851
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAl/t9vhYnIwY0q12jzqtah2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGR5bmFtaWMuZXJsag==
+=mod:'day7@day7_test'
+Current size: 4223
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAJPCDfy0Jji3eOEeobotB3Gpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAcC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9kYXk3QGRheTdfdGVzdC5lcmxq
+=mod:'showtime@internal@erlang@runner'
+Current size: 4500
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAADg32TsjXMXKsJRgK3TDrDGpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAgS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEBlcmxhbmdAcnVubmVyLmVybGo=
+=mod:showtime_ffi
+Current size: 10209
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAkt2yuDpHeMFcxuk1dvnE6Gpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAbi9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZV9mZmkuZXJsag==
+=mod:'showtime@tests@should'
+Current size: 6938
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAARbeuMDVpt+ZmkAn+XaYh8mpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAdy9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUB0ZXN0c0BzaG91bGQuZXJsag==
+=mod:'day7@solve'
+Current size: 10243
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAArXGXSdtYEewD099OEybQ4mpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAbC9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FvYzIwMjMvX2dsZWFtX2FydGVmYWN0cy9kYXk3QHNvbHZlLmVybGo=
+=mod:'showtime@internal@reports@formatter'
+Current size: 23921
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAbZh74abXA6ppaWvDUqdhA2pq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAhS9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2FkZ2xlbnQvX2dsZWFtX2FydGVmYWN0cy9zaG93dGltZUBpbnRlcm5hbEByZXBvcnRzQGZvcm1hdHRlci5lcmxq
+=mod:'gleam@io'
+Current size: 3562
+Current attributes: g2wAAAABaAJ3A3ZzbmwAAAABbhAAZbMfKh/MIOHz0dIn+IIj+Gpq
+Current compilation info: g2wAAAADaAJ3B3ZlcnNpb25rAAU4LjMuMmgCdwdvcHRpb25zbAAAAAF3CmRlYnVnX2luZm9qaAJ3BnNvdXJjZWsAby9Vc2Vycy9uaWNob2xhc2Nhcmxzb24vVlMgQ29kZS9BZHZlbnRPZkNvZGUvYW9jMjAyMy9idWlsZC9kZXYvZXJsYW5nL2dsZWFtX3N0ZGxpYi9fZ2xlYW1fYXJ0ZWZhY3RzL2dsZWFtQGlvLmVybGo=
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 39
+Address: 0x000000010421c3a4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 30
+Address: 0x0000000103e76f50
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 22
+Address: 0x0000000103fb4fe8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 3
+Address: 0x000000010400c9a0
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 34
+Address: 0x000000010414b9c8
+Refc: 1
+=fun
+Module: socket_registry
+Uniq: 8180509
+Index: 0
+Address: 0x0000000103dc1758
+Refc: 1
+=fun
+Module: logger_formatter
+Uniq: 60349323
+Index: 1
+Address: 0x00000001040b64c0
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 0
+Address: 0x00000001040d26b0
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 5
+Address: 0x0000000103e3c140
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 1
+Address: 0x0000000103eb2d08
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 5
+Address: 0x00000001041524d0
+Refc: 2
+=fun
+Module: raw_file_io
+Uniq: 101053602
+Index: 4
+Address: 0x00000001040d0540
+Refc: 2
+=fun
+Module: 'glint@flag@constraint'
+Uniq: 83988546
+Index: 3
+Address: 0x000000010414e3d8
+Refc: 2
+=fun
+Module: 'gleam@set'
+Uniq: 15699406
+Index: 2
+Address: 0x000000010414fa68
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 56
+Address: 0x0000000103e759e8
+Refc: 1
+=fun
+Module: maps
+Uniq: 48010870
+Index: 2
+Address: 0x0000000104036d98
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 29
+Address: 0x000000010414abf0
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 5
+Address: 0x0000000104029d10
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@event_handler'
+Uniq: 124289607
+Index: 2
+Address: 0x00000001041f7afc
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 33
+Address: 0x0000000104009d20
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 48
+Address: 0x000000010421d078
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 10
+Address: 0x0000000104160d88
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 6
+Address: 0x0000000104158cb8
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 6
+Address: 0x0000000103ee1738
+Refc: 2
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 7
+Address: 0x00000001041fc1d4
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 4
+Address: 0x0000000103fb9ee0
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 17
+Address: 0x0000000104146dc4
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 13
+Address: 0x0000000103d93480
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 11
+Address: 0x0000000103feda78
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 90
+Address: 0x0000000103e71d70
+Refc: 1
+=fun
+Module: gen
+Uniq: 105431365
+Index: 0
+Address: 0x0000000103e0ff18
+Refc: 3
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 5
+Address: 0x0000000103e4cad8
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 1
+Address: 0x0000000103f5a008
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 62
+Address: 0x0000000103eaf540
+Refc: 2
+=fun
+Module: ssl_pkix_db
+Uniq: 51522903
+Index: 5
+Address: 0x0000000104129d98
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 13
+Address: 0x0000000103e79bc0
+Refc: 2
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 10
+Address: 0x0000000104109c18
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@module_handler'
+Uniq: 57223230
+Index: 0
+Address: 0x0000000104207ad4
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 3
+Address: 0x0000000103dcd620
+Refc: 1
+=fun
+Module: code
+Uniq: 38778589
+Index: 2
+Address: 0x0000000103e22d70
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 16
+Address: 0x000000010402d478
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 100
+Address: 0x0000000103e710f4
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 2
+Address: 0x0000000103fc4e40
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 14
+Address: 0x000000010400bb80
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 29
+Address: 0x000000010421a968
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 5
+Address: 0x000000010420b330
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 21
+Address: 0x00000001040dd8c0
+Refc: 2
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 8
+Address: 0x0000000103ecbb40
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 28
+Address: 0x0000000103eb0d18
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 3
+Address: 0x0000000103e87d70
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 4
+Address: 0x0000000104147168
+Refc: 1
+=fun
+Module: beam_lib
+Uniq: 45141944
+Index: 1
+Address: 0x0000000103f99ba0
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 47
+Address: 0x0000000103e76020
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 8
+Address: 0x000000010414c680
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 0
+Address: 0x0000000103ef3d3c
+Refc: 1
+=fun
+Module: logger
+Uniq: 1449854
+Index: 0
+Address: 0x0000000103ed6110
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 43
+Address: 0x0000000103eb0110
+Refc: 1
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 1
+Address: 0x0000000104227bd0
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 3
+Address: 0x0000000103fe5680
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 1
+Address: 0x0000000104209460
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 22
+Address: 0x0000000103e77d2c
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 17
+Address: 0x0000000104159158
+Refc: 1
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 8
+Address: 0x00000001041fc094
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 73
+Address: 0x0000000103e73e08
+Refc: 2
+=fun
+Module: epp
+Uniq: 124355082
+Index: 4
+Address: 0x00000001040fc6a4
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 42
+Address: 0x000000010414c798
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 8
+Address: 0x00000001040d58b8
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 13
+Address: 0x0000000103e3b694
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 9
+Address: 0x0000000103eb2130
+Refc: 1
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 5
+Address: 0x00000001041f9860
+Refc: 2
+=fun
+Module: c
+Uniq: 124725464
+Index: 11
+Address: 0x00000001040cb508
+Refc: 2
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 7
+Address: 0x0000000104109e38
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 48
+Address: 0x0000000103e75fc8
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 16
+Address: 0x0000000103dcce18
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 12
+Address: 0x0000000103fb5258
+Refc: 2
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 6
+Address: 0x0000000103dd5abc
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 29
+Address: 0x000000010402c4c8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 107
+Address: 0x0000000103e74414
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 25
+Address: 0x000000010400a4c0
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 8
+Address: 0x000000010421ce60
+Refc: 2
+=fun
+Module: file
+Uniq: 1459081
+Index: 2
+Address: 0x0000000103e19554
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 2
+Address: 0x0000000104161598
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 5
+Address: 0x0000000103d9445c
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 3
+Address: 0x0000000103feec90
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 82
+Address: 0x0000000103e7253c
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 7
+Address: 0x000000010414c598
+Refc: 1
+=fun
+Module: showtime
+Uniq: 22478307
+Index: 2
+Address: 0x000000010413fa10
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 38
+Address: 0x0000000103eb03ac
+Refc: 1
+=fun
+Module: sys
+Uniq: 62925399
+Index: 1
+Address: 0x00000001042065c8
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 42
+Address: 0x000000010421c860
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 5
+Address: 0x0000000103e7b940
+Refc: 2
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 4
+Address: 0x0000000103ff5e84
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 64624012
+Index: 3
+Address: 0x0000000103fd3b08
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 6
+Address: 0x0000000104224028
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 17
+Address: 0x0000000103fb4f78
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 7
+Address: 0x0000000104020c40
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 6
+Address: 0x000000010400c558
+Refc: 2
+=fun
+Module: gen_statem
+Uniq: 58250722
+Index: 2
+Address: 0x0000000104068118
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 21
+Address: 0x000000010421a340
+Refc: 1
+=fun
+Module: ets
+Uniq: 30908443
+Index: 0
+Address: 0x0000000103e3c5e8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 0
+Address: 0x0000000103ecc63c
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 4
+Address: 0x0000000103eb2810
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 8
+Address: 0x0000000104153980
+Refc: 2
+=fun
+Module: showtime_ffi
+Uniq: 122038219
+Index: 2
+Address: 0x0000000104221120
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 12
+Address: 0x0000000104146a10
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 39
+Address: 0x0000000103e76350
+Refc: 2
+=fun
+Module: maps
+Uniq: 48010870
+Index: 5
+Address: 0x0000000104036b58
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 16
+Address: 0x000000010414c028
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 9
+Address: 0x0000000104226a80
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 14
+Address: 0x000000010402cfa0
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 3
+Address: 0x0000000103f8cfbc
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 36
+Address: 0x000000010400bd1c
+Refc: 1
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 9
+Address: 0x0000000104209508
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 11
+Address: 0x0000000103fe5150
+Refc: 2
+=fun
+Module: prim_tty
+Uniq: 75477062
+Index: 2
+Address: 0x00000001040782a0
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 9
+Address: 0x0000000104158850
+Refc: 2
+=fun
+Module: ssl_config
+Uniq: 64895055
+Index: 3
+Address: 0x0000000104134118
+Refc: 2
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 0
+Address: 0x00000001041fc8ec
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 9
+Address: 0x0000000103fb9d10
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 65
+Address: 0x0000000103e74fa4
+Refc: 1
+=fun
+Module: logger_simple_h
+Uniq: 105730862
+Index: 2
+Address: 0x0000000103efcd88
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 10
+Address: 0x0000000103e4c31c
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 10
+Address: 0x0000000103f59190
+Refc: 5
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 49
+Address: 0x0000000103eafcc0
+Refc: 1
+=fun
+Module: gleam_stdlib
+Uniq: 79074729
+Index: 0
+Address: 0x000000010416a914
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 1
+Address: 0x0000000103ddb680
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 3
+Address: 0x00000001040c5c88
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 8
+Address: 0x0000000103e7b18c
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 8
+Address: 0x0000000103dcd328
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 7
+Address: 0x00000001040437d0
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 21
+Address: 0x000000010402c8b0
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 4
+Address: 0x0000000103fb4000
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 99
+Address: 0x0000000103e71188
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 17
+Address: 0x000000010400b6e4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 0
+Address: 0x000000010421d9c8
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 8
+Address: 0x000000010420bda8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 21
+Address: 0x0000000103ecb0cc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 23
+Address: 0x0000000103eb1430
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 18
+Address: 0x00000001040dcf28
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 1
+Address: 0x0000000104147318
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 42
+Address: 0x0000000103e761b0
+Refc: 1
+=fun
+Module: user_drv
+Uniq: 115201613
+Index: 1
+Address: 0x0000000104059384
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 15
+Address: 0x000000010414c0a8
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 13
+Address: 0x0000000103ef2658
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 46
+Address: 0x0000000103eafed0
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 34
+Address: 0x000000010421ab28
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 4
+Address: 0x0000000103fe55e8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 29
+Address: 0x0000000103e771f8
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 20
+Address: 0x0000000104159980
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 33
+Address: 0x000000010414b230
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 5
+Address: 0x00000001040d3c90
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 8
+Address: 0x0000000103e3bf04
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 12
+Address: 0x0000000103eb1dc0
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 0
+Address: 0x0000000104153d7c
+Refc: 1
+=fun
+Module: logger_h_common
+Uniq: 73693308
+Index: 0
+Address: 0x00000001040c2750
+Refc: 1
+=fun
+Module: 'glint@flag@constraint'
+Uniq: 83988546
+Index: 0
+Address: 0x000000010414e7f0
+Refc: 1
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 0
+Address: 0x00000001041f9a98
+Refc: 2
+=fun
+Module: zlib
+Uniq: 85031762
+Index: 0
+Address: 0x0000000103db9dc8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 63
+Address: 0x0000000103e75178
+Refc: 1
+=fun
+Module: group
+Uniq: 88293013
+Index: 0
+Address: 0x00000001040897e8
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 24
+Address: 0x000000010414a200
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 16
+Address: 0x0000000103ef1a64
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 10
+Address: 0x0000000104042da4
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 6
+Address: 0x00000001040297f0
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 28
+Address: 0x000000010400a1c0
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 15
+Address: 0x000000010421bd5c
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 9
+Address: 0x0000000104160cdc
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 1
+Address: 0x0000000104159538
+Refc: 2
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 3
+Address: 0x0000000103ee1f10
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 10
+Address: 0x0000000103d921e8
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 1
+Address: 0x0000000103fba0a0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 89
+Address: 0x0000000103e71e70
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 2
+Address: 0x0000000103e4cbd8
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 2
+Address: 0x0000000103f59a88
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 57
+Address: 0x0000000103eaf984
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 9
+Address: 0x0000000103de1a30
+Refc: 1
+=fun
+Module: ssl_pkix_db
+Uniq: 51522903
+Index: 0
+Address: 0x000000010412acf0
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 64
+Address: 0x0000000103eaf3d8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 0
+Address: 0x0000000103e7c3ac
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 0
+Address: 0x0000000103dcd720
+Refc: 1
+=fun
+Module: code
+Uniq: 38778589
+Index: 5
+Address: 0x0000000103e22b18
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 7
+Address: 0x0000000103fce5f0
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 9
+Address: 0x000000010400c1b4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 24
+Address: 0x0000000104219808
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 0
+Address: 0x000000010420bfc0
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 13
+Address: 0x0000000103ecb610
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 31
+Address: 0x0000000103eb0988
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 18
+Address: 0x000000010416143c
+Refc: 1
+=fun
+Module: beam_lib
+Uniq: 45141944
+Index: 2
+Address: 0x0000000103f998f8
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 0
+Address: 0x0000000103e87ec0
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 9
+Address: 0x0000000104146bf4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 34
+Address: 0x0000000103e768a0
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 23
+Address: 0x000000010414b9f8
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 5
+Address: 0x0000000103ef2d4c
+Refc: 1
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 4
+Address: 0x0000000104227980
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 2
+Address: 0x00000001042090a0
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 12
+Address: 0x0000000103fe4ee8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 21
+Address: 0x0000000103e77fc8
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 12
+Address: 0x0000000104158bdc
+Refc: 1
+=fun
+Module: io_lib
+Uniq: 6600873
+Index: 2
+Address: 0x0000000104096d28
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 76
+Address: 0x0000000103e7355c
+Refc: 1
+=fun
+Module: epp
+Uniq: 124355082
+Index: 7
+Address: 0x00000001040fbf48
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 41
+Address: 0x000000010414c6b0
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 52
+Address: 0x0000000103eafc48
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 13
+Address: 0x00000001040d8740
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 4
+Address: 0x0000000103de2530
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 55
+Address: 0x0000000103e75b8c
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 4
+Address: 0x000000010410a0d0
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 13
+Address: 0x0000000103dcd0e8
+Refc: 1
+=fun
+Module: standard_error
+Uniq: 123115530
+Index: 0
+Address: 0x0000000103fbd440
+Refc: 3
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 2
+Address: 0x0000000104043a78
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@runner'
+Uniq: 6773126
+Index: 0
+Address: 0x000000010421fad4
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 3
+Address: 0x0000000103dd2aa8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 15
+Address: 0x0000000103fb4dd8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 110
+Address: 0x0000000103e78be0
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 20
+Address: 0x000000010400b098
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 7
+Address: 0x000000010421ced8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 18
+Address: 0x0000000103ecb2a8
+Refc: 2
+=fun
+Module: 'gleam@erlang'
+Uniq: 90512636
+Index: 0
+Address: 0x0000000104140c68
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 1
+Address: 0x0000000104161788
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 2
+Address: 0x0000000103d87ad8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 81
+Address: 0x0000000103e725a4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 6
+Address: 0x0000000103feea70
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 2
+Address: 0x000000010414cae0
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 10
+Address: 0x0000000103ef2908
+Refc: 4
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 33
+Address: 0x0000000103eb0788
+Refc: 1
+=fun
+Module: gleam_erlang_ffi
+Uniq: 130811285
+Index: 0
+Address: 0x0000000104200600
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 41
+Address: 0x000000010421c80c
+Refc: 1
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 7
+Address: 0x0000000103ff6040
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 24
+Address: 0x0000000103e77798
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 3
+Address: 0x00000001042242c8
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 20
+Address: 0x0000000103fb4c40
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 4
+Address: 0x0000000104020d10
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 1
+Address: 0x000000010400cca4
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 36
+Address: 0x000000010414c228
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 16
+Address: 0x000000010421b89c
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 5
+Address: 0x0000000103ecc038
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 7
+Address: 0x0000000103eb23c0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 2
+Address: 0x00000001040dff84
+Refc: 2
+=fun
+Module: glint
+Uniq: 18128761
+Index: 7
+Address: 0x00000001041539e0
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 7
+Address: 0x0000000103e3c024
+Refc: 1
+=fun
+Module: 'gleam@set'
+Uniq: 15699406
+Index: 0
+Address: 0x000000010414fb38
+Refc: 2
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 8
+Address: 0x0000000103e87cd8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 58
+Address: 0x0000000103e62720
+Refc: 2
+=fun
+Module: maps
+Uniq: 48010870
+Index: 0
+Address: 0x0000000104032b40
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 31
+Address: 0x000000010414af10
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 12
+Address: 0x00000001042275b0
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 11
+Address: 0x000000010402b4c8
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 6
+Address: 0x0000000103f8cb00
+Refc: 1
+=fun
+Module: 'showtime@internal@erlang@event_handler'
+Uniq: 124289607
+Index: 0
+Address: 0x00000001041f7b88
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 50
+Address: 0x000000010421d448
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 12
+Address: 0x0000000104160f04
+Refc: 1
+=fun
+Module: prim_tty
+Uniq: 75477062
+Index: 1
+Address: 0x0000000104078348
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 4
+Address: 0x0000000104159260
+Refc: 1
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 5
+Address: 0x00000001041fc3ec
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 10
+Address: 0x0000000103fb9b58
+Refc: 2
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 9
+Address: 0x0000000103fee730
+Refc: 2
+=fun
+Module: 'day7@day7_test'
+Uniq: 115477595
+Index: 1
+Address: 0x000000010421f230
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 68
+Address: 0x0000000103e744c0
+Refc: 2
+=fun
+Module: logger_simple_h
+Uniq: 105730862
+Index: 1
+Address: 0x0000000103efcdb8
+Refc: 2
+=fun
+Module: gen
+Uniq: 105431365
+Index: 2
+Address: 0x0000000103e0fdd8
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 7
+Address: 0x0000000103e4c6cc
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 7
+Address: 0x0000000103f59580
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 60
+Address: 0x0000000103eaf6f4
+Refc: 1
+=fun
+Module: gleam_stdlib
+Uniq: 79074729
+Index: 3
+Address: 0x0000000104168768
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 12
+Address: 0x0000000103de1748
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 6
+Address: 0x00000001040cba20
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 15
+Address: 0x0000000103e798c0
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 12
+Address: 0x0000000104109a58
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@module_handler'
+Uniq: 57223230
+Index: 2
+Address: 0x0000000104207cbc
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 5
+Address: 0x0000000103dcd260
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 22
+Address: 0x000000010402cb28
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 7
+Address: 0x0000000103fb2e48
+Refc: 2
+=fun
+Module: code
+Uniq: 38778589
+Index: 0
+Address: 0x0000000103e22fd0
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 9
+Address: 0x0000000104020c0c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 102
+Address: 0x0000000103e6cfb8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 12
+Address: 0x000000010400bed4
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 11
+Address: 0x000000010420c44c
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 31
+Address: 0x000000010421aba8
+Refc: 2
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 10
+Address: 0x0000000103ecba6c
+Refc: 3
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 18
+Address: 0x0000000103eb1868
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 6
+Address: 0x0000000104146f78
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 41
+Address: 0x0000000103e762a8
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 10
+Address: 0x000000010414c4b0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 2
+Address: 0x0000000103ef3684
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 41
+Address: 0x0000000103eb01fc
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 33
+Address: 0x000000010421ab58
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 1
+Address: 0x0000000103fe5720
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 7
+Address: 0x0000000104208948
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 16
+Address: 0x0000000103e79598
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 75
+Address: 0x0000000103e736a0
+Refc: 2
+=fun
+Module: epp
+Uniq: 124355082
+Index: 2
+Address: 0x00000001040fca1c
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 15
+Address: 0x0000000103eb1ad8
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 10
+Address: 0x00000001040d6ab8
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 15
+Address: 0x0000000103e3b54c
+Refc: 1
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 7
+Address: 0x00000001041f97b0
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 9
+Address: 0x00000001040cb7a8
+Refc: 2
+=fun
+Module: raw_file_io
+Uniq: 101053602
+Index: 2
+Address: 0x00000001040d0480
+Refc: 2
+=fun
+Module: 'aoc2023@@main'
+Uniq: 70697990
+Index: 0
+Address: 0x00000001040ea8a8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 50
+Address: 0x0000000103e75dd0
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 18
+Address: 0x0000000103dccb70
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 9
+Address: 0x000000010404301c
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 10
+Address: 0x0000000103fb29c8
+Refc: 2
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 4
+Address: 0x0000000103dd5b84
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 3
+Address: 0x000000010402a9d8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 31
+Address: 0x0000000104009e40
+Refc: 1
+=fun
+Module: file
+Uniq: 1459081
+Index: 0
+Address: 0x0000000103e1963c
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 10
+Address: 0x000000010421cbb8
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 4
+Address: 0x0000000104160fb0
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 0
+Address: 0x0000000103edc348
+Refc: 2
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 2
+Address: 0x0000000103fb9ff8
+Refc: 2
+=fun
+Module: init
+Uniq: 72673429
+Index: 7
+Address: 0x0000000103d943f8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 1
+Address: 0x0000000103fef0d8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 92
+Address: 0x0000000103e71a78
+Refc: 2
+=fun
+Module: file_io_server
+Uniq: 82162284
+Index: 1
+Address: 0x0000000103e92898
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 36
+Address: 0x0000000103eb0500
+Refc: 1
+=fun
+Module: showtime
+Uniq: 22478307
+Index: 0
+Address: 0x000000010413fce0
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 44
+Address: 0x000000010421cae0
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 67
+Address: 0x0000000103eaec10
+Refc: 2
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 2
+Address: 0x0000000103ff60e0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 7
+Address: 0x0000000103e54ed8
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 4
+Address: 0x0000000104224220
+Refc: 1
+=fun
+Module: code
+Uniq: 38778589
+Index: 8
+Address: 0x0000000103e22568
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 1
+Address: 0x0000000104020fd8
+Refc: 2
+=fun
+Module: gen_server
+Uniq: 22931368
+Index: 0
+Address: 0x0000000103f1edb0
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 4
+Address: 0x0000000103fcec9c
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 4
+Address: 0x000000010400c8e0
+Refc: 1
+=fun
+Module: gen_statem
+Uniq: 58250722
+Index: 0
+Address: 0x000000010405e830
+Refc: 2
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 3
+Address: 0x000000010420bac4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 23
+Address: 0x0000000104219c6c
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 2
+Address: 0x0000000103ecc36c
+Refc: 1
+=fun
+Module: httpc_manager
+Uniq: 90163599
+Index: 0
+Address: 0x0000000104112eb0
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 17
+Address: 0x000000010416139c
+Refc: 1
+=fun
+Module: ets
+Uniq: 30908443
+Index: 2
+Address: 0x0000000103e3c300
+Refc: 1
+=fun
+Module: erl_init
+Uniq: 96508615
+Index: 0
+Address: 0x0000000103d860a8
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 26
+Address: 0x0000000103eb0fc0
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 10
+Address: 0x00000001041538c0
+Refc: 2
+=fun
+Module: showtime_ffi
+Uniq: 122038219
+Index: 0
+Address: 0x0000000104221598
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 5
+Address: 0x0000000103e87ab8
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 14
+Address: 0x0000000104146950
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 33
+Address: 0x0000000103e768d8
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 18
+Address: 0x000000010414bf00
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 7
+Address: 0x00000001042275e0
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 12
+Address: 0x000000010402b830
+Refc: 2
+=fun
+Module: inets_trace
+Uniq: 58819832
+Index: 0
+Address: 0x00000001041156c8
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 1
+Address: 0x0000000103f8cd98
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 9
+Address: 0x0000000103fe53f8
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 15
+Address: 0x0000000104158f14
+Refc: 1
+=fun
+Module: ssl_config
+Uniq: 64895055
+Index: 1
+Address: 0x00000001041346a8
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 15
+Address: 0x0000000103fb92a8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 67
+Address: 0x0000000103e74538
+Refc: 2
+=fun
+Module: logger_simple_h
+Uniq: 105730862
+Index: 4
+Address: 0x0000000103efca28
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 12
+Address: 0x0000000103e4c178
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 8
+Address: 0x0000000103f594f8
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 55
+Address: 0x0000000103eafa10
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 7
+Address: 0x0000000103de1ee4
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 1
+Address: 0x00000001040cbe68
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 10
+Address: 0x0000000103e7a4b8
+Refc: 2
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 1
+Address: 0x000000010410a4b0
+Refc: 2
+=fun
+Module: httpc_cookie
+Uniq: 22295768
+Index: 0
+Address: 0x000000010411a790
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 10
+Address: 0x0000000103dcd230
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 1
+Address: 0x0000000104043b68
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 2
+Address: 0x0000000103fb3be0
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 27
+Address: 0x000000010402e088
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 109
+Address: 0x0000000103e77eb8
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 9
+Address: 0x0000000103fcdf74
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 23
+Address: 0x000000010400a8f0
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 2
+Address: 0x000000010421d758
+Refc: 1
+=fun
+Module: ets
+Uniq: 30908443
+Index: 17
+Address: 0x0000000103e3bd88
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 23
+Address: 0x0000000103eca998
+Refc: 3
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 21
+Address: 0x0000000103eb1560
+Refc: 2
+=fun
+Module: 'gleam@result'
+Uniq: 44749367
+Index: 2
+Address: 0x000000010415f9b8
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 3
+Address: 0x00000001041471d0
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 84
+Address: 0x0000000103e723f0
+Refc: 2
+=fun
+Module: user_drv
+Uniq: 115201613
+Index: 3
+Address: 0x00000001040592e4
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 1
+Address: 0x000000010414cb60
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 15
+Address: 0x0000000103ef1c90
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 44
+Address: 0x0000000103eb1528
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 36
+Address: 0x000000010421b7b8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 31
+Address: 0x0000000103e76b60
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 23
+Address: 0x0000000103fb5138
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 35
+Address: 0x000000010414b970
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 7
+Address: 0x00000001040d56d0
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 10
+Address: 0x0000000103e3bde4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 2
+Address: 0x0000000103eb2b58
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 2
+Address: 0x0000000104153bb8
+Refc: 2
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 2
+Address: 0x00000001041f9998
+Refc: 2
+=fun
+Module: raw_file_io
+Uniq: 101053602
+Index: 5
+Address: 0x00000001040d05d8
+Refc: 2
+=fun
+Module: 'glint@flag@constraint'
+Uniq: 83988546
+Index: 2
+Address: 0x000000010414e0bc
+Refc: 1
+=fun
+Module: maps
+Uniq: 48010870
+Index: 3
+Address: 0x0000000104036d10
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 57
+Address: 0x0000000103e75a64
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 26
+Address: 0x000000010414b78c
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 4
+Address: 0x0000000104029ad8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 34
+Address: 0x0000000104009cd8
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 49
+Address: 0x000000010421d33c
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 11
+Address: 0x0000000104160e30
+Refc: 1
+=fun
+Module: erpc
+Uniq: 95647987
+Index: 1
+Address: 0x000000010404df68
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 7
+Address: 0x0000000104158980
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 5
+Address: 0x0000000103ee1788
+Refc: 2
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 6
+Address: 0x00000001041fc2f0
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 7
+Address: 0x0000000103fb6db8
+Refc: 2
+=fun
+Module: init
+Uniq: 72673429
+Index: 12
+Address: 0x0000000103d93630
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 16
+Address: 0x0000000104146e7c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 91
+Address: 0x0000000103e71be8
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 4
+Address: 0x0000000103e4cb28
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 0
+Address: 0x0000000103f5a090
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 63
+Address: 0x0000000103eaf504
+Refc: 1
+=fun
+Module: ssl_pkix_db
+Uniq: 51522903
+Index: 2
+Address: 0x000000010412a870
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 2
+Address: 0x0000000103e7c1f8
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 9
+Address: 0x0000000104109cb8
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 2
+Address: 0x0000000103dcd680
+Refc: 1
+=fun
+Module: code
+Uniq: 38778589
+Index: 3
+Address: 0x0000000103e22c68
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 19
+Address: 0x000000010402bf98
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 101
+Address: 0x0000000103e70dac
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 1
+Address: 0x0000000103fc5178
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 15
+Address: 0x000000010400babc
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 26
+Address: 0x0000000104218d3c
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 6
+Address: 0x000000010420b210
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 20
+Address: 0x00000001040dd5c0
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 20
+Address: 0x0000000104161634
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 15
+Address: 0x0000000103ecb4a8
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 29
+Address: 0x0000000103eb0bc8
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 11
+Address: 0x0000000104146b10
+Refc: 1
+=fun
+Module: beam_lib
+Uniq: 45141944
+Index: 0
+Address: 0x0000000103f9a288
+Refc: 2
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 2
+Address: 0x0000000103e87e28
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 44
+Address: 0x0000000103e5ecd8
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 9
+Address: 0x000000010414c2e0
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 7
+Address: 0x0000000103ef2cd0
+Refc: 1
+=fun
+Module: logger
+Uniq: 1449854
+Index: 1
+Address: 0x0000000103ed5f00
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 2
+Address: 0x0000000104227ad0
+Refc: 2
+=fun
+Module: prim_inet
+Uniq: 37477703
+Index: 0
+Address: 0x0000000103dae580
+Refc: 1
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 0
+Address: 0x0000000104209538
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 2
+Address: 0x0000000103fe56d0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 23
+Address: 0x0000000103e77810
+Refc: 2
+=fun
+Module: io_lib
+Uniq: 6600873
+Index: 0
+Address: 0x000000010409b660
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 18
+Address: 0x0000000104159368
+Refc: 1
+=fun
+Module: ssl_config
+Uniq: 64895055
+Index: 4
+Address: 0x0000000104133f60
+Refc: 2
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 11
+Address: 0x00000001041fbc98
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 78
+Address: 0x0000000103e728a0
+Refc: 2
+=fun
+Module: epp
+Uniq: 124355082
+Index: 5
+Address: 0x00000001040fc2c0
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 13
+Address: 0x0000000103f58ee8
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 15
+Address: 0x00000001040dbbb0
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 10
+Address: 0x0000000103eb2000
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 6
+Address: 0x0000000104109ee0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 49
+Address: 0x0000000103e75ed8
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 15
+Address: 0x0000000103dccfd0
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 28
+Address: 0x00000001040304f0
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 13
+Address: 0x0000000103fb4bd0
+Refc: 2
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 1
+Address: 0x0000000103dd5be4
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 104
+Address: 0x0000000103e70bf4
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 26
+Address: 0x000000010400a490
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 9
+Address: 0x000000010421cd80
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 3
+Address: 0x0000000104161300
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 4
+Address: 0x0000000103d944c8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 4
+Address: 0x0000000103feeba8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 83
+Address: 0x0000000103e724d0
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 4
+Address: 0x000000010414ca0c
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 39
+Address: 0x0000000103eb0314
+Refc: 1
+=fun
+Module: showtime
+Uniq: 22478307
+Index: 3
+Address: 0x000000010413f9dc
+Refc: 1
+=fun
+Module: ssl_manager
+Uniq: 40265571
+Index: 0
+Address: 0x000000010412e528
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 43
+Address: 0x000000010421ca70
+Refc: 1
+=fun
+Module: sys
+Uniq: 62925399
+Index: 0
+Address: 0x0000000104205128
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 26
+Address: 0x0000000103e774f8
+Refc: 1
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 5
+Address: 0x0000000103ff5d60
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 64624012
+Index: 0
+Address: 0x0000000103fd3dd0
+Refc: 1
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 1
+Address: 0x0000000104223388
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 18
+Address: 0x0000000103fb4d58
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 6
+Address: 0x0000000104020cc8
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 7
+Address: 0x000000010400c340
+Refc: 2
+=fun
+Module: epp
+Uniq: 124355082
+Index: 8
+Address: 0x00000001040fbef4
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 38
+Address: 0x000000010414c3f8
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 18
+Address: 0x000000010421acac
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 7
+Address: 0x0000000103ecbfe0
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 5
+Address: 0x0000000103eb2690
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 9
+Address: 0x0000000104153920
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 1
+Address: 0x0000000103e3c6d0
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 10
+Address: 0x0000000103e8764c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 36
+Address: 0x0000000103e5b808
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 17
+Address: 0x000000010414bf80
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 10
+Address: 0x0000000104226a30
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 9
+Address: 0x0000000104029660
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 4
+Address: 0x0000000103f8b3e0
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 37
+Address: 0x000000010400be2c
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 52
+Address: 0x000000010421d538
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 8
+Address: 0x00000001042088c8
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 10
+Address: 0x0000000103fe53a4
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 14
+Address: 0x00000001041610ec
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 10
+Address: 0x0000000104158a58
+Refc: 1
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 3
+Address: 0x00000001041fc574
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 8
+Address: 0x0000000103fb9db8
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 70
+Address: 0x0000000103e74448
+Refc: 2
+=fun
+Module: logger_simple_h
+Uniq: 105730862
+Index: 3
+Address: 0x0000000103efcb50
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 9
+Address: 0x0000000103e4c41c
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 5
+Address: 0x0000000103f597f0
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 50
+Address: 0x0000000103eafd50
+Refc: 1
+=fun
+Module: gleam_stdlib
+Uniq: 79074729
+Index: 1
+Address: 0x000000010416a8b4
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 2
+Address: 0x0000000103dd9180
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 4
+Address: 0x00000001040c5bf8
+Refc: 2
+=fun
+Module: file_server
+Uniq: 30066188
+Index: 0
+Address: 0x0000000103e07538
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 9
+Address: 0x0000000103e7a9d0
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 7
+Address: 0x0000000103dcd4b0
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 4
+Address: 0x00000001040431a4
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 20
+Address: 0x000000010402c790
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 5
+Address: 0x0000000103fb3798
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 11
+Address: 0x00000001040209b0
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 96
+Address: 0x0000000103e71560
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 18
+Address: 0x000000010400b33c
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 1
+Address: 0x000000010421d950
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 9
+Address: 0x000000010420c390
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 20
+Address: 0x0000000103ecb100
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 16
+Address: 0x0000000103eb19fc
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 17
+Address: 0x00000001040dcbb8
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 0
+Address: 0x00000001041474f8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 43
+Address: 0x0000000103e7622c
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 12
+Address: 0x000000010414c3c8
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 12
+Address: 0x0000000103ef26a8
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 47
+Address: 0x0000000103eafea0
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 35
+Address: 0x000000010421b220
+Refc: 1
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 5
+Address: 0x0000000104208d28
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 7
+Address: 0x0000000103fe54b0
+Refc: 1
+=fun
+Module: error_logger
+Uniq: 17945318
+Index: 1
+Address: 0x0000000103ef8a30
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 18
+Address: 0x0000000103e78da8
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 21
+Address: 0x0000000104159a88
+Refc: 1
+=fun
+Module: epp
+Uniq: 124355082
+Index: 0
+Address: 0x00000001040fcb94
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 13
+Address: 0x0000000103eb1cc0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 4
+Address: 0x00000001040d3908
+Refc: 2
+=fun
+Module: glint
+Uniq: 18128761
+Index: 1
+Address: 0x0000000104153c40
+Refc: 2
+=fun
+Module: snag
+Uniq: 96707762
+Index: 0
+Address: 0x00000001041f6298
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 9
+Address: 0x0000000103e3be68
+Refc: 1
+=fun
+Module: logger_h_common
+Uniq: 73693308
+Index: 1
+Address: 0x00000001040c26f0
+Refc: 1
+=fun
+Module: raw_file_io
+Uniq: 101053602
+Index: 0
+Address: 0x00000001040d0390
+Refc: 2
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 1
+Address: 0x00000001041f9a18
+Refc: 2
+=fun
+Module: zlib
+Uniq: 85031762
+Index: 1
+Address: 0x0000000103dba870
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 60
+Address: 0x0000000103e75970
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 25
+Address: 0x000000010414b8c4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 11
+Address: 0x0000000104042be0
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 1
+Address: 0x000000010402a178
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 8
+Address: 0x0000000103fb2560
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 29
+Address: 0x0000000104009ed8
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 12
+Address: 0x000000010421c4cc
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 6
+Address: 0x0000000104160b08
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 2
+Address: 0x0000000104159450
+Refc: 2
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 2
+Address: 0x0000000103ee2098
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 9
+Address: 0x0000000103d936e0
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 0
+Address: 0x0000000103fba268
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 94
+Address: 0x0000000103e71898
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 1
+Address: 0x0000000103e4cdc0
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 58
+Address: 0x0000000103eaf914
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 10
+Address: 0x0000000103de19a8
+Refc: 1
+=fun
+Module: ssl_pkix_db
+Uniq: 51522903
+Index: 1
+Address: 0x000000010412aae4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 46
+Address: 0x000000010421cd28
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 65
+Address: 0x0000000103eaed88
+Refc: 2
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 0
+Address: 0x0000000103ff63cc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 1
+Address: 0x0000000103e7c2c4
+Refc: 1
+=fun
+Module: timer
+Uniq: 46706930
+Index: 0
+Address: 0x00000001040ad688
+Refc: 2
+=fun
+Module: code
+Uniq: 38778589
+Index: 6
+Address: 0x0000000103e22a3c
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 3
+Address: 0x0000000104020ea0
+Refc: 1
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 6
+Address: 0x0000000103fce7a8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 10
+Address: 0x000000010400c24c
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 1
+Address: 0x000000010420bce4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 25
+Address: 0x00000001042192f8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 12
+Address: 0x0000000103ecb760
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 24
+Address: 0x0000000103eb12a8
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 12
+Address: 0x0000000104153800
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 19
+Address: 0x00000001041614f8
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 7
+Address: 0x0000000103e87988
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 8
+Address: 0x0000000104146c28
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 35
+Address: 0x0000000103e76810
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 20
+Address: 0x000000010414bde8
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 4
+Address: 0x0000000103ef3178
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 5
+Address: 0x0000000104227878
+Refc: 2
+=fun
+Module: lists
+Uniq: 104401092
+Index: 0
+Address: 0x0000000103f04578
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 13
+Address: 0x0000000104158d90
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 13
+Address: 0x0000000103fb9958
+Refc: 1
+=fun
+Module: proc_lib
+Uniq: 54621022
+Index: 1
+Address: 0x0000000103e9c360
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 77
+Address: 0x0000000103e72ef0
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 53
+Address: 0x0000000103eafaa0
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 12
+Address: 0x00000001040d6f90
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 5
+Address: 0x0000000103de24b4
+Refc: 1
+=fun
+Module: logger_std_h
+Uniq: 4673888
+Index: 0
+Address: 0x00000001040bcb10
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 52
+Address: 0x0000000103e75c80
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 3
+Address: 0x000000010410a278
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 12
+Address: 0x0000000103dcd0b4
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 3
+Address: 0x0000000104043968
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 25
+Address: 0x000000010402dfb0
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 0
+Address: 0x0000000103fb5938
+Refc: 1
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 2
+Address: 0x0000000103dd3288
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 111
+Address: 0x0000000103e7b8d8
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 11
+Address: 0x0000000103fceb98
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 21
+Address: 0x000000010400ad48
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 4
+Address: 0x000000010421d590
+Refc: 2
+=fun
+Module: proplists
+Uniq: 31251554
+Index: 0
+Address: 0x0000000103f81c80
+Refc: 2
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 17
+Address: 0x0000000103ecb320
+Refc: 2
+=fun
+Module: 'gleam@result'
+Uniq: 44749367
+Index: 0
+Address: 0x000000010415fa58
+Refc: 2
+=fun
+Module: init
+Uniq: 72673429
+Index: 1
+Address: 0x0000000103d87dd0
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 7
+Address: 0x0000000103fee9a0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 86
+Address: 0x0000000103e72310
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 3
+Address: 0x000000010414ca40
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 9
+Address: 0x0000000103ef2b3c
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 34
+Address: 0x0000000103eb06a0
+Refc: 1
+=fun
+Module: gleam_erlang_ffi
+Uniq: 130811285
+Index: 1
+Address: 0x00000001042004e0
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 38
+Address: 0x000000010421c07c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 25
+Address: 0x0000000103e77528
+Refc: 2
+=fun
+Module: ssl_pem_cache
+Uniq: 58460895
+Index: 0
+Address: 0x0000000104126cb0
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 2
+Address: 0x0000000104223980
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 21
+Address: 0x0000000103fb4e48
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 2
+Address: 0x000000010400ca50
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 37
+Address: 0x000000010414c310
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 17
+Address: 0x000000010421b310
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 4
+Address: 0x0000000103ecc138
+Refc: 2
+=fun
+Module: logger_formatter
+Uniq: 60349323
+Index: 0
+Address: 0x00000001040b6520
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 1
+Address: 0x00000001040d1f00
+Refc: 2
+=fun
+Module: glint
+Uniq: 18128761
+Index: 4
+Address: 0x0000000104152148
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 4
+Address: 0x0000000103e3bf88
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 0
+Address: 0x0000000103eb2ec8
+Refc: 1
+=fun
+Module: 'gleam@set'
+Uniq: 15699406
+Index: 3
+Address: 0x000000010414f218
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 59
+Address: 0x0000000103e60180
+Refc: 2
+=fun
+Module: maps
+Uniq: 48010870
+Index: 1
+Address: 0x0000000104032ae8
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 28
+Address: 0x000000010414aa60
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 13
+Address: 0x00000001042277f0
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 10
+Address: 0x00000001040290b8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 32
+Address: 0x0000000104009d98
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@event_handler'
+Uniq: 124289607
+Index: 3
+Address: 0x00000001041f7648
+Refc: 2
+=fun
+Module: edlin
+Uniq: 47380248
+Index: 0
+Address: 0x0000000104092d50
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 51
+Address: 0x000000010421d3a8
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 13
+Address: 0x000000010416104c
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 5
+Address: 0x0000000104158fe4
+Refc: 1
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 7
+Address: 0x0000000103ee1450
+Refc: 1
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 4
+Address: 0x00000001041fc4c8
+Refc: 2
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 5
+Address: 0x0000000103fb7ea0
+Refc: 2
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 10
+Address: 0x0000000103fee650
+Refc: 2
+=fun
+Module: 'day7@day7_test'
+Uniq: 115477595
+Index: 0
+Address: 0x000000010421f2e0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 69
+Address: 0x0000000103e74238
+Refc: 1
+=fun
+Module: gen
+Uniq: 105431365
+Index: 1
+Address: 0x0000000103e0fec0
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 6
+Address: 0x0000000103e4c92c
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 6
+Address: 0x0000000103f596b8
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 61
+Address: 0x0000000103eaf688
+Refc: 1
+=fun
+Module: gleam_stdlib
+Uniq: 79074729
+Index: 4
+Address: 0x000000010416a708
+Refc: 2
+=fun
+Module: ssl_pkix_db
+Uniq: 51522903
+Index: 4
+Address: 0x000000010412a3d0
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 7
+Address: 0x00000001040cb9c0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 12
+Address: 0x0000000103e79d04
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 11
+Address: 0x0000000104109ae0
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@module_handler'
+Uniq: 57223230
+Index: 1
+Address: 0x00000001042079e0
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 4
+Address: 0x0000000103dcd5d0
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 17
+Address: 0x000000010402d8b8
+Refc: 2
+=fun
+Module: code
+Uniq: 38778589
+Index: 1
+Address: 0x0000000103e22f08
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 8
+Address: 0x000000010401ec90
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 103
+Address: 0x0000000103e70c28
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 3
+Address: 0x0000000103fcbd60
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 13
+Address: 0x000000010400bd68
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 28
+Address: 0x000000010421a77c
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 4
+Address: 0x000000010420bf18
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 9
+Address: 0x0000000103ecbab0
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 22
+Address: 0x00000001040ddba0
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 22
+Address: 0x0000000104161834
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 19
+Address: 0x0000000103eb17a0
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 16
+Address: 0x0000000103fb9a90
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 5
+Address: 0x0000000104147070
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 46
+Address: 0x0000000103e76148
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 11
+Address: 0x000000010414c1f8
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 1
+Address: 0x0000000103ef3cdc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 42
+Address: 0x0000000103eb0180
+Refc: 1
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 0
+Address: 0x0000000104228478
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 0
+Address: 0x0000000103fe5770
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 6
+Address: 0x00000001042089a0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 17
+Address: 0x0000000103e79568
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 16
+Address: 0x00000001041590ac
+Refc: 1
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 9
+Address: 0x00000001041fbf24
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 72
+Address: 0x0000000103e74008
+Refc: 2
+=fun
+Module: epp
+Uniq: 124355082
+Index: 3
+Address: 0x00000001040fc6d8
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 9
+Address: 0x00000001040d68d8
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 12
+Address: 0x0000000103e3b9c8
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 8
+Address: 0x0000000103eb2270
+Refc: 1
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 4
+Address: 0x00000001041f9900
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 10
+Address: 0x00000001040cb5a0
+Refc: 2
+=fun
+Module: raw_file_io
+Uniq: 101053602
+Index: 3
+Address: 0x00000001040d078c
+Refc: 1
+=fun
+Module: 'glint@flag@constraint'
+Uniq: 83988546
+Index: 4
+Address: 0x000000010414e828
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 51
+Address: 0x0000000103e75da0
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 17
+Address: 0x0000000103dccca4
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 11
+Address: 0x0000000103fb20f8
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 2
+Address: 0x000000010402a688
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 106
+Address: 0x0000000103e71bb4
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 24
+Address: 0x000000010400a70c
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 11
+Address: 0x000000010421c938
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 5
+Address: 0x0000000104160ba0
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 6
+Address: 0x0000000103d94344
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 2
+Address: 0x0000000103feef48
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 93
+Address: 0x0000000103e719a8
+Refc: 2
+=fun
+Module: file_io_server
+Uniq: 82162284
+Index: 0
+Address: 0x0000000103e92c3c
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 6
+Address: 0x000000010414c8a0
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 37
+Address: 0x0000000103eb044c
+Refc: 1
+=fun
+Module: showtime
+Uniq: 22478307
+Index: 1
+Address: 0x000000010413fc90
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 45
+Address: 0x000000010421ccac
+Refc: 1
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 3
+Address: 0x0000000103ff5ec0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 4
+Address: 0x0000000103e7bd08
+Refc: 2
+=fun
+Module: inet_config
+Uniq: 64624012
+Index: 2
+Address: 0x0000000103fd3bd8
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 7
+Address: 0x0000000104224294
+Refc: 1
+=fun
+Module: code
+Uniq: 38778589
+Index: 9
+Address: 0x0000000103e224e8
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 16
+Address: 0x0000000103fb50c8
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 0
+Address: 0x0000000104021170
+Refc: 2
+=fun
+Module: gen_server
+Uniq: 22931368
+Index: 1
+Address: 0x0000000103f22dc0
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 5
+Address: 0x000000010400c698
+Refc: 2
+=fun
+Module: gen_statem
+Uniq: 58250722
+Index: 1
+Address: 0x0000000104068198
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 20
+Address: 0x000000010421a5b4
+Refc: 1
+=fun
+Module: ets
+Uniq: 30908443
+Index: 3
+Address: 0x0000000103e3c4b4
+Refc: 1
+=fun
+Module: erl_init
+Uniq: 96508615
+Index: 1
+Address: 0x0000000103d86030
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 1
+Address: 0x0000000103ecc578
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 27
+Address: 0x0000000103eb0e60
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 11
+Address: 0x0000000104153890
+Refc: 1
+=fun
+Module: 'gleam@set'
+Uniq: 15699406
+Index: 4
+Address: 0x000000010414f0e8
+Refc: 2
+=fun
+Module: showtime_ffi
+Uniq: 122038219
+Index: 3
+Address: 0x0000000104221048
+Refc: 2
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 4
+Address: 0x0000000103e87b6c
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 13
+Address: 0x00000001041469c0
+Refc: 2
+=fun
+Module: maps
+Uniq: 48010870
+Index: 4
+Address: 0x0000000104036c00
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 38
+Address: 0x0000000103e76410
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 19
+Address: 0x000000010414be68
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 8
+Address: 0x00000001042272b0
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 15
+Address: 0x000000010402d1b8
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 2
+Address: 0x0000000103f8d1bc
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 8
+Address: 0x0000000103fe5440
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 8
+Address: 0x0000000104158898
+Refc: 2
+=fun
+Module: ssl_config
+Uniq: 64895055
+Index: 2
+Address: 0x00000001041342d0
+Refc: 2
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 1
+Address: 0x00000001041fc674
+Refc: 3
+=fun
+Module: proc_lib
+Uniq: 54621022
+Index: 2
+Address: 0x0000000103e9c318
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 14
+Address: 0x0000000103fb9744
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 64
+Address: 0x0000000103e7502c
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 11
+Address: 0x0000000103e4c1a8
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 11
+Address: 0x0000000103f59038
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 48
+Address: 0x0000000103eafe0c
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 0
+Address: 0x0000000103de2638
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 2
+Address: 0x00000001040cbd30
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 11
+Address: 0x0000000103e79e60
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 0
+Address: 0x000000010410a6ac
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 9
+Address: 0x0000000103dcd540
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 6
+Address: 0x00000001040436c4
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 3
+Address: 0x0000000103fb3328
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 26
+Address: 0x000000010402de38
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 98
+Address: 0x0000000103e711b8
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 8
+Address: 0x0000000103fce290
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 16
+Address: 0x000000010400ba50
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 3
+Address: 0x0000000104217380
+Refc: 2
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 22
+Address: 0x0000000103ecae38
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 22
+Address: 0x0000000103eb0038
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 19
+Address: 0x00000001040dd0d8
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 2
+Address: 0x00000001041415b0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 85
+Address: 0x0000000103e723b0
+Refc: 1
+=fun
+Module: user_drv
+Uniq: 115201613
+Index: 0
+Address: 0x0000000104059448
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 14
+Address: 0x000000010414c140
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 14
+Address: 0x0000000103ef2608
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 45
+Address: 0x0000000103eb14b8
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 37
+Address: 0x000000010421bc80
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 5
+Address: 0x0000000103fe55b0
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 28
+Address: 0x0000000103e773b4
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 32
+Address: 0x000000010414b0a0
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 6
+Address: 0x00000001040d54e8
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 11
+Address: 0x0000000103e3bce8
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 3
+Address: 0x0000000103eb29a8
+Refc: 1
+=fun
+Module: glint
+Uniq: 18128761
+Index: 3
+Address: 0x0000000104153b80
+Refc: 1
+=fun
+Module: 'glint@flag@constraint'
+Uniq: 83988546
+Index: 1
+Address: 0x000000010414e3a0
+Refc: 1
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 3
+Address: 0x00000001041f9964
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 62
+Address: 0x0000000103e751d8
+Refc: 2
+=fun
+Module: group
+Uniq: 88293013
+Index: 1
+Address: 0x00000001040889e8
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 27
+Address: 0x000000010414a8d0
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 7
+Address: 0x0000000104029fb8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 35
+Address: 0x000000010400b0f4
+Refc: 1
+=fun
+Module: kernel_refc
+Uniq: 28224509
+Index: 0
+Address: 0x00000001040b0eb8
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 14
+Address: 0x000000010421c150
+Refc: 1
+=fun
+Module: filelib
+Uniq: 94480894
+Index: 0
+Address: 0x0000000104214c18
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 8
+Address: 0x0000000104160c3c
+Refc: 1
+=fun
+Module: erpc
+Uniq: 95647987
+Index: 0
+Address: 0x000000010404e068
+Refc: 2
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 0
+Address: 0x0000000104159620
+Refc: 2
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 4
+Address: 0x0000000103ee1870
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 11
+Address: 0x0000000103d9368c
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 6
+Address: 0x0000000103fb7f58
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 88
+Address: 0x0000000103e7205c
+Refc: 1
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 3
+Address: 0x0000000103e4cdf8
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 3
+Address: 0x0000000103f599d0
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 56
+Address: 0x0000000103eaf9dc
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 8
+Address: 0x0000000103de1c68
+Refc: 1
+=fun
+Module: ssl_pkix_db
+Uniq: 51522903
+Index: 3
+Address: 0x000000010412a708
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 8
+Address: 0x0000000104109d90
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 3
+Address: 0x0000000103e7bde0
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 1
+Address: 0x0000000103dcd6f0
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 18
+Address: 0x000000010402ccb8
+Refc: 2
+=fun
+Module: code
+Uniq: 38778589
+Index: 4
+Address: 0x0000000103e22bf0
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 0
+Address: 0x0000000103fcf1a0
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 8
+Address: 0x000000010400c2f4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 27
+Address: 0x00000001042186d4
+Refc: 1
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 7
+Address: 0x000000010420b558
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 21
+Address: 0x00000001041616e8
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 14
+Address: 0x0000000103ecb5dc
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 30
+Address: 0x0000000103eb0aa0
+Refc: 1
+=fun
+Module: beam_lib
+Uniq: 45141944
+Index: 3
+Address: 0x0000000103f99718
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 1
+Address: 0x0000000103e87e60
+Refc: 2
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 10
+Address: 0x0000000104146b40
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 45
+Address: 0x0000000103e5db08
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 22
+Address: 0x000000010414bcc0
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 3
+Address: 0x0000000104227a80
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 6
+Address: 0x0000000103ef2c18
+Refc: 1
+=fun
+Module: prim_inet
+Uniq: 37477703
+Index: 1
+Address: 0x0000000103dae5d8
+Refc: 1
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 3
+Address: 0x0000000104208f10
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 13
+Address: 0x0000000103fe4d74
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 20
+Address: 0x0000000103e78078
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 19
+Address: 0x0000000104159418
+Refc: 1
+=fun
+Module: io_lib
+Uniq: 6600873
+Index: 1
+Address: 0x0000000104096af8
+Refc: 2
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 10
+Address: 0x00000001041fbd40
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 79
+Address: 0x0000000103e727e8
+Refc: 2
+=fun
+Module: epp
+Uniq: 124355082
+Index: 6
+Address: 0x00000001040fc194
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 40
+Address: 0x000000010414c5c8
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 12
+Address: 0x0000000103f58f90
+Refc: 2
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 14
+Address: 0x00000001040d8d20
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 11
+Address: 0x0000000103eb1ee0
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 54
+Address: 0x0000000103e75b08
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 5
+Address: 0x0000000104109fe8
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 14
+Address: 0x0000000103dccf78
+Refc: 1
+=fun
+Module: standard_error
+Uniq: 123115530
+Index: 1
+Address: 0x0000000103fbd320
+Refc: 2
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 0
+Address: 0x0000000103dd5c18
+Refc: 1
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 14
+Address: 0x0000000103fb4a80
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 105
+Address: 0x0000000103e70d50
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 27
+Address: 0x000000010400a268
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 6
+Address: 0x000000010421cf98
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 19
+Address: 0x0000000103ec7778
+Refc: 2
+=fun
+Module: 'gleam@erlang'
+Uniq: 90512636
+Index: 1
+Address: 0x0000000104140be8
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 0
+Address: 0x0000000104161920
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 3
+Address: 0x0000000103d94690
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 80
+Address: 0x0000000103e727a8
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 5
+Address: 0x0000000103feeb18
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 5
+Address: 0x000000010414c954
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 11
+Address: 0x0000000103ef26f8
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 32
+Address: 0x0000000103eb0880
+Refc: 1
+=fun
+Module: showtime
+Uniq: 22478307
+Index: 4
+Address: 0x000000010413f850
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 40
+Address: 0x000000010421c70c
+Refc: 1
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 6
+Address: 0x0000000103ff5c50
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 27
+Address: 0x0000000103e773e8
+Refc: 2
+=fun
+Module: inet_config
+Uniq: 64624012
+Index: 1
+Address: 0x0000000103fd3c68
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 0
+Address: 0x00000001042230d8
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 19
+Address: 0x0000000103fb4af0
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 5
+Address: 0x0000000104020da8
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 0
+Address: 0x0000000104006d40
+Refc: 2
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 39
+Address: 0x000000010414c4e0
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 19
+Address: 0x000000010421a688
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 6
+Address: 0x0000000103ecc408
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 6
+Address: 0x0000000103eb2520
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 3
+Address: 0x00000001040dfb40
+Refc: 2
+=fun
+Module: glint
+Uniq: 18128761
+Index: 6
+Address: 0x0000000104153a40
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 6
+Address: 0x0000000103e3c0b4
+Refc: 1
+=fun
+Module: showtime_ffi
+Uniq: 122038219
+Index: 4
+Address: 0x0000000104221600
+Refc: 1
+=fun
+Module: 'gleam@set'
+Uniq: 15699406
+Index: 1
+Address: 0x000000010414fb08
+Refc: 1
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 9
+Address: 0x0000000103e87c4c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 37
+Address: 0x0000000103e766d4
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 30
+Address: 0x000000010414ad80
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 8
+Address: 0x000000010402a380
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 11
+Address: 0x00000001042267c0
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 5
+Address: 0x0000000103f8cbb8
+Refc: 1
+=fun
+Module: 'showtime@internal@erlang@event_handler'
+Uniq: 124289607
+Index: 1
+Address: 0x00000001041f7b38
+Refc: 2
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 53
+Address: 0x000000010421d498
+Refc: 2
+=fun
+Module: prim_tty
+Uniq: 75477062
+Index: 0
+Address: 0x0000000104078e08
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 15
+Address: 0x0000000104161198
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 11
+Address: 0x0000000104158b30
+Refc: 1
+=fun
+Module: 'gleam@erlang@process'
+Uniq: 28255578
+Index: 2
+Address: 0x00000001041fc5a8
+Refc: 2
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 11
+Address: 0x0000000103fb9ac0
+Refc: 2
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 8
+Address: 0x0000000103fee890
+Refc: 2
+=fun
+Module: gen
+Uniq: 105431365
+Index: 3
+Address: 0x0000000103e0fda0
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 71
+Address: 0x0000000103e740a8
+Refc: 2
+=fun
+Module: logger_simple_h
+Uniq: 105730862
+Index: 0
+Address: 0x0000000103efcfa8
+Refc: 1
+=fun
+Module: application_master
+Uniq: 24509285
+Index: 0
+Address: 0x0000000103eb8b40
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 8
+Address: 0x0000000103e4c450
+Refc: 2
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 4
+Address: 0x0000000103f5999c
+Refc: 1
+=fun
+Module: logger_olp
+Uniq: 51656710
+Index: 0
+Address: 0x0000000103f785c4
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 51
+Address: 0x0000000103eafbb8
+Refc: 1
+=fun
+Module: gleam_stdlib
+Uniq: 79074729
+Index: 2
+Address: 0x000000010416a7d0
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 3
+Address: 0x0000000103de25dc
+Refc: 1
+=fun
+Module: c
+Uniq: 124725464
+Index: 5
+Address: 0x00000001040cbd00
+Refc: 1
+=fun
+Module: file_server
+Uniq: 30066188
+Index: 1
+Address: 0x0000000103e075a8
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 14
+Address: 0x0000000103e798f0
+Refc: 2
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 13
+Address: 0x00000001041099c0
+Refc: 2
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 6
+Address: 0x0000000103dcd3f0
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 5
+Address: 0x000000010404343c
+Refc: 1
+=fun
+Module: rand
+Uniq: 65977474
+Index: 23
+Address: 0x000000010402bd10
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 6
+Address: 0x0000000103fb52d0
+Refc: 2
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 10
+Address: 0x0000000104020afc
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 97
+Address: 0x0000000103e71348
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 19
+Address: 0x000000010400b128
+Refc: 2
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 10
+Address: 0x000000010420c3f4
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 30
+Address: 0x000000010421a7b0
+Refc: 2
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 11
+Address: 0x0000000103ecb8ec
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 16
+Address: 0x00000001040dc390
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 17
+Address: 0x0000000103eb193c
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 7
+Address: 0x0000000104146d4c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 40
+Address: 0x0000000103e7630c
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 13
+Address: 0x000000010414c768
+Refc: 1
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 3
+Address: 0x0000000103eea438
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 40
+Address: 0x0000000103eb0284
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 32
+Address: 0x000000010421aa88
+Refc: 1
+=fun
+Module: inet
+Uniq: 65562377
+Index: 6
+Address: 0x0000000103fe54e8
+Refc: 2
+=fun
+Module: 'showtime@internal@erlang@discover'
+Uniq: 110023186
+Index: 4
+Address: 0x0000000104208edc
+Refc: 1
+=fun
+Module: error_logger
+Uniq: 17945318
+Index: 0
+Address: 0x0000000103ef7a38
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 19
+Address: 0x0000000103e78a98
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 74
+Address: 0x0000000103e73c34
+Refc: 1
+=fun
+Module: epp
+Uniq: 124355082
+Index: 1
+Address: 0x00000001040fcb34
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 14
+Address: 0x0000000103eb1bc4
+Refc: 1
+=fun
+Module: erl_scan
+Uniq: 115441844
+Index: 11
+Address: 0x00000001040d6c98
+Refc: 2
+=fun
+Module: ets
+Uniq: 30908443
+Index: 14
+Address: 0x0000000103e3b5e4
+Refc: 1
+=fun
+Module: raw_file_io
+Uniq: 101053602
+Index: 1
+Address: 0x00000001040d03f8
+Refc: 2
+=fun
+Module: 'gleam@otp@actor'
+Uniq: 90500110
+Index: 6
+Address: 0x00000001041f97e0
+Refc: 2
+=fun
+Module: c
+Uniq: 124725464
+Index: 8
+Address: 0x00000001040cb948
+Refc: 2
+=fun
+Module: 'aoc2023@@main'
+Uniq: 70697990
+Index: 1
+Address: 0x00000001040ea940
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 61
+Address: 0x0000000103e75758
+Refc: 1
+=fun
+Module: group
+Uniq: 88293013
+Index: 2
+Address: 0x00000001040888b8
+Refc: 2
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 8
+Address: 0x0000000104043710
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 0
+Address: 0x0000000104029e40
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 9
+Address: 0x0000000103fb1c48
+Refc: 2
+=fun
+Module: prim_zip
+Uniq: 66112146
+Index: 5
+Address: 0x0000000103dd5b24
+Refc: 1
+=fun
+Module: global
+Uniq: 100333677
+Index: 30
+Address: 0x0000000104009ea4
+Refc: 1
+=fun
+Module: file
+Uniq: 1459081
+Index: 1
+Address: 0x0000000103e195bc
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 13
+Address: 0x000000010421c3f8
+Refc: 1
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 7
+Address: 0x0000000104160a5c
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 3
+Address: 0x0000000104155ac0
+Refc: 2
+=fun
+Module: gen_event
+Uniq: 37613186
+Index: 1
+Address: 0x0000000103ee21ac
+Refc: 1
+=fun
+Module: init
+Uniq: 72673429
+Index: 8
+Address: 0x0000000103d939d8
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 3
+Address: 0x0000000103fb9fc4
+Refc: 1
+=fun
+Module: inet_parse
+Uniq: 131529883
+Index: 0
+Address: 0x0000000103fef1a0
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 95
+Address: 0x0000000103e715a8
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 0
+Address: 0x0000000103e4d260
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 59
+Address: 0x0000000103eaf728
+Refc: 2
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 11
+Address: 0x0000000103de1958
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 47
+Address: 0x000000010421d030
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 66
+Address: 0x0000000103eaeca8
+Refc: 2
+=fun
+Module: rpc
+Uniq: 70687560
+Index: 1
+Address: 0x0000000103ff617c
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 6
+Address: 0x0000000103e7b800
+Refc: 2
+=fun
+Module: timer
+Uniq: 46706930
+Index: 1
+Address: 0x00000001040ad644
+Refc: 1
+=fun
+Module: inet_config
+Uniq: 64624012
+Index: 4
+Address: 0x0000000103fd3ab8
+Refc: 2
+=fun
+Module: kernel_config
+Uniq: 90805894
+Index: 0
+Address: 0x00000001040af678
+Refc: 2
+=fun
+Module: 'day7@solve'
+Uniq: 118915376
+Index: 5
+Address: 0x00000001042240b8
+Refc: 2
+=fun
+Module: code
+Uniq: 38778589
+Index: 7
+Address: 0x0000000103e225d8
+Refc: 1
+=fun
+Module: net_kernel
+Uniq: 105284444
+Index: 2
+Address: 0x0000000104020ed0
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 5
+Address: 0x0000000103fce8b0
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 11
+Address: 0x000000010400c078
+Refc: 2
+=fun
+Module: simplifile
+Uniq: 17272755
+Index: 2
+Address: 0x000000010420bb20
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 22
+Address: 0x000000010421a02c
+Refc: 1
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 3
+Address: 0x0000000103ecc3d4
+Refc: 1
+=fun
+Module: httpc_manager
+Uniq: 90163599
+Index: 1
+Address: 0x0000000104112fb0
+Refc: 2
+=fun
+Module: glint
+Uniq: 18128761
+Index: 13
+Address: 0x00000001041514f0
+Refc: 2
+=fun
+Module: 'gleam@function'
+Uniq: 127819290
+Index: 16
+Address: 0x000000010416125c
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 25
+Address: 0x0000000103eb1130
+Refc: 1
+=fun
+Module: showtime_ffi
+Uniq: 122038219
+Index: 1
+Address: 0x0000000104221320
+Refc: 2
+=fun
+Module: logger_server
+Uniq: 19349920
+Index: 6
+Address: 0x0000000103e87a20
+Refc: 1
+=fun
+Module: 'gleam@list'
+Uniq: 42440854
+Index: 15
+Address: 0x0000000104146890
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 32
+Address: 0x0000000103e7697c
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 21
+Address: 0x000000010414bd40
+Refc: 2
+=fun
+Module: 'showtime@internal@reports@formatter'
+Uniq: 1772858
+Index: 6
+Address: 0x0000000104227820
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 13
+Address: 0x000000010402ae18
+Refc: 2
+=fun
+Module: peer
+Uniq: 34337805
+Index: 0
+Address: 0x0000000103f8df08
+Refc: 2
+=fun
+Module: inet
+Uniq: 65562377
+Index: 14
+Address: 0x0000000103fe494c
+Refc: 1
+=fun
+Module: 'gleam_community@colour'
+Uniq: 92289676
+Index: 14
+Address: 0x0000000104158e68
+Refc: 1
+=fun
+Module: ssl_config
+Uniq: 64895055
+Index: 0
+Address: 0x0000000104134808
+Refc: 1
+=fun
+Module: erl_features
+Uniq: 44278689
+Index: 12
+Address: 0x0000000103fb9988
+Refc: 2
+=fun
+Module: proc_lib
+Uniq: 54621022
+Index: 0
+Address: 0x0000000103e9c590
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 66
+Address: 0x0000000103e745b0
+Refc: 2
+=fun
+Module: supervisor
+Uniq: 63985753
+Index: 13
+Address: 0x0000000103e4c0e8
+Refc: 1
+=fun
+Module: erl_parse
+Uniq: 57550649
+Index: 9
+Address: 0x0000000103f59274
+Refc: 1
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 54
+Address: 0x0000000103eafb40
+Refc: 1
+=fun
+Module: erl_prim_loader
+Uniq: 11574866
+Index: 6
+Address: 0x0000000103de2310
+Refc: 1
+=fun
+Module: logger_std_h
+Uniq: 4673888
+Index: 1
+Address: 0x00000001040bcad8
+Refc: 3
+=fun
+Module: c
+Uniq: 124725464
+Index: 0
+Address: 0x00000001040cbe98
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 53
+Address: 0x0000000103e75c2c
+Refc: 1
+=fun
+Module: httpc
+Uniq: 36342138
+Index: 2
+Address: 0x000000010410a368
+Refc: 2
+=fun
+Module: httpc_cookie
+Uniq: 22295768
+Index: 1
+Address: 0x000000010411a368
+Refc: 1
+=fun
+Module: prim_socket
+Uniq: 51104894
+Index: 11
+Address: 0x0000000103dcd030
+Refc: 1
+=fun
+Module: global_group
+Uniq: 133931896
+Index: 0
+Address: 0x0000000104040ec0
+Refc: 2
+=fun
+Module: unicode
+Uniq: 54664399
+Index: 1
+Address: 0x0000000103fb4488
+Refc: 2
+=fun
+Module: rand
+Uniq: 65977474
+Index: 24
+Address: 0x000000010402df10
+Refc: 2
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 108
+Address: 0x0000000103e75f08
+Refc: 2
+=fun
+Module: inet_db
+Uniq: 46329474
+Index: 10
+Address: 0x0000000103fcd590
+Refc: 2
+=fun
+Module: global
+Uniq: 100333677
+Index: 22
+Address: 0x000000010400aa90
+Refc: 1
+=fun
+Module: 'gleam@dynamic'
+Uniq: 70964574
+Index: 5
+Address: 0x000000010421d170
+Refc: 1
+=fun
+Module: ets
+Uniq: 30908443
+Index: 16
+Address: 0x0000000103e39768
+Refc: 2
+=fun
+Module: application_controller
+Uniq: 5142319
+Index: 16
+Address: 0x0000000103ecb478
+Refc: 2
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 20
+Address: 0x0000000103eb16e8
+Refc: 1
+=fun
+Module: 'gleam@result'
+Uniq: 44749367
+Index: 1
+Address: 0x000000010415fa08
+Refc: 2
+=fun
+Module: init
+Uniq: 72673429
+Index: 0
+Address: 0x0000000103d87d10
+Refc: 1
+=fun
+Module: user_drv
+Uniq: 115201613
+Index: 2
+Address: 0x0000000104059414
+Refc: 1
+=fun
+Module: erl_lint
+Uniq: 64115739
+Index: 87
+Address: 0x0000000103e72264
+Refc: 1
+=fun
+Module: 'glint@flag'
+Uniq: 25615327
+Index: 0
+Address: 0x000000010414cbe0
+Refc: 2
+=fun
+Module: code_server
+Uniq: 111287289
+Index: 8
+Address: 0x0000000103ef2aa8
+Refc: 4
+=fun
+Module: erl_eval
+Uniq: 125776118
+Index: 35
+Address: 0x0000000103eb05c8
+Refc: 1
+=fun
+Module: gleam_erlang_ffi
+Uniq: 130811285
+Index: 2
+Address: 0x00000001042005cc
+Refc: 1
+=proc_stack:<0.0.0>
+y0:H105DD6AD8
+y1:SCatch 0x3DE8204 (erlang:halt/1 + 156)
+0x0000000105dda900:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.0.0>
+105DD6AD8:lI82|H105DD6AE8
+105DD6AE8:lI117|H105DD6AF8
+105DD6AF8:lI110|H105DD6B08
+105DD6B08:lI116|H105DD6B18
+105DD6B18:lI105|H105DD6B28
+105DD6B28:lI109|H105DD6B38
+105DD6B38:lI101|H105DD6B48
+105DD6B48:lI32|H105DD6B58
+105DD6B58:lI116|H105DD6B68
+105DD6B68:lI101|H105DD6B78
+105DD6B78:lI114|H105DD6B88
+105DD6B88:lI109|H105DD6B98
+105DD6B98:lI105|H105DD6BA8
+105DD6BA8:lI110|H105DD6BB8
+105DD6BB8:lI97|H105DD6BC8
+105DD6BC8:lI116|H105DD6BD8
+105DD6BD8:lI105|H105DD6BE8
+105DD6BE8:lI110|H105DD6BF8
+105DD6BF8:lI103|H105DD6C08
+105DD6C08:lI32|H105DD6C18
+105DD6C18:lI100|H105DD6C28
+105DD6C28:lI117|H105DD6C38
+105DD6C38:lI114|H105DD6C48
+105DD6C48:lI105|H105DD6C58
+105DD6C58:lI110|H105DD6C68
+105DD6C68:lI103|H105DD6C78
+105DD6C78:lI32|H105DD6C88
+105DD6C88:lI98|H105DD6C98
+105DD6C98:lI111|H105DD6CA8
+105DD6CA8:lI111|H105DD6CB8
+105DD6CB8:lI116|H105DD6AC8
+105DD6AC8:lI32|H105DD6AB8
+105DD6AB8:lI40|H105DD5838
+105DD5838:lI123|H105DD5848
+105DD5848:lI44|H105DD5858
+105DD5858:lI91|H105DD5868
+105DD5868:lI123|H105DD5878
+105DD5878:lI115|H105DD5888
+105DD5888:lI104|H105DD5898
+105DD5898:lI111|H105DD58A8
+105DD58A8:lI119|H105DD58B8
+105DD58B8:lI116|H105DD58C8
+105DD58C8:lI105|H105DD58D8
+105DD58D8:lI109|H105DD58E8
+105DD58E8:lI101|H105DD58F8
+105DD58F8:lI64|H105DD5908
+105DD5908:lI105|H105DD5918
+105DD5918:lI110|H105DD5928
+105DD5928:lI116|H105DD5938
+105DD5938:lI101|H105DD5948
+105DD5948:lI114|H105DD5958
+105DD5958:lI110|H105DD5968
+105DD5968:lI97|H105DD5978
+105DD5978:lI108|H105DD5988
+105DD5988:lI64|H105DD5998
+105DD5998:lI114|H105DD59A8
+105DD59A8:lI101|H105DD59B8
+105DD59B8:lI112|H105DD59C8
+105DD59C8:lI111|H105DD59D8
+105DD59D8:lI114|H105DD59E8
+105DD59E8:lI116|H105DD59F8
+105DD59F8:lI115|H105DD5A08
+105DD5A08:lI64|H105DD5A18
+105DD5A18:lI102|H105DD5A28
+105DD5A28:lI111|H105DD5A38
+105DD5A38:lI114|H105DD5A48
+105DD5A48:lI109|H105DD5A58
+105DD5A58:lI97|H105DD5A68
+105DD5A68:lI116|H105DD5A78
+105DD5A78:lI116|H105DD5A88
+105DD5A88:lI101|H105DD5A98
+105DD5A98:lI114|H105DD5AA8
+105DD5AA8:lI44|H105DD5AB8
+105DD5AB8:lI45|H105DD5AC8
+105DD5AC8:lI99|H105DD5AD8
+105DD5AD8:lI114|H105DD5AE8
+105DD5AE8:lI101|H105DD5AF8
+105DD5AF8:lI97|H105DD5B08
+105DD5B08:lI116|H105DD5B18
+105DD5B18:lI101|H105DD5B28
+105DD5B28:lI95|H105DD5B38
+105DD5B38:lI116|H105DD5B48
+105DD5B48:lI101|H105DD5B58
+105DD5B58:lI115|H105DD5B68
+105DD5B68:lI116|H105DD5B78
+105DD5B78:lI95|H105DD5B88
+105DD5B88:lI114|H105DD5B98
+105DD5B98:lI101|H105DD5BA8
+105DD5BA8:lI112|H105DD5BB8
+105DD5BB8:lI111|H105DD5BC8
+105DD5BC8:lI114|H105DD5BD8
+105DD5BD8:lI116|H105DD5BE8
+105DD5BE8:lI47|H105DD5BF8
+105DD5BF8:lI49|H105DD5C08
+105DD5C08:lI45|H105DD5C18
+105DD5C18:lI102|H105DD5C28
+105DD5C28:lI117|H105DD5C38
+105DD5C38:lI110|H105DD5C48
+105DD5C48:lI45|H105DD5C58
+105DD5C58:lI52|H105DD5C68
+105DD5C68:lI45|H105DD5C78
+105DD5C78:lI44|H105DD5C88
+105DD5C88:lI49|H105DD5C98
+105DD5C98:lI44|H105DD5CA8
+105DD5CA8:lI91|H105DD5CB8
+105DD5CB8:lI123|H105DD5CC8
+105DD5CC8:lI95|H105DD5CD8
+105DD5CD8:lI125|H105DD5CE8
+105DD5CE8:lI44|H105DD5CF8
+105DD5CF8:lI123|H105DD5D08
+105DD5D08:lI95|H105DD5D18
+105DD5D18:lI125|H105DD5D28
+105DD5D28:lI93|H105DD5D38
+105DD5D38:lI125|H105DD5D48
+105DD5D48:lI44|H105DD5D58
+105DD5D58:lI123|H105DD5D68
+105DD5D68:lI103|H105DD5D78
+105DD5D78:lI108|H105DD5D88
+105DD5D88:lI101|H105DD5D98
+105DD5D98:lI97|H105DD5DA8
+105DD5DA8:lI109|H105DD5DB8
+105DD5DB8:lI64|H105DD5DC8
+105DD5DC8:lI108|H105DD5DD8
+105DD5DD8:lI105|H105DD5DE8
+105DD5DE8:lI115|H105DD5DF8
+105DD5DF8:lI116|H105DD5E08
+105DD5E08:lI44|H105DD5E18
+105DD5E18:lI100|H105DD5E28
+105DD5E28:lI111|H105DD5E38
+105DD5E38:lI95|H105DD5E48
+105DD5E48:lI102|H105DD5E58
+105DD5E58:lI105|H105DD5E68
+105DD5E68:lI108|H105DD5E78
+105DD5E78:lI116|H105DD5E88
+105DD5E88:lI101|H105DD5E98
+105DD5E98:lI114|H105DD5EA8
+105DD5EA8:lI95|H105DD5EB8
+105DD5EB8:lI109|H105DD5EC8
+105DD5EC8:lI97|H105DD5ED8
+105DD5ED8:lI112|H105DD5EE8
+105DD5EE8:lI44|H105DD5EF8
+105DD5EF8:lI51|H105DD5F08
+105DD5F08:lI44|H105DD5F18
+105DD5F18:lI91|H105DD5F28
+105DD5F28:lI123|H105DD5F38
+105DD5F38:lI95|H105DD5F48
+105DD5F48:lI125|H105DD5F58
+105DD5F58:lI44|H105DD5F68
+105DD5F68:lI123|H105DD5F78
+105DD5F78:lI95|H105DD5F88
+105DD5F88:lI125|H105DD5F98
+105DD5F98:lI93|H105DD5FA8
+105DD5FA8:lI125|H105DD5FB8
+105DD5FB8:lI44|H105DD5FC8
+105DD5FC8:lI123|H105DD5FD8
+105DD5FD8:lI115|H105DD5FE8
+105DD5FE8:lI104|H105DD5FF8
+105DD5FF8:lI111|H105DD6008
+105DD6008:lI119|H105DD6018
+105DD6018:lI116|H105DD6028
+105DD6028:lI105|H105DD6038
+105DD6038:lI109|H105DD6048
+105DD6048:lI101|H105DD6058
+105DD6058:lI64|H105DD6068
+105DD6068:lI105|H105DD6078
+105DD6078:lI110|H105DD6088
+105DD6088:lI116|H105DD6098
+105DD6098:lI101|H105DD60A8
+105DD60A8:lI114|H105DD60B8
+105DD60B8:lI110|H105DD60C8
+105DD60C8:lI97|H105DD60D8
+105DD60D8:lI108|H105DD60E8
+105DD60E8:lI64|H105DD60F8
+105DD60F8:lI114|H105DD6108
+105DD6108:lI101|H105DD6118
+105DD6118:lI112|H105DD6128
+105DD6128:lI111|H105DD6138
+105DD6138:lI114|H105DD6148
+105DD6148:lI116|H105DD6158
+105DD6158:lI115|H105DD6168
+105DD6168:lI64|H105DD6178
+105DD6178:lI102|H105DD6188
+105DD6188:lI111|H105DD6198
+105DD6198:lI114|H105DD61A8
+105DD61A8:lI109|H105DD61B8
+105DD61B8:lI97|H105DD61C8
+105DD61C8:lI116|H105DD61D8
+105DD61D8:lI116|H105DD61E8
+105DD61E8:lI101|H105DD61F8
+105DD61F8:lI114|H105DD6208
+105DD6208:lI44|H105DD6218
+105DD6218:lI99|H105DD6228
+105DD6228:lI114|H105DD6238
+105DD6238:lI101|H105DD6248
+105DD6248:lI97|H105DD6258
+105DD6258:lI116|H105DD6268
+105DD6268:lI101|H105DD6278
+105DD6278:lI95|H105DD6288
+105DD6288:lI116|H105DD6298
+105DD6298:lI101|H105DD62A8
+105DD62A8:lI115|H105DD62B8
+105DD62B8:lI116|H105DD62C8
+105DD62C8:lI95|H105DD62D8
+105DD62D8:lI114|H105DD62E8
+105DD62E8:lI101|H105DD62F8
+105DD62F8:lI112|H105DD6308
+105DD6308:lI111|H105DD6318
+105DD6318:lI114|H105DD6328
+105DD6328:lI116|H105DD6338
+105DD6338:lI44|H105DD6348
+105DD6348:lI49|H105DD6358
+105DD6358:lI44|H105DD6368
+105DD6368:lI91|H105DD6378
+105DD6378:lI123|H105DD6388
+105DD6388:lI95|H105DD6398
+105DD6398:lI125|H105DD63A8
+105DD63A8:lI44|H105DD63B8
+105DD63B8:lI123|H105DD63C8
+105DD63C8:lI95|H105DD63D8
+105DD63D8:lI125|H105DD63E8
+105DD63E8:lI93|H105DD63F8
+105DD63F8:lI125|H105DD6408
+105DD6408:lI44|H105DD6418
+105DD6418:lI123|H105DD6428
+105DD6428:lI115|H105DD6438
+105DD6438:lI104|H105DD6448
+105DD6448:lI111|H105DD6458
+105DD6458:lI119|H105DD6468
+105DD6468:lI116|H105DD6478
+105DD6478:lI105|H105DD6488
+105DD6488:lI109|H105DD6498
+105DD6498:lI101|H105DD64A8
+105DD64A8:lI64|H105DD64B8
+105DD64B8:lI105|H105DD64C8
+105DD64C8:lI110|H105DD64D8
+105DD64D8:lI116|H105DD64E8
+105DD64E8:lI101|H105DD64F8
+105DD64F8:lI114|H105DD6508
+105DD6508:lI110|H105DD6518
+105DD6518:lI97|H105DD6528
+105DD6528:lI108|H105DD6538
+105DD6538:lI64|H105DD6548
+105DD6548:lI101|H105DD6558
+105DD6558:lI114|H105DD6568
+105DD6568:lI108|H105DD6578
+105DD6578:lI97|H105DD6588
+105DD6588:lI110|H105DD6598
+105DD6598:lI103|H105DD65A8
+105DD65A8:lI64|H105DD65B8
+105DD65B8:lI101|H105DD65C8
+105DD65C8:lI118|H105DD65D8
+105DD65D8:lI101|H105DD65E8
+105DD65E8:lI110|H105DD65F8
+105DD65F8:lI116|H105DD6608
+105DD6608:lI95|H105DD6618
+105DD6618:lI104|H105DD6628
+105DD6628:lI97|H105DD6638
+105DD6638:lI110|H105DD6648
+105DD6648:lI100|H105DD6658
+105DD6658:lI108|H105DD6668
+105DD6668:lI101|H105DD6678
+105DD6678:lI114|H105DD6688
+105DD6688:lI44|H105DD6698
+105DD6698:lI45|H105DD66A8
+105DD66A8:lI115|H105DD66B8
+105DD66B8:lI116|H105DD66C8
+105DD66C8:lI97|H105DD66D8
+105DD66D8:lI114|H105DD66E8
+105DD66E8:lI116|H105DD66F8
+105DD66F8:lI47|H105DD6708
+105DD6708:lI48|H105DD6718
+105DD6718:lI45|H105DD6728
+105DD6728:lI102|H105DD6738
+105DD6738:lI117|H105DD6748
+105DD6748:lI110|H105DD6758
+105DD6758:lI45|H105DD6768
+105DD6768:lI49|H105DD6778
+105DD6778:lI45|H105DD6788
+105DD6788:lI44|H105DD6798
+105DD6798:lI50|H105DD67A8
+105DD67A8:lI44|H105DD67B8
+105DD67B8:lI91|H105DD67C8
+105DD67C8:lI123|H105DD67D8
+105DD67D8:lI95|H105DD67E8
+105DD67E8:lI125|H105DD67F8
+105DD67F8:lI44|H105DD6808
+105DD6808:lI123|H105DD6818
+105DD6818:lI95|H105DD6828
+105DD6828:lI125|H105DD6838
+105DD6838:lI93|H105DD6848
+105DD6848:lI125|H105DD6858
+105DD6858:lI44|H105DD6868
+105DD6868:lI123|H105DD6878
+105DD6878:lI103|H105DD6888
+105DD6888:lI108|H105DD6898
+105DD6898:lI101|H105DD68A8
+105DD68A8:lI97|H105DD68B8
+105DD68B8:lI109|H105DD68C8
+105DD68C8:lI64|H105DD68D8
+105DD68D8:lI111|H105DD68E8
+105DD68E8:lI116|H105DD68F8
+105DD68F8:lI112|H105DD6908
+105DD6908:lI64|H105DD6918
+105DD6918:lI97|H105DD6928
+105DD6928:lI99|H105DD6938
+105DD6938:lI116|H105DD6948
+105DD6948:lI111|H105DD6958
+105DD6958:lI114|H105DD6968
+105DD6968:lI44|H105DD6978
+105DD6978:lI108|H105DD6988
+105DD6988:lI111|H105DD6998
+105DD6998:lI111|H105DD69A8
+105DD69A8:lI112|H105DD69B8
+105DD69B8:lI44|H105DD69C8
+105DD69C8:lI49|H105DD69D8
+105DD69D8:lI44|H105DD69E8
+105DD69E8:lI91|H105DD69F8
+105DD69F8:lI123|H105DD6A08
+105DD6A08:lI95|H105DD6A18
+105DD6A18:lI125|H105DD6A28
+105DD6A28:lI44|H105DD6A38
+105DD6A38:lI123|H105DD6A48
+105DD6A48:lI95|H105DD6A58
+105DD6A58:lI125|H105DD6A68
+105DD6A68:lI93|H105DD6A78
+105DD6A78:lI125|H105DD6A88
+105DD6A88:lI93|H105DD6A98
+105DD6A98:lI125|H105DD6AA8
+105DD6AA8:lI41|N
+=proc_stack:<0.1.0>
+0x0000000103149508:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.1.0>
+=proc_stack:<0.2.0>
+y0:N
+y1:I0
+y2:I60000
+y3:N
+y4:I0
+y5:H280017B40
+y6:A9:undefined
+0x0000000103149c58:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.2.0>
+=proc_stack:<0.3.0>
+y0:N
+0x000000010314b430:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.3.0>
+=proc_stack:<0.4.0>
+y0:N
+0x000000010314bb80:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.4.0>
+=proc_stack:<0.5.0>
+y0:N
+0x000000010314c2d0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.5.0>
+=proc_stack:<0.6.0>
+0x00000001307d0900:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.6.0>
+=proc_stack:<0.7.0>
+y0:N
+y1:N
+y2:H280013CD0
+0x00000001307d1c18:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.7.0>
+=proc_stack:<0.10.0>
+y0:N
+y1:I360000
+y2:H105E9B3B8
+y3:P<0.9.0>
+y4:H105E9B368
+0x0000000105ebdd58:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.10.0>
+105E9B3B8:lH105E9B3D8|H105E9B3E8
+105E9B3D8:lI47|H105E9B408
+105E9B408:lI85|H105E9B448
+105E9B448:lI115|H105E9B498
+105E9B498:lI101|H105E9B4F8
+105E9B4F8:lI114|H105E9B568
+105E9B568:lI115|H105E9B5E8
+105E9B5E8:lI47|H105E9B678
+105E9B678:lI110|H105E9B718
+105E9B718:lI105|H105E9B7C8
+105E9B7C8:lI99|H105E9B888
+105E9B888:lI104|H105E9B958
+105E9B958:lI111|H105E9BA38
+105E9BA38:lI108|H105E9BB28
+105E9BB28:lI97|H105E9BC28
+105E9BC28:lI115|H105E9BD38
+105E9BD38:lI99|H105E9BE58
+105E9BE58:lI97|H105E9BF88
+105E9BF88:lI114|H105E9C0C8
+105E9C0C8:lI108|H105E9C208
+105E9C208:lI115|H105E9C348
+105E9C348:lI111|H105E9C488
+105E9C488:lI110|H105E9C5C8
+105E9C5C8:lI47|H105E9C708
+105E9C708:lI86|H105E9C848
+105E9C848:lI83|H105E9C988
+105E9C988:lI32|H105E9CAC8
+105E9CAC8:lI67|H105E9CC08
+105E9CC08:lI111|H105E9CD48
+105E9CD48:lI100|H105E9CE88
+105E9CE88:lI101|H105E9CFC8
+105E9CFC8:lI47|H105E9D108
+105E9D108:lI65|H105E9D248
+105E9D248:lI100|H105E9D388
+105E9D388:lI118|H105E9D4C8
+105E9D4C8:lI101|H105E9D608
+105E9D608:lI110|H105E9D748
+105E9D748:lI116|H105E9D888
+105E9D888:lI79|H105E9D9C8
+105E9D9C8:lI102|H105E9DB08
+105E9DB08:lI67|H105E9DC48
+105E9DC48:lI111|H105E9DD88
+105E9DD88:lI100|H105E9DEC8
+105E9DEC8:lI101|H105E9E008
+105E9E008:lI47|H105E9E148
+105E9E148:lI97|H105E9E288
+105E9E288:lI111|H105E9E3C8
+105E9E3C8:lI99|H105E9E508
+105E9E508:lI50|H105E9E648
+105E9E648:lI48|H105E9E788
+105E9E788:lI50|H105E9E8C8
+105E9E8C8:lI51|H105E9EA08
+105E9EA08:lI47|H105E9EB48
+105E9EB48:lI98|H105E9EC88
+105E9EC88:lI117|H105E9EDC8
+105E9EDC8:lI105|H105E9EF08
+105E9EF08:lI108|H105E9F048
+105E9F048:lI100|H105E9F188
+105E9F188:lI47|H105E9F2C8
+105E9F2C8:lI100|H105E9F408
+105E9F408:lI101|H105E9F548
+105E9F548:lI118|H105E9F678
+105E9F678:lI47|H105E9F7A8
+105E9F7A8:lI101|H105E9F8D8
+105E9F8D8:lI114|H105E9FA08
+105E9FA08:lI108|H105E9FB38
+105E9FB38:lI97|H105E9FC68
+105E9FC68:lI110|H105E9FD98
+105E9FD98:lI103|H105E9FEC8
+105E9FEC8:lI47|H105E9FFF8
+105E9FFF8:lI103|H105EA0128
+105EA0128:lI108|H105EA0258
+105EA0258:lI101|H105EA0388
+105EA0388:lI97|H105EA04B8
+105EA04B8:lI109|H105EA05E8
+105EA05E8:lI95|H105EA0718
+105EA0718:lI99|H105EA0848
+105EA0848:lI111|H105EA0978
+105EA0978:lI109|H105EA0AA8
+105EA0AA8:lI109|H105EA0BD8
+105EA0BD8:lI117|H105EA0D08
+105EA0D08:lI110|H105EA0E38
+105EA0E38:lI105|H105EA0F68
+105EA0F68:lI116|H105EA1098
+105EA1098:lI121|H105EA1198
+105EA1198:lI95|H105EA1288
+105EA1288:lI97|H105EA1368
+105EA1368:lI110|H105EA1448
+105EA1448:lI115|H105EA1528
+105EA1528:lI105|H105EA15F8
+105EA15F8:lI47|H105EA16A8
+105EA16A8:lI101|H105EA1748
+105EA1748:lI98|H105EA17C8
+105EA17C8:lI105|H105EA1848
+105EA1848:lI110|N
+105E9B3E8:lH105E9B418|H105E9B428
+105E9B418:lI47|H105E9B458
+105E9B458:lI85|H105E9B4A8
+105E9B4A8:lI115|H105E9B508
+105E9B508:lI101|H105E9B578
+105E9B578:lI114|H105E9B5F8
+105E9B5F8:lI115|H105E9B688
+105E9B688:lI47|H105E9B728
+105E9B728:lI110|H105E9B7D8
+105E9B7D8:lI105|H105E9B898
+105E9B898:lI99|H105E9B968
+105E9B968:lI104|H105E9BA48
+105E9BA48:lI111|H105E9BB38
+105E9BB38:lI108|H105E9BC38
+105E9BC38:lI97|H105E9BD48
+105E9BD48:lI115|H105E9BE68
+105E9BE68:lI99|H105E9BF98
+105E9BF98:lI97|H105E9C0D8
+105E9C0D8:lI114|H105E9C218
+105E9C218:lI108|H105E9C358
+105E9C358:lI115|H105E9C498
+105E9C498:lI111|H105E9C5D8
+105E9C5D8:lI110|H105E9C718
+105E9C718:lI47|H105E9C858
+105E9C858:lI86|H105E9C998
+105E9C998:lI83|H105E9CAD8
+105E9CAD8:lI32|H105E9CC18
+105E9CC18:lI67|H105E9CD58
+105E9CD58:lI111|H105E9CE98
+105E9CE98:lI100|H105E9CFD8
+105E9CFD8:lI101|H105E9D118
+105E9D118:lI47|H105E9D258
+105E9D258:lI65|H105E9D398
+105E9D398:lI100|H105E9D4D8
+105E9D4D8:lI118|H105E9D618
+105E9D618:lI101|H105E9D758
+105E9D758:lI110|H105E9D898
+105E9D898:lI116|H105E9D9D8
+105E9D9D8:lI79|H105E9DB18
+105E9DB18:lI102|H105E9DC58
+105E9DC58:lI67|H105E9DD98
+105E9DD98:lI111|H105E9DED8
+105E9DED8:lI100|H105E9E018
+105E9E018:lI101|H105E9E158
+105E9E158:lI47|H105E9E298
+105E9E298:lI97|H105E9E3D8
+105E9E3D8:lI111|H105E9E518
+105E9E518:lI99|H105E9E658
+105E9E658:lI50|H105E9E798
+105E9E798:lI48|H105E9E8D8
+105E9E8D8:lI50|H105E9EA18
+105E9EA18:lI51|H105E9EB58
+105E9EB58:lI47|H105E9EC98
+105E9EC98:lI98|H105E9EDD8
+105E9EDD8:lI117|H105E9EF18
+105E9EF18:lI105|H105E9F058
+105E9F058:lI108|H105E9F198
+105E9F198:lI100|H105E9F2D8
+105E9F2D8:lI47|H105E9F418
+105E9F418:lI100|H105E9F558
+105E9F558:lI101|H105E9F688
+105E9F688:lI118|H105E9F7B8
+105E9F7B8:lI47|H105E9F8E8
+105E9F8E8:lI101|H105E9FA18
+105E9FA18:lI114|H105E9FB48
+105E9FB48:lI108|H105E9FC78
+105E9FC78:lI97|H105E9FDA8
+105E9FDA8:lI110|H105E9FED8
+105E9FED8:lI103|H105EA0008
+105EA0008:lI47|H105EA0138
+105EA0138:lI103|H105EA0268
+105EA0268:lI108|H105EA0398
+105EA0398:lI101|H105EA04C8
+105EA04C8:lI97|H105EA05F8
+105EA05F8:lI109|H105EA0728
+105EA0728:lI95|H105EA0858
+105EA0858:lI118|H105EA0988
+105EA0988:lI101|H105EA0AB8
+105EA0AB8:lI114|H105EA0BE8
+105EA0BE8:lI115|H105EA0D18
+105EA0D18:lI105|H105EA0E48
+105EA0E48:lI111|H105EA0F78
+105EA0F78:lI110|H105EA10A8
+105EA10A8:lI47|H105EA11A8
+105EA11A8:lI101|H105EA1298
+105EA1298:lI98|H105EA1378
+105EA1378:lI105|H105EA1458
+105EA1458:lI110|N
+105E9B428:lH105E9B468|H105E9B478
+105E9B468:lI47|H105E9B4B8
+105E9B4B8:lI85|H105E9B518
+105E9B518:lI115|H105E9B588
+105E9B588:lI101|H105E9B608
+105E9B608:lI114|H105E9B698
+105E9B698:lI115|H105E9B738
+105E9B738:lI47|H105E9B7E8
+105E9B7E8:lI110|H105E9B8A8
+105E9B8A8:lI105|H105E9B978
+105E9B978:lI99|H105E9BA58
+105E9BA58:lI104|H105E9BB48
+105E9BB48:lI111|H105E9BC48
+105E9BC48:lI108|H105E9BD58
+105E9BD58:lI97|H105E9BE78
+105E9BE78:lI115|H105E9BFA8
+105E9BFA8:lI99|H105E9C0E8
+105E9C0E8:lI97|H105E9C228
+105E9C228:lI114|H105E9C368
+105E9C368:lI108|H105E9C4A8
+105E9C4A8:lI115|H105E9C5E8
+105E9C5E8:lI111|H105E9C728
+105E9C728:lI110|H105E9C868
+105E9C868:lI47|H105E9C9A8
+105E9C9A8:lI86|H105E9CAE8
+105E9CAE8:lI83|H105E9CC28
+105E9CC28:lI32|H105E9CD68
+105E9CD68:lI67|H105E9CEA8
+105E9CEA8:lI111|H105E9CFE8
+105E9CFE8:lI100|H105E9D128
+105E9D128:lI101|H105E9D268
+105E9D268:lI47|H105E9D3A8
+105E9D3A8:lI65|H105E9D4E8
+105E9D4E8:lI100|H105E9D628
+105E9D628:lI118|H105E9D768
+105E9D768:lI101|H105E9D8A8
+105E9D8A8:lI110|H105E9D9E8
+105E9D9E8:lI116|H105E9DB28
+105E9DB28:lI79|H105E9DC68
+105E9DC68:lI102|H105E9DDA8
+105E9DDA8:lI67|H105E9DEE8
+105E9DEE8:lI111|H105E9E028
+105E9E028:lI100|H105E9E168
+105E9E168:lI101|H105E9E2A8
+105E9E2A8:lI47|H105E9E3E8
+105E9E3E8:lI97|H105E9E528
+105E9E528:lI111|H105E9E668
+105E9E668:lI99|H105E9E7A8
+105E9E7A8:lI50|H105E9E8E8
+105E9E8E8:lI48|H105E9EA28
+105E9EA28:lI50|H105E9EB68
+105E9EB68:lI51|H105E9ECA8
+105E9ECA8:lI47|H105E9EDE8
+105E9EDE8:lI98|H105E9EF28
+105E9EF28:lI117|H105E9F068
+105E9F068:lI105|H105E9F1A8
+105E9F1A8:lI108|H105E9F2E8
+105E9F2E8:lI100|H105E9F428
+105E9F428:lI47|H105E9F568
+105E9F568:lI100|H105E9F698
+105E9F698:lI101|H105E9F7C8
+105E9F7C8:lI118|H105E9F8F8
+105E9F8F8:lI47|H105E9FA28
+105E9FA28:lI101|H105E9FB58
+105E9FB58:lI114|H105E9FC88
+105E9FC88:lI108|H105E9FDB8
+105E9FDB8:lI97|H105E9FEE8
+105E9FEE8:lI110|H105EA0018
+105EA0018:lI103|H105EA0148
+105EA0148:lI47|H105EA0278
+105EA0278:lI97|H105EA03A8
+105EA03A8:lI100|H105EA04D8
+105EA04D8:lI103|H105EA0608
+105EA0608:lI108|H105EA0738
+105EA0738:lI101|H105EA0868
+105EA0868:lI110|H105EA0998
+105EA0998:lI116|H105EA0AC8
+105EA0AC8:lI47|H105EA0BF8
+105EA0BF8:lI101|H105EA0D28
+105EA0D28:lI98|H105EA0E58
+105EA0E58:lI105|H105EA0F88
+105EA0F88:lI110|N
+105E9B478:lH105E9B4C8|H105E9B4D8
+105E9B4C8:lI47|H105E9B528
+105E9B528:lI85|H105E9B598
+105E9B598:lI115|H105E9B618
+105E9B618:lI101|H105E9B6A8
+105E9B6A8:lI114|H105E9B748
+105E9B748:lI115|H105E9B7F8
+105E9B7F8:lI47|H105E9B8B8
+105E9B8B8:lI110|H105E9B988
+105E9B988:lI105|H105E9BA68
+105E9BA68:lI99|H105E9BB58
+105E9BB58:lI104|H105E9BC58
+105E9BC58:lI111|H105E9BD68
+105E9BD68:lI108|H105E9BE88
+105E9BE88:lI97|H105E9BFB8
+105E9BFB8:lI115|H105E9C0F8
+105E9C0F8:lI99|H105E9C238
+105E9C238:lI97|H105E9C378
+105E9C378:lI114|H105E9C4B8
+105E9C4B8:lI108|H105E9C5F8
+105E9C5F8:lI115|H105E9C738
+105E9C738:lI111|H105E9C878
+105E9C878:lI110|H105E9C9B8
+105E9C9B8:lI47|H105E9CAF8
+105E9CAF8:lI86|H105E9CC38
+105E9CC38:lI83|H105E9CD78
+105E9CD78:lI32|H105E9CEB8
+105E9CEB8:lI67|H105E9CFF8
+105E9CFF8:lI111|H105E9D138
+105E9D138:lI100|H105E9D278
+105E9D278:lI101|H105E9D3B8
+105E9D3B8:lI47|H105E9D4F8
+105E9D4F8:lI65|H105E9D638
+105E9D638:lI100|H105E9D778
+105E9D778:lI118|H105E9D8B8
+105E9D8B8:lI101|H105E9D9F8
+105E9D9F8:lI110|H105E9DB38
+105E9DB38:lI116|H105E9DC78
+105E9DC78:lI79|H105E9DDB8
+105E9DDB8:lI102|H105E9DEF8
+105E9DEF8:lI67|H105E9E038
+105E9E038:lI111|H105E9E178
+105E9E178:lI100|H105E9E2B8
+105E9E2B8:lI101|H105E9E3F8
+105E9E3F8:lI47|H105E9E538
+105E9E538:lI97|H105E9E678
+105E9E678:lI111|H105E9E7B8
+105E9E7B8:lI99|H105E9E8F8
+105E9E8F8:lI50|H105E9EA38
+105E9EA38:lI48|H105E9EB78
+105E9EB78:lI50|H105E9ECB8
+105E9ECB8:lI51|H105E9EDF8
+105E9EDF8:lI47|H105E9EF38
+105E9EF38:lI98|H105E9F078
+105E9F078:lI117|H105E9F1B8
+105E9F1B8:lI105|H105E9F2F8
+105E9F2F8:lI108|H105E9F438
+105E9F438:lI100|H105E9F578
+105E9F578:lI47|H105E9F6A8
+105E9F6A8:lI100|H105E9F7D8
+105E9F7D8:lI101|H105E9F908
+105E9F908:lI118|H105E9FA38
+105E9FA38:lI47|H105E9FB68
+105E9FB68:lI101|H105E9FC98
+105E9FC98:lI114|H105E9FDC8
+105E9FDC8:lI108|H105E9FEF8
+105E9FEF8:lI97|H105EA0028
+105EA0028:lI110|H105EA0158
+105EA0158:lI103|H105EA0288
+105EA0288:lI47|H105EA03B8
+105EA03B8:lI103|H105EA04E8
+105EA04E8:lI108|H105EA0618
+105EA0618:lI101|H105EA0748
+105EA0748:lI97|H105EA0878
+105EA0878:lI109|H105EA09A8
+105EA09A8:lI95|H105EA0AD8
+105EA0AD8:lI101|H105EA0C08
+105EA0C08:lI114|H105EA0D38
+105EA0D38:lI108|H105EA0E68
+105EA0E68:lI97|H105EA0F98
+105EA0F98:lI110|H105EA10B8
+105EA10B8:lI103|H105EA11B8
+105EA11B8:lI47|H105EA12A8
+105EA12A8:lI101|H105EA1388
+105EA1388:lI98|H105EA1468
+105EA1468:lI105|H105EA1538
+105EA1538:lI110|N
+105E9B4D8:lH105E9B538|H105E9B548
+105E9B538:lI47|H105E9B5A8
+105E9B5A8:lI85|H105E9B628
+105E9B628:lI115|H105E9B6B8
+105E9B6B8:lI101|H105E9B758
+105E9B758:lI114|H105E9B808
+105E9B808:lI115|H105E9B8C8
+105E9B8C8:lI47|H105E9B998
+105E9B998:lI110|H105E9BA78
+105E9BA78:lI105|H105E9BB68
+105E9BB68:lI99|H105E9BC68
+105E9BC68:lI104|H105E9BD78
+105E9BD78:lI111|H105E9BE98
+105E9BE98:lI108|H105E9BFC8
+105E9BFC8:lI97|H105E9C108
+105E9C108:lI115|H105E9C248
+105E9C248:lI99|H105E9C388
+105E9C388:lI97|H105E9C4C8
+105E9C4C8:lI114|H105E9C608
+105E9C608:lI108|H105E9C748
+105E9C748:lI115|H105E9C888
+105E9C888:lI111|H105E9C9C8
+105E9C9C8:lI110|H105E9CB08
+105E9CB08:lI47|H105E9CC48
+105E9CC48:lI86|H105E9CD88
+105E9CD88:lI83|H105E9CEC8
+105E9CEC8:lI32|H105E9D008
+105E9D008:lI67|H105E9D148
+105E9D148:lI111|H105E9D288
+105E9D288:lI100|H105E9D3C8
+105E9D3C8:lI101|H105E9D508
+105E9D508:lI47|H105E9D648
+105E9D648:lI65|H105E9D788
+105E9D788:lI100|H105E9D8C8
+105E9D8C8:lI118|H105E9DA08
+105E9DA08:lI101|H105E9DB48
+105E9DB48:lI110|H105E9DC88
+105E9DC88:lI116|H105E9DDC8
+105E9DDC8:lI79|H105E9DF08
+105E9DF08:lI102|H105E9E048
+105E9E048:lI67|H105E9E188
+105E9E188:lI111|H105E9E2C8
+105E9E2C8:lI100|H105E9E408
+105E9E408:lI101|H105E9E548
+105E9E548:lI47|H105E9E688
+105E9E688:lI97|H105E9E7C8
+105E9E7C8:lI111|H105E9E908
+105E9E908:lI99|H105E9EA48
+105E9EA48:lI50|H105E9EB88
+105E9EB88:lI48|H105E9ECC8
+105E9ECC8:lI50|H105E9EE08
+105E9EE08:lI51|H105E9EF48
+105E9EF48:lI47|H105E9F088
+105E9F088:lI98|H105E9F1C8
+105E9F1C8:lI117|H105E9F308
+105E9F308:lI105|H105E9F448
+105E9F448:lI108|H105E9F588
+105E9F588:lI100|H105E9F6B8
+105E9F6B8:lI47|H105E9F7E8
+105E9F7E8:lI100|H105E9F918
+105E9F918:lI101|H105E9FA48
+105E9FA48:lI118|H105E9FB78
+105E9FB78:lI47|H105E9FCA8
+105E9FCA8:lI101|H105E9FDD8
+105E9FDD8:lI114|H105E9FF08
+105E9FF08:lI108|H105EA0038
+105EA0038:lI97|H105EA0168
+105EA0168:lI110|H105EA0298
+105EA0298:lI103|H105EA03C8
+105EA03C8:lI47|H105EA04F8
+105EA04F8:lI103|H105EA0628
+105EA0628:lI108|H105EA0758
+105EA0758:lI105|H105EA0888
+105EA0888:lI110|H105EA09B8
+105EA09B8:lI116|H105EA0AE8
+105EA0AE8:lI47|H105EA0C18
+105EA0C18:lI101|H105EA0D48
+105EA0D48:lI98|H105EA0E78
+105EA0E78:lI105|H105EA0FA8
+105EA0FA8:lI110|N
+105E9B548:lH105E9B5B8|H105E9B5C8
+105E9B5B8:lI47|H105E9B638
+105E9B638:lI85|H105E9B6C8
+105E9B6C8:lI115|H105E9B768
+105E9B768:lI101|H105E9B818
+105E9B818:lI114|H105E9B8D8
+105E9B8D8:lI115|H105E9B9A8
+105E9B9A8:lI47|H105E9BA88
+105E9BA88:lI110|H105E9BB78
+105E9BB78:lI105|H105E9BC78
+105E9BC78:lI99|H105E9BD88
+105E9BD88:lI104|H105E9BEA8
+105E9BEA8:lI111|H105E9BFD8
+105E9BFD8:lI108|H105E9C118
+105E9C118:lI97|H105E9C258
+105E9C258:lI115|H105E9C398
+105E9C398:lI99|H105E9C4D8
+105E9C4D8:lI97|H105E9C618
+105E9C618:lI114|H105E9C758
+105E9C758:lI108|H105E9C898
+105E9C898:lI115|H105E9C9D8
+105E9C9D8:lI111|H105E9CB18
+105E9CB18:lI110|H105E9CC58
+105E9CC58:lI47|H105E9CD98
+105E9CD98:lI86|H105E9CED8
+105E9CED8:lI83|H105E9D018
+105E9D018:lI32|H105E9D158
+105E9D158:lI67|H105E9D298
+105E9D298:lI111|H105E9D3D8
+105E9D3D8:lI100|H105E9D518
+105E9D518:lI101|H105E9D658
+105E9D658:lI47|H105E9D798
+105E9D798:lI65|H105E9D8D8
+105E9D8D8:lI100|H105E9DA18
+105E9DA18:lI118|H105E9DB58
+105E9DB58:lI101|H105E9DC98
+105E9DC98:lI110|H105E9DDD8
+105E9DDD8:lI116|H105E9DF18
+105E9DF18:lI79|H105E9E058
+105E9E058:lI102|H105E9E198
+105E9E198:lI67|H105E9E2D8
+105E9E2D8:lI111|H105E9E418
+105E9E418:lI100|H105E9E558
+105E9E558:lI101|H105E9E698
+105E9E698:lI47|H105E9E7D8
+105E9E7D8:lI97|H105E9E918
+105E9E918:lI111|H105E9EA58
+105E9EA58:lI99|H105E9EB98
+105E9EB98:lI50|H105E9ECD8
+105E9ECD8:lI48|H105E9EE18
+105E9EE18:lI50|H105E9EF58
+105E9EF58:lI51|H105E9F098
+105E9F098:lI47|H105E9F1D8
+105E9F1D8:lI98|H105E9F318
+105E9F318:lI117|H105E9F458
+105E9F458:lI105|H105E9F598
+105E9F598:lI108|H105E9F6C8
+105E9F6C8:lI100|H105E9F7F8
+105E9F7F8:lI47|H105E9F928
+105E9F928:lI100|H105E9FA58
+105E9FA58:lI101|H105E9FB88
+105E9FB88:lI118|H105E9FCB8
+105E9FCB8:lI47|H105E9FDE8
+105E9FDE8:lI101|H105E9FF18
+105E9FF18:lI114|H105EA0048
+105EA0048:lI108|H105EA0178
+105EA0178:lI97|H105EA02A8
+105EA02A8:lI110|H105EA03D8
+105EA03D8:lI103|H105EA0508
+105EA0508:lI47|H105EA0638
+105EA0638:lI103|H105EA0768
+105EA0768:lI108|H105EA0898
+105EA0898:lI101|H105EA09C8
+105EA09C8:lI97|H105EA0AF8
+105EA0AF8:lI109|H105EA0C28
+105EA0C28:lI95|H105EA0D58
+105EA0D58:lI104|H105EA0E88
+105EA0E88:lI116|H105EA0FB8
+105EA0FB8:lI116|H105EA10C8
+105EA10C8:lI112|H105EA11C8
+105EA11C8:lI47|H105EA12B8
+105EA12B8:lI101|H105EA1398
+105EA1398:lI98|H105EA1478
+105EA1478:lI105|H105EA1548
+105EA1548:lI110|N
+105E9B5C8:lH105E9B648|H105E9B658
+105E9B648:lI47|H105E9B6D8
+105E9B6D8:lI85|H105E9B778
+105E9B778:lI115|H105E9B828
+105E9B828:lI101|H105E9B8E8
+105E9B8E8:lI114|H105E9B9B8
+105E9B9B8:lI115|H105E9BA98
+105E9BA98:lI47|H105E9BB88
+105E9BB88:lI110|H105E9BC88
+105E9BC88:lI105|H105E9BD98
+105E9BD98:lI99|H105E9BEB8
+105E9BEB8:lI104|H105E9BFE8
+105E9BFE8:lI111|H105E9C128
+105E9C128:lI108|H105E9C268
+105E9C268:lI97|H105E9C3A8
+105E9C3A8:lI115|H105E9C4E8
+105E9C4E8:lI99|H105E9C628
+105E9C628:lI97|H105E9C768
+105E9C768:lI114|H105E9C8A8
+105E9C8A8:lI108|H105E9C9E8
+105E9C9E8:lI115|H105E9CB28
+105E9CB28:lI111|H105E9CC68
+105E9CC68:lI110|H105E9CDA8
+105E9CDA8:lI47|H105E9CEE8
+105E9CEE8:lI86|H105E9D028
+105E9D028:lI83|H105E9D168
+105E9D168:lI32|H105E9D2A8
+105E9D2A8:lI67|H105E9D3E8
+105E9D3E8:lI111|H105E9D528
+105E9D528:lI100|H105E9D668
+105E9D668:lI101|H105E9D7A8
+105E9D7A8:lI47|H105E9D8E8
+105E9D8E8:lI65|H105E9DA28
+105E9DA28:lI100|H105E9DB68
+105E9DB68:lI118|H105E9DCA8
+105E9DCA8:lI101|H105E9DDE8
+105E9DDE8:lI110|H105E9DF28
+105E9DF28:lI116|H105E9E068
+105E9E068:lI79|H105E9E1A8
+105E9E1A8:lI102|H105E9E2E8
+105E9E2E8:lI67|H105E9E428
+105E9E428:lI111|H105E9E568
+105E9E568:lI100|H105E9E6A8
+105E9E6A8:lI101|H105E9E7E8
+105E9E7E8:lI47|H105E9E928
+105E9E928:lI97|H105E9EA68
+105E9EA68:lI111|H105E9EBA8
+105E9EBA8:lI99|H105E9ECE8
+105E9ECE8:lI50|H105E9EE28
+105E9EE28:lI48|H105E9EF68
+105E9EF68:lI50|H105E9F0A8
+105E9F0A8:lI51|H105E9F1E8
+105E9F1E8:lI47|H105E9F328
+105E9F328:lI98|H105E9F468
+105E9F468:lI117|H105E9F5A8
+105E9F5A8:lI105|H105E9F6D8
+105E9F6D8:lI108|H105E9F808
+105E9F808:lI100|H105E9F938
+105E9F938:lI47|H105E9FA68
+105E9FA68:lI100|H105E9FB98
+105E9FB98:lI101|H105E9FCC8
+105E9FCC8:lI118|H105E9FDF8
+105E9FDF8:lI47|H105E9FF28
+105E9FF28:lI101|H105EA0058
+105EA0058:lI114|H105EA0188
+105EA0188:lI108|H105EA02B8
+105EA02B8:lI97|H105EA03E8
+105EA03E8:lI110|H105EA0518
+105EA0518:lI103|H105EA0648
+105EA0648:lI47|H105EA0778
+105EA0778:lI103|H105EA08A8
+105EA08A8:lI97|H105EA09D8
+105EA09D8:lI112|H105EA0B08
+105EA0B08:lI47|H105EA0C38
+105EA0C38:lI101|H105EA0D68
+105EA0D68:lI98|H105EA0E98
+105EA0E98:lI105|H105EA0FC8
+105EA0FC8:lI110|N
+105E9B658:lH105E9B6E8|H105E9B6F8
+105E9B6E8:lI47|H105E9B788
+105E9B788:lI85|H105E9B838
+105E9B838:lI115|H105E9B8F8
+105E9B8F8:lI101|H105E9B9C8
+105E9B9C8:lI114|H105E9BAA8
+105E9BAA8:lI115|H105E9BB98
+105E9BB98:lI47|H105E9BC98
+105E9BC98:lI110|H105E9BDA8
+105E9BDA8:lI105|H105E9BEC8
+105E9BEC8:lI99|H105E9BFF8
+105E9BFF8:lI104|H105E9C138
+105E9C138:lI111|H105E9C278
+105E9C278:lI108|H105E9C3B8
+105E9C3B8:lI97|H105E9C4F8
+105E9C4F8:lI115|H105E9C638
+105E9C638:lI99|H105E9C778
+105E9C778:lI97|H105E9C8B8
+105E9C8B8:lI114|H105E9C9F8
+105E9C9F8:lI108|H105E9CB38
+105E9CB38:lI115|H105E9CC78
+105E9CC78:lI111|H105E9CDB8
+105E9CDB8:lI110|H105E9CEF8
+105E9CEF8:lI47|H105E9D038
+105E9D038:lI86|H105E9D178
+105E9D178:lI83|H105E9D2B8
+105E9D2B8:lI32|H105E9D3F8
+105E9D3F8:lI67|H105E9D538
+105E9D538:lI111|H105E9D678
+105E9D678:lI100|H105E9D7B8
+105E9D7B8:lI101|H105E9D8F8
+105E9D8F8:lI47|H105E9DA38
+105E9DA38:lI65|H105E9DB78
+105E9DB78:lI100|H105E9DCB8
+105E9DCB8:lI118|H105E9DDF8
+105E9DDF8:lI101|H105E9DF38
+105E9DF38:lI110|H105E9E078
+105E9E078:lI116|H105E9E1B8
+105E9E1B8:lI79|H105E9E2F8
+105E9E2F8:lI102|H105E9E438
+105E9E438:lI67|H105E9E578
+105E9E578:lI111|H105E9E6B8
+105E9E6B8:lI100|H105E9E7F8
+105E9E7F8:lI101|H105E9E938
+105E9E938:lI47|H105E9EA78
+105E9EA78:lI97|H105E9EBB8
+105E9EBB8:lI111|H105E9ECF8
+105E9ECF8:lI99|H105E9EE38
+105E9EE38:lI50|H105E9EF78
+105E9EF78:lI48|H105E9F0B8
+105E9F0B8:lI50|H105E9F1F8
+105E9F1F8:lI51|H105E9F338
+105E9F338:lI47|H105E9F478
+105E9F478:lI98|H105E9F5B8
+105E9F5B8:lI117|H105E9F6E8
+105E9F6E8:lI105|H105E9F818
+105E9F818:lI108|H105E9F948
+105E9F948:lI100|H105E9FA78
+105E9FA78:lI47|H105E9FBA8
+105E9FBA8:lI100|H105E9FCD8
+105E9FCD8:lI101|H105E9FE08
+105E9FE08:lI118|H105E9FF38
+105E9FF38:lI47|H105EA0068
+105EA0068:lI101|H105EA0198
+105EA0198:lI114|H105EA02C8
+105EA02C8:lI108|H105EA03F8
+105EA03F8:lI97|H105EA0528
+105EA0528:lI110|H105EA0658
+105EA0658:lI103|H105EA0788
+105EA0788:lI47|H105EA08B8
+105EA08B8:lI103|H105EA09E8
+105EA09E8:lI108|H105EA0B18
+105EA0B18:lI101|H105EA0C48
+105EA0C48:lI97|H105EA0D78
+105EA0D78:lI109|H105EA0EA8
+105EA0EA8:lI95|H105EA0FD8
+105EA0FD8:lI111|H105EA10D8
+105EA10D8:lI116|H105EA11D8
+105EA11D8:lI112|H105EA12C8
+105EA12C8:lI47|H105EA13A8
+105EA13A8:lI101|H105EA1488
+105EA1488:lI98|H105EA1558
+105EA1558:lI105|H105EA1608
+105EA1608:lI110|N
+105E9B6F8:lH105E9B798|H105E9B7A8
+105E9B798:lI47|H105E9B848
+105E9B848:lI85|H105E9B908
+105E9B908:lI115|H105E9B9D8
+105E9B9D8:lI101|H105E9BAB8
+105E9BAB8:lI114|H105E9BBA8
+105E9BBA8:lI115|H105E9BCA8
+105E9BCA8:lI47|H105E9BDB8
+105E9BDB8:lI110|H105E9BED8
+105E9BED8:lI105|H105E9C008
+105E9C008:lI99|H105E9C148
+105E9C148:lI104|H105E9C288
+105E9C288:lI111|H105E9C3C8
+105E9C3C8:lI108|H105E9C508
+105E9C508:lI97|H105E9C648
+105E9C648:lI115|H105E9C788
+105E9C788:lI99|H105E9C8C8
+105E9C8C8:lI97|H105E9CA08
+105E9CA08:lI114|H105E9CB48
+105E9CB48:lI108|H105E9CC88
+105E9CC88:lI115|H105E9CDC8
+105E9CDC8:lI111|H105E9CF08
+105E9CF08:lI110|H105E9D048
+105E9D048:lI47|H105E9D188
+105E9D188:lI86|H105E9D2C8
+105E9D2C8:lI83|H105E9D408
+105E9D408:lI32|H105E9D548
+105E9D548:lI67|H105E9D688
+105E9D688:lI111|H105E9D7C8
+105E9D7C8:lI100|H105E9D908
+105E9D908:lI101|H105E9DA48
+105E9DA48:lI47|H105E9DB88
+105E9DB88:lI65|H105E9DCC8
+105E9DCC8:lI100|H105E9DE08
+105E9DE08:lI118|H105E9DF48
+105E9DF48:lI101|H105E9E088
+105E9E088:lI110|H105E9E1C8
+105E9E1C8:lI116|H105E9E308
+105E9E308:lI79|H105E9E448
+105E9E448:lI102|H105E9E588
+105E9E588:lI67|H105E9E6C8
+105E9E6C8:lI111|H105E9E808
+105E9E808:lI100|H105E9E948
+105E9E948:lI101|H105E9EA88
+105E9EA88:lI47|H105E9EBC8
+105E9EBC8:lI97|H105E9ED08
+105E9ED08:lI111|H105E9EE48
+105E9EE48:lI99|H105E9EF88
+105E9EF88:lI50|H105E9F0C8
+105E9F0C8:lI48|H105E9F208
+105E9F208:lI50|H105E9F348
+105E9F348:lI51|H105E9F488
+105E9F488:lI47|H105E9F5C8
+105E9F5C8:lI98|H105E9F6F8
+105E9F6F8:lI117|H105E9F828
+105E9F828:lI105|H105E9F958
+105E9F958:lI108|H105E9FA88
+105E9FA88:lI100|H105E9FBB8
+105E9FBB8:lI47|H105E9FCE8
+105E9FCE8:lI100|H105E9FE18
+105E9FE18:lI101|H105E9FF48
+105E9FF48:lI118|H105EA0078
+105EA0078:lI47|H105EA01A8
+105EA01A8:lI101|H105EA02D8
+105EA02D8:lI114|H105EA0408
+105EA0408:lI108|H105EA0538
+105EA0538:lI97|H105EA0668
+105EA0668:lI110|H105EA0798
+105EA0798:lI103|H105EA08C8
+105EA08C8:lI47|H105EA09F8
+105EA09F8:lI103|H105EA0B28
+105EA0B28:lI108|H105EA0C58
+105EA0C58:lI101|H105EA0D88
+105EA0D88:lI97|H105EA0EB8
+105EA0EB8:lI109|H105EA0FE8
+105EA0FE8:lI95|H105EA10E8
+105EA10E8:lI99|H105EA11E8
+105EA11E8:lI111|H105EA12D8
+105EA12D8:lI109|H105EA13B8
+105EA13B8:lI109|H105EA1498
+105EA1498:lI117|H105EA1568
+105EA1568:lI110|H105EA1618
+105EA1618:lI105|H105EA16B8
+105EA16B8:lI116|H105EA1758
+105EA1758:lI121|H105EA17D8
+105EA17D8:lI95|H105EA1858
+105EA1858:lI99|H105EA18B8
+105EA18B8:lI111|H105EA1908
+105EA1908:lI108|H105EA1958
+105EA1958:lI111|H105EA1978
+105EA1978:lI117|H105EA1998
+105EA1998:lI114|H105EA19B8
+105EA19B8:lI47|H105EA19D8
+105EA19D8:lI101|H105EA19E8
+105EA19E8:lI98|H105EA19F8
+105EA19F8:lI105|H105EA1A08
+105EA1A08:lI110|N
+105E9B7A8:lH105E9B858|H105E9B868
+105E9B858:lI47|H105E9B918
+105E9B918:lI85|H105E9B9E8
+105E9B9E8:lI115|H105E9BAC8
+105E9BAC8:lI101|H105E9BBB8
+105E9BBB8:lI114|H105E9BCB8
+105E9BCB8:lI115|H105E9BDC8
+105E9BDC8:lI47|H105E9BEE8
+105E9BEE8:lI110|H105E9C018
+105E9C018:lI105|H105E9C158
+105E9C158:lI99|H105E9C298
+105E9C298:lI104|H105E9C3D8
+105E9C3D8:lI111|H105E9C518
+105E9C518:lI108|H105E9C658
+105E9C658:lI97|H105E9C798
+105E9C798:lI115|H105E9C8D8
+105E9C8D8:lI99|H105E9CA18
+105E9CA18:lI97|H105E9CB58
+105E9CB58:lI114|H105E9CC98
+105E9CC98:lI108|H105E9CDD8
+105E9CDD8:lI115|H105E9CF18
+105E9CF18:lI111|H105E9D058
+105E9D058:lI110|H105E9D198
+105E9D198:lI47|H105E9D2D8
+105E9D2D8:lI86|H105E9D418
+105E9D418:lI83|H105E9D558
+105E9D558:lI32|H105E9D698
+105E9D698:lI67|H105E9D7D8
+105E9D7D8:lI111|H105E9D918
+105E9D918:lI100|H105E9DA58
+105E9DA58:lI101|H105E9DB98
+105E9DB98:lI47|H105E9DCD8
+105E9DCD8:lI65|H105E9DE18
+105E9DE18:lI100|H105E9DF58
+105E9DF58:lI118|H105E9E098
+105E9E098:lI101|H105E9E1D8
+105E9E1D8:lI110|H105E9E318
+105E9E318:lI116|H105E9E458
+105E9E458:lI79|H105E9E598
+105E9E598:lI102|H105E9E6D8
+105E9E6D8:lI67|H105E9E818
+105E9E818:lI111|H105E9E958
+105E9E958:lI100|H105E9EA98
+105E9EA98:lI101|H105E9EBD8
+105E9EBD8:lI47|H105E9ED18
+105E9ED18:lI97|H105E9EE58
+105E9EE58:lI111|H105E9EF98
+105E9EF98:lI99|H105E9F0D8
+105E9F0D8:lI50|H105E9F218
+105E9F218:lI48|H105E9F358
+105E9F358:lI50|H105E9F498
+105E9F498:lI51|H105E9F5D8
+105E9F5D8:lI47|H105E9F708
+105E9F708:lI98|H105E9F838
+105E9F838:lI117|H105E9F968
+105E9F968:lI105|H105E9FA98
+105E9FA98:lI108|H105E9FBC8
+105E9FBC8:lI100|H105E9FCF8
+105E9FCF8:lI47|H105E9FE28
+105E9FE28:lI100|H105E9FF58
+105E9FF58:lI101|H105EA0088
+105EA0088:lI118|H105EA01B8
+105EA01B8:lI47|H105EA02E8
+105EA02E8:lI101|H105EA0418
+105EA0418:lI114|H105EA0548
+105EA0548:lI108|H105EA0678
+105EA0678:lI97|H105EA07A8
+105EA07A8:lI110|H105EA08D8
+105EA08D8:lI103|H105EA0A08
+105EA0A08:lI47|H105EA0B38
+105EA0B38:lI103|H105EA0C68
+105EA0C68:lI108|H105EA0D98
+105EA0D98:lI101|H105EA0EC8
+105EA0EC8:lI97|H105EA0FF8
+105EA0FF8:lI109|H105EA10F8
+105EA10F8:lI95|H105EA11F8
+105EA11F8:lI104|H105EA12E8
+105EA12E8:lI116|H105EA13C8
+105EA13C8:lI116|H105EA14A8
+105EA14A8:lI112|H105EA1578
+105EA1578:lI99|H105EA1628
+105EA1628:lI47|H105EA16C8
+105EA16C8:lI101|H105EA1768
+105EA1768:lI98|H105EA17E8
+105EA17E8:lI105|H105EA1868
+105EA1868:lI110|N
+105E9B868:lH105E9B928|H105E9B938
+105E9B928:lI47|H105E9B9F8
+105E9B9F8:lI85|H105E9BAD8
+105E9BAD8:lI115|H105E9BBC8
+105E9BBC8:lI101|H105E9BCC8
+105E9BCC8:lI114|H105E9BDD8
+105E9BDD8:lI115|H105E9BEF8
+105E9BEF8:lI47|H105E9C028
+105E9C028:lI110|H105E9C168
+105E9C168:lI105|H105E9C2A8
+105E9C2A8:lI99|H105E9C3E8
+105E9C3E8:lI104|H105E9C528
+105E9C528:lI111|H105E9C668
+105E9C668:lI108|H105E9C7A8
+105E9C7A8:lI97|H105E9C8E8
+105E9C8E8:lI115|H105E9CA28
+105E9CA28:lI99|H105E9CB68
+105E9CB68:lI97|H105E9CCA8
+105E9CCA8:lI114|H105E9CDE8
+105E9CDE8:lI108|H105E9CF28
+105E9CF28:lI115|H105E9D068
+105E9D068:lI111|H105E9D1A8
+105E9D1A8:lI110|H105E9D2E8
+105E9D2E8:lI47|H105E9D428
+105E9D428:lI86|H105E9D568
+105E9D568:lI83|H105E9D6A8
+105E9D6A8:lI32|H105E9D7E8
+105E9D7E8:lI67|H105E9D928
+105E9D928:lI111|H105E9DA68
+105E9DA68:lI100|H105E9DBA8
+105E9DBA8:lI101|H105E9DCE8
+105E9DCE8:lI47|H105E9DE28
+105E9DE28:lI65|H105E9DF68
+105E9DF68:lI100|H105E9E0A8
+105E9E0A8:lI118|H105E9E1E8
+105E9E1E8:lI101|H105E9E328
+105E9E328:lI110|H105E9E468
+105E9E468:lI116|H105E9E5A8
+105E9E5A8:lI79|H105E9E6E8
+105E9E6E8:lI102|H105E9E828
+105E9E828:lI67|H105E9E968
+105E9E968:lI111|H105E9EAA8
+105E9EAA8:lI100|H105E9EBE8
+105E9EBE8:lI101|H105E9ED28
+105E9ED28:lI47|H105E9EE68
+105E9EE68:lI97|H105E9EFA8
+105E9EFA8:lI111|H105E9F0E8
+105E9F0E8:lI99|H105E9F228
+105E9F228:lI50|H105E9F368
+105E9F368:lI48|H105E9F4A8
+105E9F4A8:lI50|H105E9F5E8
+105E9F5E8:lI51|H105E9F718
+105E9F718:lI47|H105E9F848
+105E9F848:lI98|H105E9F978
+105E9F978:lI117|H105E9FAA8
+105E9FAA8:lI105|H105E9FBD8
+105E9FBD8:lI108|H105E9FD08
+105E9FD08:lI100|H105E9FE38
+105E9FE38:lI47|H105E9FF68
+105E9FF68:lI100|H105EA0098
+105EA0098:lI101|H105EA01C8
+105EA01C8:lI118|H105EA02F8
+105EA02F8:lI47|H105EA0428
+105EA0428:lI101|H105EA0558
+105EA0558:lI114|H105EA0688
+105EA0688:lI108|H105EA07B8
+105EA07B8:lI97|H105EA08E8
+105EA08E8:lI110|H105EA0A18
+105EA0A18:lI103|H105EA0B48
+105EA0B48:lI47|H105EA0C78
+105EA0C78:lI103|H105EA0DA8
+105EA0DA8:lI108|H105EA0ED8
+105EA0ED8:lI101|H105EA1008
+105EA1008:lI97|H105EA1108
+105EA1108:lI109|H105EA1208
+105EA1208:lI95|H105EA12F8
+105EA12F8:lI115|H105EA13D8
+105EA13D8:lI116|H105EA14B8
+105EA14B8:lI100|H105EA1588
+105EA1588:lI108|H105EA1638
+105EA1638:lI105|H105EA16D8
+105EA16D8:lI98|H105EA1778
+105EA1778:lI47|H105EA17F8
+105EA17F8:lI101|H105EA1878
+105EA1878:lI98|H105EA18C8
+105EA18C8:lI105|H105EA1918
+105EA1918:lI110|N
+105E9B938:lH105E9BA08|H105E9BA18
+105E9BA08:lI47|H105E9BAE8
+105E9BAE8:lI85|H105E9BBD8
+105E9BBD8:lI115|H105E9BCD8
+105E9BCD8:lI101|H105E9BDE8
+105E9BDE8:lI114|H105E9BF08
+105E9BF08:lI115|H105E9C038
+105E9C038:lI47|H105E9C178
+105E9C178:lI110|H105E9C2B8
+105E9C2B8:lI105|H105E9C3F8
+105E9C3F8:lI99|H105E9C538
+105E9C538:lI104|H105E9C678
+105E9C678:lI111|H105E9C7B8
+105E9C7B8:lI108|H105E9C8F8
+105E9C8F8:lI97|H105E9CA38
+105E9CA38:lI115|H105E9CB78
+105E9CB78:lI99|H105E9CCB8
+105E9CCB8:lI97|H105E9CDF8
+105E9CDF8:lI114|H105E9CF38
+105E9CF38:lI108|H105E9D078
+105E9D078:lI115|H105E9D1B8
+105E9D1B8:lI111|H105E9D2F8
+105E9D2F8:lI110|H105E9D438
+105E9D438:lI47|H105E9D578
+105E9D578:lI86|H105E9D6B8
+105E9D6B8:lI83|H105E9D7F8
+105E9D7F8:lI32|H105E9D938
+105E9D938:lI67|H105E9DA78
+105E9DA78:lI111|H105E9DBB8
+105E9DBB8:lI100|H105E9DCF8
+105E9DCF8:lI101|H105E9DE38
+105E9DE38:lI47|H105E9DF78
+105E9DF78:lI65|H105E9E0B8
+105E9E0B8:lI100|H105E9E1F8
+105E9E1F8:lI118|H105E9E338
+105E9E338:lI101|H105E9E478
+105E9E478:lI110|H105E9E5B8
+105E9E5B8:lI116|H105E9E6F8
+105E9E6F8:lI79|H105E9E838
+105E9E838:lI102|H105E9E978
+105E9E978:lI67|H105E9EAB8
+105E9EAB8:lI111|H105E9EBF8
+105E9EBF8:lI100|H105E9ED38
+105E9ED38:lI101|H105E9EE78
+105E9EE78:lI47|H105E9EFB8
+105E9EFB8:lI97|H105E9F0F8
+105E9F0F8:lI111|H105E9F238
+105E9F238:lI99|H105E9F378
+105E9F378:lI50|H105E9F4B8
+105E9F4B8:lI48|H105E9F5F8
+105E9F5F8:lI50|H105E9F728
+105E9F728:lI51|H105E9F858
+105E9F858:lI47|H105E9F988
+105E9F988:lI98|H105E9FAB8
+105E9FAB8:lI117|H105E9FBE8
+105E9FBE8:lI105|H105E9FD18
+105E9FD18:lI108|H105E9FE48
+105E9FE48:lI100|H105E9FF78
+105E9FF78:lI47|H105EA00A8
+105EA00A8:lI100|H105EA01D8
+105EA01D8:lI101|H105EA0308
+105EA0308:lI118|H105EA0438
+105EA0438:lI47|H105EA0568
+105EA0568:lI101|H105EA0698
+105EA0698:lI114|H105EA07C8
+105EA07C8:lI108|H105EA08F8
+105EA08F8:lI97|H105EA0A28
+105EA0A28:lI110|H105EA0B58
+105EA0B58:lI103|H105EA0C88
+105EA0C88:lI47|H105EA0DB8
+105EA0DB8:lI103|H105EA0EE8
+105EA0EE8:lI108|H105EA1018
+105EA1018:lI101|H105EA1118
+105EA1118:lI101|H105EA1218
+105EA1218:lI117|H105EA1308
+105EA1308:lI110|H105EA13E8
+105EA13E8:lI105|H105EA14C8
+105EA14C8:lI116|H105EA1598
+105EA1598:lI47|H105EA1648
+105EA1648:lI101|H105EA16E8
+105EA16E8:lI98|H105EA1788
+105EA1788:lI105|H105EA1808
+105EA1808:lI110|N
+105E9BA18:lH105E9BAF8|H105E9BB08
+105E9BAF8:lI47|H105E9BBE8
+105E9BBE8:lI85|H105E9BCE8
+105E9BCE8:lI115|H105E9BDF8
+105E9BDF8:lI101|H105E9BF18
+105E9BF18:lI114|H105E9C048
+105E9C048:lI115|H105E9C188
+105E9C188:lI47|H105E9C2C8
+105E9C2C8:lI110|H105E9C408
+105E9C408:lI105|H105E9C548
+105E9C548:lI99|H105E9C688
+105E9C688:lI104|H105E9C7C8
+105E9C7C8:lI111|H105E9C908
+105E9C908:lI108|H105E9CA48
+105E9CA48:lI97|H105E9CB88
+105E9CB88:lI115|H105E9CCC8
+105E9CCC8:lI99|H105E9CE08
+105E9CE08:lI97|H105E9CF48
+105E9CF48:lI114|H105E9D088
+105E9D088:lI108|H105E9D1C8
+105E9D1C8:lI115|H105E9D308
+105E9D308:lI111|H105E9D448
+105E9D448:lI110|H105E9D588
+105E9D588:lI47|H105E9D6C8
+105E9D6C8:lI86|H105E9D808
+105E9D808:lI83|H105E9D948
+105E9D948:lI32|H105E9DA88
+105E9DA88:lI67|H105E9DBC8
+105E9DBC8:lI111|H105E9DD08
+105E9DD08:lI100|H105E9DE48
+105E9DE48:lI101|H105E9DF88
+105E9DF88:lI47|H105E9E0C8
+105E9E0C8:lI65|H105E9E208
+105E9E208:lI100|H105E9E348
+105E9E348:lI118|H105E9E488
+105E9E488:lI101|H105E9E5C8
+105E9E5C8:lI110|H105E9E708
+105E9E708:lI116|H105E9E848
+105E9E848:lI79|H105E9E988
+105E9E988:lI102|H105E9EAC8
+105E9EAC8:lI67|H105E9EC08
+105E9EC08:lI111|H105E9ED48
+105E9ED48:lI100|H105E9EE88
+105E9EE88:lI101|H105E9EFC8
+105E9EFC8:lI47|H105E9F108
+105E9F108:lI97|H105E9F248
+105E9F248:lI111|H105E9F388
+105E9F388:lI99|H105E9F4C8
+105E9F4C8:lI50|H105E9F608
+105E9F608:lI48|H105E9F738
+105E9F738:lI50|H105E9F868
+105E9F868:lI51|H105E9F998
+105E9F998:lI47|H105E9FAC8
+105E9FAC8:lI98|H105E9FBF8
+105E9FBF8:lI117|H105E9FD28
+105E9FD28:lI105|H105E9FE58
+105E9FE58:lI108|H105E9FF88
+105E9FF88:lI100|H105EA00B8
+105EA00B8:lI47|H105EA01E8
+105EA01E8:lI100|H105EA0318
+105EA0318:lI101|H105EA0448
+105EA0448:lI118|H105EA0578
+105EA0578:lI47|H105EA06A8
+105EA06A8:lI101|H105EA07D8
+105EA07D8:lI114|H105EA0908
+105EA0908:lI108|H105EA0A38
+105EA0A38:lI97|H105EA0B68
+105EA0B68:lI110|H105EA0C98
+105EA0C98:lI103|H105EA0DC8
+105EA0DC8:lI47|H105EA0EF8
+105EA0EF8:lI103|H105EA1028
+105EA1028:lI108|H105EA1128
+105EA1128:lI101|H105EA1228
+105EA1228:lI97|H105EA1318
+105EA1318:lI109|H105EA13F8
+105EA13F8:lI46|H105EA14D8
+105EA14D8:lI108|H105EA15A8
+105EA15A8:lI111|H105EA1658
+105EA1658:lI99|H105EA16F8
+105EA16F8:lI107|H105EA1798
+105EA1798:lI47|H105EA1818
+105EA1818:lI101|H105EA1888
+105EA1888:lI98|H105EA18D8
+105EA18D8:lI105|H105EA1928
+105EA1928:lI110|N
+105E9BB08:lH105E9BBF8|H105E9BC08
+105E9BBF8:lI47|H105E9BCF8
+105E9BCF8:lI85|H105E9BE08
+105E9BE08:lI115|H105E9BF28
+105E9BF28:lI101|H105E9C058
+105E9C058:lI114|H105E9C198
+105E9C198:lI115|H105E9C2D8
+105E9C2D8:lI47|H105E9C418
+105E9C418:lI110|H105E9C558
+105E9C558:lI105|H105E9C698
+105E9C698:lI99|H105E9C7D8
+105E9C7D8:lI104|H105E9C918
+105E9C918:lI111|H105E9CA58
+105E9CA58:lI108|H105E9CB98
+105E9CB98:lI97|H105E9CCD8
+105E9CCD8:lI115|H105E9CE18
+105E9CE18:lI99|H105E9CF58
+105E9CF58:lI97|H105E9D098
+105E9D098:lI114|H105E9D1D8
+105E9D1D8:lI108|H105E9D318
+105E9D318:lI115|H105E9D458
+105E9D458:lI111|H105E9D598
+105E9D598:lI110|H105E9D6D8
+105E9D6D8:lI47|H105E9D818
+105E9D818:lI86|H105E9D958
+105E9D958:lI83|H105E9DA98
+105E9DA98:lI32|H105E9DBD8
+105E9DBD8:lI67|H105E9DD18
+105E9DD18:lI111|H105E9DE58
+105E9DE58:lI100|H105E9DF98
+105E9DF98:lI101|H105E9E0D8
+105E9E0D8:lI47|H105E9E218
+105E9E218:lI65|H105E9E358
+105E9E358:lI100|H105E9E498
+105E9E498:lI118|H105E9E5D8
+105E9E5D8:lI101|H105E9E718
+105E9E718:lI110|H105E9E858
+105E9E858:lI116|H105E9E998
+105E9E998:lI79|H105E9EAD8
+105E9EAD8:lI102|H105E9EC18
+105E9EC18:lI67|H105E9ED58
+105E9ED58:lI111|H105E9EE98
+105E9EE98:lI100|H105E9EFD8
+105E9EFD8:lI101|H105E9F118
+105E9F118:lI47|H105E9F258
+105E9F258:lI97|H105E9F398
+105E9F398:lI111|H105E9F4D8
+105E9F4D8:lI99|H105E9F618
+105E9F618:lI50|H105E9F748
+105E9F748:lI48|H105E9F878
+105E9F878:lI50|H105E9F9A8
+105E9F9A8:lI51|H105E9FAD8
+105E9FAD8:lI47|H105E9FC08
+105E9FC08:lI98|H105E9FD38
+105E9FD38:lI117|H105E9FE68
+105E9FE68:lI105|H105E9FF98
+105E9FF98:lI108|H105EA00C8
+105EA00C8:lI100|H105EA01F8
+105EA01F8:lI47|H105EA0328
+105EA0328:lI100|H105EA0458
+105EA0458:lI101|H105EA0588
+105EA0588:lI118|H105EA06B8
+105EA06B8:lI47|H105EA07E8
+105EA07E8:lI101|H105EA0918
+105EA0918:lI114|H105EA0A48
+105EA0A48:lI108|H105EA0B78
+105EA0B78:lI97|H105EA0CA8
+105EA0CA8:lI110|H105EA0DD8
+105EA0DD8:lI103|H105EA0F08
+105EA0F08:lI47|H105EA1038
+105EA1038:lI115|H105EA1138
+105EA1138:lI110|H105EA1238
+105EA1238:lI97|H105EA1328
+105EA1328:lI103|H105EA1408
+105EA1408:lI47|H105EA14E8
+105EA14E8:lI101|H105EA15B8
+105EA15B8:lI98|H105EA1668
+105EA1668:lI105|H105EA1708
+105EA1708:lI110|N
+105E9BC08:lH105E9BD08|H105E9BD18
+105E9BD08:lI47|H105E9BE18
+105E9BE18:lI85|H105E9BF38
+105E9BF38:lI115|H105E9C068
+105E9C068:lI101|H105E9C1A8
+105E9C1A8:lI114|H105E9C2E8
+105E9C2E8:lI115|H105E9C428
+105E9C428:lI47|H105E9C568
+105E9C568:lI110|H105E9C6A8
+105E9C6A8:lI105|H105E9C7E8
+105E9C7E8:lI99|H105E9C928
+105E9C928:lI104|H105E9CA68
+105E9CA68:lI111|H105E9CBA8
+105E9CBA8:lI108|H105E9CCE8
+105E9CCE8:lI97|H105E9CE28
+105E9CE28:lI115|H105E9CF68
+105E9CF68:lI99|H105E9D0A8
+105E9D0A8:lI97|H105E9D1E8
+105E9D1E8:lI114|H105E9D328
+105E9D328:lI108|H105E9D468
+105E9D468:lI115|H105E9D5A8
+105E9D5A8:lI111|H105E9D6E8
+105E9D6E8:lI110|H105E9D828
+105E9D828:lI47|H105E9D968
+105E9D968:lI86|H105E9DAA8
+105E9DAA8:lI83|H105E9DBE8
+105E9DBE8:lI32|H105E9DD28
+105E9DD28:lI67|H105E9DE68
+105E9DE68:lI111|H105E9DFA8
+105E9DFA8:lI100|H105E9E0E8
+105E9E0E8:lI101|H105E9E228
+105E9E228:lI47|H105E9E368
+105E9E368:lI65|H105E9E4A8
+105E9E4A8:lI100|H105E9E5E8
+105E9E5E8:lI118|H105E9E728
+105E9E728:lI101|H105E9E868
+105E9E868:lI110|H105E9E9A8
+105E9E9A8:lI116|H105E9EAE8
+105E9EAE8:lI79|H105E9EC28
+105E9EC28:lI102|H105E9ED68
+105E9ED68:lI67|H105E9EEA8
+105E9EEA8:lI111|H105E9EFE8
+105E9EFE8:lI100|H105E9F128
+105E9F128:lI101|H105E9F268
+105E9F268:lI47|H105E9F3A8
+105E9F3A8:lI97|H105E9F4E8
+105E9F4E8:lI111|H105E9F628
+105E9F628:lI99|H105E9F758
+105E9F758:lI50|H105E9F888
+105E9F888:lI48|H105E9F9B8
+105E9F9B8:lI50|H105E9FAE8
+105E9FAE8:lI51|H105E9FC18
+105E9FC18:lI47|H105E9FD48
+105E9FD48:lI98|H105E9FE78
+105E9FE78:lI117|H105E9FFA8
+105E9FFA8:lI105|H105EA00D8
+105EA00D8:lI108|H105EA0208
+105EA0208:lI100|H105EA0338
+105EA0338:lI47|H105EA0468
+105EA0468:lI100|H105EA0598
+105EA0598:lI101|H105EA06C8
+105EA06C8:lI118|H105EA07F8
+105EA07F8:lI47|H105EA0928
+105EA0928:lI101|H105EA0A58
+105EA0A58:lI114|H105EA0B88
+105EA0B88:lI108|H105EA0CB8
+105EA0CB8:lI97|H105EA0DE8
+105EA0DE8:lI110|H105EA0F18
+105EA0F18:lI103|H105EA1048
+105EA1048:lI47|H105EA1148
+105EA1148:lI116|H105EA1248
+105EA1248:lI111|H105EA1338
+105EA1338:lI109|H105EA1418
+105EA1418:lI47|H105EA14F8
+105EA14F8:lI101|H105EA15C8
+105EA15C8:lI98|H105EA1678
+105EA1678:lI105|H105EA1718
+105EA1718:lI110|N
+105E9BD18:lH105E9BE28|H105E9BE38
+105E9BE28:lI47|H105E9BF48
+105E9BF48:lI85|H105E9C078
+105E9C078:lI115|H105E9C1B8
+105E9C1B8:lI101|H105E9C2F8
+105E9C2F8:lI114|H105E9C438
+105E9C438:lI115|H105E9C578
+105E9C578:lI47|H105E9C6B8
+105E9C6B8:lI110|H105E9C7F8
+105E9C7F8:lI105|H105E9C938
+105E9C938:lI99|H105E9CA78
+105E9CA78:lI104|H105E9CBB8
+105E9CBB8:lI111|H105E9CCF8
+105E9CCF8:lI108|H105E9CE38
+105E9CE38:lI97|H105E9CF78
+105E9CF78:lI115|H105E9D0B8
+105E9D0B8:lI99|H105E9D1F8
+105E9D1F8:lI97|H105E9D338
+105E9D338:lI114|H105E9D478
+105E9D478:lI108|H105E9D5B8
+105E9D5B8:lI115|H105E9D6F8
+105E9D6F8:lI111|H105E9D838
+105E9D838:lI110|H105E9D978
+105E9D978:lI47|H105E9DAB8
+105E9DAB8:lI86|H105E9DBF8
+105E9DBF8:lI83|H105E9DD38
+105E9DD38:lI32|H105E9DE78
+105E9DE78:lI67|H105E9DFB8
+105E9DFB8:lI111|H105E9E0F8
+105E9E0F8:lI100|H105E9E238
+105E9E238:lI101|H105E9E378
+105E9E378:lI47|H105E9E4B8
+105E9E4B8:lI65|H105E9E5F8
+105E9E5F8:lI100|H105E9E738
+105E9E738:lI118|H105E9E878
+105E9E878:lI101|H105E9E9B8
+105E9E9B8:lI110|H105E9EAF8
+105E9EAF8:lI116|H105E9EC38
+105E9EC38:lI79|H105E9ED78
+105E9ED78:lI102|H105E9EEB8
+105E9EEB8:lI67|H105E9EFF8
+105E9EFF8:lI111|H105E9F138
+105E9F138:lI100|H105E9F278
+105E9F278:lI101|H105E9F3B8
+105E9F3B8:lI47|H105E9F4F8
+105E9F4F8:lI97|H105E9F638
+105E9F638:lI111|H105E9F768
+105E9F768:lI99|H105E9F898
+105E9F898:lI50|H105E9F9C8
+105E9F9C8:lI48|H105E9FAF8
+105E9FAF8:lI50|H105E9FC28
+105E9FC28:lI51|H105E9FD58
+105E9FD58:lI47|H105E9FE88
+105E9FE88:lI98|H105E9FFB8
+105E9FFB8:lI117|H105EA00E8
+105EA00E8:lI105|H105EA0218
+105EA0218:lI108|H105EA0348
+105EA0348:lI100|H105EA0478
+105EA0478:lI47|H105EA05A8
+105EA05A8:lI100|H105EA06D8
+105EA06D8:lI101|H105EA0808
+105EA0808:lI118|H105EA0938
+105EA0938:lI47|H105EA0A68
+105EA0A68:lI101|H105EA0B98
+105EA0B98:lI114|H105EA0CC8
+105EA0CC8:lI108|H105EA0DF8
+105EA0DF8:lI97|H105EA0F28
+105EA0F28:lI110|H105EA1058
+105EA1058:lI103|H105EA1158
+105EA1158:lI47|H105EA1258
+105EA1258:lI97|H105EA1348
+105EA1348:lI111|H105EA1428
+105EA1428:lI99|H105EA1508
+105EA1508:lI50|H105EA15D8
+105EA15D8:lI48|H105EA1688
+105EA1688:lI50|H105EA1728
+105EA1728:lI51|H105EA17A8
+105EA17A8:lI47|H105EA1828
+105EA1828:lI101|H105EA1898
+105EA1898:lI98|H105EA18E8
+105EA18E8:lI105|H105EA1938
+105EA1938:lI110|N
+105E9BE38:lH105E9BF58|H105E9BF68
+105E9BF58:lI47|H105E9C088
+105E9C088:lI85|H105E9C1C8
+105E9C1C8:lI115|H105E9C308
+105E9C308:lI101|H105E9C448
+105E9C448:lI114|H105E9C588
+105E9C588:lI115|H105E9C6C8
+105E9C6C8:lI47|H105E9C808
+105E9C808:lI110|H105E9C948
+105E9C948:lI105|H105E9CA88
+105E9CA88:lI99|H105E9CBC8
+105E9CBC8:lI104|H105E9CD08
+105E9CD08:lI111|H105E9CE48
+105E9CE48:lI108|H105E9CF88
+105E9CF88:lI97|H105E9D0C8
+105E9D0C8:lI115|H105E9D208
+105E9D208:lI99|H105E9D348
+105E9D348:lI97|H105E9D488
+105E9D488:lI114|H105E9D5C8
+105E9D5C8:lI108|H105E9D708
+105E9D708:lI115|H105E9D848
+105E9D848:lI111|H105E9D988
+105E9D988:lI110|H105E9DAC8
+105E9DAC8:lI47|H105E9DC08
+105E9DC08:lI86|H105E9DD48
+105E9DD48:lI83|H105E9DE88
+105E9DE88:lI32|H105E9DFC8
+105E9DFC8:lI67|H105E9E108
+105E9E108:lI111|H105E9E248
+105E9E248:lI100|H105E9E388
+105E9E388:lI101|H105E9E4C8
+105E9E4C8:lI47|H105E9E608
+105E9E608:lI65|H105E9E748
+105E9E748:lI100|H105E9E888
+105E9E888:lI118|H105E9E9C8
+105E9E9C8:lI101|H105E9EB08
+105E9EB08:lI110|H105E9EC48
+105E9EC48:lI116|H105E9ED88
+105E9ED88:lI79|H105E9EEC8
+105E9EEC8:lI102|H105E9F008
+105E9F008:lI67|H105E9F148
+105E9F148:lI111|H105E9F288
+105E9F288:lI100|H105E9F3C8
+105E9F3C8:lI101|H105E9F508
+105E9F508:lI47|H105E9F648
+105E9F648:lI97|H105E9F778
+105E9F778:lI111|H105E9F8A8
+105E9F8A8:lI99|H105E9F9D8
+105E9F9D8:lI50|H105E9FB08
+105E9FB08:lI48|H105E9FC38
+105E9FC38:lI50|H105E9FD68
+105E9FD68:lI51|H105E9FE98
+105E9FE98:lI47|H105E9FFC8
+105E9FFC8:lI98|H105EA00F8
+105EA00F8:lI117|H105EA0228
+105EA0228:lI105|H105EA0358
+105EA0358:lI108|H105EA0488
+105EA0488:lI100|H105EA05B8
+105EA05B8:lI47|H105EA06E8
+105EA06E8:lI100|H105EA0818
+105EA0818:lI101|H105EA0948
+105EA0948:lI118|H105EA0A78
+105EA0A78:lI47|H105EA0BA8
+105EA0BA8:lI101|H105EA0CD8
+105EA0CD8:lI114|H105EA0E08
+105EA0E08:lI108|H105EA0F38
+105EA0F38:lI97|H105EA1068
+105EA1068:lI110|H105EA1168
+105EA1168:lI103|H105EA1268
+105EA1268:lI47|H105EA1358
+105EA1358:lI115|H105EA1438
+105EA1438:lI105|H105EA1518
+105EA1518:lI109|H105EA15E8
+105EA15E8:lI112|H105EA1698
+105EA1698:lI108|H105EA1738
+105EA1738:lI105|H105EA17B8
+105EA17B8:lI102|H105EA1838
+105EA1838:lI105|H105EA18A8
+105EA18A8:lI108|H105EA18F8
+105EA18F8:lI101|H105EA1948
+105EA1948:lI47|H105EA1968
+105EA1968:lI101|H105EA1988
+105EA1988:lI98|H105EA19A8
+105EA19A8:lI105|H105EA19C8
+105EA19C8:lI110|N
+105E9BF68:lH105E9C098|H105E9C0A8
+105E9C098:lI47|H105E9C1D8
+105E9C1D8:lI111|H105E9C318
+105E9C318:lI112|H105E9C458
+105E9C458:lI116|H105E9C598
+105E9C598:lI47|H105E9C6D8
+105E9C6D8:lI104|H105E9C818
+105E9C818:lI111|H105E9C958
+105E9C958:lI109|H105E9CA98
+105E9CA98:lI101|H105E9CBD8
+105E9CBD8:lI98|H105E9CD18
+105E9CD18:lI114|H105E9CE58
+105E9CE58:lI101|H105E9CF98
+105E9CF98:lI119|H105E9D0D8
+105E9D0D8:lI47|H105E9D218
+105E9D218:lI67|H105E9D358
+105E9D358:lI101|H105E9D498
+105E9D498:lI108|H105E9D5D8
+105E9D5D8:lI108|H105E9D718
+105E9D718:lI97|H105E9D858
+105E9D858:lI114|H105E9D998
+105E9D998:lI47|H105E9DAD8
+105E9DAD8:lI101|H105E9DC18
+105E9DC18:lI114|H105E9DD58
+105E9DD58:lI108|H105E9DE98
+105E9DE98:lI97|H105E9DFD8
+105E9DFD8:lI110|H105E9E118
+105E9E118:lI103|H105E9E258
+105E9E258:lI47|H105E9E398
+105E9E398:lI50|H105E9E4D8
+105E9E4D8:lI54|H105E9E618
+105E9E618:lI46|H105E9E758
+105E9E758:lI48|H105E9E898
+105E9E898:lI46|H105E9E9D8
+105E9E9D8:lI50|H105E9EB18
+105E9EB18:lI47|H105E9EC58
+105E9EC58:lI108|H105E9ED98
+105E9ED98:lI105|H105E9EED8
+105E9EED8:lI98|H105E9F018
+105E9F018:lI47|H105E9F158
+105E9F158:lI101|H105E9F298
+105E9F298:lI114|H105E9F3D8
+105E9F3D8:lI108|H105E9F518
+105E9F518:lI97|H105E9F658
+105E9F658:lI110|H105E9F788
+105E9F788:lI103|H105E9F8B8
+105E9F8B8:lI47|H105E9F9E8
+105E9F9E8:lI108|H105E9FB18
+105E9FB18:lI105|H105E9FC48
+105E9FC48:lI98|H105E9FD78
+105E9FD78:lI47|H105E9FEA8
+105E9FEA8:lI107|H105E9FFD8
+105E9FFD8:lI101|H105EA0108
+105EA0108:lI114|H105EA0238
+105EA0238:lI110|H105EA0368
+105EA0368:lI101|H105EA0498
+105EA0498:lI108|H105EA05C8
+105EA05C8:lI45|H105EA06F8
+105EA06F8:lI57|H105EA0828
+105EA0828:lI46|H105EA0958
+105EA0958:lI48|H105EA0A88
+105EA0A88:lI46|H105EA0BB8
+105EA0BB8:lI50|H105EA0CE8
+105EA0CE8:lI47|H105EA0E18
+105EA0E18:lI101|H105EA0F48
+105EA0F48:lI98|H105EA1078
+105EA1078:lI105|H105EA1178
+105EA1178:lI110|N
+105E9C0A8:lH105E9C1E8|N
+105E9C1E8:lI47|H105E9C328
+105E9C328:lI111|H105E9C468
+105E9C468:lI112|H105E9C5A8
+105E9C5A8:lI116|H105E9C6E8
+105E9C6E8:lI47|H105E9C828
+105E9C828:lI104|H105E9C968
+105E9C968:lI111|H105E9CAA8
+105E9CAA8:lI109|H105E9CBE8
+105E9CBE8:lI101|H105E9CD28
+105E9CD28:lI98|H105E9CE68
+105E9CE68:lI114|H105E9CFA8
+105E9CFA8:lI101|H105E9D0E8
+105E9D0E8:lI119|H105E9D228
+105E9D228:lI47|H105E9D368
+105E9D368:lI67|H105E9D4A8
+105E9D4A8:lI101|H105E9D5E8
+105E9D5E8:lI108|H105E9D728
+105E9D728:lI108|H105E9D868
+105E9D868:lI97|H105E9D9A8
+105E9D9A8:lI114|H105E9DAE8
+105E9DAE8:lI47|H105E9DC28
+105E9DC28:lI101|H105E9DD68
+105E9DD68:lI114|H105E9DEA8
+105E9DEA8:lI108|H105E9DFE8
+105E9DFE8:lI97|H105E9E128
+105E9E128:lI110|H105E9E268
+105E9E268:lI103|H105E9E3A8
+105E9E3A8:lI47|H105E9E4E8
+105E9E4E8:lI50|H105E9E628
+105E9E628:lI54|H105E9E768
+105E9E768:lI46|H105E9E8A8
+105E9E8A8:lI48|H105E9E9E8
+105E9E9E8:lI46|H105E9EB28
+105E9EB28:lI50|H105E9EC68
+105E9EC68:lI47|H105E9EDA8
+105E9EDA8:lI108|H105E9EEE8
+105E9EEE8:lI105|H105E9F028
+105E9F028:lI98|H105E9F168
+105E9F168:lI47|H105E9F2A8
+105E9F2A8:lI101|H105E9F3E8
+105E9F3E8:lI114|H105E9F528
+105E9F528:lI108|H105E9F668
+105E9F668:lI97|H105E9F798
+105E9F798:lI110|H105E9F8C8
+105E9F8C8:lI103|H105E9F9F8
+105E9F9F8:lI47|H105E9FB28
+105E9FB28:lI108|H105E9FC58
+105E9FC58:lI105|H105E9FD88
+105E9FD88:lI98|H105E9FEB8
+105E9FEB8:lI47|H105E9FFE8
+105E9FFE8:lI115|H105EA0118
+105EA0118:lI116|H105EA0248
+105EA0248:lI100|H105EA0378
+105EA0378:lI108|H105EA04A8
+105EA04A8:lI105|H105EA05D8
+105EA05D8:lI98|H105EA0708
+105EA0708:lI45|H105EA0838
+105EA0838:lI53|H105EA0968
+105EA0968:lI46|H105EA0A98
+105EA0A98:lI48|H105EA0BC8
+105EA0BC8:lI46|H105EA0CF8
+105EA0CF8:lI50|H105EA0E28
+105EA0E28:lI47|H105EA0F58
+105EA0F58:lI101|H105EA1088
+105EA1088:lI98|H105EA1188
+105EA1188:lI105|H105EA1278
+105EA1278:lI110|N
+105E9B368:t6:A5:state,A5:efile,N,A6:noport,I360000,H105E9B348
+105E9B348:t3:AA:prim_state,A5:false,A9:undefined
+=proc_dictionary:<0.42.0>
+H105DBEDE0
+H105DBEDF8
+H105DBEE10
+=proc_stack:<0.42.0>
+y0:N
+y1:A8:infinity
+y2:H105DBEDB0
+y3:H105DB3618
+y4:A6:logger
+y5:P<0.9.0>
+0x0000000105db5e48:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105db5e68:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.42.0>
+105DBEDB0:t5:AE:callback_cache,AD:logger_server,H105DBEE28,H105DBEE50,H105DBEE78
+105DBEE78:E20:g3F3DWxvZ2dlcl9zZXJ2ZXJ3C2hhbmRsZV9pbmZvYQI=
+105DBEE50:E20:g3F3DWxvZ2dlcl9zZXJ2ZXJ3C2hhbmRsZV9jYXN0YQI=
+105DBEE28:E20:g3F3DWxvZ2dlcl9zZXJ2ZXJ3C2hhbmRsZV9jYWxsYQM=
+105DB3618:t5:A5:state,H105DBED98,A9:undefined,H28005B328,A9:undefined
+105DBED98:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAAK+R+vYAAd/g02c=
+105DBEDE0:t2:AA:$ancestors,H105DBEEA0
+105DBEEA0:lP<0.9.0>|N
+105DBEDF8:t2:A12:$logger_cb_process,A4:true
+105DBEE10:t2:AD:$initial_call,H105DBEEB0
+105DBEEB0:t3:AD:logger_server,A4:init,I1
+=proc_dictionary:<0.44.0>
+H10665ACF8
+H10665AD10
+=proc_stack:<0.44.0>
+y0:N
+y1:A8:infinity
+y2:H10665ACC8
+y3:H105E81EB0
+y4:A16:application_controller
+y5:P<0.9.0>
+0x0000000105e9b338:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.44.0>
+10665ACC8:t5:AE:callback_cache,A16:application_controller,H10665AD48,H10665AD70,H10665AD98
+10665AD98:E29:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3C2hhbmRsZV9pbmZvYQI=
+10665AD70:E29:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3C2hhbmRsZV9jYXN0YQI=
+10665AD48:E29:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3C2hhbmRsZV9jYWxsYQM=
+105E81EB0:t9:A5:state,N,N,N,H105E81E78,N,H105E81EA0,N,N
+105E81EA0:lH105E81E88|H105E81608
+105E81E88:t2:A7:aoc2023,A9:temporary
+105E81608:lH105E815F0|H105E633A0
+105E815F0:t2:A8:gleeunit,A9:temporary
+105E633A0:lH105E63420|H105E63438
+105E63420:t2:A7:adglent,A9:temporary
+105E63438:lH105E634A0|H106693B38
+105E634A0:t2:A3:tom,A9:temporary
+106693B38:lH106693B60|H106688C50
+106693B60:t2:AA:simplifile,A9:temporary
+106688C50:lH106688CF0|H106688D08
+106688CF0:t2:A5:glint,A9:temporary
+106688D08:lH106688D90|H106688B10
+106688D90:t2:A4:snag,A9:temporary
+106688B10:lH106688B38|H106688980
+106688B38:t2:A9:gleam_otp,A9:temporary
+106688980:lH1066889B8|H1066889D0
+1066889B8:t2:AB:gleam_httpc,A9:temporary
+1066889D0:lH106688A08|H106688A20
+106688A08:t2:A3:ssl,A9:temporary
+106688A20:lH106688A58|H106688A70
+106688A58:t2:AA:public_key,A9:temporary
+106688A70:lH106688A98|H106677B00
+106688A98:t2:A4:asn1,A9:temporary
+106677B00:lH106677B90|H106664070
+106677B90:t2:A6:crypto,A9:temporary
+106664070:lH106664100|H10665B320
+106664100:t2:A5:inets,A9:temporary
+10665B320:lH10665B370|H10665B198
+10665B370:t2:AA:gleam_http,A9:temporary
+10665B198:lH10665B1E8|H10665AF00
+10665B1E8:t2:AC:gleam_erlang,A9:temporary
+10665AF00:lH10665AF60|H10665AF78
+10665AF60:t2:A3:gap,A9:temporary
+10665AF78:lH10665AFC0|H10665AFD8
+10665AFC0:t2:A14:gleam_community_ansi,A9:temporary
+10665AFD8:lH10665B020|H10665B038
+10665B020:t2:A16:gleam_community_colour,A9:temporary
+10665B038:lH10665B070|H10665AD38
+10665B070:t2:AC:gleam_stdlib,A9:temporary
+10665AD38:lH10665ADF8|H10665AE10
+10665ADF8:t2:A6:stdlib,A9:permanent
+10665AE10:lH10665AE38|N
+10665AE38:t2:A6:kernel,A9:permanent
+105E81E78:lH105E81E60|H105E815E0
+105E81E60:t2:A7:aoc2023,A9:undefined
+105E815E0:lH105E815C8|H105E63390
+105E815C8:t2:A8:gleeunit,A9:undefined
+105E63390:lH105E633F8|H105E63410
+105E633F8:t2:A7:adglent,A9:undefined
+105E63410:lH105E63488|H106693B28
+105E63488:t2:A3:tom,A9:undefined
+106693B28:lH106693B48|H106688C40
+106693B48:t2:AA:simplifile,A9:undefined
+106688C40:lH106688CC8|H106688CE0
+106688CC8:t2:A5:glint,A9:undefined
+106688CE0:lH106688D78|H106688B00
+106688D78:t2:A4:snag,A9:undefined
+106688B00:lH106688B20|H106688970
+106688B20:t2:A9:gleam_otp,A9:undefined
+106688970:lH106688990|H1066889A8
+106688990:t2:AB:gleam_httpc,A9:undefined
+1066889A8:lH1066889E0|H1066889F8
+1066889E0:t2:A3:ssl,P<0.102.0>
+1066889F8:lH106688A30|H106688A48
+106688A30:t2:AA:public_key,A9:undefined
+106688A48:lH106688A80|H106677AF0
+106688A80:t2:A4:asn1,A9:undefined
+106677AF0:lH106677B78|H106664060
+106677B78:t2:A6:crypto,A9:undefined
+106664060:lH1066640E8|H10665B310
+1066640E8:t2:A5:inets,P<0.90.0>
+10665B310:lH10665B358|H10665B188
+10665B358:t2:AA:gleam_http,A9:undefined
+10665B188:lH10665B1D0|H10665AEF0
+10665B1D0:t2:AC:gleam_erlang,A9:undefined
+10665AEF0:lH10665AF38|H10665AF50
+10665AF38:t2:A3:gap,A9:undefined
+10665AF50:lH10665AF98|H10665AFB0
+10665AF98:t2:A14:gleam_community_ansi,A9:undefined
+10665AFB0:lH10665AFF8|H10665B010
+10665AFF8:t2:A16:gleam_community_colour,A9:undefined
+10665B010:lH10665B058|H10665AD28
+10665B058:t2:AC:gleam_stdlib,A9:undefined
+10665AD28:lH10665ADD0|H10665ADE8
+10665ADD0:t2:A6:stdlib,A9:undefined
+10665ADE8:lH10665AE20|N
+10665AE20:t2:A6:kernel,P<0.46.0>
+10665ACF8:t2:AA:$ancestors,H10665ADC0
+10665ADC0:lP<0.9.0>|N
+10665AD10:t2:AD:$initial_call,H280046B58
+=proc_dictionary:<0.46.0>
+H105D9A980
+H105D9A9B8
+=proc_stack:<0.46.0>
+y0:H105D9AB18
+y1:P<0.44.0>
+0x0000000105d9ac18:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d9ac38:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.46.0>
+105D9AB18:t7:A5:state,P<0.47.0>,H105D9A0A0,N,I0,A4:init,N
+105D9A0A0:t8:A9:appl_data,A6:kernel,H105D9A8F0,A9:undefined,H105D9A0E8,H105D9A710,A8:infinity,A8:infinity
+105D9A710:lAB:application|H105D9A700
+105D9A700:lA16:application_controller|H105D9A6F0
+105D9A6F0:lA12:application_master|H105D9A6E0
+105D9A6E0:lA13:application_starter|H105D9A6D0
+105D9A6D0:lA4:auth|H105D9A6C0
+105D9A6C0:lA4:code|H105D9A6B0
+105D9A6B0:lAB:code_server|H105D9A6A0
+105D9A6A0:lA9:dist_util|H105D9A690
+105D9A690:lAF:erl_boot_server|H105D9A680
+105D9A680:lA12:erl_compile_server|H105D9A670
+105D9A670:lA10:erl_distribution|H105D9A660
+105D9A660:lAF:erl_erts_errors|H105D9A650
+105D9A650:lA9:erl_reply|H105D9A640
+105D9A640:lA11:erl_kernel_errors|H105D9A630
+105D9A630:lA12:erl_signal_handler|H105D9A620
+105D9A620:lA4:erpc|H105D9A610
+105D9A610:lAD:error_handler|H105D9A600
+105D9A600:lAC:error_logger|H105D9A5F0
+105D9A5F0:lA4:file|H105D9A5E0
+105D9A5E0:lAB:file_server|H105D9A5D0
+105D9A5D0:lAE:file_io_server|H105D9A5C0
+105D9A5C0:lA6:global|H105D9A5B0
+105D9A5B0:lAC:global_group|H105D9A5A0
+105D9A5A0:lAD:global_search|H105D9A590
+105D9A590:lA5:group|H105D9A580
+105D9A580:lAD:group_history|H105D9A570
+105D9A570:lA5:heart|H105D9A560
+105D9A560:lA9:inet6_tcp|H105D9A550
+105D9A550:lAE:inet6_tcp_dist|H105D9A540
+105D9A540:lA9:inet6_udp|H105D9A530
+105D9A530:lAA:inet6_sctp|H105D9A520
+105D9A520:lAB:inet_config|H105D9A510
+105D9A510:lAE:inet_epmd_dist|H105D9A500
+105D9A500:lA10:inet_epmd_socket|H105D9A4F0
+105D9A4F0:lAA:inet_hosts|H105D9A4E0
+105D9A4E0:lA13:inet_gethost_native|H105D9A4D0
+105D9A4D0:lAD:inet_tcp_dist|H105D9A4C0
+105D9A4C0:lA6:kernel|H105D9A4B0
+105D9A4B0:lAD:kernel_config|H105D9A4A0
+105D9A4A0:lAB:kernel_refc|H105D9A490
+105D9A490:lA9:local_tcp|H105D9A480
+105D9A480:lA9:local_udp|H105D9A470
+105D9A470:lA6:logger|H105D9A460
+105D9A460:lAE:logger_backend|H105D9A450
+105D9A450:lAD:logger_config|H105D9A440
+105D9A440:lA11:logger_disk_log_h|H105D9A430
+105D9A430:lAE:logger_filters|H105D9A420
+105D9A420:lA10:logger_formatter|H105D9A410
+105D9A410:lAF:logger_h_common|H105D9A400
+105D9A400:lA16:logger_handler_watcher|H105D9A3F0
+105D9A3F0:lAA:logger_olp|H105D9A3E0
+105D9A3E0:lAC:logger_proxy|H105D9A3D0
+105D9A3D0:lAD:logger_server|H105D9A3C0
+105D9A3C0:lAF:logger_simple_h|H105D9A3B0
+105D9A3B0:lAC:logger_std_h|H105D9A3A0
+105D9A3A0:lAA:logger_sup|H105D9A390
+105D9A390:lA3:net|H105D9A380
+105D9A380:lA7:net_adm|H105D9A370
+105D9A370:lAA:net_kernel|H105D9A360
+105D9A360:lA2:os|H105D9A350
+105D9A350:lA8:ram_file|H105D9A340
+105D9A340:lA3:rpc|H105D9A330
+105D9A330:lA8:user_drv|H105D9A320
+105D9A320:lA8:user_sup|H105D9A310
+105D9A310:lA8:prim_tty|H105D9A300
+105D9A300:lA8:disk_log|H105D9A2F0
+105D9A2F0:lAA:disk_log_1|H105D9A2E0
+105D9A2E0:lAF:disk_log_server|H105D9A2D0
+105D9A2D0:lAC:disk_log_sup|H105D9A2C0
+105D9A2C0:lA7:dist_ac|H105D9A2B0
+105D9A2B0:lA8:erl_ddll|H105D9A2A0
+105D9A2A0:lA8:erl_epmd|H105D9A290
+105D9A290:lAA:erts_debug|H105D9A280
+105D9A280:lA7:gen_tcp|H105D9A270
+105D9A270:lAE:gen_tcp_socket|H105D9A260
+105D9A260:lA7:gen_udp|H105D9A250
+105D9A250:lAE:gen_udp_socket|H105D9A240
+105D9A240:lA8:gen_sctp|H105D9A230
+105D9A230:lA4:inet|H105D9A220
+105D9A220:lA7:inet_db|H105D9A210
+105D9A210:lA8:inet_dns|H105D9A200
+105D9A200:lAA:inet_parse|H105D9A1F0
+105D9A1F0:lA8:inet_res|H105D9A1E0
+105D9A1E0:lA8:inet_tcp|H105D9A1D0
+105D9A1D0:lA8:inet_udp|H105D9A1C0
+105D9A1C0:lA9:inet_sctp|H105D9A1B0
+105D9A1B0:lA2:pg|H105D9A1A0
+105D9A1A0:lA3:pg2|H105D9A190
+105D9A190:lAB:raw_file_io|H105D9A180
+105D9A180:lA16:raw_file_io_compressed|H105D9A170
+105D9A170:lA13:raw_file_io_deflate|H105D9A160
+105D9A160:lA13:raw_file_io_delayed|H105D9A150
+105D9A150:lA13:raw_file_io_inflate|H105D9A140
+105D9A140:lA10:raw_file_io_list|H105D9A130
+105D9A130:lA9:seq_trace|H105D9A120
+105D9A120:lA6:socket|H105D9A110
+105D9A110:lAE:standard_error|H105D9A100
+105D9A100:lAF:wrap_log_reader|N
+105D9A0E8:t2:A6:kernel,N
+105D9A8F0:lA16:application_controller|H105D9A8E0
+105D9A8E0:lA9:erl_reply|H105D9A8D0
+105D9A8D0:lA4:auth|H105D9A8C0
+105D9A8C0:lAB:boot_server|H105D9A8B0
+105D9A8B0:lAB:code_server|H105D9A8A0
+105D9A8A0:lAF:disk_log_server|H105D9A890
+105D9A890:lAC:disk_log_sup|H105D9A880
+105D9A880:lAF:erl_prim_loader|H105D9A870
+105D9A870:lAC:error_logger|H105D9A860
+105D9A860:lAD:file_server_2|H105D9A850
+105D9A850:lAF:fixtable_server|H105D9A840
+105D9A840:lAC:global_group|H105D9A830
+105D9A830:lA12:global_name_server|H105D9A820
+105D9A820:lA5:heart|H105D9A810
+105D9A810:lA4:init|H105D9A800
+105D9A800:lAD:kernel_config|H105D9A7F0
+105D9A7F0:lAB:kernel_refc|H105D9A7E0
+105D9A7E0:lAA:kernel_sup|H105D9A7D0
+105D9A7D0:lA6:logger|H105D9A7C0
+105D9A7C0:lA16:logger_handler_watcher|H105D9A7B0
+105D9A7B0:lAA:logger_sup|H105D9A7A0
+105D9A7A0:lAA:net_kernel|H105D9A790
+105D9A790:lA7:net_sup|H105D9A780
+105D9A780:lA3:rex|H105D9A770
+105D9A770:lA4:user|H105D9A760
+105D9A760:lA9:os_server|H105D9A750
+105D9A750:lAB:ddll_server|H105D9A740
+105D9A740:lA8:erl_epmd|H105D9A730
+105D9A730:lA7:inet_db|H105D9A720
+105D9A720:lA2:pg|N
+105D9A980:t2:AA:$ancestors,H105D9A970
+105D9A970:lP<0.45.0>|N
+105D9A9B8:t2:AD:$initial_call,H105D9A998
+105D9A998:t3:A12:application_master,A4:init,I4
+=proc_stack:<0.47.0>
+y0:N
+y1:N
+y2:A6:kernel
+y3:P<0.49.0>
+y4:P<0.46.0>
+0x0000000105d8fb88:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.47.0>
+=proc_dictionary:<0.49.0>
+H105D922F0
+H105D92308
+=proc_stack:<0.49.0>
+y0:N
+y1:A8:infinity
+y2:H105D9E530
+y3:H105D9E918
+y4:AA:kernel_sup
+y5:P<0.47.0>
+0x0000000105d9fcf0:SReturn addr 0x3E951BC (proc_lib:wake_up/3 + 220)
+y0:N
+y1:N
+y2:SCatch 0x3E951E4 (proc_lib:wake_up/3 + 260)
+0x0000000105d9fd10:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.49.0>
+105D9E530:t5:AE:callback_cache,AA:supervisor,H105D9E4B8,H105D9E4E0,H105D9E508
+105D9E508:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105D9E4E0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105D9E4B8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105D9E918:tC:A5:state,H280043650,AB:one_for_all,H105D9E900,A9:undefined,I0,I1,N,I0,A5:never,A6:kernel,N
+105D9E900:t2:H105D9E310,H105D9E870
+105D9E870:MfF:H105D92320:H105D9B928,H105D9E820,H105D9C288,H105D9AD48,H105D929C8,H105D9DF28,H105D92918,H105D9B658,H105D9AD98,H105D9D5A8,H105D9CC18,H105D92A18,H105D926C0,H105D9ADE8,H105D9E218
+105D92320:tF:A11:erl_signal_server,A7:on_load,A4:user,A12:global_name_server,AE:standard_error,AB:kernel_refc,AB:code_server,AC:global_group,A7:inet_db,AD:kernel_config,AA:logger_sup,AD:file_server_2,A7:net_sup,A3:rex,AF:kernel_safe_sup
+105D9E218:t9:A5:child,P<0.75.0>,AF:kernel_safe_sup,H280043BC8,A9:permanent,A5:false,A8:infinity,AA:supervisor,H280043BB8
+105D9ADE8:t9:A5:child,P<0.56.0>,A3:rex,H280044320,A9:permanent,A5:false,I2000,A6:worker,H280044310
+105D926C0:t9:A5:child,A9:undefined,A7:net_sup,H280044110,A9:permanent,A5:false,A8:infinity,AA:supervisor,H280044100
+105D92A18:t9:A5:child,P<0.53.0>,AD:file_server_2,H280043788,A9:permanent,A5:false,I2000,A6:worker,H280043748
+105D9CC18:t9:A5:child,P<0.70.0>,AA:logger_sup,H2800439B8,A9:permanent,A5:false,A8:infinity,AA:supervisor,H2800439A8
+105D9D5A8:t9:A5:child,P<0.73.0>,AD:kernel_config,H280043A68,A9:permanent,A5:false,I2000,A6:worker,H280043A58
+105D9AD98:t9:A5:child,P<0.55.0>,A7:inet_db,H280044040,A9:permanent,A5:false,I2000,A6:worker,H280044030
+105D9B658:t9:A5:child,P<0.61.0>,AC:global_group,H2800441C0,A9:permanent,A5:false,I2000,A6:worker,H2800441B0
+105D92918:t9:A5:child,P<0.50.0>,AB:code_server,H280043E60,A9:permanent,A5:false,I2000,A6:worker,H280043E50
+105D9DF28:t9:A5:child,P<0.74.0>,AB:kernel_refc,H280043B18,A9:permanent,A5:false,I2000,A6:worker,H280043B08
+105D929C8:t9:A5:child,P<0.51.0>,AE:standard_error,H280043DB0,A9:temporary,A5:false,I2000,AA:supervisor,H280043DA0
+105D9AD48:t9:A5:child,P<0.58.0>,A12:global_name_server,H280044270,A9:permanent,A5:false,I2000,A6:worker,H280044260
+105D9C288:t9:A5:child,P<0.64.0>,A4:user,H280043908,A9:temporary,A5:false,I2000,AA:supervisor,H2800438F8
+105D9E820:t9:A5:child,A9:undefined,A7:on_load,H280043CC0,A9:transient,A5:false,I2000,A6:worker,H280043CB0
+105D9B928:t9:A5:child,P<0.63.0>,A11:erl_signal_server,H280043F68,A9:permanent,A5:false,I2000,A6:worker,A7:dynamic
+105D9E310:lAF:kernel_safe_sup|H105D9E020
+105D9E020:lAB:kernel_refc|H105D9D6A0
+105D9D6A0:lAD:kernel_config|H105D9CD10
+105D9CD10:lAA:logger_sup|H105D9C380
+105D9C380:lA4:user|H105D9BA20
+105D9BA20:lA11:erl_signal_server|H105D9B750
+105D9B750:lAC:global_group|H105D9AC78
+105D9AC78:lA7:net_sup|H105D9AD38
+105D9AD38:lA12:global_name_server|H105D9AE78
+105D9AE78:lA3:rex|H105D9AE98
+105D9AE98:lA7:inet_db|H105D92A68
+105D92A68:lA7:on_load|H105D92A78
+105D92A78:lAD:file_server_2|H105D92A88
+105D92A88:lAE:standard_error|H105D92968
+105D92968:lAB:code_server|N
+105D922F0:t2:AA:$ancestors,H105D92838
+105D92838:lP<0.47.0>|N
+105D92308:t2:AD:$initial_call,H105D92848
+105D92848:t3:AA:supervisor,A6:kernel,I1
+=proc_stack:<0.50.0>
+y0:N
+y1:P<0.49.0>
+y2:H106607FF8
+0x0000000106638248:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.50.0>
+106607FF8:t8:A5:state,P<0.49.0>,H1071F0038,H106607FC8,AB:code_server,AA:code_names,AB:interactive,N
+106607FC8:lH106604450|H106607FB8
+106604450:t2:H1071F0078,A7:nocache
+1071F0078:lI47|H1071F0638
+1071F0638:lI85|H1071F18C0
+1071F18C0:lI115|H1071F3B38
+1071F3B38:lI101|H1071F6350
+1071F6350:lI114|H1071F8FA0
+1071F8FA0:lI115|H1071FBEE0
+1071FBEE0:lI47|H1071FEF98
+1071FEF98:lI110|H107202140
+107202140:lI105|H107205380
+107205380:lI99|H107208678
+107208678:lI104|H10720B948
+10720B948:lI111|H10720EC08
+10720EC08:lI108|H107211F68
+107211F68:lI97|H107215440
+107215440:lI115|H107218AD0
+107218AD0:lI99|H10721C300
+10721C300:lI97|H10721FA00
+10721FA00:lI114|H107222EF8
+107222EF8:lI108|H107226060
+107226060:lI115|H107228E48
+107228E48:lI111|H10722B880
+10722B880:lI110|H10722DF58
+10722DF58:lI47|H107230380
+107230380:lI86|H1072324F8
+1072324F8:lI83|H107234360
+107234360:lI32|H107235EC8
+107235EC8:lI67|H1072377C0
+1072377C0:lI111|H107238E48
+107238E48:lI100|H10723A320
+10723A320:lI101|H10723B680
+10723B680:lI47|H10723C760
+10723C760:lI65|H10723D620
+10723D620:lI100|H10723E3A0
+10723E3A0:lI118|H10723EFB0
+10723EFB0:lI101|H10723FA80
+10723FA80:lI110|H1072403D0
+1072403D0:lI116|H107240C50
+107240C50:lI79|H1072413E0
+1072413E0:lI102|H107241B10
+107241B10:lI67|H1072421E0
+1072421E0:lI111|H107242850
+107242850:lI100|H107242E50
+107242E50:lI101|H1072433C0
+1072433C0:lI47|H107243900
+107243900:lI97|H107243DF0
+107243DF0:lI111|H1072442E0
+1072442E0:lI99|H107244790
+107244790:lI50|H107244C00
+107244C00:lI48|H107245060
+107245060:lI50|H1072454B0
+1072454B0:lI51|H1072458B0
+1072458B0:lI47|H107245C70
+107245C70:lI98|H107246000
+107246000:lI117|H107246390
+107246390:lI105|H107246720
+107246720:lI108|H107246AB0
+107246AB0:lI100|H107246DF0
+107246DF0:lI47|H107247110
+107247110:lI100|H107247430
+107247430:lI101|H107247740
+107247740:lI118|H107247A40
+107247A40:lI47|H107247D30
+107247D30:lI101|H107248010
+107248010:lI114|H1072482D0
+1072482D0:lI108|H107248590
+107248590:lI97|H107248840
+107248840:lI110|H107248AF0
+107248AF0:lI103|H107248D70
+107248D70:lI47|H107248FE0
+107248FE0:lI103|H107249250
+107249250:lI108|H1072494B0
+1072494B0:lI101|H107249710
+107249710:lI97|H107249960
+107249960:lI109|H107249B70
+107249B70:lI95|H107249D60
+107249D60:lI99|H107249F40
+107249F40:lI111|H10724A0F0
+10724A0F0:lI109|H10724A280
+10724A280:lI109|H10724A400
+10724A400:lI117|H10724A570
+10724A570:lI110|H10724A6C0
+10724A6C0:lI105|H10724A7F0
+10724A7F0:lI116|H10724A910
+10724A910:lI121|H10724AA10
+10724AA10:lI95|H10724AAF0
+10724AAF0:lI97|H10724ABB0
+10724ABB0:lI110|H10724AC40
+10724AC40:lI115|H10724ACA0
+10724ACA0:lI105|H10724ACF0
+10724ACF0:lI47|H10724AD40
+10724AD40:lI101|H10724AD80
+10724AD80:lI98|H10724ADC0
+10724ADC0:lI105|H10724ADF0
+10724ADF0:lI110|N
+106607FB8:lH1066049F8|H106607FA8
+1066049F8:t2:H1071F0130,A7:nocache
+1071F0130:lI47|H1071F0988
+1071F0988:lI85|H1071F1EB0
+1071F1EB0:lI115|H1071F4198
+1071F4198:lI101|H1071F69B8
+1071F69B8:lI114|H1071F9610
+1071F9610:lI115|H1071FC550
+1071FC550:lI47|H1071FF608
+1071FF608:lI110|H1072027B0
+1072027B0:lI105|H1072059F0
+1072059F0:lI99|H107208CC8
+107208CC8:lI104|H10720BF78
+10720BF78:lI111|H10720F1F8
+10720F1F8:lI108|H107212518
+107212518:lI97|H1072159A0
+1072159A0:lI115|H107219010
+107219010:lI99|H10721C770
+10721C770:lI97|H10721FDF0
+10721FDF0:lI114|H107223278
+107223278:lI108|H107226360
+107226360:lI115|H1072290F8
+1072290F8:lI111|H10722BAC0
+10722BAC0:lI110|H10722E128
+10722E128:lI47|H1072304E0
+1072304E0:lI86|H107232608
+107232608:lI83|H107234440
+107234440:lI32|H107235F88
+107235F88:lI67|H107237820
+107237820:lI111|H107238EA8
+107238EA8:lI100|H10723A380
+10723A380:lI101|H10723B6C0
+10723B6C0:lI47|H10723C790
+10723C790:lI65|H10723D650
+10723D650:lI100|H10723E3D0
+10723E3D0:lI118|H10723EFE0
+10723EFE0:lI101|H10723FAB0
+10723FAB0:lI110|H107240400
+107240400:lI116|H107240C80
+107240C80:lI79|H107241410
+107241410:lI102|H107241B40
+107241B40:lI67|H107242210
+107242210:lI111|H107242880
+107242880:lI100|H107242E80
+107242E80:lI101|H1072433F0
+1072433F0:lI47|H107243930
+107243930:lI97|H107243E20
+107243E20:lI111|H107244310
+107244310:lI99|H1072447C0
+1072447C0:lI50|H107244C30
+107244C30:lI48|H107245090
+107245090:lI50|H1072454E0
+1072454E0:lI51|H1072458E0
+1072458E0:lI47|H107245CA0
+107245CA0:lI98|H107246030
+107246030:lI117|H1072463C0
+1072463C0:lI105|H107246750
+107246750:lI108|H107246AE0
+107246AE0:lI100|H107246E20
+107246E20:lI47|H107247140
+107247140:lI100|H107247460
+107247460:lI101|H107247770
+107247770:lI118|H107247A70
+107247A70:lI47|H107247D60
+107247D60:lI101|H107248040
+107248040:lI114|H107248300
+107248300:lI108|H1072485C0
+1072485C0:lI97|H107248870
+107248870:lI110|H107248B10
+107248B10:lI103|H107248D90
+107248D90:lI47|H107249000
+107249000:lI97|H107249270
+107249270:lI100|H1072494D0
+1072494D0:lI103|H107249730
+107249730:lI108|H107249980
+107249980:lI101|H107249B90
+107249B90:lI110|H107249D80
+107249D80:lI116|H107249F60
+107249F60:lI47|H10724A110
+10724A110:lI101|H10724A2A0
+10724A2A0:lI98|H10724A420
+10724A420:lI105|H10724A590
+10724A590:lI110|N
+106607FA8:lH106604FF0|H106607F98
+106604FF0:t2:H1071F01F0,A7:nocache
+1071F01F0:lI47|H1071F0CB8
+1071F0CB8:lI85|H1071F2438
+1071F2438:lI115|H1071F4780
+1071F4780:lI101|H1071F6FA8
+1071F6FA8:lI114|H1071F9C00
+1071F9C00:lI115|H1071FCB40
+1071FCB40:lI47|H1071FFBF8
+1071FFBF8:lI110|H107202DA0
+107202DA0:lI105|H107205FD0
+107205FD0:lI99|H107209288
+107209288:lI104|H10720C4E8
+10720C4E8:lI111|H10720F708
+10720F708:lI108|H1072129B8
+1072129B8:lI97|H107215D80
+107215D80:lI115|H107219360
+107219360:lI99|H10721C9F0
+10721C9F0:lI97|H107220030
+107220030:lI114|H107223428
+107223428:lI108|H1072264E0
+1072264E0:lI115|H107229208
+107229208:lI111|H10722BB70
+10722BB70:lI110|H10722E1C8
+10722E1C8:lI47|H107230580
+107230580:lI86|H1072326A8
+1072326A8:lI83|H1072344C0
+1072344C0:lI32|H107235FE8
+107235FE8:lI67|H107237860
+107237860:lI111|H107238EE8
+107238EE8:lI100|H10723A3B0
+10723A3B0:lI101|H10723B6F0
+10723B6F0:lI47|H10723C7C0
+10723C7C0:lI65|H10723D680
+10723D680:lI100|H10723E400
+10723E400:lI118|H10723F010
+10723F010:lI101|H10723FAE0
+10723FAE0:lI110|H107240430
+107240430:lI116|H107240CB0
+107240CB0:lI79|H107241440
+107241440:lI102|H107241B70
+107241B70:lI67|H107242240
+107242240:lI111|H1072428B0
+1072428B0:lI100|H107242EB0
+107242EB0:lI101|H107243420
+107243420:lI47|H107243960
+107243960:lI97|H107243E50
+107243E50:lI111|H107244340
+107244340:lI99|H1072447F0
+1072447F0:lI50|H107244C60
+107244C60:lI48|H1072450C0
+1072450C0:lI50|H107245510
+107245510:lI51|H107245910
+107245910:lI47|H107245CD0
+107245CD0:lI98|H107246060
+107246060:lI117|H1072463F0
+1072463F0:lI105|H107246780
+107246780:lI108|H107246B10
+107246B10:lI100|H107246E50
+107246E50:lI47|H107247170
+107247170:lI100|H107247490
+107247490:lI101|H1072477A0
+1072477A0:lI118|H107247AA0
+107247AA0:lI47|H107247D90
+107247D90:lI101|H107248070
+107248070:lI114|H107248330
+107248330:lI108|H1072485F0
+1072485F0:lI97|H1072488A0
+1072488A0:lI110|H107248B30
+107248B30:lI103|H107248DB0
+107248DB0:lI47|H107249020
+107249020:lI103|H107249290
+107249290:lI108|H1072494F0
+1072494F0:lI101|H107249750
+107249750:lI97|H1072499A0
+1072499A0:lI109|H107249BB0
+107249BB0:lI95|H107249DA0
+107249DA0:lI101|H107249F80
+107249F80:lI114|H10724A130
+10724A130:lI108|H10724A2C0
+10724A2C0:lI97|H10724A440
+10724A440:lI110|H10724A5B0
+10724A5B0:lI103|H10724A6F0
+10724A6F0:lI47|H10724A810
+10724A810:lI101|H10724A930
+10724A930:lI98|H10724AA30
+10724AA30:lI105|H10724AB10
+10724AB10:lI110|N
+106607F98:lH106605578|H106607F88
+106605578:t2:H1071F02A8,A7:nocache
+1071F02A8:lI47|H1071F0E68
+1071F0E68:lI85|H1071F2688
+1071F2688:lI115|H1071F49E0
+1071F49E0:lI101|H1071F7208
+1071F7208:lI114|H1071F9E60
+1071F9E60:lI115|H1071FCDA0
+1071FCDA0:lI47|H1071FFE58
+1071FFE58:lI110|H107203000
+107203000:lI105|H107206230
+107206230:lI99|H1072094E8
+1072094E8:lI104|H10720C748
+10720C748:lI111|H10720F958
+10720F958:lI108|H107212BE8
+107212BE8:lI97|H107215FB0
+107215FB0:lI115|H107219590
+107219590:lI99|H10721CC00
+10721CC00:lI97|H107220210
+107220210:lI114|H1072235B8
+1072235B8:lI108|H107226650
+107226650:lI115|H107229348
+107229348:lI111|H10722BC90
+10722BC90:lI110|H10722E2D8
+10722E2D8:lI47|H107230660
+107230660:lI86|H107232758
+107232758:lI83|H107234550
+107234550:lI32|H107236078
+107236078:lI67|H1072378F0
+1072378F0:lI111|H107238F68
+107238F68:lI100|H10723A420
+10723A420:lI101|H10723B750
+10723B750:lI47|H10723C810
+10723C810:lI65|H10723D6B0
+10723D6B0:lI100|H10723E430
+10723E430:lI118|H10723F040
+10723F040:lI101|H10723FB10
+10723FB10:lI110|H107240460
+107240460:lI116|H107240CE0
+107240CE0:lI79|H107241470
+107241470:lI102|H107241BA0
+107241BA0:lI67|H107242270
+107242270:lI111|H1072428E0
+1072428E0:lI100|H107242EE0
+107242EE0:lI101|H107243450
+107243450:lI47|H107243990
+107243990:lI97|H107243E80
+107243E80:lI111|H107244370
+107244370:lI99|H107244820
+107244820:lI50|H107244C90
+107244C90:lI48|H1072450F0
+1072450F0:lI50|H107245540
+107245540:lI51|H107245940
+107245940:lI47|H107245D00
+107245D00:lI98|H107246090
+107246090:lI117|H107246420
+107246420:lI105|H1072467B0
+1072467B0:lI108|H107246B40
+107246B40:lI100|H107246E80
+107246E80:lI47|H1072471A0
+1072471A0:lI100|H1072474C0
+1072474C0:lI101|H1072477D0
+1072477D0:lI118|H107247AD0
+107247AD0:lI47|H107247DC0
+107247DC0:lI101|H107248090
+107248090:lI114|H107248350
+107248350:lI108|H107248610
+107248610:lI97|H1072488C0
+1072488C0:lI110|H107248B50
+107248B50:lI103|H107248DD0
+107248DD0:lI47|H107249040
+107249040:lI103|H1072492B0
+1072492B0:lI108|H107249510
+107249510:lI105|H107249770
+107249770:lI110|H1072499C0
+1072499C0:lI116|H107249BD0
+107249BD0:lI47|H107249DC0
+107249DC0:lI101|H107249FA0
+107249FA0:lI98|H10724A150
+10724A150:lI105|H10724A2E0
+10724A2E0:lI110|N
+106607F88:lH106605B50|H106607F78
+106605B50:t2:H1071F0368,A7:nocache
+1071F0368:lI47|H1071F1420
+1071F1420:lI85|H1071F3318
+1071F3318:lI115|H1071F5900
+1071F5900:lI101|H1071F8168
+1071F8168:lI114|H1071FADC0
+1071FADC0:lI115|H1071FDD00
+1071FDD00:lI47|H107200DB8
+107200DB8:lI110|H107203F60
+107203F60:lI105|H107207190
+107207190:lI99|H10720A418
+10720A418:lI104|H10720D678
+10720D678:lI111|H107210868
+107210868:lI108|H107213AD8
+107213AD8:lI97|H107216E90
+107216E90:lI115|H10721A400
+10721A400:lI99|H10721D9C0
+10721D9C0:lI97|H107220F10
+107220F10:lI114|H107224178
+107224178:lI108|H1072270C0
+1072270C0:lI115|H107229C28
+107229C28:lI111|H10722C450
+10722C450:lI110|H10722E998
+10722E998:lI47|H107230C10
+107230C10:lI86|H107232C08
+107232C08:lI83|H1072348E0
+1072348E0:lI32|H107236318
+107236318:lI67|H107237AE0
+107237AE0:lI111|H1072390F8
+1072390F8:lI100|H10723A590
+10723A590:lI101|H10723B850
+10723B850:lI47|H10723C8A0
+10723C8A0:lI65|H10723D710
+10723D710:lI100|H10723E470
+10723E470:lI118|H10723F080
+10723F080:lI101|H10723FB40
+10723FB40:lI110|H107240490
+107240490:lI116|H107240D10
+107240D10:lI79|H1072414A0
+1072414A0:lI102|H107241BD0
+107241BD0:lI67|H1072422A0
+1072422A0:lI111|H107242910
+107242910:lI100|H107242F10
+107242F10:lI101|H107243480
+107243480:lI47|H1072439C0
+1072439C0:lI97|H107243EB0
+107243EB0:lI111|H1072443A0
+1072443A0:lI99|H107244850
+107244850:lI50|H107244CC0
+107244CC0:lI48|H107245120
+107245120:lI50|H107245570
+107245570:lI51|H107245970
+107245970:lI47|H107245D30
+107245D30:lI98|H1072460C0
+1072460C0:lI117|H107246450
+107246450:lI105|H1072467E0
+1072467E0:lI108|H107246B70
+107246B70:lI100|H107246EA0
+107246EA0:lI47|H1072471C0
+1072471C0:lI100|H1072474E0
+1072474E0:lI101|H1072477F0
+1072477F0:lI118|H107247AF0
+107247AF0:lI47|H107247DE0
+107247DE0:lI101|H1072480B0
+1072480B0:lI114|H107248370
+107248370:lI108|H107248630
+107248630:lI97|H1072488E0
+1072488E0:lI110|H107248B70
+107248B70:lI103|H107248DF0
+107248DF0:lI47|H107249060
+107249060:lI103|H1072492D0
+1072492D0:lI108|H107249530
+107249530:lI101|H107249790
+107249790:lI97|H1072499E0
+1072499E0:lI109|H107249BF0
+107249BF0:lI95|H107249DE0
+107249DE0:lI104|H107249FC0
+107249FC0:lI116|H10724A170
+10724A170:lI116|H10724A300
+10724A300:lI112|H10724A470
+10724A470:lI47|H10724A5E0
+10724A5E0:lI101|H10724A720
+10724A720:lI98|H10724A840
+10724A840:lI105|H10724A960
+10724A960:lI110|N
+106607F78:lH1066060B8|H106607F68
+1066060B8:t2:H1071F0430,A7:nocache
+1071F0430:lI47|H1071F14D8
+1071F14D8:lI85|H1071F3448
+1071F3448:lI115|H1071F5A30
+1071F5A30:lI101|H1071F8298
+1071F8298:lI114|H1071FAEF0
+1071FAEF0:lI115|H1071FDE30
+1071FDE30:lI47|H107200EE8
+107200EE8:lI110|H107204090
+107204090:lI105|H1072072C0
+1072072C0:lI99|H10720A548
+10720A548:lI104|H10720D758
+10720D758:lI111|H107210908
+107210908:lI108|H107213B68
+107213B68:lI97|H107216F20
+107216F20:lI115|H10721A490
+10721A490:lI99|H10721DA40
+10721DA40:lI97|H107220F80
+107220F80:lI114|H1072241C8
+1072241C8:lI108|H107227100
+107227100:lI115|H107229C58
+107229C58:lI111|H10722C480
+10722C480:lI110|H10722E9C8
+10722E9C8:lI47|H107230C40
+107230C40:lI86|H107232C38
+107232C38:lI83|H107234910
+107234910:lI32|H107236348
+107236348:lI67|H107237B10
+107237B10:lI111|H107239128
+107239128:lI100|H10723A5C0
+10723A5C0:lI101|H10723B880
+10723B880:lI47|H10723C8D0
+10723C8D0:lI65|H10723D740
+10723D740:lI100|H10723E4A0
+10723E4A0:lI118|H10723F0B0
+10723F0B0:lI101|H10723FB70
+10723FB70:lI110|H1072404C0
+1072404C0:lI116|H107240D40
+107240D40:lI79|H1072414D0
+1072414D0:lI102|H107241C00
+107241C00:lI67|H1072422D0
+1072422D0:lI111|H107242940
+107242940:lI100|H107242F40
+107242F40:lI101|H1072434B0
+1072434B0:lI47|H1072439F0
+1072439F0:lI97|H107243EE0
+107243EE0:lI111|H1072443D0
+1072443D0:lI99|H107244880
+107244880:lI50|H107244CF0
+107244CF0:lI48|H107245150
+107245150:lI50|H1072455A0
+1072455A0:lI51|H1072459A0
+1072459A0:lI47|H107245D60
+107245D60:lI98|H1072460F0
+1072460F0:lI117|H107246480
+107246480:lI105|H107246810
+107246810:lI108|H107246BA0
+107246BA0:lI100|H107246ED0
+107246ED0:lI47|H1072471F0
+1072471F0:lI100|H107247510
+107247510:lI101|H107247810
+107247810:lI118|H107247B10
+107247B10:lI47|H107247E00
+107247E00:lI101|H1072480D0
+1072480D0:lI114|H107248390
+107248390:lI108|H107248650
+107248650:lI97|H107248900
+107248900:lI110|H107248B90
+107248B90:lI103|H107248E10
+107248E10:lI47|H107249080
+107249080:lI103|H1072492F0
+1072492F0:lI97|H107249550
+107249550:lI112|H1072497B0
+1072497B0:lI47|H107249A00
+107249A00:lI101|H107249C10
+107249C10:lI98|H107249E00
+107249E00:lI105|H107249FE0
+107249FE0:lI110|N
+106607F68:lH106606680|H106607F58
+106606680:t2:H1071F0420,A7:nocache
+1071F0420:lI47|H1071F14C8
+1071F14C8:lI85|H1071F3438
+1071F3438:lI115|H1071F5A20
+1071F5A20:lI101|H1071F8288
+1071F8288:lI114|H1071FAEE0
+1071FAEE0:lI115|H1071FDE20
+1071FDE20:lI47|H107200ED8
+107200ED8:lI110|H107204080
+107204080:lI105|H1072072B0
+1072072B0:lI99|H10720A538
+10720A538:lI104|H10720D748
+10720D748:lI111|H1072108F8
+1072108F8:lI108|H107213B58
+107213B58:lI97|H107216F10
+107216F10:lI115|H10721A480
+10721A480:lI99|H10721DA30
+10721DA30:lI97|H107220F70
+107220F70:lI114|H1072241B8
+1072241B8:lI108|H1072270F0
+1072270F0:lI115|H107229C48
+107229C48:lI111|H10722C470
+10722C470:lI110|H10722E9B8
+10722E9B8:lI47|H107230C30
+107230C30:lI86|H107232C28
+107232C28:lI83|H107234900
+107234900:lI32|H107236338
+107236338:lI67|H107237B00
+107237B00:lI111|H107239118
+107239118:lI100|H10723A5B0
+10723A5B0:lI101|H10723B870
+10723B870:lI47|H10723C8C0
+10723C8C0:lI65|H10723D730
+10723D730:lI100|H10723E490
+10723E490:lI118|H10723F0A0
+10723F0A0:lI101|H10723FB60
+10723FB60:lI110|H1072404B0
+1072404B0:lI116|H107240D30
+107240D30:lI79|H1072414C0
+1072414C0:lI102|H107241BF0
+107241BF0:lI67|H1072422C0
+1072422C0:lI111|H107242930
+107242930:lI100|H107242F30
+107242F30:lI101|H1072434A0
+1072434A0:lI47|H1072439E0
+1072439E0:lI97|H107243ED0
+107243ED0:lI111|H1072443C0
+1072443C0:lI99|H107244870
+107244870:lI50|H107244CE0
+107244CE0:lI48|H107245140
+107245140:lI50|H107245590
+107245590:lI51|H107245990
+107245990:lI47|H107245D50
+107245D50:lI98|H1072460E0
+1072460E0:lI117|H107246470
+107246470:lI105|H107246800
+107246800:lI108|H107246B90
+107246B90:lI100|H107246EC0
+107246EC0:lI47|H1072471E0
+1072471E0:lI100|H107247500
+107247500:lI101|H107247800
+107247800:lI118|H107247B00
+107247B00:lI47|H107247DF0
+107247DF0:lI101|H1072480C0
+1072480C0:lI114|H107248380
+107248380:lI108|H107248640
+107248640:lI97|H1072488F0
+1072488F0:lI110|H107248B80
+107248B80:lI103|H107248E00
+107248E00:lI47|H107249070
+107249070:lI103|H1072492E0
+1072492E0:lI108|H107249540
+107249540:lI101|H1072497A0
+1072497A0:lI97|H1072499F0
+1072499F0:lI109|H107249C00
+107249C00:lI95|H107249DF0
+107249DF0:lI111|H107249FD0
+107249FD0:lI116|H10724A180
+10724A180:lI112|H10724A310
+10724A310:lI47|H10724A480
+10724A480:lI101|H10724A5F0
+10724A5F0:lI98|H10724A730
+10724A730:lI105|H10724A850
+10724A850:lI110|N
+106607F58:lH106606D18|H106607F48
+106606D18:t2:H1071F0358,A7:nocache
+1071F0358:lI47|H1071F1410
+1071F1410:lI85|H1071F3308
+1071F3308:lI115|H1071F58F0
+1071F58F0:lI101|H1071F8158
+1071F8158:lI114|H1071FADB0
+1071FADB0:lI115|H1071FDCF0
+1071FDCF0:lI47|H107200DA8
+107200DA8:lI110|H107203F50
+107203F50:lI105|H107207180
+107207180:lI99|H10720A408
+10720A408:lI104|H10720D668
+10720D668:lI111|H107210858
+107210858:lI108|H107213AC8
+107213AC8:lI97|H107216E80
+107216E80:lI115|H10721A3F0
+10721A3F0:lI99|H10721D9B0
+10721D9B0:lI97|H107220F00
+107220F00:lI114|H107224168
+107224168:lI108|H1072270B0
+1072270B0:lI115|H107229C18
+107229C18:lI111|H10722C440
+10722C440:lI110|H10722E988
+10722E988:lI47|H107230C00
+107230C00:lI86|H107232BF8
+107232BF8:lI83|H1072348D0
+1072348D0:lI32|H107236308
+107236308:lI67|H107237AD0
+107237AD0:lI111|H1072390E8
+1072390E8:lI100|H10723A580
+10723A580:lI101|H10723B840
+10723B840:lI47|H10723C890
+10723C890:lI65|H10723D700
+10723D700:lI100|H10723E460
+10723E460:lI118|H10723F070
+10723F070:lI101|H10723FB30
+10723FB30:lI110|H107240480
+107240480:lI116|H107240D00
+107240D00:lI79|H107241490
+107241490:lI102|H107241BC0
+107241BC0:lI67|H107242290
+107242290:lI111|H107242900
+107242900:lI100|H107242F00
+107242F00:lI101|H107243470
+107243470:lI47|H1072439B0
+1072439B0:lI97|H107243EA0
+107243EA0:lI111|H107244390
+107244390:lI99|H107244840
+107244840:lI50|H107244CB0
+107244CB0:lI48|H107245110
+107245110:lI50|H107245560
+107245560:lI51|H107245960
+107245960:lI47|H107245D20
+107245D20:lI98|H1072460B0
+1072460B0:lI117|H107246440
+107246440:lI105|H1072467D0
+1072467D0:lI108|H107246B60
+107246B60:lI100|H107246E90
+107246E90:lI47|H1072471B0
+1072471B0:lI100|H1072474D0
+1072474D0:lI101|H1072477E0
+1072477E0:lI118|H107247AE0
+107247AE0:lI47|H107247DD0
+107247DD0:lI101|H1072480A0
+1072480A0:lI114|H107248360
+107248360:lI108|H107248620
+107248620:lI97|H1072488D0
+1072488D0:lI110|H107248B60
+107248B60:lI103|H107248DE0
+107248DE0:lI47|H107249050
+107249050:lI103|H1072492C0
+1072492C0:lI108|H107249520
+107249520:lI101|H107249780
+107249780:lI97|H1072499D0
+1072499D0:lI109|H107249BE0
+107249BE0:lI95|H107249DD0
+107249DD0:lI99|H107249FB0
+107249FB0:lI111|H10724A160
+10724A160:lI109|H10724A2F0
+10724A2F0:lI109|H10724A460
+10724A460:lI117|H10724A5D0
+10724A5D0:lI110|H10724A710
+10724A710:lI105|H10724A830
+10724A830:lI116|H10724A950
+10724A950:lI121|H10724AA50
+10724AA50:lI95|H10724AB20
+10724AB20:lI99|H10724ABC0
+10724ABC0:lI111|H10724AC50
+10724AC50:lI108|H10724ACB0
+10724ACB0:lI111|H10724AD00
+10724AD00:lI117|H10724AD50
+10724AD50:lI114|H10724AD90
+10724AD90:lI47|H10724ADD0
+10724ADD0:lI101|H10724AE00
+10724AE00:lI98|H10724AE20
+10724AE20:lI105|H10724AE40
+10724AE40:lI110|N
+106607F48:lH106607300|H106607F38
+106607300:t2:H1071F0298,A7:nocache
+1071F0298:lI47|H1071F0E58
+1071F0E58:lI85|H1071F2678
+1071F2678:lI115|H1071F49D0
+1071F49D0:lI101|H1071F71F8
+1071F71F8:lI114|H1071F9E50
+1071F9E50:lI115|H1071FCD90
+1071FCD90:lI47|H1071FFE48
+1071FFE48:lI110|H107202FF0
+107202FF0:lI105|H107206220
+107206220:lI99|H1072094D8
+1072094D8:lI104|H10720C738
+10720C738:lI111|H10720F948
+10720F948:lI108|H107212BD8
+107212BD8:lI97|H107215FA0
+107215FA0:lI115|H107219580
+107219580:lI99|H10721CBF0
+10721CBF0:lI97|H107220200
+107220200:lI114|H1072235A8
+1072235A8:lI108|H107226640
+107226640:lI115|H107229338
+107229338:lI111|H10722BC80
+10722BC80:lI110|H10722E2C8
+10722E2C8:lI47|H107230650
+107230650:lI86|H107232748
+107232748:lI83|H107234540
+107234540:lI32|H107236068
+107236068:lI67|H1072378E0
+1072378E0:lI111|H107238F58
+107238F58:lI100|H10723A410
+10723A410:lI101|H10723B740
+10723B740:lI47|H10723C800
+10723C800:lI65|H10723D6A0
+10723D6A0:lI100|H10723E420
+10723E420:lI118|H10723F030
+10723F030:lI101|H10723FB00
+10723FB00:lI110|H107240450
+107240450:lI116|H107240CD0
+107240CD0:lI79|H107241460
+107241460:lI102|H107241B90
+107241B90:lI67|H107242260
+107242260:lI111|H1072428D0
+1072428D0:lI100|H107242ED0
+107242ED0:lI101|H107243440
+107243440:lI47|H107243980
+107243980:lI97|H107243E70
+107243E70:lI111|H107244360
+107244360:lI99|H107244810
+107244810:lI50|H107244C80
+107244C80:lI48|H1072450E0
+1072450E0:lI50|H107245530
+107245530:lI51|H107245930
+107245930:lI47|H107245CF0
+107245CF0:lI98|H107246080
+107246080:lI117|H107246410
+107246410:lI105|H1072467A0
+1072467A0:lI108|H107246B30
+107246B30:lI100|H107246E70
+107246E70:lI47|H107247190
+107247190:lI100|H1072474B0
+1072474B0:lI101|H1072477C0
+1072477C0:lI118|H107247AC0
+107247AC0:lI47|H107247DB0
+107247DB0:lI101|H107248080
+107248080:lI114|H107248340
+107248340:lI108|H107248600
+107248600:lI97|H1072488B0
+1072488B0:lI110|H107248B40
+107248B40:lI103|H107248DC0
+107248DC0:lI47|H107249030
+107249030:lI103|H1072492A0
+1072492A0:lI108|H107249500
+107249500:lI101|H107249760
+107249760:lI97|H1072499B0
+1072499B0:lI109|H107249BC0
+107249BC0:lI95|H107249DB0
+107249DB0:lI104|H107249F90
+107249F90:lI116|H10724A140
+10724A140:lI116|H10724A2D0
+10724A2D0:lI112|H10724A450
+10724A450:lI99|H10724A5C0
+10724A5C0:lI47|H10724A700
+10724A700:lI101|H10724A820
+10724A820:lI98|H10724A940
+10724A940:lI105|H10724AA40
+10724AA40:lI110|N
+106607F38:lH106607F20|H1066006B0
+106607F20:t2:H1071F01E0,A7:nocache
+1071F01E0:lI47|H1071F0CA8
+1071F0CA8:lI85|H1071F2428
+1071F2428:lI115|H1071F4770
+1071F4770:lI101|H1071F6F98
+1071F6F98:lI114|H1071F9BF0
+1071F9BF0:lI115|H1071FCB30
+1071FCB30:lI47|H1071FFBE8
+1071FFBE8:lI110|H107202D90
+107202D90:lI105|H107205FC0
+107205FC0:lI99|H107209278
+107209278:lI104|H10720C4D8
+10720C4D8:lI111|H10720F6F8
+10720F6F8:lI108|H1072129A8
+1072129A8:lI97|H107215D70
+107215D70:lI115|H107219350
+107219350:lI99|H10721C9E0
+10721C9E0:lI97|H107220020
+107220020:lI114|H107223418
+107223418:lI108|H1072264D0
+1072264D0:lI115|H1072291F8
+1072291F8:lI111|H10722BB60
+10722BB60:lI110|H10722E1B8
+10722E1B8:lI47|H107230570
+107230570:lI86|H107232698
+107232698:lI83|H1072344B0
+1072344B0:lI32|H107235FD8
+107235FD8:lI67|H107237850
+107237850:lI111|H107238ED8
+107238ED8:lI100|H10723A3A0
+10723A3A0:lI101|H10723B6E0
+10723B6E0:lI47|H10723C7B0
+10723C7B0:lI65|H10723D670
+10723D670:lI100|H10723E3F0
+10723E3F0:lI118|H10723F000
+10723F000:lI101|H10723FAD0
+10723FAD0:lI110|H107240420
+107240420:lI116|H107240CA0
+107240CA0:lI79|H107241430
+107241430:lI102|H107241B60
+107241B60:lI67|H107242230
+107242230:lI111|H1072428A0
+1072428A0:lI100|H107242EA0
+107242EA0:lI101|H107243410
+107243410:lI47|H107243950
+107243950:lI97|H107243E40
+107243E40:lI111|H107244330
+107244330:lI99|H1072447E0
+1072447E0:lI50|H107244C50
+107244C50:lI48|H1072450B0
+1072450B0:lI50|H107245500
+107245500:lI51|H107245900
+107245900:lI47|H107245CC0
+107245CC0:lI98|H107246050
+107246050:lI117|H1072463E0
+1072463E0:lI105|H107246770
+107246770:lI108|H107246B00
+107246B00:lI100|H107246E40
+107246E40:lI47|H107247160
+107247160:lI100|H107247480
+107247480:lI101|H107247790
+107247790:lI118|H107247A90
+107247A90:lI47|H107247D80
+107247D80:lI101|H107248060
+107248060:lI114|H107248320
+107248320:lI108|H1072485E0
+1072485E0:lI97|H107248890
+107248890:lI110|H107248B20
+107248B20:lI103|H107248DA0
+107248DA0:lI47|H107249010
+107249010:lI103|H107249280
+107249280:lI108|H1072494E0
+1072494E0:lI101|H107249740
+107249740:lI97|H107249990
+107249990:lI109|H107249BA0
+107249BA0:lI95|H107249D90
+107249D90:lI115|H107249F70
+107249F70:lI116|H10724A120
+10724A120:lI100|H10724A2B0
+10724A2B0:lI108|H10724A430
+10724A430:lI105|H10724A5A0
+10724A5A0:lI98|H10724A6E0
+10724A6E0:lI47|H10724A800
+10724A800:lI101|H10724A920
+10724A920:lI98|H10724AA20
+10724AA20:lI105|H10724AB00
+10724AB00:lI110|N
+1066006B0:lH106600708|H106600720
+106600708:t2:H1071F0120,A7:nocache
+1071F0120:lI47|H1071F0978
+1071F0978:lI85|H1071F1EA0
+1071F1EA0:lI115|H1071F4188
+1071F4188:lI101|H1071F69A8
+1071F69A8:lI114|H1071F9600
+1071F9600:lI115|H1071FC540
+1071FC540:lI47|H1071FF5F8
+1071FF5F8:lI110|H1072027A0
+1072027A0:lI105|H1072059E0
+1072059E0:lI99|H107208CB8
+107208CB8:lI104|H10720BF68
+10720BF68:lI111|H10720F1E8
+10720F1E8:lI108|H107212508
+107212508:lI97|H107215990
+107215990:lI115|H107219000
+107219000:lI99|H10721C760
+10721C760:lI97|H10721FDE0
+10721FDE0:lI114|H107223268
+107223268:lI108|H107226350
+107226350:lI115|H1072290E8
+1072290E8:lI111|H10722BAB0
+10722BAB0:lI110|H10722E118
+10722E118:lI47|H1072304D0
+1072304D0:lI86|H1072325F8
+1072325F8:lI83|H107234430
+107234430:lI32|H107235F78
+107235F78:lI67|H107237810
+107237810:lI111|H107238E98
+107238E98:lI100|H10723A370
+10723A370:lI101|H10723B6B0
+10723B6B0:lI47|H10723C780
+10723C780:lI65|H10723D640
+10723D640:lI100|H10723E3C0
+10723E3C0:lI118|H10723EFD0
+10723EFD0:lI101|H10723FAA0
+10723FAA0:lI110|H1072403F0
+1072403F0:lI116|H107240C70
+107240C70:lI79|H107241400
+107241400:lI102|H107241B30
+107241B30:lI67|H107242200
+107242200:lI111|H107242870
+107242870:lI100|H107242E70
+107242E70:lI101|H1072433E0
+1072433E0:lI47|H107243920
+107243920:lI97|H107243E10
+107243E10:lI111|H107244300
+107244300:lI99|H1072447B0
+1072447B0:lI50|H107244C20
+107244C20:lI48|H107245080
+107245080:lI50|H1072454D0
+1072454D0:lI51|H1072458D0
+1072458D0:lI47|H107245C90
+107245C90:lI98|H107246020
+107246020:lI117|H1072463B0
+1072463B0:lI105|H107246740
+107246740:lI108|H107246AD0
+107246AD0:lI100|H107246E10
+107246E10:lI47|H107247130
+107247130:lI100|H107247450
+107247450:lI101|H107247760
+107247760:lI118|H107247A60
+107247A60:lI47|H107247D50
+107247D50:lI101|H107248030
+107248030:lI114|H1072482F0
+1072482F0:lI108|H1072485B0
+1072485B0:lI97|H107248860
+107248860:lI110|H107248B00
+107248B00:lI103|H107248D80
+107248D80:lI47|H107248FF0
+107248FF0:lI103|H107249260
+107249260:lI108|H1072494C0
+1072494C0:lI101|H107249720
+107249720:lI101|H107249970
+107249970:lI117|H107249B80
+107249B80:lI110|H107249D70
+107249D70:lI105|H107249F50
+107249F50:lI116|H10724A100
+10724A100:lI47|H10724A290
+10724A290:lI101|H10724A410
+10724A410:lI98|H10724A580
+10724A580:lI105|H10724A6D0
+10724A6D0:lI110|N
+106600720:lH106600778|H106600790
+106600778:t2:H1071F0068,A7:nocache
+1071F0068:lI47|H1071F0628
+1071F0628:lI85|H1071F18B0
+1071F18B0:lI115|H1071F3B28
+1071F3B28:lI101|H1071F6340
+1071F6340:lI114|H1071F8F90
+1071F8F90:lI115|H1071FBED0
+1071FBED0:lI47|H1071FEF88
+1071FEF88:lI110|H107202130
+107202130:lI105|H107205370
+107205370:lI99|H107208668
+107208668:lI104|H10720B938
+10720B938:lI111|H10720EBF8
+10720EBF8:lI108|H107211F58
+107211F58:lI97|H107215430
+107215430:lI115|H107218AC0
+107218AC0:lI99|H10721C2F0
+10721C2F0:lI97|H10721F9F0
+10721F9F0:lI114|H107222EE8
+107222EE8:lI108|H107226050
+107226050:lI115|H107228E38
+107228E38:lI111|H10722B870
+10722B870:lI110|H10722DF48
+10722DF48:lI47|H107230370
+107230370:lI86|H1072324E8
+1072324E8:lI83|H107234350
+107234350:lI32|H107235EB8
+107235EB8:lI67|H1072377B0
+1072377B0:lI111|H107238E38
+107238E38:lI100|H10723A310
+10723A310:lI101|H10723B670
+10723B670:lI47|H10723C750
+10723C750:lI65|H10723D610
+10723D610:lI100|H10723E390
+10723E390:lI118|H10723EFA0
+10723EFA0:lI101|H10723FA70
+10723FA70:lI110|H1072403C0
+1072403C0:lI116|H107240C40
+107240C40:lI79|H1072413D0
+1072413D0:lI102|H107241B00
+107241B00:lI67|H1072421D0
+1072421D0:lI111|H107242840
+107242840:lI100|H107242E40
+107242E40:lI101|H1072433B0
+1072433B0:lI47|H1072438F0
+1072438F0:lI97|H107243DE0
+107243DE0:lI111|H1072442D0
+1072442D0:lI99|H107244780
+107244780:lI50|H107244BF0
+107244BF0:lI48|H107245050
+107245050:lI50|H1072454A0
+1072454A0:lI51|H1072458A0
+1072458A0:lI47|H107245C60
+107245C60:lI98|H107245FF0
+107245FF0:lI117|H107246380
+107246380:lI105|H107246710
+107246710:lI108|H107246AA0
+107246AA0:lI100|H107246DE0
+107246DE0:lI47|H107247100
+107247100:lI100|H107247420
+107247420:lI101|H107247730
+107247730:lI118|H107247A30
+107247A30:lI47|H107247D20
+107247D20:lI101|H107248000
+107248000:lI114|H1072482C0
+1072482C0:lI108|H107248580
+107248580:lI97|H107248830
+107248830:lI110|H107248AE0
+107248AE0:lI103|H107248D60
+107248D60:lI47|H107248FD0
+107248FD0:lI115|H107249240
+107249240:lI110|H1072494A0
+1072494A0:lI97|H107249700
+107249700:lI103|H107249950
+107249950:lI47|H107249B60
+107249B60:lI101|H107249D50
+107249D50:lI98|H107249F30
+107249F30:lI105|H10724A0E0
+10724A0E0:lI110|N
+106600790:lH1066007E8|H106600800
+1066007E8:t2:H1071F0058,A7:nocache
+1071F0058:lI47|H1071F0618
+1071F0618:lI85|H1071F18A0
+1071F18A0:lI115|H1071F3B18
+1071F3B18:lI101|H1071F6330
+1071F6330:lI114|H1071F8F80
+1071F8F80:lI115|H1071FBEC0
+1071FBEC0:lI47|H1071FEF78
+1071FEF78:lI110|H107202120
+107202120:lI105|H107205360
+107205360:lI99|H107208658
+107208658:lI104|H10720B928
+10720B928:lI111|H10720EBE8
+10720EBE8:lI108|H107211F48
+107211F48:lI97|H107215420
+107215420:lI115|H107218AB0
+107218AB0:lI99|H10721C2E0
+10721C2E0:lI97|H10721F9E0
+10721F9E0:lI114|H107222ED8
+107222ED8:lI108|H107226040
+107226040:lI115|H107228E28
+107228E28:lI111|H10722B860
+10722B860:lI110|H10722DF38
+10722DF38:lI47|H107230360
+107230360:lI86|H1072324D8
+1072324D8:lI83|H107234340
+107234340:lI32|H107235EA8
+107235EA8:lI67|H1072377A0
+1072377A0:lI111|H107238E28
+107238E28:lI100|H10723A300
+10723A300:lI101|H10723B660
+10723B660:lI47|H10723C740
+10723C740:lI65|H10723D600
+10723D600:lI100|H10723E380
+10723E380:lI118|H10723EF90
+10723EF90:lI101|H10723FA60
+10723FA60:lI110|H1072403B0
+1072403B0:lI116|H107240C30
+107240C30:lI79|H1072413C0
+1072413C0:lI102|H107241AF0
+107241AF0:lI67|H1072421C0
+1072421C0:lI111|H107242830
+107242830:lI100|H107242E30
+107242E30:lI101|H1072433A0
+1072433A0:lI47|H1072438E0
+1072438E0:lI97|H107243DD0
+107243DD0:lI111|H1072442C0
+1072442C0:lI99|H107244770
+107244770:lI50|H107244BE0
+107244BE0:lI48|H107245040
+107245040:lI50|H107245490
+107245490:lI51|H107245890
+107245890:lI47|H107245C50
+107245C50:lI98|H107245FE0
+107245FE0:lI117|H107246370
+107246370:lI105|H107246700
+107246700:lI108|H107246A90
+107246A90:lI100|H107246DD0
+107246DD0:lI47|H1072470F0
+1072470F0:lI100|H107247410
+107247410:lI101|H107247720
+107247720:lI118|H107247A20
+107247A20:lI47|H107247D10
+107247D10:lI101|H107247FF0
+107247FF0:lI114|H1072482B0
+1072482B0:lI108|H107248570
+107248570:lI97|H107248820
+107248820:lI110|H107248AD0
+107248AD0:lI103|H107248D50
+107248D50:lI47|H107248FC0
+107248FC0:lI116|H107249230
+107249230:lI111|H107249490
+107249490:lI109|H1072496F0
+1072496F0:lI47|H107249940
+107249940:lI101|H107249B50
+107249B50:lI98|H107249D40
+107249D40:lI105|H107249F20
+107249F20:lI110|N
+106600800:lH106600858|H106600870
+106600858:t2:H1071F0028,A7:nocache
+1071F0028:lI47|H1071F05E8
+1071F05E8:lI85|H1071F1870
+1071F1870:lI115|H1071F3AE8
+1071F3AE8:lI101|H1071F6300
+1071F6300:lI114|H1071F8F50
+1071F8F50:lI115|H1071FBE90
+1071FBE90:lI47|H1071FEF48
+1071FEF48:lI110|H1072020F0
+1072020F0:lI105|H107205330
+107205330:lI99|H107208628
+107208628:lI104|H10720B8F8
+10720B8F8:lI111|H10720EBB8
+10720EBB8:lI108|H107211F18
+107211F18:lI97|H1072153F0
+1072153F0:lI115|H107218A80
+107218A80:lI99|H10721C2B0
+10721C2B0:lI97|H10721F9B0
+10721F9B0:lI114|H107222EA8
+107222EA8:lI108|H107226010
+107226010:lI115|H107228DF8
+107228DF8:lI111|H10722B830
+10722B830:lI110|H10722DF08
+10722DF08:lI47|H107230330
+107230330:lI86|H1072324A8
+1072324A8:lI83|H107234310
+107234310:lI32|H107235E78
+107235E78:lI67|H107237770
+107237770:lI111|H107238DF8
+107238DF8:lI100|H10723A2D0
+10723A2D0:lI101|H10723B630
+10723B630:lI47|H10723C710
+10723C710:lI65|H10723D5D0
+10723D5D0:lI100|H10723E350
+10723E350:lI118|H10723EF60
+10723EF60:lI101|H10723FA30
+10723FA30:lI110|H107240380
+107240380:lI116|H107240C00
+107240C00:lI79|H107241390
+107241390:lI102|H107241AC0
+107241AC0:lI67|H107242190
+107242190:lI111|H107242800
+107242800:lI100|H107242E00
+107242E00:lI101|H107243370
+107243370:lI47|H1072438B0
+1072438B0:lI97|H107243DB0
+107243DB0:lI111|H1072442A0
+1072442A0:lI99|H107244750
+107244750:lI50|H107244BC0
+107244BC0:lI48|H107245020
+107245020:lI50|H107245470
+107245470:lI51|H107245870
+107245870:lI47|H107245C30
+107245C30:lI98|H107245FC0
+107245FC0:lI117|H107246350
+107246350:lI105|H1072466E0
+1072466E0:lI108|H107246A70
+107246A70:lI100|H107246DB0
+107246DB0:lI47|H1072470D0
+1072470D0:lI100|H1072473F0
+1072473F0:lI101|H107247700
+107247700:lI118|H107247A00
+107247A00:lI47|H107247CF0
+107247CF0:lI101|H107247FD0
+107247FD0:lI114|H107248290
+107248290:lI108|H107248550
+107248550:lI97|H107248800
+107248800:lI110|H107248AB0
+107248AB0:lI103|H107248D30
+107248D30:lI47|H107248FA0
+107248FA0:lI97|H107249210
+107249210:lI111|H107249470
+107249470:lI99|H1072496D0
+1072496D0:lI50|H107249920
+107249920:lI48|H107249B30
+107249B30:lI50|H107249D20
+107249D20:lI51|H107249F00
+107249F00:lI47|H10724A0C0
+10724A0C0:lI101|H10724A260
+10724A260:lI98|H10724A3E0
+10724A3E0:lI105|H10724A550
+10724A550:lI110|N
+106600870:lH1066008B8|H1066008D0
+1066008B8:t2:H1071F0048,A7:nocache
+1071F0048:lI47|H1071F0608
+1071F0608:lI85|H1071F1890
+1071F1890:lI115|H1071F3B08
+1071F3B08:lI101|H1071F6320
+1071F6320:lI114|H1071F8F70
+1071F8F70:lI115|H1071FBEB0
+1071FBEB0:lI47|H1071FEF68
+1071FEF68:lI110|H107202110
+107202110:lI105|H107205350
+107205350:lI99|H107208648
+107208648:lI104|H10720B918
+10720B918:lI111|H10720EBD8
+10720EBD8:lI108|H107211F38
+107211F38:lI97|H107215410
+107215410:lI115|H107218AA0
+107218AA0:lI99|H10721C2D0
+10721C2D0:lI97|H10721F9D0
+10721F9D0:lI114|H107222EC8
+107222EC8:lI108|H107226030
+107226030:lI115|H107228E18
+107228E18:lI111|H10722B850
+10722B850:lI110|H10722DF28
+10722DF28:lI47|H107230350
+107230350:lI86|H1072324C8
+1072324C8:lI83|H107234330
+107234330:lI32|H107235E98
+107235E98:lI67|H107237790
+107237790:lI111|H107238E18
+107238E18:lI100|H10723A2F0
+10723A2F0:lI101|H10723B650
+10723B650:lI47|H10723C730
+10723C730:lI65|H10723D5F0
+10723D5F0:lI100|H10723E370
+10723E370:lI118|H10723EF80
+10723EF80:lI101|H10723FA50
+10723FA50:lI110|H1072403A0
+1072403A0:lI116|H107240C20
+107240C20:lI79|H1072413B0
+1072413B0:lI102|H107241AE0
+107241AE0:lI67|H1072421B0
+1072421B0:lI111|H107242820
+107242820:lI100|H107242E20
+107242E20:lI101|H107243390
+107243390:lI47|H1072438D0
+1072438D0:lI97|H107243DC0
+107243DC0:lI111|H1072442B0
+1072442B0:lI99|H107244760
+107244760:lI50|H107244BD0
+107244BD0:lI48|H107245030
+107245030:lI50|H107245480
+107245480:lI51|H107245880
+107245880:lI47|H107245C40
+107245C40:lI98|H107245FD0
+107245FD0:lI117|H107246360
+107246360:lI105|H1072466F0
+1072466F0:lI108|H107246A80
+107246A80:lI100|H107246DC0
+107246DC0:lI47|H1072470E0
+1072470E0:lI100|H107247400
+107247400:lI101|H107247710
+107247710:lI118|H107247A10
+107247A10:lI47|H107247D00
+107247D00:lI101|H107247FE0
+107247FE0:lI114|H1072482A0
+1072482A0:lI108|H107248560
+107248560:lI97|H107248810
+107248810:lI110|H107248AC0
+107248AC0:lI103|H107248D40
+107248D40:lI47|H107248FB0
+107248FB0:lI115|H107249220
+107249220:lI105|H107249480
+107249480:lI109|H1072496E0
+1072496E0:lI112|H107249930
+107249930:lI108|H107249B40
+107249B40:lI105|H107249D30
+107249D30:lI102|H107249F10
+107249F10:lI105|H10724A0D0
+10724A0D0:lI108|H10724A270
+10724A270:lI101|H10724A3F0
+10724A3F0:lI47|H10724A560
+10724A560:lI101|H10724A6B0
+10724A6B0:lI98|H10724A7E0
+10724A7E0:lI105|H10724A900
+10724A900:lI110|N
+1066008D0:lH106600900|H106600918
+106600900:t2:H280052958,A7:nocache
+106600918:lH106600948|H106600960
+106600948:t2:H1071F0088,H1071F0098
+1071F0098:Mh64:F:H1071F0658,H1071F0698,H1071F06C8,H1071F0718,H1071F0740,H1071F0778,H1071F07B0,H1071F07E0,H1071F0808,H1071F0830,H1071F0878,H1071F08A8,H1071F08D0,H1071F0908,H1071F0938
+1071F0658:Mn7:H1071F18E0,H1071F18F0,H1071F1900,H1071F1910,H1071F1920,H1071F1930,H1071F1940
+1071F18E0:lH1071F3B58|N
+1071F3B58:lI103|H1071F6370
+1071F6370:lI101|H1071F8FC0
+1071F8FC0:lI110|H1071FBF00
+1071FBF00:lI95|H1071FEFB8
+1071FEFB8:lI116|H107202160
+107202160:lI99|H1072053A0
+1072053A0:lI112|H107208698
+107208698:lI46|H10720B968
+10720B968:lI98|H10720EC28
+10720EC28:lI101|H107211F88
+107211F88:lI97|H107215460
+107215460:lI109|N
+1071F1940:lH1071F3BB8|N
+1071F3BB8:lI105|H1071F63D0
+1071F63D0:lI110|H1071F9020
+1071F9020:lI101|H1071FBF60
+1071FBF60:lI116|H1071FF018
+1071FF018:lI95|H1072021C0
+1072021C0:lI114|H107205400
+107205400:lI101|H1072086F8
+1072086F8:lI115|H10720B9C8
+10720B9C8:lI46|H10720EC88
+10720EC88:lI98|H107211FD8
+107211FD8:lI101|H1072154A0
+1072154A0:lI97|H107218B20
+107218B20:lI109|N
+1071F1930:lH1071F3BA8|N
+1071F3BA8:lI114|H1071F63C0
+1071F63C0:lI97|H1071F9010
+1071F9010:lI119|H1071FBF50
+1071FBF50:lI95|H1071FF008
+1071FF008:lI102|H1072021B0
+1072021B0:lI105|H1072053F0
+1072053F0:lI108|H1072086E8
+1072086E8:lI101|H10720B9B8
+10720B9B8:lI95|H10720EC78
+10720EC78:lI105|H107211FC8
+107211FC8:lI111|H107215490
+107215490:lI46|H107218B10
+107218B10:lI98|H10721C340
+10721C340:lI101|H10721FA40
+10721FA40:lI97|H107222F38
+107222F38:lI109|N
+1071F1920:lH1071F3B98|N
+1071F3B98:lI103|H1071F63B0
+1071F63B0:lI114|H1071F9000
+1071F9000:lI111|H1071FBF40
+1071FBF40:lI117|H1071FEFF8
+1071FEFF8:lI112|H1072021A0
+1072021A0:lI46|H1072053E0
+1072053E0:lI98|H1072086D8
+1072086D8:lI101|H10720B9A8
+10720B9A8:lI97|H10720EC68
+10720EC68:lI109|N
+1071F1910:lH1071F3B88|N
+1071F3B88:lI107|H1071F63A0
+1071F63A0:lI101|H1071F8FF0
+1071F8FF0:lI114|H1071FBF30
+1071FBF30:lI110|H1071FEFE8
+1071FEFE8:lI101|H107202190
+107202190:lI108|H1072053D0
+1072053D0:lI95|H1072086C8
+1072086C8:lI114|H10720B998
+10720B998:lI101|H10720EC58
+10720EC58:lI102|H107211FB8
+107211FB8:lI99|H107215480
+107215480:lI46|H107218B00
+107218B00:lI98|H10721C330
+10721C330:lI101|H10721FA30
+10721FA30:lI97|H107222F28
+107222F28:lI109|N
+1071F1900:lH1071F3B78|N
+1071F3B78:lI115|H1071F6390
+1071F6390:lI111|H1071F8FE0
+1071F8FE0:lI99|H1071FBF20
+1071FBF20:lI107|H1071FEFD8
+1071FEFD8:lI101|H107202180
+107202180:lI116|H1072053C0
+1072053C0:lI46|H1072086B8
+1072086B8:lI98|H10720B988
+10720B988:lI101|H10720EC48
+10720EC48:lI97|H107211FA8
+107211FA8:lI109|N
+1071F18F0:lH1071F3B68|N
+1071F3B68:lI100|H1071F6380
+1071F6380:lI105|H1071F8FD0
+1071F8FD0:lI115|H1071FBF10
+1071FBF10:lI107|H1071FEFC8
+1071FEFC8:lI95|H107202170
+107202170:lI108|H1072053B0
+1072053B0:lI111|H1072086A8
+1072086A8:lI103|H10720B978
+10720B978:lI95|H10720EC38
+10720EC38:lI115|H107211F98
+107211F98:lI117|H107215470
+107215470:lI112|H107218AF0
+107218AF0:lI46|H10721C320
+10721C320:lI98|H10721FA20
+10721FA20:lI101|H107222F18
+107222F18:lI97|H107226080
+107226080:lI109|N
+1071F0938:Mn7:H1071F1E28,H1071F1E38,H1071F1E48,H1071F1E58,H1071F1E70,H1071F1E80,H1071F1E90
+1071F1E28:lH1071F4108|N
+1071F4108:lI105|H1071F6928
+1071F6928:lI110|H1071F9580
+1071F9580:lI101|H1071FC4C0
+1071FC4C0:lI116|H1071FF578
+1071FF578:lI54|H107202720
+107202720:lI95|H107205960
+107205960:lI116|H107208C48
+107208C48:lI99|H10720BEF8
+10720BEF8:lI112|H10720F178
+10720F178:lI46|H107212498
+107212498:lI98|H107215930
+107215930:lI101|H107218FA0
+107218FA0:lI97|H10721C720
+10721C720:lI109|N
+1071F1E90:lH1071F4178|N
+1071F4178:lI105|H1071F6998
+1071F6998:lI110|H1071F95F0
+1071F95F0:lI101|H1071FC530
+1071FC530:lI116|H1071FF5E8
+1071FF5E8:lI95|H107202790
+107202790:lI101|H1072059D0
+1072059D0:lI112|H107208CA8
+107208CA8:lI109|H10720BF58
+10720BF58:lI100|H10720F1D8
+10720F1D8:lI95|H1072124F8
+1072124F8:lI115|H107215980
+107215980:lI111|H107218FF0
+107218FF0:lI99|H10721C750
+10721C750:lI107|H10721FDD0
+10721FDD0:lI101|H107223258
+107223258:lI116|H107226340
+107226340:lI46|H1072290D8
+1072290D8:lI98|H10722BAA0
+10722BAA0:lI101|H10722E108
+10722E108:lI97|H1072304C0
+1072304C0:lI109|N
+1071F1E80:lH1071F4168|N
+1071F4168:lI112|H1071F6988
+1071F6988:lI103|H1071F95E0
+1071F95E0:lI46|H1071FC520
+1071FC520:lI98|H1071FF5D8
+1071FF5D8:lI101|H107202780
+107202780:lI97|H1072059C0
+1072059C0:lI109|N
+1071F1E70:lH1071F4158|N
+1071F4158:lI108|H1071F6978
+1071F6978:lI111|H1071F95D0
+1071F95D0:lI99|H1071FC510
+1071FC510:lI97|H1071FF5C8
+1071FF5C8:lI108|H107202770
+107202770:lI95|H1072059B0
+1072059B0:lI117|H107208C98
+107208C98:lI100|H10720BF48
+10720BF48:lI112|H10720F1C8
+10720F1C8:lI46|H1072124E8
+1072124E8:lI98|H107215970
+107215970:lI101|H107218FE0
+107218FE0:lI97|H10721C740
+10721C740:lI109|N
+1071F1E58:Mn2:H1071F4138,H1071F4148
+1071F4138:lH1071F6958|N
+1071F6958:lI107|H1071F95B0
+1071F95B0:lI101|H1071FC4F0
+1071FC4F0:lI114|H1071FF5A8
+1071FF5A8:lI110|H107202750
+107202750:lI101|H107205990
+107205990:lI108|H107208C78
+107208C78:lI46|H10720BF28
+10720BF28:lI97|H10720F1A8
+10720F1A8:lI112|H1072124C8
+1072124C8:lI112|H107215950
+107215950:lI117|H107218FC0
+107218FC0:lI112|N
+1071F4148:lH1071F6968|N
+1071F6968:lI103|H1071F95C0
+1071F95C0:lI101|H1071FC500
+1071FC500:lI110|H1071FF5B8
+1071FF5B8:lI95|H107202760
+107202760:lI117|H1072059A0
+1072059A0:lI100|H107208C88
+107208C88:lI112|H10720BF38
+10720BF38:lI46|H10720F1B8
+10720F1B8:lI98|H1072124D8
+1072124D8:lI101|H107215960
+107215960:lI97|H107218FD0
+107218FD0:lI109|N
+1071F1E48:lH1071F4128|N
+1071F4128:lI108|H1071F6948
+1071F6948:lI111|H1071F95A0
+1071F95A0:lI103|H1071FC4E0
+1071FC4E0:lI103|H1071FF598
+1071FF598:lI101|H107202740
+107202740:lI114|H107205980
+107205980:lI95|H107208C68
+107208C68:lI104|H10720BF18
+10720BF18:lI95|H10720F198
+10720F198:lI99|H1072124B8
+1072124B8:lI111|H107215940
+107215940:lI109|H107218FB0
+107218FB0:lI109|H10721C730
+10721C730:lI111|H10721FDC0
+10721FDC0:lI110|H107223248
+107223248:lI46|H107226330
+107226330:lI98|H1072290C8
+1072290C8:lI101|H10722BA90
+10722BA90:lI97|H10722E0F8
+10722E0F8:lI109|N
+1071F1E38:lH1071F4118|N
+1071F4118:lI108|H1071F6938
+1071F6938:lI111|H1071F9590
+1071F9590:lI103|H1071FC4D0
+1071FC4D0:lI103|H1071FF588
+1071FF588:lI101|H107202730
+107202730:lI114|H107205970
+107205970:lI46|H107208C58
+107208C58:lI98|H10720BF08
+10720BF08:lI101|H10720F188
+10720F188:lI97|H1072124A8
+1072124A8:lI109|N
+1071F0908:Mn5:H1071F1DD0,H1071F1DE8,H1071F1DF8,H1071F1E08,H1071F1E18
+1071F1DD0:Mn2:H1071F40A8,H1071F40B8
+1071F40A8:lH1071F68C8|N
+1071F68C8:lI115|H1071F9520
+1071F9520:lI101|H1071FC460
+1071FC460:lI113|H1071FF518
+1071FF518:lI95|H1072026C0
+1072026C0:lI116|H107205900
+107205900:lI114|H107208BE8
+107208BE8:lI97|H10720BE98
+10720BE98:lI99|H10720F118
+10720F118:lI101|H107212438
+107212438:lI46|H1072158D0
+1072158D0:lI98|H107218F40
+107218F40:lI101|H10721C6D0
+10721C6D0:lI97|H10721FD80
+10721FD80:lI109|N
+1071F40B8:lH1071F68D8|N
+1071F68D8:lI101|H1071F9530
+1071F9530:lI114|H1071FC470
+1071FC470:lI108|H1071FF528
+1071FF528:lI95|H1072026D0
+1072026D0:lI100|H107205910
+107205910:lI100|H107208BF8
+107208BF8:lI108|H10720BEA8
+10720BEA8:lI108|H10720F128
+10720F128:lI46|H107212448
+107212448:lI98|H1072158E0
+1072158E0:lI101|H107218F50
+107218F50:lI97|H10721C6E0
+10721C6E0:lI109|N
+1071F1E18:lH1071F40F8|N
+1071F40F8:lI97|H1071F6918
+1071F6918:lI112|H1071F9570
+1071F9570:lI112|H1071FC4B0
+1071FC4B0:lI108|H1071FF568
+1071FF568:lI105|H107202710
+107202710:lI99|H107205950
+107205950:lI97|H107208C38
+107208C38:lI116|H10720BEE8
+10720BEE8:lI105|H10720F168
+10720F168:lI111|H107212488
+107212488:lI110|H107215920
+107215920:lI46|H107218F90
+107218F90:lI98|H10721C710
+10721C710:lI101|H10721FDB0
+10721FDB0:lI97|H107223238
+107223238:lI109|N
+1071F1E08:lH1071F40E8|N
+1071F40E8:lI105|H1071F6908
+1071F6908:lI110|H1071F9560
+1071F9560:lI101|H1071FC4A0
+1071FC4A0:lI116|H1071FF558
+1071FF558:lI95|H107202700
+107202700:lI101|H107205940
+107205940:lI112|H107208C28
+107208C28:lI109|H10720BED8
+10720BED8:lI100|H10720F158
+10720F158:lI95|H107212478
+107212478:lI100|H107215910
+107215910:lI105|H107218F80
+107218F80:lI115|H10721C700
+10721C700:lI116|H10721FDA0
+10721FDA0:lI46|H107223228
+107223228:lI98|H107226320
+107226320:lI101|H1072290B8
+1072290B8:lI97|H10722BA80
+10722BA80:lI109|N
+1071F1DF8:lH1071F40D8|N
+1071F40D8:lI114|H1071F68F8
+1071F68F8:lI97|H1071F9550
+1071F9550:lI109|H1071FC490
+1071FC490:lI95|H1071FF548
+1071FF548:lI102|H1072026F0
+1072026F0:lI105|H107205930
+107205930:lI108|H107208C18
+107208C18:lI101|H10720BEC8
+10720BEC8:lI46|H10720F148
+10720F148:lI98|H107212468
+107212468:lI101|H107215900
+107215900:lI97|H107218F70
+107218F70:lI109|N
+1071F1DE8:lH1071F40C8|N
+1071F40C8:lI105|H1071F68E8
+1071F68E8:lI110|H1071F9540
+1071F9540:lI101|H1071FC480
+1071FC480:lI116|H1071FF538
+1071FF538:lI54|H1072026E0
+1072026E0:lI95|H107205920
+107205920:lI115|H107208C08
+107208C08:lI99|H10720BEB8
+10720BEB8:lI116|H10720F138
+10720F138:lI112|H107212458
+107212458:lI46|H1072158F0
+1072158F0:lI98|H107218F60
+107218F60:lI101|H10721C6F0
+10721C6F0:lI97|H10721FD90
+10721FD90:lI109|N
+1071F08D0:Mn6:H1071F1D68,H1071F1D80,H1071F1D90,H1071F1DA0,H1071F1DB0,H1071F1DC0
+1071F1D68:Mn2:H1071F4038,H1071F4048
+1071F4038:lH1071F6858|N
+1071F6858:lI100|H1071F94B0
+1071F94B0:lI105|H1071FC3F0
+1071FC3F0:lI115|H1071FF4A8
+1071FF4A8:lI107|H107202650
+107202650:lI95|H107205890
+107205890:lI108|H107208B78
+107208B78:lI111|H10720BE28
+10720BE28:lI103|H10720F0A8
+10720F0A8:lI46|H1072123C8
+1072123C8:lI98|H107215860
+107215860:lI101|H107218ED0
+107218ED0:lI97|H10721C670
+10721C670:lI109|N
+1071F4048:lH1071F6868|N
+1071F6868:lI103|H1071F94C0
+1071F94C0:lI101|H1071FC400
+1071FC400:lI110|H1071FF4B8
+1071FF4B8:lI95|H107202660
+107202660:lI117|H1072058A0
+1072058A0:lI100|H107208B88
+107208B88:lI112|H10720BE38
+10720BE38:lI95|H10720F0B8
+10720F0B8:lI115|H1072123D8
+1072123D8:lI111|H107215870
+107215870:lI99|H107218EE0
+107218EE0:lI107|H10721C680
+10721C680:lI101|H10721FD30
+10721FD30:lI116|H1072231D8
+1072231D8:lI46|H1072262E0
+1072262E0:lI98|H107229078
+107229078:lI101|H10722BA40
+10722BA40:lI97|H10722E0B8
+10722E0B8:lI109|N
+1071F1DC0:lH1071F4098|N
+1071F4098:lI101|H1071F68B8
+1071F68B8:lI114|H1071F9510
+1071F9510:lI108|H1071FC450
+1071FC450:lI95|H1071FF508
+1071FF508:lI115|H1072026B0
+1072026B0:lI105|H1072058F0
+1072058F0:lI103|H107208BD8
+107208BD8:lI110|H10720BE88
+10720BE88:lI97|H10720F108
+10720F108:lI108|H107212428
+107212428:lI95|H1072158C0
+1072158C0:lI104|H107218F30
+107218F30:lI97|H10721C6C0
+10721C6C0:lI110|H10721FD70
+10721FD70:lI100|H107223218
+107223218:lI108|H107226310
+107226310:lI101|H1072290A8
+1072290A8:lI114|H10722BA70
+10722BA70:lI46|H10722E0E8
+10722E0E8:lI98|H1072304B0
+1072304B0:lI101|H1072325E8
+1072325E8:lI97|H107234420
+107234420:lI109|N
+1071F1DB0:lH1071F4088|N
+1071F4088:lI114|H1071F68A8
+1071F68A8:lI97|H1071F9500
+1071F9500:lI119|H1071FC440
+1071FC440:lI95|H1071FF4F8
+1071FF4F8:lI102|H1072026A0
+1072026A0:lI105|H1072058E0
+1072058E0:lI108|H107208BC8
+107208BC8:lI101|H10720BE78
+10720BE78:lI95|H10720F0F8
+10720F0F8:lI105|H107212418
+107212418:lI111|H1072158B0
+1072158B0:lI95|H107218F20
+107218F20:lI105|H10721C6B0
+10721C6B0:lI110|H10721FD60
+10721FD60:lI102|H107223208
+107223208:lI108|H107226300
+107226300:lI97|H107229098
+107229098:lI116|H10722BA60
+10722BA60:lI101|H10722E0D8
+10722E0D8:lI46|H1072304A0
+1072304A0:lI98|H1072325D8
+1072325D8:lI101|H107234410
+107234410:lI97|H107235F68
+107235F68:lI109|N
+1071F1DA0:lH1071F4078|N
+1071F4078:lI102|H1071F6898
+1071F6898:lI105|H1071F94F0
+1071F94F0:lI108|H1071FC430
+1071FC430:lI101|H1071FF4E8
+1071FF4E8:lI95|H107202690
+107202690:lI115|H1072058D0
+1072058D0:lI101|H107208BB8
+107208BB8:lI114|H10720BE68
+10720BE68:lI118|H10720F0E8
+10720F0E8:lI101|H107212408
+107212408:lI114|H1072158A0
+1072158A0:lI46|H107218F10
+107218F10:lI98|H10721C6A0
+10721C6A0:lI101|H10721FD50
+10721FD50:lI97|H1072231F8
+1072231F8:lI109|N
+1071F1D90:lH1071F4068|N
+1071F4068:lI112|H1071F6888
+1071F6888:lI114|H1071F94E0
+1071F94E0:lI105|H1071FC420
+1071FC420:lI109|H1071FF4D8
+1071FF4D8:lI95|H107202680
+107202680:lI116|H1072058C0
+1072058C0:lI116|H107208BA8
+107208BA8:lI121|H10720BE58
+10720BE58:lI46|H10720F0D8
+10720F0D8:lI98|H1072123F8
+1072123F8:lI101|H107215890
+107215890:lI97|H107218F00
+107218F00:lI109|N
+1071F1D80:lH1071F4058|N
+1071F4058:lI101|H1071F6878
+1071F6878:lI114|H1071F94D0
+1071F94D0:lI108|H1071FC410
+1071FC410:lI95|H1071FF4C8
+1071FF4C8:lI98|H107202670
+107202670:lI111|H1072058B0
+1072058B0:lI111|H107208B98
+107208B98:lI116|H10720BE48
+10720BE48:lI95|H10720F0C8
+10720F0C8:lI115|H1072123E8
+1072123E8:lI101|H107215880
+107215880:lI114|H107218EF0
+107218EF0:lI118|H10721C690
+10721C690:lI101|H10721FD40
+10721FD40:lI114|H1072231E8
+1072231E8:lI46|H1072262F0
+1072262F0:lI98|H107229088
+107229088:lI101|H10722BA50
+10722BA50:lI97|H10722E0C8
+10722E0C8:lI109|N
+1071F08A8:Mn4:H1071F1D18,H1071F1D28,H1071F1D40,H1071F1D50
+1071F1D18:lH1071F3FD8|N
+1071F3FD8:lI104|H1071F67F8
+1071F67F8:lI101|H1071F9450
+1071F9450:lI97|H1071FC390
+1071FC390:lI114|H1071FF448
+1071FF448:lI116|H1072025F0
+1072025F0:lI46|H107205830
+107205830:lI98|H107208B18
+107208B18:lI101|H10720BDC8
+10720BDC8:lI97|H10720F048
+10720F048:lI109|N
+1071F1D50:Mn2:H1071F4018,H1071F4028
+1071F4018:lH1071F6838|N
+1071F6838:lI103|H1071F9490
+1071F9490:lI108|H1071FC3D0
+1071FC3D0:lI111|H1071FF488
+1071FF488:lI98|H107202630
+107202630:lI97|H107205870
+107205870:lI108|H107208B58
+107208B58:lI95|H10720BE08
+10720BE08:lI115|H10720F088
+10720F088:lI101|H1072123A8
+1072123A8:lI97|H107215840
+107215840:lI114|H107218EB0
+107218EB0:lI99|H10721C650
+10721C650:lI104|H10721FD10
+10721FD10:lI46|H1072231C8
+1072231C8:lI98|H1072262D0
+1072262D0:lI101|H107229068
+107229068:lI97|H10722BA30
+10722BA30:lI109|N
+1071F4028:lH1071F6848|N
+1071F6848:lI101|H1071F94A0
+1071F94A0:lI114|H1071FC3E0
+1071FC3E0:lI108|H1071FF498
+1071FF498:lI95|H107202640
+107202640:lI114|H107205880
+107205880:lI101|H107208B68
+107208B68:lI112|H10720BE18
+10720BE18:lI108|H10720F098
+10720F098:lI121|H1072123B8
+1072123B8:lI46|H107215850
+107215850:lI98|H107218EC0
+107218EC0:lI101|H10721C660
+10721C660:lI97|H10721FD20
+10721FD20:lI109|N
+1071F1D40:lH1071F4008|N
+1071F4008:lI100|H1071F6828
+1071F6828:lI105|H1071F9480
+1071F9480:lI115|H1071FC3C0
+1071FC3C0:lI107|H1071FF478
+1071FF478:lI95|H107202620
+107202620:lI108|H107205860
+107205860:lI111|H107208B48
+107208B48:lI103|H10720BDF8
+10720BDF8:lI95|H10720F078
+10720F078:lI49|H107212398
+107212398:lI46|H107215830
+107215830:lI98|H107218EA0
+107218EA0:lI101|H10721C640
+10721C640:lI97|H10721FD00
+10721FD00:lI109|N
+1071F1D28:Mn2:H1071F3FE8,H1071F3FF8
+1071F3FE8:lH1071F6808|N
+1071F6808:lI97|H1071F9460
+1071F9460:lI117|H1071FC3A0
+1071FC3A0:lI116|H1071FF458
+1071FF458:lI104|H107202600
+107202600:lI46|H107205840
+107205840:lI98|H107208B28
+107208B28:lI101|H10720BDD8
+10720BDD8:lI97|H10720F058
+10720F058:lI109|N
+1071F3FF8:lH1071F6818|N
+1071F6818:lI105|H1071F9470
+1071F9470:lI110|H1071FC3B0
+1071FC3B0:lI101|H1071FF468
+1071FF468:lI116|H107202610
+107202610:lI95|H107205850
+107205850:lI112|H107208B38
+107208B38:lI97|H10720BDE8
+10720BDE8:lI114|H10720F068
+10720F068:lI115|H107212388
+107212388:lI101|H107215820
+107215820:lI46|H107218E90
+107218E90:lI98|H10721C630
+10721C630:lI101|H10721FCF0
+10721FCF0:lI97|H1072231B8
+1072231B8:lI109|N
+1071F0878:Mn5:H1071F1CC0,H1071F1CD0,H1071F1CE8,H1071F1CF8,H1071F1D08
+1071F1CC0:lH1071F3F78|N
+1071F3F78:lI103|H1071F6798
+1071F6798:lI101|H1071F93F0
+1071F93F0:lI110|H1071FC330
+1071FC330:lI95|H1071FF3E8
+1071FF3E8:lI115|H107202590
+107202590:lI99|H1072057D0
+1072057D0:lI116|H107208AB8
+107208AB8:lI112|H10720BD68
+10720BD68:lI46|H10720EFE8
+10720EFE8:lI98|H107212328
+107212328:lI101|H1072157C0
+1072157C0:lI97|H107218E40
+107218E40:lI109|N
+1071F1D08:lH1071F3FC8|N
+1071F3FC8:lI101|H1071F67E8
+1071F67E8:lI114|H1071F9440
+1071F9440:lI108|H1071FC380
+1071FC380:lI95|H1071FF438
+1071FF438:lI101|H1072025E0
+1072025E0:lI112|H107205820
+107205820:lI109|H107208B08
+107208B08:lI100|H10720BDB8
+10720BDB8:lI46|H10720F038
+10720F038:lI98|H107212378
+107212378:lI101|H107215810
+107215810:lI97|H107218E80
+107218E80:lI109|N
+1071F1CF8:lH1071F3FB8|N
+1071F3FB8:lI108|H1071F67D8
+1071F67D8:lI111|H1071F9430
+1071F9430:lI103|H1071FC370
+1071FC370:lI103|H1071FF428
+1071FF428:lI101|H1072025D0
+1072025D0:lI114|H107205810
+107205810:lI95|H107208AF8
+107208AF8:lI115|H10720BDA8
+10720BDA8:lI101|H10720F028
+10720F028:lI114|H107212368
+107212368:lI118|H107215800
+107215800:lI101|H107218E70
+107218E70:lI114|H10721C620
+10721C620:lI46|H10721FCE0
+10721FCE0:lI98|H1072231A8
+1072231A8:lI101|H1072262C0
+1072262C0:lI97|H107229058
+107229058:lI109|N
+1071F1CE8:lH1071F3FA8|N
+1071F3FA8:lI105|H1071F67C8
+1071F67C8:lI110|H1071F9420
+1071F9420:lI101|H1071FC360
+1071FC360:lI116|H1071FF418
+1071FF418:lI95|H1072025C0
+1072025C0:lI100|H107205800
+107205800:lI98|H107208AE8
+107208AE8:lI46|H10720BD98
+10720BD98:lI98|H10720F018
+10720F018:lI101|H107212358
+107212358:lI97|H1072157F0
+1072157F0:lI109|N
+1071F1CD0:Mn2:H1071F3F88,H1071F3F98
+1071F3F88:lH1071F67A8|N
+1071F67A8:lI108|H1071F9400
+1071F9400:lI111|H1071FC340
+1071FC340:lI103|H1071FF3F8
+1071FF3F8:lI103|H1072025A0
+1072025A0:lI101|H1072057E0
+1072057E0:lI114|H107208AC8
+107208AC8:lI95|H10720BD78
+10720BD78:lI102|H10720EFF8
+10720EFF8:lI105|H107212338
+107212338:lI108|H1072157D0
+1072157D0:lI116|H107218E50
+107218E50:lI101|H10721C600
+10721C600:lI114|H10721FCC0
+10721FCC0:lI115|H107223188
+107223188:lI46|H1072262A0
+1072262A0:lI98|H107229038
+107229038:lI101|H10722BA10
+10722BA10:lI97|H10722E098
+10722E098:lI109|N
+1071F3F98:lH1071F67B8|N
+1071F67B8:lI101|H1071F9410
+1071F9410:lI114|H1071FC350
+1071FC350:lI108|H1071FF408
+1071FF408:lI95|H1072025B0
+1072025B0:lI99|H1072057F0
+1072057F0:lI111|H107208AD8
+107208AD8:lI109|H10720BD88
+10720BD88:lI112|H10720F008
+10720F008:lI105|H107212348
+107212348:lI108|H1072157E0
+1072157E0:lI101|H107218E60
+107218E60:lI95|H10721C610
+10721C610:lI115|H10721FCD0
+10721FCD0:lI101|H107223198
+107223198:lI114|H1072262B0
+1072262B0:lI118|H107229048
+107229048:lI101|H10722BA20
+10722BA20:lI114|H10722E0A8
+10722E0A8:lI46|H107230490
+107230490:lI98|H1072325C8
+1072325C8:lI101|H107234400
+107234400:lI97|H107235F58
+107235F58:lI109|N
+1071F0830:Mn8:H1071F1C28,H1071F1C38,H1071F1C48,H1071F1C58,H1071F1C68,H1071F1C78,H1071F1C88,H1071F1CA0
+1071F1C28:lH1071F3EC8|N
+1071F3EC8:lI110|H1071F66E8
+1071F66E8:lI101|H1071F9340
+1071F9340:lI116|H1071FC280
+1071FC280:lI46|H1071FF338
+1071FF338:lI98|H1072024E0
+1072024E0:lI101|H107205720
+107205720:lI97|H107208A08
+107208A08:lI109|N
+1071F1CA0:Mn3:H1071F3F48,H1071F3F58,H1071F3F68
+1071F3F48:lH1071F6768|N
+1071F6768:lI100|H1071F93C0
+1071F93C0:lI105|H1071FC300
+1071FC300:lI115|H1071FF3B8
+1071FF3B8:lI116|H107202560
+107202560:lI95|H1072057A0
+1072057A0:lI97|H107208A88
+107208A88:lI99|H10720BD38
+10720BD38:lI46|H10720EFB8
+10720EFB8:lI98|H1072122F8
+1072122F8:lI101|H107215790
+107215790:lI97|H107218E10
+107218E10:lI109|N
+1071F3F68:lH1071F6788|N
+1071F6788:lI101|H1071F93E0
+1071F93E0:lI114|H1071FC320
+1071FC320:lI108|H1071FF3D8
+1071FF3D8:lI95|H107202580
+107202580:lI101|H1072057C0
+1072057C0:lI114|H107208AA8
+107208AA8:lI116|H10720BD58
+10720BD58:lI115|H10720EFD8
+10720EFD8:lI95|H107212318
+107212318:lI101|H1072157B0
+1072157B0:lI114|H107218E30
+107218E30:lI114|H10721C5F0
+10721C5F0:lI111|H10721FCB0
+10721FCB0:lI114|H107223178
+107223178:lI115|H107226290
+107226290:lI46|H107229028
+107229028:lI98|H10722BA00
+10722BA00:lI101|H10722E088
+10722E088:lI97|H107230480
+107230480:lI109|N
+1071F3F58:lH1071F6778|N
+1071F6778:lI114|H1071F93D0
+1071F93D0:lI97|H1071FC310
+1071FC310:lI119|H1071FF3C8
+1071FF3C8:lI95|H107202570
+107202570:lI102|H1072057B0
+1072057B0:lI105|H107208A98
+107208A98:lI108|H10720BD48
+10720BD48:lI101|H10720EFC8
+10720EFC8:lI95|H107212308
+107212308:lI105|H1072157A0
+1072157A0:lI111|H107218E20
+107218E20:lI95|H10721C5E0
+10721C5E0:lI108|H10721FCA0
+10721FCA0:lI105|H107223168
+107223168:lI115|H107226280
+107226280:lI116|H107229018
+107229018:lI46|H10722B9F0
+10722B9F0:lI98|H10722E078
+10722E078:lI101|H107230470
+107230470:lI97|H1072325B8
+1072325B8:lI109|N
+1071F1C88:Mn2:H1071F3F28,H1071F3F38
+1071F3F28:lH1071F6748|N
+1071F6748:lI103|H1071F93A0
+1071F93A0:lI101|H1071FC2E0
+1071FC2E0:lI110|H1071FF398
+1071FF398:lI95|H107202540
+107202540:lI116|H107205780
+107205780:lI99|H107208A68
+107208A68:lI112|H10720BD18
+10720BD18:lI95|H10720EF98
+10720EF98:lI115|H1072122D8
+1072122D8:lI111|H107215770
+107215770:lI99|H107218DF0
+107218DF0:lI107|H10721C5C0
+10721C5C0:lI101|H10721FC80
+10721FC80:lI116|H107223148
+107223148:lI46|H107226260
+107226260:lI98|H107228FF8
+107228FF8:lI101|H10722B9D0
+10722B9D0:lI97|H10722E058
+10722E058:lI109|N
+1071F3F38:lH1071F6758|N
+1071F6758:lI100|H1071F93B0
+1071F93B0:lI105|H1071FC2F0
+1071FC2F0:lI115|H1071FF3A8
+1071FF3A8:lI107|H107202550
+107202550:lI95|H107205790
+107205790:lI108|H107208A78
+107208A78:lI111|H10720BD28
+10720BD28:lI103|H10720EFA8
+10720EFA8:lI95|H1072122E8
+1072122E8:lI115|H107215780
+107215780:lI101|H107218E00
+107218E00:lI114|H10721C5D0
+10721C5D0:lI118|H10721FC90
+10721FC90:lI101|H107223158
+107223158:lI114|H107226270
+107226270:lI46|H107229008
+107229008:lI98|H10722B9E0
+10722B9E0:lI101|H10722E068
+10722E068:lI97|H107230460
+107230460:lI109|N
+1071F1C78:lH1071F3F18|N
+1071F3F18:lI105|H1071F6738
+1071F6738:lI110|H1071F9390
+1071F9390:lI101|H1071FC2D0
+1071FC2D0:lI116|H1071FF388
+1071FF388:lI95|H107202530
+107202530:lI117|H107205770
+107205770:lI100|H107208A58
+107208A58:lI112|H10720BD08
+10720BD08:lI46|H10720EF88
+10720EF88:lI98|H1072122C8
+1072122C8:lI101|H107215760
+107215760:lI97|H107218DE0
+107218DE0:lI109|N
+1071F1C68:lH1071F3F08|N
+1071F3F08:lI97|H1071F6728
+1071F6728:lI112|H1071F9380
+1071F9380:lI112|H1071FC2C0
+1071FC2C0:lI108|H1071FF378
+1071FF378:lI105|H107202520
+107202520:lI99|H107205760
+107205760:lI97|H107208A48
+107208A48:lI116|H10720BCF8
+10720BCF8:lI105|H10720EF78
+10720EF78:lI111|H1072122B8
+1072122B8:lI110|H107215750
+107215750:lI95|H107218DD0
+107218DD0:lI115|H10721C5B0
+10721C5B0:lI116|H10721FC70
+10721FC70:lI97|H107223138
+107223138:lI114|H107226250
+107226250:lI116|H107228FE8
+107228FE8:lI101|H10722B9C0
+10722B9C0:lI114|H10722E048
+10722E048:lI46|H107230450
+107230450:lI98|H1072325A8
+1072325A8:lI101|H1072343F0
+1072343F0:lI97|H107235F48
+107235F48:lI109|N
+1071F1C58:lH1071F3EF8|N
+1071F3EF8:lI117|H1071F6718
+1071F6718:lI115|H1071F9370
+1071F9370:lI101|H1071FC2B0
+1071FC2B0:lI114|H1071FF368
+1071FF368:lI95|H107202510
+107202510:lI115|H107205750
+107205750:lI117|H107208A38
+107208A38:lI112|H10720BCE8
+10720BCE8:lI46|H10720EF68
+10720EF68:lI98|H1072122A8
+1072122A8:lI101|H107215740
+107215740:lI97|H107218DC0
+107218DC0:lI109|N
+1071F1C48:lH1071F3EE8|N
+1071F3EE8:lI100|H1071F6708
+1071F6708:lI105|H1071F9360
+1071F9360:lI115|H1071FC2A0
+1071FC2A0:lI116|H1071FF358
+1071FF358:lI95|H107202500
+107202500:lI117|H107205740
+107205740:lI116|H107208A28
+107208A28:lI105|H10720BCD8
+10720BCD8:lI108|H10720EF58
+10720EF58:lI46|H107212298
+107212298:lI98|H107215730
+107215730:lI101|H107218DB0
+107218DB0:lI97|H10721C5A0
+10721C5A0:lI109|N
+1071F1C38:lH1071F3ED8|N
+1071F3ED8:lI108|H1071F66F8
+1071F66F8:lI111|H1071F9350
+1071F9350:lI103|H1071FC290
+1071FC290:lI103|H1071FF348
+1071FF348:lI101|H1072024F0
+1072024F0:lI114|H107205730
+107205730:lI95|H107208A18
+107208A18:lI115|H10720BCC8
+10720BCC8:lI116|H10720EF48
+10720EF48:lI100|H107212288
+107212288:lI95|H107215720
+107215720:lI104|H107218DA0
+107218DA0:lI46|H10721C590
+10721C590:lI98|H10721FC60
+10721FC60:lI101|H107223128
+107223128:lI97|H107226240
+107226240:lI109|N
+1071F0808:Mn4:H1071F1BE8,H1071F1BF8,H1071F1C08,H1071F1C18
+1071F1BE8:lH1071F3E88|N
+1071F3E88:lI97|H1071F66A8
+1071F66A8:lI112|H1071F9300
+1071F9300:lI112|H1071FC240
+1071FC240:lI108|H1071FF2F8
+1071FF2F8:lI105|H1072024A0
+1072024A0:lI99|H1072056E0
+1072056E0:lI97|H1072089C8
+1072089C8:lI116|H10720BC88
+10720BC88:lI105|H10720EF08
+10720EF08:lI111|H107212248
+107212248:lI110|H1072156E0
+1072156E0:lI95|H107218D60
+107218D60:lI109|H10721C550
+10721C550:lI97|H10721FC20
+10721FC20:lI115|H1072230E8
+1072230E8:lI116|H107226200
+107226200:lI101|H107228FA8
+107228FA8:lI114|H10722B990
+10722B990:lI46|H10722E018
+10722E018:lI98|H107230440
+107230440:lI101|H107232598
+107232598:lI97|H1072343E0
+1072343E0:lI109|N
+1071F1C18:lH1071F3EB8|N
+1071F3EB8:lI108|H1071F66D8
+1071F66D8:lI111|H1071F9330
+1071F9330:lI103|H1071FC270
+1071FC270:lI103|H1071FF328
+1071FF328:lI101|H1072024D0
+1072024D0:lI114|H107205710
+107205710:lI95|H1072089F8
+1072089F8:lI99|H10720BCB8
+10720BCB8:lI111|H10720EF38
+10720EF38:lI110|H107212278
+107212278:lI102|H107215710
+107215710:lI105|H107218D90
+107218D90:lI103|H10721C580
+10721C580:lI46|H10721FC50
+10721FC50:lI98|H107223118
+107223118:lI101|H107226230
+107226230:lI97|H107228FD8
+107228FD8:lI109|N
+1071F1C08:lH1071F3EA8|N
+1071F3EA8:lI108|H1071F66C8
+1071F66C8:lI111|H1071F9320
+1071F9320:lI103|H1071FC260
+1071FC260:lI103|H1071FF318
+1071FF318:lI101|H1072024C0
+1072024C0:lI114|H107205700
+107205700:lI95|H1072089E8
+1072089E8:lI115|H10720BCA8
+10720BCA8:lI105|H10720EF28
+10720EF28:lI109|H107212268
+107212268:lI112|H107215700
+107215700:lI108|H107218D80
+107218D80:lI101|H10721C570
+10721C570:lI95|H10721FC40
+10721FC40:lI104|H107223108
+107223108:lI46|H107226220
+107226220:lI98|H107228FC8
+107228FC8:lI101|H10722B9B0
+10722B9B0:lI97|H10722E038
+10722E038:lI109|N
+1071F1BF8:lH1071F3E98|N
+1071F3E98:lI119|H1071F66B8
+1071F66B8:lI114|H1071F9310
+1071F9310:lI97|H1071FC250
+1071FC250:lI112|H1071FF308
+1071FF308:lI95|H1072024B0
+1072024B0:lI108|H1072056F0
+1072056F0:lI111|H1072089D8
+1072089D8:lI103|H10720BC98
+10720BC98:lI95|H10720EF18
+10720EF18:lI114|H107212258
+107212258:lI101|H1072156F0
+1072156F0:lI97|H107218D70
+107218D70:lI100|H10721C560
+10721C560:lI101|H10721FC30
+10721FC30:lI114|H1072230F8
+1072230F8:lI46|H107226210
+107226210:lI98|H107228FB8
+107228FB8:lI101|H10722B9A0
+10722B9A0:lI97|H10722E028
+10722E028:lI109|N
+1071F07E0:Mn4:H1071F1BA0,H1071F1BB8,H1071F1BC8,H1071F1BD8
+1071F1BA0:Mn2:H1071F3E38,H1071F3E48
+1071F3E38:lH1071F6658|N
+1071F6658:lI105|H1071F92B0
+1071F92B0:lI110|H1071FC1F0
+1071FC1F0:lI101|H1071FF2A8
+1071FF2A8:lI116|H107202450
+107202450:lI95|H107205690
+107205690:lI104|H107208978
+107208978:lI111|H10720BC38
+10720BC38:lI115|H10720EEB8
+10720EEB8:lI116|H1072121F8
+1072121F8:lI115|H107215690
+107215690:lI46|H107218D10
+107218D10:lI98|H10721C510
+10721C510:lI101|H10721FBE0
+10721FBE0:lI97|H1072230A8
+1072230A8:lI109|N
+1071F3E48:lH1071F6668|N
+1071F6668:lI101|H1071F92C0
+1071F92C0:lI114|H1071FC200
+1071FC200:lI116|H1071FF2B8
+1071FF2B8:lI115|H107202460
+107202460:lI95|H1072056A0
+1072056A0:lI100|H107208988
+107208988:lI101|H10720BC48
+10720BC48:lI98|H10720EEC8
+10720EEC8:lI117|H107212208
+107212208:lI103|H1072156A0
+1072156A0:lI46|H107218D20
+107218D20:lI98|H10721C520
+10721C520:lI101|H10721FBF0
+10721FBF0:lI97|H1072230B8
+1072230B8:lI109|N
+1071F1BD8:lH1071F3E78|N
+1071F3E78:lI108|H1071F6698
+1071F6698:lI111|H1071F92F0
+1071F92F0:lI103|H1071FC230
+1071FC230:lI103|H1071FF2E8
+1071FF2E8:lI101|H107202490
+107202490:lI114|H1072056D0
+1072056D0:lI95|H1072089B8
+1072089B8:lI102|H10720BC78
+10720BC78:lI111|H10720EEF8
+10720EEF8:lI114|H107212238
+107212238:lI109|H1072156D0
+1072156D0:lI97|H107218D50
+107218D50:lI116|H10721C540
+10721C540:lI116|H10721FC10
+10721FC10:lI101|H1072230D8
+1072230D8:lI114|H1072261F0
+1072261F0:lI46|H107228F98
+107228F98:lI98|H10722B980
+10722B980:lI101|H10722E008
+10722E008:lI97|H107230430
+107230430:lI109|N
+1071F1BC8:lH1071F3E68|N
+1071F3E68:lI105|H1071F6688
+1071F6688:lI110|H1071F92E0
+1071F92E0:lI101|H1071FC220
+1071FC220:lI116|H1071FF2D8
+1071FF2D8:lI95|H107202480
+107202480:lI103|H1072056C0
+1072056C0:lI101|H1072089A8
+1072089A8:lI116|H10720BC68
+10720BC68:lI104|H10720EEE8
+10720EEE8:lI111|H107212228
+107212228:lI115|H1072156C0
+1072156C0:lI116|H107218D40
+107218D40:lI95|H10721C530
+10721C530:lI110|H10721FC00
+10721FC00:lI97|H1072230C8
+1072230C8:lI116|H1072261E0
+1072261E0:lI105|H107228F88
+107228F88:lI118|H10722B970
+10722B970:lI101|H10722DFF8
+10722DFF8:lI46|H107230420
+107230420:lI98|H107232588
+107232588:lI101|H1072343D0
+1072343D0:lI97|H107235F38
+107235F38:lI109|N
+1071F1BB8:lH1071F3E58|N
+1071F3E58:lI105|H1071F6678
+1071F6678:lI110|H1071F92D0
+1071F92D0:lI101|H1071FC210
+1071FC210:lI116|H1071FF2C8
+1071FF2C8:lI95|H107202470
+107202470:lI116|H1072056B0
+1072056B0:lI99|H107208998
+107208998:lI112|H10720BC58
+10720BC58:lI46|H10720EED8
+10720EED8:lI98|H107212218
+107212218:lI101|H1072156B0
+1072156B0:lI97|H107218D30
+107218D30:lI109|N
+1071F07B0:Mn5:H1071F1B50,H1071F1B60,H1071F1B70,H1071F1B80,H1071F1B90
+1071F1B50:lH1071F3DE8|N
+1071F3DE8:lI114|H1071F6608
+1071F6608:lI97|H1071F9260
+1071F9260:lI119|H1071FC1A0
+1071FC1A0:lI95|H1071FF258
+1071FF258:lI102|H107202400
+107202400:lI105|H107205640
+107205640:lI108|H107208928
+107208928:lI101|H10720BBE8
+10720BBE8:lI95|H10720EE78
+10720EE78:lI105|H1072121B8
+1072121B8:lI111|H107215650
+107215650:lI95|H107218CD0
+107218CD0:lI100|H10721C4E0
+10721C4E0:lI101|H10721FBB0
+10721FBB0:lI108|H107223078
+107223078:lI97|H1072261C0
+1072261C0:lI121|H107228F68
+107228F68:lI101|H10722B960
+10722B960:lI100|H10722DFE8
+10722DFE8:lI46|H107230410
+107230410:lI98|H107232578
+107232578:lI101|H1072343C0
+1072343C0:lI97|H107235F28
+107235F28:lI109|N
+1071F1B90:lH1071F3E28|N
+1071F3E28:lI103|H1071F6648
+1071F6648:lI114|H1071F92A0
+1071F92A0:lI111|H1071FC1E0
+1071FC1E0:lI117|H1071FF298
+1071FF298:lI112|H107202440
+107202440:lI95|H107205680
+107205680:lI104|H107208968
+107208968:lI105|H10720BC28
+10720BC28:lI115|H10720EEA8
+10720EEA8:lI116|H1072121E8
+1072121E8:lI111|H107215680
+107215680:lI114|H107218D00
+107218D00:lI121|H10721C500
+10721C500:lI46|H10721FBD0
+10721FBD0:lI98|H107223098
+107223098:lI101|H1072261D0
+1072261D0:lI97|H107228F78
+107228F78:lI109|N
+1071F1B80:lH1071F3E18|N
+1071F3E18:lI117|H1071F6638
+1071F6638:lI115|H1071F9290
+1071F9290:lI101|H1071FC1D0
+1071FC1D0:lI114|H1071FF288
+1071FF288:lI95|H107202430
+107202430:lI100|H107205670
+107205670:lI114|H107208958
+107208958:lI118|H10720BC18
+10720BC18:lI46|H10720EE98
+10720EE98:lI98|H1072121D8
+1072121D8:lI101|H107215670
+107215670:lI97|H107218CF0
+107218CF0:lI109|N
+1071F1B70:lH1071F3E08|N
+1071F3E08:lI105|H1071F6628
+1071F6628:lI110|H1071F9280
+1071F9280:lI101|H1071FC1C0
+1071FC1C0:lI116|H1071FF278
+1071FF278:lI95|H107202420
+107202420:lI99|H107205660
+107205660:lI111|H107208948
+107208948:lI110|H10720BC08
+10720BC08:lI102|H10720EE88
+10720EE88:lI105|H1072121C8
+1072121C8:lI103|H107215660
+107215660:lI46|H107218CE0
+107218CE0:lI98|H10721C4F0
+10721C4F0:lI101|H10721FBC0
+10721FBC0:lI97|H107223088
+107223088:lI109|N
+1071F1B60:lH1071F3DF8|N
+1071F3DF8:lI102|H1071F6618
+1071F6618:lI105|H1071F9270
+1071F9270:lI108|H1071FC1B0
+1071FC1B0:lI101|H1071FF268
+1071FF268:lI46|H107202410
+107202410:lI98|H107205650
+107205650:lI101|H107208938
+107208938:lI97|H10720BBF8
+10720BBF8:lI109|N
+1071F0778:Mn6:H1071F1AF0,H1071F1B00,H1071F1B10,H1071F1B20,H1071F1B30,H1071F1B40
+1071F1AF0:lH1071F3D88|N
+1071F3D88:lI101|H1071F65A8
+1071F65A8:lI114|H1071F9200
+1071F9200:lI112|H1071FC140
+1071FC140:lI99|H1071FF1F8
+1071FF1F8:lI46|H1072023A0
+1072023A0:lI98|H1072055E0
+1072055E0:lI101|H1072088C8
+1072088C8:lI97|H10720BB88
+10720BB88:lI109|N
+1071F1B40:lH1071F3DD8|N
+1071F3DD8:lI102|H1071F65F8
+1071F65F8:lI105|H1071F9250
+1071F9250:lI108|H1071FC190
+1071FC190:lI101|H1071FF248
+1071FF248:lI95|H1072023F0
+1072023F0:lI105|H107205630
+107205630:lI111|H107208918
+107208918:lI95|H10720BBD8
+10720BBD8:lI115|H10720EE68
+10720EE68:lI101|H1072121A8
+1072121A8:lI114|H107215640
+107215640:lI118|H107218CC0
+107218CC0:lI101|H10721C4D0
+10721C4D0:lI114|H10721FBA0
+10721FBA0:lI46|H107223068
+107223068:lI98|H1072261B0
+1072261B0:lI101|H107228F58
+107228F58:lI97|H10722B950
+10722B950:lI109|N
+1071F1B30:lH1071F3DC8|N
+1071F3DC8:lI105|H1071F65E8
+1071F65E8:lI110|H1071F9240
+1071F9240:lI101|H1071FC180
+1071FC180:lI116|H1071FF238
+1071FF238:lI54|H1072023E0
+1072023E0:lI95|H107205620
+107205620:lI117|H107208908
+107208908:lI100|H10720BBC8
+10720BBC8:lI112|H10720EE58
+10720EE58:lI46|H107212198
+107212198:lI98|H107215630
+107215630:lI101|H107218CB0
+107218CB0:lI97|H10721C4C0
+10721C4C0:lI109|N
+1071F1B20:lH1071F3DB8|N
+1071F3DB8:lI103|H1071F65D8
+1071F65D8:lI108|H1071F9230
+1071F9230:lI111|H1071FC170
+1071FC170:lI98|H1071FF228
+1071FF228:lI97|H1072023D0
+1072023D0:lI108|H107205610
+107205610:lI46|H1072088F8
+1072088F8:lI98|H10720BBB8
+10720BBB8:lI101|H10720EE48
+10720EE48:lI97|H107212188
+107212188:lI109|N
+1071F1B10:lH1071F3DA8|N
+1071F3DA8:lI114|H1071F65C8
+1071F65C8:lI97|H1071F9220
+1071F9220:lI119|H1071FC160
+1071FC160:lI95|H1071FF218
+1071FF218:lI102|H1072023C0
+1072023C0:lI105|H107205600
+107205600:lI108|H1072088E8
+1072088E8:lI101|H10720BBA8
+10720BBA8:lI95|H10720EE38
+10720EE38:lI105|H107212178
+107212178:lI111|H107215620
+107215620:lI95|H107218CA0
+107218CA0:lI100|H10721C4B0
+10721C4B0:lI101|H10721FB90
+10721FB90:lI102|H107223058
+107223058:lI108|H1072261A0
+1072261A0:lI97|H107228F48
+107228F48:lI116|H10722B940
+10722B940:lI101|H10722DFD8
+10722DFD8:lI46|H107230400
+107230400:lI98|H107232568
+107232568:lI101|H1072343B0
+1072343B0:lI97|H107235F18
+107235F18:lI109|N
+1071F1B00:lH1071F3D98|N
+1071F3D98:lI103|H1071F65B8
+1071F65B8:lI108|H1071F9210
+1071F9210:lI111|H1071FC150
+1071FC150:lI98|H1071FF208
+1071FF208:lI97|H1072023B0
+1072023B0:lI108|H1072055F0
+1072055F0:lI95|H1072088D8
+1072088D8:lI103|H10720BB98
+10720BB98:lI114|H10720EE28
+10720EE28:lI111|H107212168
+107212168:lI117|H107215610
+107215610:lI112|H107218C90
+107218C90:lI46|H10721C4A0
+10721C4A0:lI98|H10721FB80
+10721FB80:lI101|H107223048
+107223048:lI97|H107226190
+107226190:lI109|N
+1071F0740:Mn6:H1071F1A88,H1071F1A98,H1071F1AB0,H1071F1AC0,H1071F1AD0,H1071F1AE0
+1071F1A88:lH1071F3D18|N
+1071F3D18:lI110|H1071F6530
+1071F6530:lI101|H1071F9180
+1071F9180:lI116|H1071FC0C0
+1071FC0C0:lI95|H1071FF178
+1071FF178:lI107|H107202320
+107202320:lI101|H107205560
+107205560:lI114|H107208858
+107208858:lI110|H10720BB18
+10720BB18:lI101|H10720EDB8
+10720EDB8:lI108|H1072120F8
+1072120F8:lI46|H1072155B0
+1072155B0:lI98|H107218C30
+107218C30:lI101|H10721C440
+10721C440:lI97|H10721FB20
+10721FB20:lI109|N
+1071F1AE0:lH1071F3D78|N
+1071F3D78:lI101|H1071F6598
+1071F6598:lI114|H1071F91F0
+1071F91F0:lI114|H1071FC130
+1071FC130:lI111|H1071FF1E8
+1071FF1E8:lI114|H107202390
+107202390:lI95|H1072055D0
+1072055D0:lI104|H1072088B8
+1072088B8:lI97|H10720BB78
+10720BB78:lI110|H10720EE18
+10720EE18:lI100|H107212158
+107212158:lI108|H107215600
+107215600:lI101|H107218C80
+107218C80:lI114|H10721C490
+10721C490:lI46|H10721FB70
+10721FB70:lI98|H107223038
+107223038:lI101|H107226180
+107226180:lI97|H107228F38
+107228F38:lI109|N
+1071F1AD0:lH1071F3D68|N
+1071F3D68:lI111|H1071F6588
+1071F6588:lI115|H1071F91E0
+1071F91E0:lI46|H1071FC120
+1071FC120:lI98|H1071FF1D8
+1071FF1D8:lI101|H107202380
+107202380:lI97|H1072055C0
+1072055C0:lI109|N
+1071F1AC0:lH1071F3D58|N
+1071F3D58:lI114|H1071F6578
+1071F6578:lI97|H1071F91D0
+1071F91D0:lI119|H1071FC110
+1071FC110:lI95|H1071FF1C8
+1071FF1C8:lI102|H107202370
+107202370:lI105|H1072055B0
+1072055B0:lI108|H1072088A8
+1072088A8:lI101|H10720BB68
+10720BB68:lI95|H10720EE08
+10720EE08:lI105|H107212148
+107212148:lI111|H1072155F0
+1072155F0:lI95|H107218C70
+107218C70:lI99|H10721C480
+10721C480:lI111|H10721FB60
+10721FB60:lI109|H107223028
+107223028:lI112|H107226170
+107226170:lI114|H107228F28
+107228F28:lI101|H10722B930
+10722B930:lI115|H10722DFC8
+10722DFC8:lI115|H1072303F0
+1072303F0:lI101|H107232558
+107232558:lI100|H1072343A0
+1072343A0:lI46|H107235F08
+107235F08:lI98|H107237800
+107237800:lI101|H107238E88
+107238E88:lI97|H10723A360
+10723A360:lI109|N
+1071F1AB0:lH1071F3D48|N
+1071F3D48:lI108|H1071F6568
+1071F6568:lI111|H1071F91C0
+1071F91C0:lI103|H1071FC100
+1071FC100:lI103|H1071FF1B8
+1071FF1B8:lI101|H107202360
+107202360:lI114|H1072055A0
+1072055A0:lI95|H107208898
+107208898:lI100|H10720BB58
+10720BB58:lI105|H10720EDF8
+10720EDF8:lI115|H107212138
+107212138:lI107|H1072155E0
+1072155E0:lI95|H107218C60
+107218C60:lI108|H10721C470
+10721C470:lI111|H10721FB50
+10721FB50:lI103|H107223018
+107223018:lI95|H107226160
+107226160:lI104|H107228F18
+107228F18:lI46|H10722B920
+10722B920:lI98|H10722DFB8
+10722DFB8:lI101|H1072303E0
+1072303E0:lI97|H107232548
+107232548:lI109|N
+1071F1A98:Mn2:H1071F3D28,H1071F3D38
+1071F3D28:Mn1:H1071F6540
+1071F6540:Mn2:H1071F9190,H1071F91A0
+1071F9190:lH1071FC0D0|N
+1071FC0D0:lI108|H1071FF188
+1071FF188:lI111|H107202330
+107202330:lI103|H107205570
+107205570:lI103|H107208868
+107208868:lI101|H10720BB28
+10720BB28:lI114|H10720EDC8
+10720EDC8:lI95|H107212108
+107212108:lI115|H1072155C0
+1072155C0:lI117|H107218C40
+107218C40:lI112|H10721C450
+10721C450:lI46|H10721FB30
+10721FB30:lI98|H107222FF8
+107222FF8:lI101|H107226140
+107226140:lI97|H107228EF8
+107228EF8:lI109|N
+1071F91A0:lH1071FC0E0|N
+1071FC0E0:lI112|H1071FF198
+1071FF198:lI103|H107202340
+107202340:lI50|H107205580
+107205580:lI46|H107208878
+107208878:lI98|H10720BB38
+10720BB38:lI101|H10720EDD8
+10720EDD8:lI97|H107212118
+107212118:lI109|N
+1071F3D38:lH1071F6558|N
+1071F6558:lI97|H1071F91B0
+1071F91B0:lI112|H1071FC0F0
+1071FC0F0:lI112|H1071FF1A8
+1071FF1A8:lI108|H107202350
+107202350:lI105|H107205590
+107205590:lI99|H107208888
+107208888:lI97|H10720BB48
+10720BB48:lI116|H10720EDE8
+10720EDE8:lI105|H107212128
+107212128:lI111|H1072155D0
+1072155D0:lI110|H107218C50
+107218C50:lI95|H10721C460
+10721C460:lI99|H10721FB40
+10721FB40:lI111|H107223008
+107223008:lI110|H107226150
+107226150:lI116|H107228F08
+107228F08:lI114|H10722B910
+10722B910:lI111|H10722DFA8
+10722DFA8:lI108|H1072303D0
+1072303D0:lI108|H107232538
+107232538:lI101|H107234390
+107234390:lI114|H107235EF8
+107235EF8:lI46|H1072377F0
+1072377F0:lI98|H107238E78
+107238E78:lI101|H10723A350
+10723A350:lI97|H10723B6A0
+10723B6A0:lI109|N
+1071F0718:Mn4:H1071F1A48,H1071F1A58,H1071F1A68,H1071F1A78
+1071F1A48:lH1071F3CD8|N
+1071F3CD8:lI108|H1071F64F0
+1071F64F0:lI111|H1071F9140
+1071F9140:lI103|H1071FC080
+1071FC080:lI103|H1071FF138
+1071FF138:lI101|H1072022E0
+1072022E0:lI114|H107205520
+107205520:lI95|H107208818
+107208818:lI98|H10720BAD8
+10720BAD8:lI97|H10720ED88
+10720ED88:lI99|H1072120D8
+1072120D8:lI107|H107215590
+107215590:lI101|H107218C10
+107218C10:lI110|H10721C420
+10721C420:lI100|H10721FB00
+10721FB00:lI46|H107222FD8
+107222FD8:lI98|H107226120
+107226120:lI101|H107228ED8
+107228ED8:lI97|H10722B8F0
+10722B8F0:lI109|N
+1071F1A78:lH1071F3D08|N
+1071F3D08:lI101|H1071F6520
+1071F6520:lI114|H1071F9170
+1071F9170:lI108|H1071FC0B0
+1071FC0B0:lI95|H1071FF168
+1071FF168:lI107|H107202310
+107202310:lI101|H107205550
+107205550:lI114|H107208848
+107208848:lI110|H10720BB08
+10720BB08:lI101|H10720EDA8
+10720EDA8:lI108|H1072120E8
+1072120E8:lI95|H1072155A0
+1072155A0:lI101|H107218C20
+107218C20:lI114|H10721C430
+10721C430:lI114|H10721FB10
+10721FB10:lI111|H107222FE8
+107222FE8:lI114|H107226130
+107226130:lI115|H107228EE8
+107228EE8:lI46|H10722B900
+10722B900:lI98|H10722DF98
+10722DF98:lI101|H1072303C0
+1072303C0:lI97|H107232528
+107232528:lI109|N
+1071F1A68:lH1071F3CF8|N
+1071F3CF8:lI107|H1071F6510
+1071F6510:lI101|H1071F9160
+1071F9160:lI114|H1071FC0A0
+1071FC0A0:lI110|H1071FF158
+1071FF158:lI101|H107202300
+107202300:lI108|H107205540
+107205540:lI46|H107208838
+107208838:lI97|H10720BAF8
+10720BAF8:lI112|H10720ED98
+10720ED98:lI112|N
+1071F1A58:lH1071F3CE8|N
+1071F3CE8:lI105|H1071F6500
+1071F6500:lI110|H1071F9150
+1071F9150:lI101|H1071FC090
+1071FC090:lI116|H1071FF148
+1071FF148:lI46|H1072022F0
+1072022F0:lI98|H107205530
+107205530:lI101|H107208828
+107208828:lI97|H10720BAE8
+10720BAE8:lI109|N
+1071F06C8:Mn9:H1071F19A8,H1071F19B8,H1071F19C8,H1071F19D8,H1071F19E8,H1071F1A00,H1071F1A10,H1071F1A28,H1071F1A38
+1071F19A8:lH1071F3C28|N
+1071F3C28:lI114|H1071F6440
+1071F6440:lI112|H1071F9090
+1071F9090:lI99|H1071FBFD0
+1071FBFD0:lI46|H1071FF088
+1071FF088:lI98|H107202230
+107202230:lI101|H107205470
+107205470:lI97|H107208768
+107208768:lI109|N
+1071F1A38:lH1071F3CC8|N
+1071F3CC8:lI105|H1071F64E0
+1071F64E0:lI110|H1071F9130
+1071F9130:lI101|H1071FC070
+1071FC070:lI116|H1071FF128
+1071FF128:lI95|H1072022D0
+1072022D0:lI115|H107205510
+107205510:lI99|H107208808
+107208808:lI116|H10720BAC8
+10720BAC8:lI112|H10720ED78
+10720ED78:lI46|H1072120C8
+1072120C8:lI98|H107215580
+107215580:lI101|H107218C00
+107218C00:lI97|H10721C410
+10721C410:lI109|N
+1071F1A28:lH1071F3CB8|N
+1071F3CB8:lI115|H1071F64D0
+1071F64D0:lI116|H1071F9120
+1071F9120:lI97|H1071FC060
+1071FC060:lI110|H1071FF118
+1071FF118:lI100|H1072022C0
+1072022C0:lI97|H107205500
+107205500:lI114|H1072087F8
+1072087F8:lI100|H10720BAB8
+10720BAB8:lI95|H10720ED68
+10720ED68:lI101|H1072120B8
+1072120B8:lI114|H107215570
+107215570:lI114|H107218BF0
+107218BF0:lI111|H10721C400
+10721C400:lI114|H10721FAF0
+10721FAF0:lI46|H107222FC8
+107222FC8:lI98|H107226110
+107226110:lI101|H107228EC8
+107228EC8:lI97|H10722B8E0
+10722B8E0:lI109|N
+1071F1A10:Mn2:H1071F3C98,H1071F3CA8
+1071F3C98:lH1071F64B0|N
+1071F64B0:lI108|H1071F9100
+1071F9100:lI111|H1071FC040
+1071FC040:lI99|H1071FF0F8
+1071FF0F8:lI97|H1072022A0
+1072022A0:lI108|H1072054E0
+1072054E0:lI95|H1072087D8
+1072087D8:lI116|H10720BA98
+10720BA98:lI99|H10720ED48
+10720ED48:lI112|H107212098
+107212098:lI46|H107215550
+107215550:lI98|H107218BD0
+107218BD0:lI101|H10721C3E0
+10721C3E0:lI97|H10721FAD0
+10721FAD0:lI109|N
+1071F3CA8:lH1071F64C0|N
+1071F64C0:lI107|H1071F9110
+1071F9110:lI101|H1071FC050
+1071FC050:lI114|H1071FF108
+1071FF108:lI110|H1072022B0
+1072022B0:lI101|H1072054F0
+1072054F0:lI108|H1072087E8
+1072087E8:lI95|H10720BAA8
+10720BAA8:lI99|H10720ED58
+10720ED58:lI111|H1072120A8
+1072120A8:lI110|H107215560
+107215560:lI102|H107218BE0
+107218BE0:lI105|H10721C3F0
+10721C3F0:lI103|H10721FAE0
+10721FAE0:lI46|H107222FB8
+107222FB8:lI98|H107226100
+107226100:lI101|H107228EB8
+107228EB8:lI97|H10722B8D0
+10722B8D0:lI109|N
+1071F1A00:lH1071F3C88|N
+1071F3C88:lI99|H1071F64A0
+1071F64A0:lI111|H1071F90F0
+1071F90F0:lI100|H1071FC030
+1071FC030:lI101|H1071FF0E8
+1071FF0E8:lI46|H107202290
+107202290:lI98|H1072054D0
+1072054D0:lI101|H1072087C8
+1072087C8:lI97|H10720BA88
+10720BA88:lI109|N
+1071F19E8:Mn2:H1071F3C68,H1071F3C78
+1071F3C68:lH1071F6480|N
+1071F6480:lI105|H1071F90D0
+1071F90D0:lI110|H1071FC010
+1071FC010:lI101|H1071FF0C8
+1071FF0C8:lI116|H107202270
+107202270:lI95|H1072054B0
+1072054B0:lI100|H1072087A8
+1072087A8:lI110|H10720BA68
+10720BA68:lI115|H10720ED28
+10720ED28:lI46|H107212078
+107212078:lI98|H107215530
+107215530:lI101|H107218BB0
+107218BB0:lI97|H10721C3C0
+10721C3C0:lI109|N
+1071F3C78:lH1071F6490|N
+1071F6490:lI99|H1071F90E0
+1071F90E0:lI111|H1071FC020
+1071FC020:lI100|H1071FF0D8
+1071FF0D8:lI101|H107202280
+107202280:lI95|H1072054C0
+1072054C0:lI115|H1072087B8
+1072087B8:lI101|H10720BA78
+10720BA78:lI114|H10720ED38
+10720ED38:lI118|H107212088
+107212088:lI101|H107215540
+107215540:lI114|H107218BC0
+107218BC0:lI46|H10721C3D0
+10721C3D0:lI98|H10721FAC0
+10721FAC0:lI101|H107222FA8
+107222FA8:lI97|H1072260F0
+1072260F0:lI109|N
+1071F19D8:lH1071F3C58|N
+1071F3C58:lI108|H1071F6470
+1071F6470:lI111|H1071F90C0
+1071F90C0:lI103|H1071FC000
+1071FC000:lI103|H1071FF0B8
+1071FF0B8:lI101|H107202260
+107202260:lI114|H1072054A0
+1072054A0:lI95|H107208798
+107208798:lI104|H10720BA58
+10720BA58:lI97|H10720ED18
+10720ED18:lI110|H107212068
+107212068:lI100|H107215520
+107215520:lI108|H107218BA0
+107218BA0:lI101|H10721C3B0
+10721C3B0:lI114|H10721FAB0
+10721FAB0:lI95|H107222F98
+107222F98:lI119|H1072260E0
+1072260E0:lI97|H107228EA8
+107228EA8:lI116|H10722B8C0
+10722B8C0:lI99|H10722DF88
+10722DF88:lI104|H1072303B0
+1072303B0:lI101|H107232518
+107232518:lI114|H107234380
+107234380:lI46|H107235EE8
+107235EE8:lI98|H1072377E0
+1072377E0:lI101|H107238E68
+107238E68:lI97|H10723A340
+10723A340:lI109|N
+1071F19C8:lH1071F3C48|N
+1071F3C48:lI105|H1071F6460
+1071F6460:lI110|H1071F90B0
+1071F90B0:lI101|H1071FBFF0
+1071FBFF0:lI116|H1071FF0A8
+1071FF0A8:lI95|H107202250
+107202250:lI116|H107205490
+107205490:lI99|H107208788
+107208788:lI112|H10720BA48
+10720BA48:lI95|H10720ED08
+10720ED08:lI100|H107212058
+107212058:lI105|H107215510
+107215510:lI115|H107218B90
+107218B90:lI116|H10721C3A0
+10721C3A0:lI46|H10721FAA0
+10721FAA0:lI98|H107222F88
+107222F88:lI101|H1072260D0
+1072260D0:lI97|H107228E98
+107228E98:lI109|N
+1071F19B8:lH1071F3C38|N
+1071F3C38:lI105|H1071F6450
+1071F6450:lI110|H1071F90A0
+1071F90A0:lI101|H1071FBFE0
+1071FBFE0:lI116|H1071FF098
+1071FF098:lI54|H107202240
+107202240:lI95|H107205480
+107205480:lI116|H107208778
+107208778:lI99|H10720BA38
+10720BA38:lI112|H10720ECF8
+10720ECF8:lI95|H107212048
+107212048:lI100|H107215500
+107215500:lI105|H107218B80
+107218B80:lI115|H10721C390
+10721C390:lI116|H10721FA90
+10721FA90:lI46|H107222F78
+107222F78:lI98|H1072260C0
+1072260C0:lI101|H107228E88
+107228E88:lI97|H10722B8B0
+10722B8B0:lI109|N
+1071F0698:Mn5:H1071F1950,H1071F1968,H1071F1978,H1071F1988,H1071F1998
+1071F1950:Mn2:H1071F3BC8,H1071F3BD8
+1071F3BC8:lH1071F63E0|N
+1071F63E0:lI110|H1071F9030
+1071F9030:lI101|H1071FBF70
+1071FBF70:lI116|H1071FF028
+1071FF028:lI95|H1072021D0
+1072021D0:lI97|H107205410
+107205410:lI100|H107208708
+107208708:lI109|H10720B9D8
+10720B9D8:lI46|H10720EC98
+10720EC98:lI98|H107211FE8
+107211FE8:lI101|H1072154B0
+1072154B0:lI97|H107218B30
+107218B30:lI109|N
+1071F3BD8:lH1071F63F0|N
+1071F63F0:lI108|H1071F9040
+1071F9040:lI111|H1071FBF80
+1071FBF80:lI103|H1071FF038
+1071FF038:lI103|H1072021E0
+1072021E0:lI101|H107205420
+107205420:lI114|H107208718
+107208718:lI95|H10720B9E8
+10720B9E8:lI112|H10720ECA8
+10720ECA8:lI114|H107211FF8
+107211FF8:lI111|H1072154C0
+1072154C0:lI120|H107218B40
+107218B40:lI121|H10721C350
+10721C350:lI46|H10721FA50
+10721FA50:lI98|H107222F48
+107222F48:lI101|H107226090
+107226090:lI97|H107228E68
+107228E68:lI109|N
+1071F1998:lH1071F3C18|N
+1071F3C18:lI108|H1071F6430
+1071F6430:lI111|H1071F9080
+1071F9080:lI103|H1071FBFC0
+1071FBFC0:lI103|H1071FF078
+1071FF078:lI101|H107202220
+107202220:lI114|H107205460
+107205460:lI95|H107208758
+107208758:lI111|H10720BA28
+10720BA28:lI108|H10720ECE8
+10720ECE8:lI112|H107212038
+107212038:lI46|H1072154F0
+1072154F0:lI98|H107218B70
+107218B70:lI101|H10721C380
+10721C380:lI97|H10721FA80
+10721FA80:lI109|N
+1071F1988:lH1071F3C08|N
+1071F3C08:lI101|H1071F6420
+1071F6420:lI114|H1071F9070
+1071F9070:lI108|H1071FBFB0
+1071FBFB0:lI95|H1071FF068
+1071FF068:lI100|H107202210
+107202210:lI105|H107205450
+107205450:lI115|H107208748
+107208748:lI116|H10720BA18
+10720BA18:lI114|H10720ECD8
+10720ECD8:lI105|H107212028
+107212028:lI98|H1072154E0
+1072154E0:lI117|H107218B60
+107218B60:lI116|H10721C370
+10721C370:lI105|H10721FA70
+10721FA70:lI111|H107222F68
+107222F68:lI110|H1072260B0
+1072260B0:lI46|H107228E78
+107228E78:lI98|H10722B8A0
+10722B8A0:lI101|H10722DF78
+10722DF78:lI97|H1072303A0
+1072303A0:lI109|N
+1071F1978:lH1071F3BF8|N
+1071F3BF8:lI107|H1071F6410
+1071F6410:lI101|H1071F9060
+1071F9060:lI114|H1071FBFA0
+1071FBFA0:lI110|H1071FF058
+1071FF058:lI101|H107202200
+107202200:lI108|H107205440
+107205440:lI46|H107208738
+107208738:lI98|H10720BA08
+10720BA08:lI101|H10720ECC8
+10720ECC8:lI97|H107212018
+107212018:lI109|N
+1071F1968:lH1071F3BE8|N
+1071F3BE8:lI101|H1071F6400
+1071F6400:lI114|H1071F9050
+1071F9050:lI114|H1071FBF90
+1071FBF90:lI111|H1071FF048
+1071FF048:lI114|H1072021F0
+1072021F0:lI95|H107205430
+107205430:lI108|H107208728
+107208728:lI111|H10720B9F8
+10720B9F8:lI103|H10720ECB8
+10720ECB8:lI103|H107212008
+107212008:lI101|H1072154D0
+1072154D0:lI114|H107218B50
+107218B50:lI46|H10721C360
+10721C360:lI98|H10721FA60
+10721FA60:lI101|H107222F58
+107222F58:lI97|H1072260A0
+1072260A0:lI109|N
+1071F0088:lI47|H1071F0648
+1071F0648:lI111|H1071F18D0
+1071F18D0:lI112|H1071F3B48
+1071F3B48:lI116|H1071F6360
+1071F6360:lI47|H1071F8FB0
+1071F8FB0:lI104|H1071FBEF0
+1071FBEF0:lI111|H1071FEFA8
+1071FEFA8:lI109|H107202150
+107202150:lI101|H107205390
+107205390:lI98|H107208688
+107208688:lI114|H10720B958
+10720B958:lI101|H10720EC18
+10720EC18:lI119|H107211F78
+107211F78:lI47|H107215450
+107215450:lI67|H107218AE0
+107218AE0:lI101|H10721C310
+10721C310:lI108|H10721FA10
+10721FA10:lI108|H107222F08
+107222F08:lI97|H107226070
+107226070:lI114|H107228E58
+107228E58:lI47|H10722B890
+10722B890:lI101|H10722DF68
+10722DF68:lI114|H107230390
+107230390:lI108|H107232508
+107232508:lI97|H107234370
+107234370:lI110|H107235ED8
+107235ED8:lI103|H1072377D0
+1072377D0:lI47|H107238E58
+107238E58:lI50|H10723A330
+10723A330:lI54|H10723B690
+10723B690:lI46|H10723C770
+10723C770:lI48|H10723D630
+10723D630:lI46|H10723E3B0
+10723E3B0:lI50|H10723EFC0
+10723EFC0:lI47|H10723FA90
+10723FA90:lI108|H1072403E0
+1072403E0:lI105|H107240C60
+107240C60:lI98|H1072413F0
+1072413F0:lI47|H107241B20
+107241B20:lI101|H1072421F0
+1072421F0:lI114|H107242860
+107242860:lI108|H107242E60
+107242E60:lI97|H1072433D0
+1072433D0:lI110|H107243910
+107243910:lI103|H107243E00
+107243E00:lI47|H1072442F0
+1072442F0:lI108|H1072447A0
+1072447A0:lI105|H107244C10
+107244C10:lI98|H107245070
+107245070:lI47|H1072454C0
+1072454C0:lI107|H1072458C0
+1072458C0:lI101|H107245C80
+107245C80:lI114|H107246010
+107246010:lI110|H1072463A0
+1072463A0:lI101|H107246730
+107246730:lI108|H107246AC0
+107246AC0:lI45|H107246E00
+107246E00:lI57|H107247120
+107247120:lI46|H107247440
+107247440:lI48|H107247750
+107247750:lI46|H107247A50
+107247A50:lI50|H107247D40
+107247D40:lI47|H107248020
+107248020:lI101|H1072482E0
+1072482E0:lI98|H1072485A0
+1072485A0:lI105|H107248850
+107248850:lI110|N
+106600960:lH106600990|H10724AE50
+106600990:t2:H1071F0140,H1071F0150
+1071F0150:Mh5C:10:H1071F09A8,H1071F09C8,H1071F0A08,H1071F0A28,H1071F0A38,H1071F0A68,H1071F0A98,H1071F0AC8,H1071F0AF0,H1071F0B30,H1071F0B58,H1071F0B88,H1071F0BF0,H1071F0C28,H1071F0C40,H1071F0C70
+1071F09A8:Mn3:H1071F1ED0,H1071F1EE0,H1071F1EF0
+1071F1ED0:lH1071F41B8|N
+1071F41B8:lI103|H1071F69D8
+1071F69D8:lI101|H1071F9630
+1071F9630:lI110|H1071FC570
+1071FC570:lI95|H1071FF628
+1071FF628:lI101|H1072027D0
+1072027D0:lI118|H107205A10
+107205A10:lI101|H107208CE8
+107208CE8:lI110|H10720BF98
+10720BF98:lI116|H10720F218
+10720F218:lI46|H107212538
+107212538:lI98|H1072159C0
+1072159C0:lI101|H107219030
+107219030:lI97|H10721C790
+10721C790:lI109|N
+1071F1EF0:lH1071F41D8|N
+1071F41D8:lI101|H1071F69F8
+1071F69F8:lI100|H1071F9650
+1071F9650:lI108|H1071FC590
+1071FC590:lI105|H1071FF648
+1071FF648:lI110|H1072027F0
+1072027F0:lI95|H107205A30
+107205A30:lI116|H107208D08
+107208D08:lI121|H10720BFB8
+10720BFB8:lI112|H10720F238
+10720F238:lI101|H107212558
+107212558:lI95|H1072159E0
+1072159E0:lI115|H107219040
+107219040:lI117|H10721C7A0
+10721C7A0:lI103|H10721FE10
+10721FE10:lI103|H107223298
+107223298:lI101|H107226380
+107226380:lI115|H107229118
+107229118:lI116|H10722BAE0
+10722BAE0:lI105|H10722E148
+10722E148:lI111|H107230500
+107230500:lI110|H107232628
+107232628:lI46|H107234460
+107234460:lI98|H107235FA8
+107235FA8:lI101|H107237840
+107237840:lI97|H107238EC8
+107238EC8:lI109|N
+1071F1EE0:lH1071F41C8|N
+1071F41C8:lI100|H1071F69E8
+1071F69E8:lI105|H1071F9640
+1071F9640:lI103|H1071FC580
+1071FC580:lI114|H1071FF638
+1071FF638:lI97|H1072027E0
+1072027E0:lI112|H107205A20
+107205A20:lI104|H107208CF8
+107208CF8:lI46|H10720BFA8
+10720BFA8:lI98|H10720F228
+10720F228:lI101|H107212548
+107212548:lI97|H1072159D0
+1072159D0:lI109|N
+1071F0C70:Mn6:H1071F23C8,H1071F23D8,H1071F23E8,H1071F23F8,H1071F2408,H1071F2418
+1071F23C8:lH1071F4710|N
+1071F4710:lI117|H1071F6F38
+1071F6F38:lI110|H1071F9B90
+1071F9B90:lI105|H1071FCAD0
+1071FCAD0:lI99|H1071FFB88
+1071FFB88:lI111|H107202D30
+107202D30:lI100|H107205F60
+107205F60:lI101|H107209218
+107209218:lI46|H10720C478
+10720C478:lI98|H10720F698
+10720F698:lI101|H107212948
+107212948:lI97|H107215D20
+107215D20:lI109|N
+1071F2418:lH1071F4760|N
+1071F4760:lI98|H1071F6F88
+1071F6F88:lI105|H1071F9BE0
+1071F9BE0:lI110|H1071FCB20
+1071FCB20:lI97|H1071FFBD8
+1071FFBD8:lI114|H107202D80
+107202D80:lI121|H107205FB0
+107205FB0:lI46|H107209268
+107209268:lI98|H10720C4C8
+10720C4C8:lI101|H10720F6E8
+10720F6E8:lI97|H107212998
+107212998:lI109|N
+1071F2408:lH1071F4750|N
+1071F4750:lI101|H1071F6F78
+1071F6F78:lI118|H1071F9BD0
+1071F9BD0:lI97|H1071FCB10
+1071FCB10:lI108|H1071FFBC8
+1071FFBC8:lI95|H107202D70
+107202D70:lI98|H107205FA0
+107205FA0:lI105|H107209258
+107209258:lI116|H10720C4B8
+10720C4B8:lI115|H10720F6D8
+10720F6D8:lI46|H107212988
+107212988:lI98|H107215D60
+107215D60:lI101|H107219340
+107219340:lI97|H10721C9D0
+10721C9D0:lI109|N
+1071F23F8:lH1071F4740|N
+1071F4740:lI101|H1071F6F68
+1071F6F68:lI100|H1071F9BC0
+1071F9BC0:lI108|H1071FCB00
+1071FCB00:lI105|H1071FFBB8
+1071FFBB8:lI110|H107202D60
+107202D60:lI95|H107205F90
+107205F90:lI99|H107209248
+107209248:lI111|H10720C4A8
+10720C4A8:lI110|H10720F6C8
+10720F6C8:lI116|H107212978
+107212978:lI101|H107215D50
+107215D50:lI120|H107219330
+107219330:lI116|H10721C9C0
+10721C9C0:lI46|H107220010
+107220010:lI98|H107223408
+107223408:lI101|H1072264C0
+1072264C0:lI97|H1072291E8
+1072291E8:lI109|N
+1071F23E8:lH1071F4730|N
+1071F4730:lI109|H1071F6F58
+1071F6F58:lI115|H1071F9BB0
+1071F9BB0:lI95|H1071FCAF0
+1071FCAF0:lI116|H1071FFBA8
+1071FFBA8:lI114|H107202D50
+107202D50:lI97|H107205F80
+107205F80:lI110|H107209238
+107209238:lI115|H10720C498
+10720C498:lI102|H10720F6B8
+10720F6B8:lI111|H107212968
+107212968:lI114|H107215D40
+107215D40:lI109|H107219320
+107219320:lI46|H10721C9B0
+10721C9B0:lI98|H107220000
+107220000:lI101|H1072233F8
+1072233F8:lI97|H1072264B0
+1072264B0:lI109|N
+1071F23D8:lH1071F4720|N
+1071F4720:lI103|H1071F6F48
+1071F6F48:lI101|H1071F9BA0
+1071F9BA0:lI110|H1071FCAE0
+1071FCAE0:lI95|H1071FFB98
+1071FFB98:lI115|H107202D40
+107202D40:lI116|H107205F70
+107205F70:lI97|H107209228
+107209228:lI116|H10720C488
+10720C488:lI101|H10720F6A8
+10720F6A8:lI109|H107212958
+107212958:lI46|H107215D30
+107215D30:lI98|H107219310
+107219310:lI101|H10721C9A0
+10721C9A0:lI97|H10721FFF0
+10721FFF0:lI109|N
+1071F0C40:Mn5:H1071F2370,H1071F2380,H1071F2390,H1071F23A0,H1071F23B0
+1071F2370:lH1071F46B0|N
+1071F46B0:lI102|H1071F6ED8
+1071F6ED8:lI105|H1071F9B30
+1071F9B30:lI108|H1071FCA70
+1071FCA70:lI101|H1071FFB28
+1071FFB28:lI95|H107202CD0
+107202CD0:lI115|H107205F00
+107205F00:lI111|H1072091B8
+1072091B8:lI114|H10720C418
+10720C418:lI116|H10720F648
+10720F648:lI101|H1072128F8
+1072128F8:lI114|H107215CD0
+107215CD0:lI46|H1072192D0
+1072192D0:lI98|H10721C990
+10721C990:lI101|H10721FFE0
+10721FFE0:lI97|H1072233E8
+1072233E8:lI109|N
+1071F23B0:Mn2:H1071F46F0,H1071F4700
+1071F46F0:lH1071F6F18|N
+1071F6F18:lI101|H1071F9B70
+1071F9B70:lI112|H1071FCAB0
+1071FCAB0:lI112|H1071FFB68
+1071FFB68:lI46|H107202D10
+107202D10:lI98|H107205F40
+107205F40:lI101|H1072091F8
+1072091F8:lI97|H10720C458
+10720C458:lI109|N
+1071F4700:lH1071F6F28|N
+1071F6F28:lI111|H1071F9B80
+1071F9B80:lI114|H1071FCAC0
+1071FCAC0:lI100|H1071FFB78
+1071FFB78:lI115|H107202D20
+107202D20:lI101|H107205F50
+107205F50:lI116|H107209208
+107209208:lI115|H10720C468
+10720C468:lI46|H10720F688
+10720F688:lI98|H107212938
+107212938:lI101|H107215D10
+107215D10:lI97|H107219300
+107219300:lI109|N
+1071F23A0:lH1071F46E0|N
+1071F46E0:lI101|H1071F6F08
+1071F6F08:lI114|H1071F9B60
+1071F9B60:lI108|H1071FCAA0
+1071FCAA0:lI95|H1071FFB58
+1071FFB58:lI98|H107202D00
+107202D00:lI105|H107205F30
+107205F30:lI116|H1072091E8
+1072091E8:lI115|H10720C448
+10720C448:lI46|H10720F678
+10720F678:lI98|H107212928
+107212928:lI101|H107215D00
+107215D00:lI97|H1072192F0
+1072192F0:lI109|N
+1071F2390:lH1071F46D0|N
+1071F46D0:lI103|H1071F6EF8
+1071F6EF8:lI98|H1071F9B50
+1071F9B50:lI95|H1071FCA90
+1071FCA90:lI115|H1071FFB48
+1071FFB48:lI101|H107202CF0
+107202CF0:lI116|H107205F20
+107205F20:lI115|H1072091D8
+1072091D8:lI46|H10720C438
+10720C438:lI98|H10720F668
+10720F668:lI101|H107212918
+107212918:lI97|H107215CF0
+107215CF0:lI109|N
+1071F2380:lH1071F46C0|N
+1071F46C0:lI101|H1071F6EE8
+1071F6EE8:lI114|H1071F9B40
+1071F9B40:lI108|H1071FCA80
+1071FCA80:lI95|H1071FFB38
+1071FFB38:lI101|H107202CE0
+107202CE0:lI118|H107205F10
+107205F10:lI97|H1072091C8
+1072091C8:lI108|H10720C428
+10720C428:lI46|H10720F658
+10720F658:lI98|H107212908
+107212908:lI101|H107215CE0
+107215CE0:lI97|H1072192E0
+1072192E0:lI109|N
+1071F0C28:Mn2:H1071F2348,H1071F2358
+1071F2348:lH1071F4680|N
+1071F4680:lI101|H1071F6EA8
+1071F6EA8:lI100|H1071F9B00
+1071F9B00:lI108|H1071FCA40
+1071FCA40:lI105|H1071FFAF8
+1071FFAF8:lI110|H107202CA0
+107202CA0:lI95|H107205ED0
+107205ED0:lI101|H107209188
+107209188:lI120|H10720C3E8
+10720C3E8:lI112|H10720F618
+10720F618:lI97|H1072128D8
+1072128D8:lI110|H107215CC0
+107215CC0:lI100|H1072192C0
+1072192C0:lI46|H10721C980
+10721C980:lI98|H10721FFD0
+10721FFD0:lI101|H1072233D8
+1072233D8:lI97|H1072264A0
+1072264A0:lI109|N
+1071F2358:Mn2:H1071F4690,H1071F46A0
+1071F4690:lH1071F6EB8|N
+1071F6EB8:lI115|H1071F9B10
+1071F9B10:lI108|H1071FCA50
+1071FCA50:lI97|H1071FFB08
+1071FFB08:lI118|H107202CB0
+107202CB0:lI101|H107205EE0
+107205EE0:lI46|H107209198
+107209198:lI98|H10720C3F8
+10720C3F8:lI101|H10720F628
+10720F628:lI97|H1072128E8
+1072128E8:lI109|N
+1071F46A0:lH1071F6EC8|N
+1071F6EC8:lI115|H1071F9B20
+1071F9B20:lI111|H1071FCA60
+1071FCA60:lI102|H1071FFB18
+1071FFB18:lI115|H107202CC0
+107202CC0:lI46|H107205EF0
+107205EF0:lI98|H1072091A8
+1072091A8:lI101|H10720C408
+10720C408:lI97|H10720F638
+10720F638:lI109|N
+1071F0BF0:Mn6:H1071F22E8,H1071F22F8,H1071F2308,H1071F2318,H1071F2328,H1071F2338
+1071F22E8:lH1071F4620|N
+1071F4620:lI112|H1071F6E48
+1071F6E48:lI114|H1071F9AA0
+1071F9AA0:lI111|H1071FC9E0
+1071FC9E0:lI99|H1071FFA98
+1071FFA98:lI95|H107202C40
+107202C40:lI108|H107205E70
+107205E70:lI105|H107209128
+107209128:lI98|H10720C388
+10720C388:lI46|H10720F5B8
+10720F5B8:lI98|H107212898
+107212898:lI101|H107215C80
+107215C80:lI97|H107219280
+107219280:lI109|N
+1071F2338:lH1071F4670|N
+1071F4670:lI101|H1071F6E98
+1071F6E98:lI100|H1071F9AF0
+1071F9AF0:lI108|H1071FCA30
+1071FCA30:lI105|H1071FFAE8
+1071FFAE8:lI110|H107202C90
+107202C90:lI46|H107205EC0
+107205EC0:lI98|H107209178
+107209178:lI101|H10720C3D8
+10720C3D8:lI97|H10720F608
+10720F608:lI109|N
+1071F2328:lH1071F4660|N
+1071F4660:lI100|H1071F6E88
+1071F6E88:lI101|H1071F9AE0
+1071F9AE0:lI116|H1071FCA20
+1071FCA20:lI115|H1071FFAD8
+1071FFAD8:lI95|H107202C80
+107202C80:lI115|H107205EB0
+107205EB0:lI117|H107209168
+107209168:lI112|H10720C3C8
+10720C3C8:lI46|H10720F5F8
+10720F5F8:lI98|H1072128C8
+1072128C8:lI101|H107215CB0
+107215CB0:lI97|H1072192B0
+1072192B0:lI109|N
+1071F2318:lH1071F4650|N
+1071F4650:lI115|H1071F6E78
+1071F6E78:lI117|H1071F9AD0
+1071F9AD0:lI112|H1071FCA10
+1071FCA10:lI101|H1071FFAC8
+1071FFAC8:lI114|H107202C70
+107202C70:lI118|H107205EA0
+107205EA0:lI105|H107209158
+107209158:lI115|H10720C3B8
+10720C3B8:lI111|H10720F5E8
+10720F5E8:lI114|H1072128B8
+1072128B8:lI46|H107215CA0
+107215CA0:lI98|H1072192A0
+1072192A0:lI101|H10721C970
+10721C970:lI97|H10721FFC0
+10721FFC0:lI109|N
+1071F2308:lH1071F4640|N
+1071F4640:lI99|H1071F6E68
+1071F6E68:lI97|H1071F9AC0
+1071F9AC0:lI108|H1071FCA00
+1071FCA00:lI101|H1071FFAB8
+1071FFAB8:lI110|H107202C60
+107202C60:lI100|H107205E90
+107205E90:lI97|H107209148
+107209148:lI114|H10720C3A8
+10720C3A8:lI46|H10720F5D8
+10720F5D8:lI98|H1072128A8
+1072128A8:lI101|H107215C90
+107215C90:lI97|H107219290
+107219290:lI109|N
+1071F22F8:lH1071F4630|N
+1071F4630:lI116|H1071F6E58
+1071F6E58:lI105|H1071F9AB0
+1071F9AB0:lI109|H1071FC9F0
+1071FC9F0:lI101|H1071FFAA8
+1071FFAA8:lI114|H107202C50
+107202C50:lI46|H107205E80
+107205E80:lI98|H107209138
+107209138:lI101|H10720C398
+10720C398:lI97|H10720F5C8
+10720F5C8:lI109|N
+1071F0B88:MnC:H1071F2218,H1071F2228,H1071F2238,H1071F2248,H1071F2258,H1071F2268,H1071F2278,H1071F2288,H1071F2298,H1071F22A8,H1071F22C0,H1071F22D0
+1071F2218:lH1071F4540|N
+1071F4540:lI117|H1071F6D68
+1071F6D68:lI114|H1071F99C0
+1071F99C0:lI105|H1071FC900
+1071FC900:lI95|H1071FF9B8
+1071FF9B8:lI115|H107202B60
+107202B60:lI116|H107205DA0
+107205DA0:lI114|H107209058
+107209058:lI105|H10720C2C8
+10720C2C8:lI110|H10720F4F8
+10720F4F8:lI103|H1072127F8
+1072127F8:lI46|H107215BF0
+107215BF0:lI98|H107219200
+107219200:lI101|H10721C900
+10721C900:lI97|H10721FF50
+10721FF50:lI109|N
+1071F22D0:Mn2:H1071F4600,H1071F4610
+1071F4600:lH1071F6E28|N
+1071F6E28:lI101|H1071F9A80
+1071F9A80:lI114|H1071FC9C0
+1071FC9C0:lI108|H1071FFA78
+1071FFA78:lI95|H107202C20
+107202C20:lI112|H107205E50
+107205E50:lI97|H107209108
+107209108:lI114|H10720C368
+10720C368:lI115|H10720F598
+10720F598:lI101|H107212878
+107212878:lI46|H107215C60
+107215C60:lI98|H107219260
+107219260:lI101|H10721C950
+10721C950:lI97|H10721FFA0
+10721FFA0:lI109|N
+1071F4610:lH1071F6E38|N
+1071F6E38:lI117|H1071F9A90
+1071F9A90:lI110|H1071FC9D0
+1071FC9D0:lI105|H1071FFA88
+1071FFA88:lI99|H107202C30
+107202C30:lI111|H107205E60
+107205E60:lI100|H107209118
+107209118:lI101|H10720C378
+10720C378:lI95|H10720F5A8
+10720F5A8:lI117|H107212888
+107212888:lI116|H107215C70
+107215C70:lI105|H107219270
+107219270:lI108|H10721C960
+10721C960:lI46|H10721FFB0
+10721FFB0:lI98|H1072233C8
+1072233C8:lI101|H107226490
+107226490:lI97|H1072291D8
+1072291D8:lI109|N
+1071F22C0:lH1071F45F0|N
+1071F45F0:lI101|H1071F6E18
+1071F6E18:lI114|H1071F9A70
+1071F9A70:lI108|H1071FC9B0
+1071FC9B0:lI95|H1071FFA68
+1071FFA68:lI101|H107202C10
+107202C10:lI120|H107205E40
+107205E40:lI112|H1072090F8
+1072090F8:lI97|H10720C358
+10720C358:lI110|H10720F588
+10720F588:lI100|H107212868
+107212868:lI95|H107215C50
+107215C50:lI114|H107219250
+107219250:lI101|H10721C940
+10721C940:lI99|H10721FF90
+10721FF90:lI111|H1072233B8
+1072233B8:lI114|H107226480
+107226480:lI100|H1072291C8
+1072291C8:lI115|H10722BB50
+10722BB50:lI46|H10722E1A8
+10722E1A8:lI98|H107230560
+107230560:lI101|H107232688
+107232688:lI97|H1072344A0
+1072344A0:lI109|N
+1071F22A8:Mn2:H1071F45D0,H1071F45E0
+1071F45D0:lH1071F6DF8|N
+1071F6DF8:lI114|H1071F9A50
+1071F9A50:lI97|H1071FC990
+1071FC990:lI110|H1071FFA48
+1071FFA48:lI100|H107202BF0
+107202BF0:lI46|H107205E20
+107205E20:lI98|H1072090D8
+1072090D8:lI101|H10720C338
+10720C338:lI97|H10720F568
+10720F568:lI109|N
+1071F45E0:lH1071F6E08|N
+1071F6E08:lI101|H1071F9A60
+1071F9A60:lI114|H1071FC9A0
+1071FC9A0:lI114|H1071FFA58
+1071FFA58:lI111|H107202C00
+107202C00:lI114|H107205E30
+107205E30:lI95|H1072090E8
+1072090E8:lI108|H10720C348
+10720C348:lI111|H10720F578
+10720F578:lI103|H107212858
+107212858:lI103|H107215C40
+107215C40:lI101|H107219240
+107219240:lI114|H10721C930
+10721C930:lI95|H10721FF80
+10721FF80:lI116|H1072233A8
+1072233A8:lI116|H107226470
+107226470:lI121|H1072291B8
+1072291B8:lI95|H10722BB40
+10722BB40:lI104|H10722E198
+10722E198:lI46|H107230550
+107230550:lI98|H107232678
+107232678:lI101|H107234490
+107234490:lI97|H107235FC8
+107235FC8:lI109|N
+1071F2298:lH1071F45C0|N
+1071F45C0:lI101|H1071F6DE8
+1071F6DE8:lI114|H1071F9A40
+1071F9A40:lI108|H1071FC980
+1071FC980:lI95|H1071FFA38
+1071FFA38:lI116|H107202BE0
+107202BE0:lI97|H107205E10
+107205E10:lI114|H1072090C8
+1072090C8:lI46|H10720C328
+10720C328:lI98|H10720F558
+10720F558:lI101|H107212848
+107212848:lI97|H107215C30
+107215C30:lI109|N
+1071F2288:lH1071F45B0|N
+1071F45B0:lI97|H1071F6DD8
+1071F6DD8:lI114|H1071F9A30
+1071F9A30:lI103|H1071FC970
+1071FC970:lI112|H1071FFA28
+1071FFA28:lI97|H107202BD0
+107202BD0:lI114|H107205E00
+107205E00:lI115|H1072090B8
+1072090B8:lI101|H10720C318
+10720C318:lI46|H10720F548
+10720F548:lI98|H107212838
+107212838:lI101|H107215C20
+107215C20:lI97|H107219230
+107219230:lI109|N
+1071F2278:lH1071F45A0|N
+1071F45A0:lI115|H1071F6DC8
+1071F6DC8:lI121|H1071F9A20
+1071F9A20:lI115|H1071FC960
+1071FC960:lI46|H1071FFA18
+1071FFA18:lI98|H107202BC0
+107202BC0:lI101|H107205DF0
+107205DF0:lI97|H1072090A8
+1072090A8:lI109|N
+1071F2268:lH1071F4590|N
+1071F4590:lI105|H1071F6DB8
+1071F6DB8:lI111|H1071F9A10
+1071F9A10:lI95|H1071FC950
+1071FC950:lI108|H1071FFA08
+1071FFA08:lI105|H107202BB0
+107202BB0:lI98|H107205DE0
+107205DE0:lI95|H107209098
+107209098:lI102|H10720C308
+10720C308:lI114|H10720F538
+10720F538:lI101|H107212828
+107212828:lI97|H107215C10
+107215C10:lI100|H107219220
+107219220:lI46|H10721C920
+10721C920:lI98|H10721FF70
+10721FF70:lI101|H107223398
+107223398:lI97|H107226460
+107226460:lI109|N
+1071F2258:lH1071F4580|N
+1071F4580:lI115|H1071F6DA8
+1071F6DA8:lI116|H1071F9A00
+1071F9A00:lI100|H1071FC940
+1071FC940:lI108|H1071FF9F8
+1071FF9F8:lI105|H107202BA0
+107202BA0:lI98|H107205DD0
+107205DD0:lI46|H107209088
+107209088:lI97|H10720C2F8
+10720C2F8:lI112|H10720F528
+10720F528:lI112|N
+1071F2248:lH1071F4570|N
+1071F4570:lI101|H1071F6D98
+1071F6D98:lI114|H1071F99F0
+1071F99F0:lI108|H1071FC930
+1071FC930:lI95|H1071FF9E8
+1071FF9E8:lI97|H107202B90
+107202B90:lI98|H107205DC0
+107205DC0:lI115|H107209078
+107209078:lI116|H10720C2E8
+10720C2E8:lI114|H10720F518
+10720F518:lI97|H107212818
+107212818:lI99|H107215C00
+107215C00:lI116|H107219210
+107219210:lI95|H10721C910
+10721C910:lI99|H10721FF60
+10721FF60:lI111|H107223388
+107223388:lI100|H107226450
+107226450:lI101|H1072291A8
+1072291A8:lI46|H10722BB30
+10722BB30:lI98|H10722E188
+10722E188:lI101|H107230540
+107230540:lI97|H107232668
+107232668:lI109|N
+1071F2238:lH1071F4560|N
+1071F4560:lI99|H1071F6D88
+1071F6D88:lI46|H1071F99E0
+1071F99E0:lI98|H1071FC920
+1071FC920:lI101|H1071FF9D8
+1071FF9D8:lI97|H107202B80
+107202B80:lI109|N
+1071F2228:lH1071F4550|N
+1071F4550:lI113|H1071F6D78
+1071F6D78:lI108|H1071F99D0
+1071F99D0:lI99|H1071FC910
+1071FC910:lI95|H1071FF9C8
+1071FF9C8:lI112|H107202B70
+107202B70:lI116|H107205DB0
+107205DB0:lI46|H107209068
+107209068:lI98|H10720C2D8
+10720C2D8:lI101|H10720F508
+10720F508:lI97|H107212808
+107212808:lI109|N
+1071F0B58:Mn5:H1071F21C8,H1071F21D8,H1071F21E8,H1071F21F8,H1071F2208
+1071F21C8:lH1071F44F0|N
+1071F44F0:lI105|H1071F6D18
+1071F6D18:lI111|H1071F9970
+1071F9970:lI95|H1071FC8B0
+1071FC8B0:lI108|H1071FF968
+1071FF968:lI105|H107202B10
+107202B10:lI98|H107205D50
+107205D50:lI95|H107209008
+107209008:lI102|H10720C278
+10720C278:lI111|H10720F4B8
+10720F4B8:lI114|H1072127B8
+1072127B8:lI109|H107215BB0
+107215BB0:lI97|H1072191C0
+1072191C0:lI116|H10721C8D0
+10721C8D0:lI46|H10721FF20
+10721FF20:lI98|H107223368
+107223368:lI101|H107226430
+107226430:lI97|H107229198
+107229198:lI109|N
+1071F2208:lH1071F4530|N
+1071F4530:lI103|H1071F6D58
+1071F6D58:lI101|H1071F99B0
+1071F99B0:lI110|H1071FC8F0
+1071FC8F0:lI95|H1071FF9A8
+1071FF9A8:lI115|H107202B50
+107202B50:lI101|H107205D90
+107205D90:lI114|H107209048
+107209048:lI118|H10720C2B8
+10720C2B8:lI101|H10720F4E8
+10720F4E8:lI114|H1072127E8
+1072127E8:lI46|H107215BE0
+107215BE0:lI98|H1072191F0
+1072191F0:lI101|H10721C8F0
+10721C8F0:lI97|H10721FF40
+10721FF40:lI109|N
+1071F21F8:lH1071F4520|N
+1071F4520:lI119|H1071F6D48
+1071F6D48:lI105|H1071F99A0
+1071F99A0:lI110|H1071FC8E0
+1071FC8E0:lI51|H1071FF998
+1071FF998:lI50|H107202B40
+107202B40:lI114|H107205D80
+107205D80:lI101|H107209038
+107209038:lI103|H10720C2A8
+10720C2A8:lI46|H10720F4D8
+10720F4D8:lI98|H1072127D8
+1072127D8:lI101|H107215BD0
+107215BD0:lI97|H1072191E0
+1072191E0:lI109|N
+1071F21E8:lH1071F4510|N
+1071F4510:lI111|H1071F6D38
+1071F6D38:lI116|H1071F9990
+1071F9990:lI112|H1071FC8D0
+1071FC8D0:lI95|H1071FF988
+1071FF988:lI105|H107202B30
+107202B30:lI110|H107205D70
+107205D70:lI116|H107209028
+107209028:lI101|H10720C298
+10720C298:lI114|H10720F4C8
+10720F4C8:lI110|H1072127C8
+1072127C8:lI97|H107215BC0
+107215BC0:lI108|H1072191D0
+1072191D0:lI46|H10721C8E0
+10721C8E0:lI98|H10721FF30
+10721FF30:lI101|H107223378
+107223378:lI97|H107226440
+107226440:lI109|N
+1071F21D8:lH1071F4500|N
+1071F4500:lI100|H1071F6D28
+1071F6D28:lI101|H1071F9980
+1071F9980:lI116|H1071FC8C0
+1071FC8C0:lI115|H1071FF978
+1071FF978:lI46|H107202B20
+107202B20:lI98|H107205D60
+107205D60:lI101|H107209018
+107209018:lI97|H10720C288
+10720C288:lI109|N
+1071F0B30:Mn4:H1071F2188,H1071F2198,H1071F21A8,H1071F21B8
+1071F2188:lH1071F44B0|N
+1071F44B0:lI101|H1071F6CD8
+1071F6CD8:lI114|H1071F9930
+1071F9930:lI108|H1071FC870
+1071FC870:lI95|H1071FF928
+1071FF928:lI112|H107202AD0
+107202AD0:lI112|H107205D10
+107205D10:lI46|H107208FC8
+107208FC8:lI98|H10720C238
+10720C238:lI101|H10720F478
+10720F478:lI97|H107212778
+107212778:lI109|N
+1071F21B8:lH1071F44E0|N
+1071F44E0:lI100|H1071F6D08
+1071F6D08:lI101|H1071F9960
+1071F9960:lI116|H1071FC8A0
+1071FC8A0:lI115|H1071FF958
+1071FF958:lI95|H107202B00
+107202B00:lI117|H107205D40
+107205D40:lI116|H107208FF8
+107208FF8:lI105|H10720C268
+10720C268:lI108|H10720F4A8
+10720F4A8:lI115|H1072127A8
+1072127A8:lI46|H107215BA0
+107215BA0:lI98|H1072191B0
+1072191B0:lI101|H10721C8C0
+10721C8C0:lI97|H10721FF10
+10721FF10:lI109|N
+1071F21A8:lH1071F44D0|N
+1071F44D0:lI105|H1071F6CF8
+1071F6CF8:lI111|H1071F9950
+1071F9950:lI95|H1071FC890
+1071FC890:lI108|H1071FF948
+1071FF948:lI105|H107202AF0
+107202AF0:lI98|H107205D30
+107205D30:lI95|H107208FE8
+107208FE8:lI112|H10720C258
+10720C258:lI114|H10720F498
+10720F498:lI101|H107212798
+107212798:lI116|H107215B90
+107215B90:lI116|H1072191A0
+1072191A0:lI121|H10721C8B0
+10721C8B0:lI46|H10721FF00
+10721FF00:lI98|H107223358
+107223358:lI101|H107226420
+107226420:lI97|H107229188
+107229188:lI109|N
+1071F2198:lH1071F44C0|N
+1071F44C0:lI101|H1071F6CE8
+1071F6CE8:lI114|H1071F9940
+1071F9940:lI108|H1071FC880
+1071FC880:lI95|H1071FF938
+1071FF938:lI102|H107202AE0
+107202AE0:lI101|H107205D20
+107205D20:lI97|H107208FD8
+107208FD8:lI116|H10720C248
+10720C248:lI117|H10720F488
+10720F488:lI114|H107212788
+107212788:lI101|H107215B80
+107215B80:lI115|H107219190
+107219190:lI46|H10721C8A0
+10721C8A0:lI98|H10721FEF0
+10721FEF0:lI101|H107223348
+107223348:lI97|H107226410
+107226410:lI109|N
+1071F0AF0:Mn7:H1071F2108,H1071F2118,H1071F2128,H1071F2140,H1071F2150,H1071F2168,H1071F2178
+1071F2108:lH1071F4418|N
+1071F4418:lI101|H1071F6C38
+1071F6C38:lI114|H1071F9890
+1071F9890:lI108|H1071FC7D0
+1071FC7D0:lI95|H1071FF888
+1071FF888:lI105|H107202A30
+107202A30:lI110|H107205C70
+107205C70:lI116|H107208F38
+107208F38:lI101|H10720C1A8
+10720C1A8:lI114|H10720F3F8
+10720F3F8:lI110|H1072126F8
+1072126F8:lI97|H107215B20
+107215B20:lI108|H107219150
+107219150:lI46|H10721C860
+10721C860:lI98|H10721FEB0
+10721FEB0:lI101|H107223328
+107223328:lI97|H1072263F0
+1072263F0:lI109|N
+1071F2178:lH1071F44A0|N
+1071F44A0:lI102|H1071F6CC8
+1071F6CC8:lI105|H1071F9920
+1071F9920:lI108|H1071FC860
+1071FC860:lI101|H1071FF918
+1071FF918:lI108|H107202AC0
+107202AC0:lI105|H107205D00
+107205D00:lI98|H107208FB8
+107208FB8:lI46|H10720C228
+10720C228:lI98|H10720F468
+10720F468:lI101|H107212768
+107212768:lI97|H107215B70
+107215B70:lI109|N
+1071F2168:lH1071F4490|N
+1071F4490:lI109|H1071F6CB8
+1071F6CB8:lI97|H1071F9910
+1071F9910:lI112|H1071FC850
+1071FC850:lI115|H1071FF908
+1071FF908:lI46|H107202AB0
+107202AB0:lI98|H107205CF0
+107205CF0:lI101|H107208FA8
+107208FA8:lI97|H10720C218
+10720C218:lI109|N
+1071F2150:Mn2:H1071F4470,H1071F4480
+1071F4470:lH1071F6C98|N
+1071F6C98:lI112|H1071F98F0
+1071F98F0:lI114|H1071FC830
+1071FC830:lI111|H1071FF8E8
+1071FF8E8:lI112|H107202A90
+107202A90:lI108|H107205CD0
+107205CD0:lI105|H107208F88
+107208F88:lI115|H10720C1F8
+10720C1F8:lI116|H10720F448
+10720F448:lI115|H107212748
+107212748:lI46|H107215B60
+107215B60:lI98|H107219180
+107219180:lI101|H10721C890
+10721C890:lI97|H10721FEE0
+10721FEE0:lI109|N
+1071F4480:lH1071F6CA8|N
+1071F6CA8:lI113|H1071F9900
+1071F9900:lI117|H1071FC840
+1071FC840:lI101|H1071FF8F8
+1071FF8F8:lI117|H107202AA0
+107202AA0:lI101|H107205CE0
+107205CE0:lI46|H107208F98
+107208F98:lI98|H10720C208
+10720C208:lI101|H10720F458
+10720F458:lI97|H107212758
+107212758:lI109|N
+1071F2140:lH1071F4460|N
+1071F4460:lI114|H1071F6C88
+1071F6C88:lI101|H1071F98E0
+1071F98E0:lI46|H1071FC820
+1071FC820:lI98|H1071FF8D8
+1071FF8D8:lI101|H107202A80
+107202A80:lI97|H107205CC0
+107205CC0:lI109|N
+1071F2128:Mn2:H1071F4440,H1071F4450
+1071F4440:lH1071F6C68|N
+1071F6C68:lI114|H1071F98C0
+1071F98C0:lI97|H1071FC800
+1071FC800:lI110|H1071FF8B8
+1071FF8B8:lI100|H107202A60
+107202A60:lI111|H107205CA0
+107205CA0:lI109|H107208F68
+107208F68:lI46|H10720C1D8
+10720C1D8:lI98|H10720F428
+10720F428:lI101|H107212728
+107212728:lI97|H107215B40
+107215B40:lI109|N
+1071F4450:lH1071F6C78|N
+1071F6C78:lI101|H1071F98D0
+1071F98D0:lI114|H1071FC810
+1071FC810:lI108|H1071FF8C8
+1071FF8C8:lI95|H107202A70
+107202A70:lI99|H107205CB0
+107205CB0:lI111|H107208F78
+107208F78:lI109|H10720C1E8
+10720C1E8:lI112|H10720F438
+10720F438:lI105|H107212738
+107212738:lI108|H107215B50
+107215B50:lI101|H107219170
+107219170:lI46|H10721C880
+10721C880:lI98|H10721FED0
+10721FED0:lI101|H107223338
+107223338:lI97|H107226400
+107226400:lI109|N
+1071F2118:Mn1:H1071F4428
+1071F4428:Mn2:H1071F6C48,H1071F6C58
+1071F6C48:lH1071F98A0|N
+1071F98A0:lI103|H1071FC7E0
+1071FC7E0:lI98|H1071FF898
+1071FF898:lI95|H107202A40
+107202A40:lI116|H107205C80
+107205C80:lI114|H107208F48
+107208F48:lI101|H10720C1B8
+10720C1B8:lI101|H10720F408
+10720F408:lI115|H107212708
+107212708:lI46|H107215B30
+107215B30:lI98|H107219160
+107219160:lI101|H10721C870
+10721C870:lI97|H10721FEC0
+10721FEC0:lI109|N
+1071F6C58:lH1071F98B0|N
+1071F98B0:lI112|H1071FC7F0
+1071FC7F0:lI101|H1071FF8A8
+1071FF8A8:lI101|H107202A50
+107202A50:lI114|H107205C90
+107205C90:lI46|H107208F58
+107208F58:lI98|H10720C1C8
+10720C1C8:lI101|H10720F418
+10720F418:lI97|H107212718
+107212718:lI109|N
+1071F0AC8:Mn4:H1071F20B8,H1071F20C8,H1071F20E0,H1071F20F0
+1071F20B8:lH1071F43B8|N
+1071F43B8:lI115|H1071F6BD8
+1071F6BD8:lI101|H1071F9830
+1071F9830:lI116|H1071FC770
+1071FC770:lI115|H1071FF828
+1071FF828:lI46|H1072029D0
+1072029D0:lI98|H107205C10
+107205C10:lI101|H107208ED8
+107208ED8:lI97|H10720C148
+10720C148:lI109|N
+1071F20F0:Mn2:H1071F43F8,H1071F4408
+1071F43F8:lH1071F6C18|N
+1071F6C18:lI108|H1071F9870
+1071F9870:lI111|H1071FC7B0
+1071FC7B0:lI103|H1071FF868
+1071FF868:lI95|H107202A10
+107202A10:lI109|H107205C50
+107205C50:lI102|H107208F18
+107208F18:lI95|H10720C188
+10720C188:lI104|H10720F3D8
+10720F3D8:lI46|H1072126D8
+1072126D8:lI98|H107215B10
+107215B10:lI101|H107219140
+107219140:lI97|H10721C850
+10721C850:lI109|N
+1071F4408:lH1071F6C28|N
+1071F6C28:lI108|H1071F9880
+1071F9880:lI105|H1071FC7C0
+1071FC7C0:lI115|H1071FF878
+1071FF878:lI116|H107202A20
+107202A20:lI115|H107205C60
+107205C60:lI46|H107208F28
+107208F28:lI98|H10720C198
+10720C198:lI101|H10720F3E8
+10720F3E8:lI97|H1072126E8
+1072126E8:lI109|N
+1071F20E0:lH1071F43E8|N
+1071F43E8:lI105|H1071F6C08
+1071F6C08:lI111|H1071F9860
+1071F9860:lI95|H1071FC7A0
+1071FC7A0:lI108|H1071FF858
+1071FF858:lI105|H107202A00
+107202A00:lI98|H107205C40
+107205C40:lI46|H107208F08
+107208F08:lI98|H10720C178
+10720C178:lI101|H10720F3C8
+10720F3C8:lI97|H1072126C8
+1072126C8:lI109|N
+1071F20C8:Mn2:H1071F43C8,H1071F43D8
+1071F43C8:lH1071F6BE8|N
+1071F6BE8:lI101|H1071F9840
+1071F9840:lI114|H1071FC780
+1071FC780:lI108|H1071FF838
+1071FF838:lI95|H1072029E0
+1072029E0:lI115|H107205C20
+107205C20:lI116|H107208EE8
+107208EE8:lI100|H10720C158
+10720C158:lI108|H10720F3A8
+10720F3A8:lI105|H1072126A8
+1072126A8:lI98|H107215AF0
+107215AF0:lI95|H107219120
+107219120:lI101|H10721C840
+10721C840:lI114|H10721FEA0
+10721FEA0:lI114|H107223318
+107223318:lI111|H1072263E0
+1072263E0:lI114|H107229178
+107229178:lI115|H10722BB20
+10722BB20:lI46|H10722E178
+10722E178:lI98|H107230530
+107230530:lI101|H107232658
+107232658:lI97|H107234480
+107234480:lI109|N
+1071F43D8:lH1071F6BF8|N
+1071F6BF8:lI111|H1071F9850
+1071F9850:lI114|H1071FC790
+1071FC790:lI100|H1071FF848
+1071FF848:lI100|H1072029F0
+1072029F0:lI105|H107205C30
+107205C30:lI99|H107208EF8
+107208EF8:lI116|H10720C168
+10720C168:lI46|H10720F3B8
+10720F3B8:lI98|H1072126B8
+1072126B8:lI101|H107215B00
+107215B00:lI97|H107219130
+107219130:lI109|N
+1071F0A98:Mn5:H1071F2060,H1071F2070,H1071F2080,H1071F2098,H1071F20A8
+1071F2060:lH1071F4358|N
+1071F4358:lI113|H1071F6B78
+1071F6B78:lI108|H1071F97D0
+1071F97D0:lI99|H1071FC710
+1071FC710:lI46|H1071FF7C8
+1071FF7C8:lI98|H107202970
+107202970:lI101|H107205BB0
+107205BB0:lI97|H107208E78
+107208E78:lI109|N
+1071F20A8:lH1071F43A8|N
+1071F43A8:lI115|H1071F6BC8
+1071F6BC8:lI117|H1071F9820
+1071F9820:lI112|H1071FC760
+1071FC760:lI101|H1071FF818
+1071FF818:lI114|H1072029C0
+1072029C0:lI118|H107205C00
+107205C00:lI105|H107208EC8
+107208EC8:lI115|H10720C138
+10720C138:lI111|H10720F398
+10720F398:lI114|H107212698
+107212698:lI95|H107215AE0
+107215AE0:lI98|H107219110
+107219110:lI114|H10721C830
+10721C830:lI105|H10721FE90
+10721FE90:lI100|H107223308
+107223308:lI103|H1072263D0
+1072263D0:lI101|H107229168
+107229168:lI46|H10722BB10
+10722BB10:lI98|H10722E168
+10722E168:lI101|H107230520
+107230520:lI97|H107232648
+107232648:lI109|N
+1071F2098:lH1071F4398|N
+1071F4398:lI101|H1071F6BB8
+1071F6BB8:lI114|H1071F9810
+1071F9810:lI108|H1071FC750
+1071FC750:lI95|H1071FF808
+1071FF808:lI108|H1072029B0
+1072029B0:lI105|H107205BF0
+107205BF0:lI110|H107208EB8
+107208EB8:lI116|H10720C128
+10720C128:lI46|H10720F388
+10720F388:lI98|H107212688
+107212688:lI101|H107215AD0
+107215AD0:lI97|H107219100
+107219100:lI109|N
+1071F2080:Mn2:H1071F4378,H1071F4388
+1071F4378:lH1071F6B98|N
+1071F6B98:lI101|H1071F97F0
+1071F97F0:lI114|H1071FC730
+1071FC730:lI108|H1071FF7E8
+1071FF7E8:lI95|H107202990
+107202990:lI115|H107205BD0
+107205BD0:lI99|H107208E98
+107208E98:lI97|H10720C108
+10720C108:lI110|H10720F368
+10720F368:lI46|H107212668
+107212668:lI98|H107215AC0
+107215AC0:lI101|H1072190F0
+1072190F0:lI97|H10721C820
+10721C820:lI109|N
+1071F4388:lH1071F6BA8|N
+1071F6BA8:lI115|H1071F9800
+1071F9800:lI104|H1071FC740
+1071FC740:lI101|H1071FF7F8
+1071FF7F8:lI108|H1072029A0
+1072029A0:lI108|H107205BE0
+107205BE0:lI46|H107208EA8
+107208EA8:lI98|H10720C118
+10720C118:lI101|H10720F378
+10720F378:lI97|H107212678
+107212678:lI109|N
+1071F2070:lH1071F4368|N
+1071F4368:lI101|H1071F6B88
+1071F6B88:lI114|H1071F97E0
+1071F97E0:lI108|H1071FC720
+1071FC720:lI95|H1071FF7D8
+1071FF7D8:lI112|H107202980
+107202980:lI111|H107205BC0
+107205BC0:lI115|H107208E88
+107208E88:lI105|H10720C0F8
+10720C0F8:lI120|H10720F358
+10720F358:lI95|H107212658
+107212658:lI109|H107215AB0
+107215AB0:lI115|H1072190E0
+1072190E0:lI103|H10721C810
+10721C810:lI46|H10721FE80
+10721FE80:lI98|H1072232F8
+1072232F8:lI101|H1072263C0
+1072263C0:lI97|H107229158
+107229158:lI109|N
+1071F0A68:Mn5:H1071F2008,H1071F2018,H1071F2030,H1071F2040,H1071F2050
+1071F2008:lH1071F42F8|N
+1071F42F8:lI98|H1071F6B18
+1071F6B18:lI101|H1071F9770
+1071F9770:lI97|H1071FC6B0
+1071FC6B0:lI109|H1071FF768
+1071FF768:lI95|H107202910
+107202910:lI108|H107205B50
+107205B50:lI105|H107208E18
+107208E18:lI98|H10720C0A8
+10720C0A8:lI46|H10720F318
+10720F318:lI98|H107212628
+107212628:lI101|H107215A90
+107215A90:lI97|H1072190C0
+1072190C0:lI109|N
+1071F2050:lH1071F4348|N
+1071F4348:lI112|H1071F6B68
+1071F6B68:lI111|H1071F97C0
+1071F97C0:lI111|H1071FC700
+1071FC700:lI108|H1071FF7B8
+1071FF7B8:lI46|H107202960
+107202960:lI98|H107205BA0
+107205BA0:lI101|H107208E68
+107208E68:lI97|H10720C0E8
+10720C0E8:lI109|N
+1071F2040:lH1071F4338|N
+1071F4338:lI98|H1071F6B58
+1071F6B58:lI97|H1071F97B0
+1071F97B0:lI115|H1071FC6F0
+1071FC6F0:lI101|H1071FF7A8
+1071FF7A8:lI54|H107202950
+107202950:lI52|H107205B90
+107205B90:lI46|H107208E58
+107208E58:lI98|H10720C0D8
+10720C0D8:lI101|H10720F348
+10720F348:lI97|H107212648
+107212648:lI109|N
+1071F2030:lH1071F4328|N
+1071F4328:lI103|H1071F6B48
+1071F6B48:lI101|H1071F97A0
+1071F97A0:lI110|H1071FC6E0
+1071FC6E0:lI46|H1071FF798
+1071FF798:lI98|H107202940
+107202940:lI101|H107205B80
+107205B80:lI97|H107208E48
+107208E48:lI109|N
+1071F2018:Mn2:H1071F4308,H1071F4318
+1071F4308:lH1071F6B28|N
+1071F6B28:lI101|H1071F9780
+1071F9780:lI114|H1071FC6C0
+1071FC6C0:lI108|H1071FF778
+1071FF778:lI95|H107202920
+107202920:lI101|H107205B60
+107205B60:lI114|H107208E28
+107208E28:lI114|H10720C0B8
+10720C0B8:lI111|H10720F328
+10720F328:lI114|H107212638
+107212638:lI46|H107215AA0
+107215AA0:lI98|H1072190D0
+1072190D0:lI101|H10721C800
+10721C800:lI97|H10721FE70
+10721FE70:lI109|N
+1071F4318:lH1071F6B38|N
+1071F6B38:lI109|H1071F9790
+1071F9790:lI97|H1071FC6D0
+1071FC6D0:lI116|H1071FF788
+1071FF788:lI104|H107202930
+107202930:lI46|H107205B70
+107205B70:lI98|H107208E38
+107208E38:lI101|H10720C0C8
+10720C0C8:lI97|H10720F338
+10720F338:lI109|N
+1071F0A38:Mn5:H1071F1FB0,H1071F1FC8,H1071F1FD8,H1071F1FE8,H1071F1FF8
+1071F1FB0:Mn2:H1071F4298,H1071F42A8
+1071F4298:lH1071F6AB8|N
+1071F6AB8:lI115|H1071F9710
+1071F9710:lI104|H1071FC650
+1071FC650:lI101|H1071FF708
+1071FF708:lI108|H1072028B0
+1072028B0:lI108|H107205AF0
+107205AF0:lI95|H107208DB8
+107208DB8:lI100|H10720C048
+10720C048:lI101|H10720F2C8
+10720F2C8:lI102|H1072125D8
+1072125D8:lI97|H107215A40
+107215A40:lI117|H107219080
+107219080:lI108|H10721C7D0
+10721C7D0:lI116|H10721FE40
+10721FE40:lI46|H1072232C8
+1072232C8:lI98|H1072263A0
+1072263A0:lI101|H107229138
+107229138:lI97|H10722BB00
+10722BB00:lI109|N
+1071F42A8:lH1071F6AC8|N
+1071F6AC8:lI115|H1071F9720
+1071F9720:lI104|H1071FC660
+1071FC660:lI101|H1071FF718
+1071FF718:lI108|H1072028C0
+1072028C0:lI108|H107205B00
+107205B00:lI95|H107208DC8
+107208DC8:lI100|H10720C058
+10720C058:lI111|H10720F2D8
+10720F2D8:lI99|H1072125E8
+1072125E8:lI115|H107215A50
+107215A50:lI46|H107219090
+107219090:lI98|H10721C7E0
+10721C7E0:lI101|H10721FE50
+10721FE50:lI97|H1072232D8
+1072232D8:lI109|N
+1071F1FF8:lH1071F42E8|N
+1071F42E8:lI100|H1071F6B08
+1071F6B08:lI105|H1071F9760
+1071F9760:lI103|H1071FC6A0
+1071FC6A0:lI114|H1071FF758
+1071FF758:lI97|H107202900
+107202900:lI112|H107205B40
+107205B40:lI104|H107208E08
+107208E08:lI95|H10720C098
+10720C098:lI117|H10720F308
+10720F308:lI116|H107212618
+107212618:lI105|H107215A80
+107215A80:lI108|H1072190B0
+1072190B0:lI115|H10721C7F0
+10721C7F0:lI46|H10721FE60
+10721FE60:lI98|H1072232E8
+1072232E8:lI101|H1072263B0
+1072263B0:lI97|H107229148
+107229148:lI109|N
+1071F1FE8:lH1071F42D8|N
+1071F42D8:lI101|H1071F6AF8
+1071F6AF8:lI115|H1071F9750
+1071F9750:lI99|H1071FC690
+1071FC690:lI114|H1071FF748
+1071FF748:lI105|H1072028F0
+1072028F0:lI112|H107205B30
+107205B30:lI116|H107208DF8
+107208DF8:lI46|H10720C088
+10720C088:lI98|H10720F2F8
+10720F2F8:lI101|H107212608
+107212608:lI97|H107215A70
+107215A70:lI109|N
+1071F1FD8:lH1071F42C8|N
+1071F42C8:lI100|H1071F6AE8
+1071F6AE8:lI105|H1071F9740
+1071F9740:lI99|H1071FC680
+1071FC680:lI116|H1071FF738
+1071FF738:lI46|H1072028E0
+1072028E0:lI98|H107205B20
+107205B20:lI101|H107208DE8
+107208DE8:lI97|H10720C078
+10720C078:lI109|N
+1071F1FC8:lH1071F42B8|N
+1071F42B8:lI101|H1071F6AD8
+1071F6AD8:lI114|H1071F9730
+1071F9730:lI108|H1071FC670
+1071FC670:lI95|H1071FF728
+1071FF728:lI97|H1072028D0
+1072028D0:lI110|H107205B10
+107205B10:lI110|H107208DD8
+107208DD8:lI111|H10720C068
+10720C068:lI46|H10720F2E8
+10720F2E8:lI98|H1072125F8
+1072125F8:lI101|H107215A60
+107215A60:lI97|H1072190A0
+1072190A0:lI109|N
+1071F0A28:lH1071F1FA0|N
+1071F1FA0:lI103|H1071F4288
+1071F4288:lI101|H1071F6AA8
+1071F6AA8:lI110|H1071F9700
+1071F9700:lI95|H1071FC640
+1071FC640:lI102|H1071FF6F8
+1071FF6F8:lI115|H1072028A0
+1072028A0:lI109|H107205AE0
+107205AE0:lI46|H107208DA8
+107208DA8:lI98|H10720C038
+10720C038:lI101|H10720F2B8
+10720F2B8:lI97|H1072125C8
+1072125C8:lI109|N
+1071F0A08:Mn3:H1071F1F70,H1071F1F80,H1071F1F90
+1071F1F70:lH1071F4258|N
+1071F4258:lI100|H1071F6A78
+1071F6A78:lI101|H1071F96D0
+1071F96D0:lI116|H1071FC610
+1071FC610:lI115|H1071FF6C8
+1071FF6C8:lI95|H107202870
+107202870:lI118|H107205AB0
+107205AB0:lI57|H107208D78
+107208D78:lI46|H10720C018
+10720C018:lI98|H10720F298
+10720F298:lI101|H1072125A8
+1072125A8:lI97|H107215A20
+107215A20:lI109|N
+1071F1F90:lH1071F4278|N
+1071F4278:lI102|H1071F6A98
+1071F6A98:lI105|H1071F96F0
+1071F96F0:lI108|H1071FC630
+1071FC630:lI101|H1071FF6E8
+1071FF6E8:lI110|H107202890
+107202890:lI97|H107205AD0
+107205AD0:lI109|H107208D98
+107208D98:lI101|H10720C028
+10720C028:lI46|H10720F2A8
+10720F2A8:lI98|H1072125B8
+1072125B8:lI101|H107215A30
+107215A30:lI97|H107219070
+107219070:lI109|N
+1071F1F80:lH1071F4268|N
+1071F4268:lI101|H1071F6A88
+1071F6A88:lI116|H1071F96E0
+1071F96E0:lI115|H1071FC620
+1071FC620:lI46|H1071FF6D8
+1071FF6D8:lI98|H107202880
+107202880:lI101|H107205AC0
+107205AC0:lI97|H107208D88
+107208D88:lI109|N
+1071F09C8:Mn7:H1071F1F00,H1071F1F10,H1071F1F20,H1071F1F30,H1071F1F40,H1071F1F50,H1071F1F60
+1071F1F00:lH1071F41E8|N
+1071F41E8:lI101|H1071F6A08
+1071F6A08:lI114|H1071F9660
+1071F9660:lI114|H1071FC5A0
+1071FC5A0:lI111|H1071FF658
+1071FF658:lI114|H107202800
+107202800:lI95|H107205A40
+107205A40:lI108|H107208D18
+107208D18:lI111|H10720BFC8
+10720BFC8:lI103|H10720F248
+10720F248:lI103|H107212568
+107212568:lI101|H1072159F0
+1072159F0:lI114|H107219050
+107219050:lI95|H10721C7B0
+10721C7B0:lI102|H10721FE20
+10721FE20:lI105|H1072232A8
+1072232A8:lI108|H107226390
+107226390:lI101|H107229128
+107229128:lI95|H10722BAF0
+10722BAF0:lI104|H10722E158
+10722E158:lI46|H107230510
+107230510:lI98|H107232638
+107232638:lI101|H107234470
+107234470:lI97|H107235FB8
+107235FB8:lI109|N
+1071F1F60:lH1071F4248|N
+1071F4248:lI115|H1071F6A68
+1071F6A68:lI116|H1071F96C0
+1071F96C0:lI114|H1071FC600
+1071FC600:lI105|H1071FF6B8
+1071FF6B8:lI110|H107202860
+107202860:lI103|H107205AA0
+107205AA0:lI46|H107208D68
+107208D68:lI98|H10720C008
+10720C008:lI101|H10720F288
+10720F288:lI97|H107212598
+107212598:lI109|N
+1071F1F50:lH1071F4238|N
+1071F4238:lI122|H1071F6A58
+1071F6A58:lI105|H1071F96B0
+1071F96B0:lI112|H1071FC5F0
+1071FC5F0:lI46|H1071FF6A8
+1071FF6A8:lI98|H107202850
+107202850:lI101|H107205A90
+107205A90:lI97|H107208D58
+107208D58:lI109|N
+1071F1F40:lH1071F4228|N
+1071F4228:lI97|H1071F6A48
+1071F6A48:lI114|H1071F96A0
+1071F96A0:lI114|H1071FC5E0
+1071FC5E0:lI97|H1071FF698
+1071FF698:lI121|H107202840
+107202840:lI46|H107205A80
+107205A80:lI98|H107208D48
+107208D48:lI101|H10720BFF8
+10720BFF8:lI97|H10720F278
+10720F278:lI109|N
+1071F1F30:lH1071F4218|N
+1071F4218:lI105|H1071F6A38
+1071F6A38:lI111|H1071F9690
+1071F9690:lI46|H1071FC5D0
+1071FC5D0:lI98|H1071FF688
+1071FF688:lI101|H107202830
+107202830:lI97|H107205A70
+107205A70:lI109|N
+1071F1F20:lH1071F4208|N
+1071F4208:lI100|H1071F6A28
+1071F6A28:lI101|H1071F9680
+1071F9680:lI116|H1071FC5C0
+1071FC5C0:lI115|H1071FF678
+1071FF678:lI95|H107202820
+107202820:lI115|H107205A60
+107205A60:lI101|H107208D38
+107208D38:lI114|H10720BFE8
+10720BFE8:lI118|H10720F268
+10720F268:lI101|H107212588
+107212588:lI114|H107215A10
+107215A10:lI46|H107219060
+107219060:lI98|H10721C7C0
+10721C7C0:lI101|H10721FE30
+10721FE30:lI97|H1072232B8
+1072232B8:lI109|N
+1071F1F10:lH1071F41F8|N
+1071F41F8:lI115|H1071F6A18
+1071F6A18:lI116|H1071F9670
+1071F9670:lI100|H1071FC5B0
+1071FC5B0:lI108|H1071FF668
+1071FF668:lI105|H107202810
+107202810:lI98|H107205A50
+107205A50:lI46|H107208D28
+107208D28:lI97|H10720BFD8
+10720BFD8:lI112|H10720F258
+10720F258:lI112|H107212578
+107212578:lI117|H107215A00
+107215A00:lI112|N
+1071F0140:lI47|H1071F0998
+1071F0998:lI111|H1071F1EC0
+1071F1EC0:lI112|H1071F41A8
+1071F41A8:lI116|H1071F69C8
+1071F69C8:lI47|H1071F9620
+1071F9620:lI104|H1071FC560
+1071FC560:lI111|H1071FF618
+1071FF618:lI109|H1072027C0
+1072027C0:lI101|H107205A00
+107205A00:lI98|H107208CD8
+107208CD8:lI114|H10720BF88
+10720BF88:lI101|H10720F208
+10720F208:lI119|H107212528
+107212528:lI47|H1072159B0
+1072159B0:lI67|H107219020
+107219020:lI101|H10721C780
+10721C780:lI108|H10721FE00
+10721FE00:lI108|H107223288
+107223288:lI97|H107226370
+107226370:lI114|H107229108
+107229108:lI47|H10722BAD0
+10722BAD0:lI101|H10722E138
+10722E138:lI114|H1072304F0
+1072304F0:lI108|H107232618
+107232618:lI97|H107234450
+107234450:lI110|H107235F98
+107235F98:lI103|H107237830
+107237830:lI47|H107238EB8
+107238EB8:lI50|H10723A390
+10723A390:lI54|H10723B6D0
+10723B6D0:lI46|H10723C7A0
+10723C7A0:lI48|H10723D660
+10723D660:lI46|H10723E3E0
+10723E3E0:lI50|H10723EFF0
+10723EFF0:lI47|H10723FAC0
+10723FAC0:lI108|H107240410
+107240410:lI105|H107240C90
+107240C90:lI98|H107241420
+107241420:lI47|H107241B50
+107241B50:lI101|H107242220
+107242220:lI114|H107242890
+107242890:lI108|H107242E90
+107242E90:lI97|H107243400
+107243400:lI110|H107243940
+107243940:lI103|H107243E30
+107243E30:lI47|H107244320
+107244320:lI108|H1072447D0
+1072447D0:lI105|H107244C40
+107244C40:lI98|H1072450A0
+1072450A0:lI47|H1072454F0
+1072454F0:lI115|H1072458F0
+1072458F0:lI116|H107245CB0
+107245CB0:lI100|H107246040
+107246040:lI108|H1072463D0
+1072463D0:lI105|H107246760
+107246760:lI98|H107246AF0
+107246AF0:lI45|H107246E30
+107246E30:lI53|H107247150
+107247150:lI46|H107247470
+107247470:lI48|H107247780
+107247780:lI46|H107247A80
+107247A80:lI50|H107247D70
+107247D70:lI47|H107248050
+107248050:lI101|H107248310
+107248310:lI98|H1072485D0
+1072485D0:lI105|H107248880
+107248880:lI110|N
+10724AE50:lH10724AEC8|H10724AEE0
+10724AEC8:t2:H1071F0200,H1071F0210
+1071F0210:Mh23:F:H1071F0CD8,H1071F0CE8,H1071F0D00,H1071F0D18,H1071F0D28,H1071F0D38,H1071F0D58,H1071F0D70,H1071F0D88,H1071F0DA8,H1071F0DC0,H1071F0DE0,H1071F0E00,H1071F0E10,H1071F0E30
+1071F0CD8:lH1071F2458|N
+1071F2458:lI120|H1071F47A0
+1071F47A0:lI109|H1071F6FC8
+1071F6FC8:lI101|H1071F9C20
+1071F9C20:lI114|H1071FCB60
+1071FCB60:lI108|H1071FFC18
+1071FFC18:lI95|H107202DC0
+107202DC0:lI120|H107205FF0
+107205FF0:lI112|H1072092A8
+1072092A8:lI97|H10720C508
+10720C508:lI116|H10720F728
+10720F728:lI104|H1072129D8
+1072129D8:lI95|H107215DA0
+107215DA0:lI112|H107219380
+107219380:lI114|H10721CA10
+10721CA10:lI101|H107220050
+107220050:lI100|H107223448
+107223448:lI46|H107226500
+107226500:lI98|H107229228
+107229228:lI101|H10722BB90
+10722BB90:lI97|H10722E1E8
+10722E1E8:lI109|N
+1071F0E30:Mn4:H1071F2638,H1071F2648,H1071F2658,H1071F2668
+1071F2638:lH1071F4990|N
+1071F4990:lI120|H1071F71B8
+1071F71B8:lI109|H1071F9E10
+1071F9E10:lI101|H1071FCD50
+1071FCD50:lI114|H1071FFE08
+1071FFE08:lI108|H107202FB0
+107202FB0:lI95|H1072061E0
+1072061E0:lI101|H107209498
+107209498:lI118|H10720C6F8
+10720C6F8:lI101|H10720F908
+10720F908:lI110|H107212BA8
+107212BA8:lI116|H107215F70
+107215F70:lI112|H107219550
+107219550:lI46|H10721CBC0
+10721CBC0:lI98|H1072201D0
+1072201D0:lI101|H107223588
+107223588:lI97|H107226620
+107226620:lI109|N
+1071F2668:lH1071F49C0|N
+1071F49C0:lI120|H1071F71E8
+1071F71E8:lI109|H1071F9E40
+1071F9E40:lI101|H1071FCD80
+1071FCD80:lI114|H1071FFE38
+1071FFE38:lI108|H107202FE0
+107202FE0:lI46|H107206210
+107206210:lI98|H1072094C8
+1072094C8:lI101|H10720C728
+10720C728:lI97|H10720F938
+10720F938:lI109|N
+1071F2658:lH1071F49B0|N
+1071F49B0:lI120|H1071F71D8
+1071F71D8:lI109|H1071F9E30
+1071F9E30:lI101|H1071FCD70
+1071FCD70:lI114|H1071FFE28
+1071FFE28:lI108|H107202FD0
+107202FD0:lI95|H107206200
+107206200:lI115|H1072094B8
+1072094B8:lI97|H10720C718
+10720C718:lI120|H10720F928
+10720F928:lI95|H107212BC8
+107212BC8:lI115|H107215F90
+107215F90:lI105|H107219570
+107219570:lI109|H10721CBE0
+10721CBE0:lI112|H1072201F0
+1072201F0:lI108|H107223598
+107223598:lI101|H107226630
+107226630:lI95|H107229328
+107229328:lI100|H10722BC70
+10722BC70:lI111|H10722E2B8
+10722E2B8:lI109|H107230640
+107230640:lI46|H107232738
+107232738:lI98|H107234530
+107234530:lI101|H107236058
+107236058:lI97|H1072378D0
+1072378D0:lI109|N
+1071F2648:lH1071F49A0|N
+1071F49A0:lI120|H1071F71C8
+1071F71C8:lI109|H1071F9E20
+1071F9E20:lI101|H1071FCD60
+1071FCD60:lI114|H1071FFE18
+1071FFE18:lI108|H107202FC0
+107202FC0:lI95|H1072061F0
+1072061F0:lI104|H1072094A8
+1072094A8:lI116|H10720C708
+10720C708:lI109|H10720F918
+10720F918:lI108|H107212BB8
+107212BB8:lI46|H107215F80
+107215F80:lI98|H107219560
+107219560:lI101|H10721CBD0
+10721CBD0:lI97|H1072201E0
+1072201E0:lI109|N
+1071F0E10:Mn3:H1071F2608,H1071F2618,H1071F2628
+1071F2608:lH1071F4960|N
+1071F4960:lI120|H1071F7188
+1071F7188:lI109|H1071F9DE0
+1071F9DE0:lI101|H1071FCD20
+1071FCD20:lI114|H1071FFDD8
+1071FFDD8:lI108|H107202F80
+107202F80:lI95|H1072061B0
+1072061B0:lI117|H107209468
+107209468:lI114|H10720C6C8
+10720C6C8:lI105|H10720F8D8
+10720F8D8:lI46|H107212B78
+107212B78:lI98|H107215F40
+107215F40:lI101|H107219520
+107219520:lI97|H10721CB90
+10721CB90:lI109|N
+1071F2628:lH1071F4980|N
+1071F4980:lI120|H1071F71A8
+1071F71A8:lI109|H1071F9E00
+1071F9E00:lI101|H1071FCD40
+1071FCD40:lI114|H1071FFDF8
+1071FFDF8:lI108|H107202FA0
+107202FA0:lI95|H1072061D0
+1072061D0:lI120|H107209488
+107209488:lI112|H10720C6E8
+10720C6E8:lI97|H10720F8F8
+10720F8F8:lI116|H107212B98
+107212B98:lI104|H107215F60
+107215F60:lI95|H107219540
+107219540:lI115|H10721CBB0
+10721CBB0:lI99|H1072201C0
+1072201C0:lI97|H107223578
+107223578:lI110|H107226610
+107226610:lI46|H107229318
+107229318:lI98|H10722BC60
+10722BC60:lI101|H10722E2A8
+10722E2A8:lI97|H107230630
+107230630:lI109|N
+1071F2618:lH1071F4970|N
+1071F4970:lI120|H1071F7198
+1071F7198:lI109|H1071F9DF0
+1071F9DF0:lI101|H1071FCD30
+1071FCD30:lI114|H1071FFDE8
+1071FFDE8:lI108|H107202F90
+107202F90:lI95|H1072061C0
+1072061C0:lI115|H107209478
+107209478:lI103|H10720C6D8
+10720C6D8:lI109|H10720F8E8
+10720F8E8:lI108|H107212B88
+107212B88:lI46|H107215F50
+107215F50:lI98|H107219530
+107219530:lI101|H10721CBA0
+10721CBA0:lI97|H1072201B0
+1072201B0:lI109|N
+1071F0E00:lH1071F25F8|N
+1071F25F8:lI120|H1071F4950
+1071F4950:lI109|H1071F7178
+1071F7178:lI101|H1071F9DD0
+1071F9DD0:lI114|H1071FCD10
+1071FCD10:lI108|H1071FFDC8
+1071FFDC8:lI46|H107202F70
+107202F70:lI97|H1072061A0
+1072061A0:lI112|H107209458
+107209458:lI112|H10720C6B8
+10720C6B8:lI117|H10720F8C8
+10720F8C8:lI112|N
+1071F0DE0:Mn3:H1071F25C0,H1071F25D8,H1071F25E8
+1071F25C0:Mn2:H1071F4910,H1071F4920
+1071F4910:lH1071F7138|N
+1071F7138:lI120|H1071F9D90
+1071F9D90:lI109|H1071FCCD0
+1071FCCD0:lI101|H1071FFD88
+1071FFD88:lI114|H107202F30
+107202F30:lI108|H107206160
+107206160:lI95|H107209418
+107209418:lI118|H10720C678
+10720C678:lI97|H10720F888
+10720F888:lI108|H107212B38
+107212B38:lI105|H107215F00
+107215F00:lI100|H1072194E0
+1072194E0:lI97|H10721CB60
+10721CB60:lI116|H107220180
+107220180:lI101|H107223548
+107223548:lI46|H1072265E0
+1072265E0:lI98|H1072292F8
+1072292F8:lI101|H10722BC50
+10722BC50:lI97|H10722E298
+10722E298:lI109|N
+1071F4920:lH1071F7148|N
+1071F7148:lI120|H1071F9DA0
+1071F9DA0:lI109|H1071FCCE0
+1071FCCE0:lI101|H1071FFD98
+1071FFD98:lI114|H107202F40
+107202F40:lI108|H107206170
+107206170:lI95|H107209428
+107209428:lI114|H10720C688
+10720C688:lI101|H10720F898
+10720F898:lI103|H107212B48
+107212B48:lI101|H107215F10
+107215F10:lI120|H1072194F0
+1072194F0:lI112|H10721CB70
+10721CB70:lI46|H107220190
+107220190:lI98|H107223558
+107223558:lI101|H1072265F0
+1072265F0:lI97|H107229308
+107229308:lI109|N
+1071F25E8:lH1071F4940|N
+1071F4940:lI120|H1071F7168
+1071F7168:lI109|H1071F9DC0
+1071F9DC0:lI101|H1071FCD00
+1071FCD00:lI114|H1071FFDB8
+1071FFDB8:lI108|H107202F60
+107202F60:lI95|H107206190
+107206190:lI98|H107209448
+107209448:lI54|H10720C6A8
+10720C6A8:lI52|H10720F8B8
+10720F8B8:lI66|H107212B68
+107212B68:lI105|H107215F30
+107215F30:lI110|H107219510
+107219510:lI46|H10721CB80
+10721CB80:lI98|H1072201A0
+1072201A0:lI101|H107223568
+107223568:lI97|H107226600
+107226600:lI109|N
+1071F25D8:lH1071F4930|N
+1071F4930:lI120|H1071F7158
+1071F7158:lI109|H1071F9DB0
+1071F9DB0:lI101|H1071FCCF0
+1071FCCF0:lI114|H1071FFDA8
+1071FFDA8:lI108|H107202F50
+107202F50:lI95|H107206180
+107206180:lI120|H107209438
+107209438:lI115|H10720C698
+10720C698:lI46|H10720F8A8
+10720F8A8:lI98|H107212B58
+107212B58:lI101|H107215F20
+107215F20:lI97|H107219500
+107219500:lI109|N
+1071F0DC0:Mn3:H1071F2590,H1071F25A0,H1071F25B0
+1071F2590:lH1071F48E0|N
+1071F48E0:lI120|H1071F7108
+1071F7108:lI109|H1071F9D60
+1071F9D60:lI101|H1071FCCA0
+1071FCCA0:lI114|H1071FFD58
+1071FFD58:lI108|H107202F00
+107202F00:lI95|H107206130
+107206130:lI115|H1072093E8
+1072093E8:lI97|H10720C648
+10720C648:lI120|H10720F858
+10720F858:lI95|H107212B08
+107212B08:lI112|H107215ED0
+107215ED0:lI97|H1072194B0
+1072194B0:lI114|H10721CB30
+10721CB30:lI115|H107220150
+107220150:lI101|H107223518
+107223518:lI114|H1072265B0
+1072265B0:lI95|H1072292C8
+1072292C8:lI108|H10722BC20
+10722BC20:lI105|H10722E268
+10722E268:lI115|H107230610
+107230610:lI116|H107232728
+107232728:lI46|H107234520
+107234520:lI98|H107236048
+107236048:lI101|H1072378C0
+1072378C0:lI97|H107238F48
+107238F48:lI109|N
+1071F25B0:lH1071F4900|N
+1071F4900:lI120|H1071F7128
+1071F7128:lI109|H1071F9D80
+1071F9D80:lI101|H1071FCCC0
+1071FCCC0:lI114|H1071FFD78
+1071FFD78:lI108|H107202F20
+107202F20:lI95|H107206150
+107206150:lI120|H107209408
+107209408:lI112|H10720C668
+10720C668:lI97|H10720F878
+10720F878:lI116|H107212B28
+107212B28:lI104|H107215EF0
+107215EF0:lI95|H1072194D0
+1072194D0:lI108|H10721CB50
+10721CB50:lI105|H107220170
+107220170:lI98|H107223538
+107223538:lI46|H1072265D0
+1072265D0:lI98|H1072292E8
+1072292E8:lI101|H10722BC40
+10722BC40:lI97|H10722E288
+10722E288:lI109|N
+1071F25A0:lH1071F48F0|N
+1071F48F0:lI120|H1071F7118
+1071F7118:lI109|H1071F9D70
+1071F9D70:lI101|H1071FCCB0
+1071FCCB0:lI114|H1071FFD68
+1071FFD68:lI108|H107202F10
+107202F10:lI95|H107206140
+107206140:lI115|H1072093F8
+1072093F8:lI97|H10720C658
+10720C658:lI120|H10720F868
+10720F868:lI95|H107212B18
+107212B18:lI112|H107215EE0
+107215EE0:lI97|H1072194C0
+1072194C0:lI114|H10721CB40
+10721CB40:lI115|H107220160
+107220160:lI101|H107223528
+107223528:lI114|H1072265C0
+1072265C0:lI46|H1072292D8
+1072292D8:lI98|H10722BC30
+10722BC30:lI101|H10722E278
+10722E278:lI97|H107230620
+107230620:lI109|N
+1071F0DA8:Mn2:H1071F2568,H1071F2578
+1071F2568:lH1071F48B0|N
+1071F48B0:lI120|H1071F70D8
+1071F70D8:lI109|H1071F9D30
+1071F9D30:lI101|H1071FCC70
+1071FCC70:lI114|H1071FFD28
+1071FFD28:lI108|H107202ED0
+107202ED0:lI95|H107206100
+107206100:lI120|H1072093B8
+1072093B8:lI115|H10720C618
+10720C618:lI100|H10720F828
+10720F828:lI95|H107212AD8
+107212AD8:lI116|H107215EA0
+107215EA0:lI121|H107219480
+107219480:lI112|H10721CB00
+10721CB00:lI101|H107220120
+107220120:lI46|H1072234F8
+1072234F8:lI98|H107226590
+107226590:lI101|H1072292A8
+1072292A8:lI97|H10722BC00
+10722BC00:lI109|N
+1071F2578:Mn2:H1071F48C0,H1071F48D0
+1071F48C0:lH1071F70E8|N
+1071F70E8:lI120|H1071F9D40
+1071F9D40:lI109|H1071FCC80
+1071FCC80:lI101|H1071FFD38
+1071FFD38:lI114|H107202EE0
+107202EE0:lI108|H107206110
+107206110:lI95|H1072093C8
+1072093C8:lI108|H10720C628
+10720C628:lI105|H10720F838
+10720F838:lI98|H107212AE8
+107212AE8:lI46|H107215EB0
+107215EB0:lI98|H107219490
+107219490:lI101|H10721CB10
+10721CB10:lI97|H107220130
+107220130:lI109|N
+1071F48D0:lH1071F70F8|N
+1071F70F8:lI120|H1071F9D50
+1071F9D50:lI109|H1071FCC90
+1071FCC90:lI101|H1071FFD48
+1071FFD48:lI114|H107202EF0
+107202EF0:lI108|H107206120
+107206120:lI95|H1072093D8
+1072093D8:lI115|H10720C638
+10720C638:lI97|H10720F848
+10720F848:lI120|H107212AF8
+107212AF8:lI95|H107215EC0
+107215EC0:lI112|H1072194A0
+1072194A0:lI97|H10721CB20
+10721CB20:lI114|H107220140
+107220140:lI115|H107223508
+107223508:lI101|H1072265A0
+1072265A0:lI114|H1072292B8
+1072292B8:lI95|H10722BC10
+10722BC10:lI117|H10722E258
+10722E258:lI116|H107230600
+107230600:lI102|H107232718
+107232718:lI56|H107234510
+107234510:lI46|H107236038
+107236038:lI98|H1072378B0
+1072378B0:lI101|H107238F38
+107238F38:lI97|H10723A400
+10723A400:lI109|N
+1071F0D88:Mn3:H1071F2538,H1071F2548,H1071F2558
+1071F2538:lH1071F4880|N
+1071F4880:lI120|H1071F70A8
+1071F70A8:lI109|H1071F9D00
+1071F9D00:lI101|H1071FCC40
+1071FCC40:lI114|H1071FFCF8
+1071FFCF8:lI108|H107202EA0
+107202EA0:lI46|H1072060D0
+1072060D0:lI97|H107209388
+107209388:lI112|H10720C5E8
+10720C5E8:lI112|N
+1071F2558:lH1071F48A0|N
+1071F48A0:lI120|H1071F70C8
+1071F70C8:lI109|H1071F9D20
+1071F9D20:lI101|H1071FCC60
+1071FCC60:lI114|H1071FFD18
+1071FFD18:lI108|H107202EC0
+107202EC0:lI95|H1072060F0
+1072060F0:lI117|H1072093A8
+1072093A8:lI99|H10720C608
+10720C608:lI115|H10720F818
+10720F818:lI46|H107212AC8
+107212AC8:lI98|H107215E90
+107215E90:lI101|H107219470
+107219470:lI97|H10721CAF0
+10721CAF0:lI109|N
+1071F2548:lH1071F4890|N
+1071F4890:lI120|H1071F70B8
+1071F70B8:lI109|H1071F9D10
+1071F9D10:lI101|H1071FCC50
+1071FCC50:lI114|H1071FFD08
+1071FFD08:lI108|H107202EB0
+107202EB0:lI95|H1072060E0
+1072060E0:lI115|H107209398
+107209398:lI97|H10720C5F8
+10720C5F8:lI120|H10720F808
+10720F808:lI95|H107212AB8
+107212AB8:lI112|H107215E80
+107215E80:lI97|H107219460
+107219460:lI114|H10721CAE0
+10721CAE0:lI115|H107220110
+107220110:lI101|H1072234E8
+1072234E8:lI114|H107226580
+107226580:lI95|H107229298
+107229298:lI117|H10722BBF0
+10722BBF0:lI116|H10722E248
+10722E248:lI102|H1072305F0
+1072305F0:lI49|H107232708
+107232708:lI54|H107234500
+107234500:lI98|H107236028
+107236028:lI101|H1072378A0
+1072378A0:lI46|H107238F28
+107238F28:lI98|H10723A3F0
+10723A3F0:lI101|H10723B730
+10723B730:lI97|H10723C7F0
+10723C7F0:lI109|N
+1071F0D70:Mn2:H1071F2518,H1071F2528
+1071F2518:lH1071F4860|N
+1071F4860:lI120|H1071F7088
+1071F7088:lI109|H1071F9CE0
+1071F9CE0:lI101|H1071FCC20
+1071FCC20:lI114|H1071FFCD8
+1071FFCD8:lI108|H107202E80
+107202E80:lI95|H1072060B0
+1072060B0:lI120|H107209368
+107209368:lI112|H10720C5C8
+10720C5C8:lI97|H10720F7E8
+10720F7E8:lI116|H107212A98
+107212A98:lI104|H107215E60
+107215E60:lI46|H107219440
+107219440:lI98|H10721CAC0
+10721CAC0:lI101|H1072200F0
+1072200F0:lI97|H1072234C8
+1072234C8:lI109|N
+1071F2528:lH1071F4870|N
+1071F4870:lI120|H1071F7098
+1071F7098:lI109|H1071F9CF0
+1071F9CF0:lI101|H1071FCC30
+1071FCC30:lI114|H1071FFCE8
+1071FFCE8:lI108|H107202E90
+107202E90:lI95|H1072060C0
+1072060C0:lI120|H107209378
+107209378:lI112|H10720C5D8
+10720C5D8:lI97|H10720F7F8
+10720F7F8:lI116|H107212AA8
+107212AA8:lI104|H107215E70
+107215E70:lI95|H107219450
+107219450:lI112|H10721CAD0
+10721CAD0:lI97|H107220100
+107220100:lI114|H1072234D8
+1072234D8:lI115|H107226570
+107226570:lI101|H107229288
+107229288:lI46|H10722BBE0
+10722BBE0:lI98|H10722E238
+10722E238:lI101|H1072305E0
+1072305E0:lI97|H1072326F8
+1072326F8:lI109|N
+1071F0D58:Mn2:H1071F24F8,H1071F2508
+1071F24F8:lH1071F4840|N
+1071F4840:lI120|H1071F7068
+1071F7068:lI109|H1071F9CC0
+1071F9CC0:lI101|H1071FCC00
+1071FCC00:lI114|H1071FFCB8
+1071FFCB8:lI108|H107202E60
+107202E60:lI95|H107206090
+107206090:lI120|H107209348
+107209348:lI109|H10720C5A8
+10720C5A8:lI108|H10720F7C8
+10720F7C8:lI46|H107212A78
+107212A78:lI98|H107215E40
+107215E40:lI101|H107219420
+107219420:lI97|H10721CAA0
+10721CAA0:lI109|N
+1071F2508:lH1071F4850|N
+1071F4850:lI120|H1071F7078
+1071F7078:lI109|H1071F9CD0
+1071F9CD0:lI101|H1071FCC10
+1071FCC10:lI114|H1071FFCC8
+1071FFCC8:lI108|H107202E70
+107202E70:lI95|H1072060A0
+1072060A0:lI116|H107209358
+107209358:lI101|H10720C5B8
+10720C5B8:lI120|H10720F7D8
+10720F7D8:lI116|H107212A88
+107212A88:lI46|H107215E50
+107215E50:lI98|H107219430
+107219430:lI101|H10721CAB0
+10721CAB0:lI97|H1072200E0
+1072200E0:lI109|N
+1071F0D38:Mn3:H1071F24C8,H1071F24D8,H1071F24E8
+1071F24C8:lH1071F4810|N
+1071F4810:lI120|H1071F7038
+1071F7038:lI109|H1071F9C90
+1071F9C90:lI101|H1071FCBD0
+1071FCBD0:lI114|H1071FFC88
+1071FFC88:lI108|H107202E30
+107202E30:lI95|H107206060
+107206060:lI115|H107209318
+107209318:lI97|H10720C578
+10720C578:lI120|H10720F798
+10720F798:lI95|H107212A48
+107212A48:lI112|H107215E10
+107215E10:lI97|H1072193F0
+1072193F0:lI114|H10721CA70
+10721CA70:lI115|H1072200B0
+1072200B0:lI101|H107223498
+107223498:lI114|H107226540
+107226540:lI95|H107229258
+107229258:lI108|H10722BBC0
+10722BBC0:lI97|H10722E218
+10722E218:lI116|H1072305C0
+1072305C0:lI105|H1072326D8
+1072326D8:lI110|H1072344E0
+1072344E0:lI49|H107236008
+107236008:lI46|H107237880
+107237880:lI98|H107238F08
+107238F08:lI101|H10723A3D0
+10723A3D0:lI97|H10723B710
+10723B710:lI109|N
+1071F24E8:lH1071F4830|N
+1071F4830:lI120|H1071F7058
+1071F7058:lI109|H1071F9CB0
+1071F9CB0:lI101|H1071FCBF0
+1071FCBF0:lI114|H1071FFCA8
+1071FFCA8:lI108|H107202E50
+107202E50:lI95|H107206080
+107206080:lI111|H107209338
+107209338:lI116|H10720C598
+10720C598:lI112|H10720F7B8
+10720F7B8:lI115|H107212A68
+107212A68:lI103|H107215E30
+107215E30:lI109|H107219410
+107219410:lI108|H10721CA90
+10721CA90:lI46|H1072200D0
+1072200D0:lI98|H1072234B8
+1072234B8:lI101|H107226560
+107226560:lI97|H107229278
+107229278:lI109|N
+1071F24D8:lH1071F4820|N
+1071F4820:lI120|H1071F7048
+1071F7048:lI109|H1071F9CA0
+1071F9CA0:lI101|H1071FCBE0
+1071FCBE0:lI114|H1071FFC98
+1071FFC98:lI108|H107202E40
+107202E40:lI95|H107206070
+107206070:lI115|H107209328
+107209328:lI97|H10720C588
+10720C588:lI120|H10720F7A8
+10720F7A8:lI95|H107212A58
+107212A58:lI112|H107215E20
+107215E20:lI97|H107219400
+107219400:lI114|H10721CA80
+10721CA80:lI115|H1072200C0
+1072200C0:lI101|H1072234A8
+1072234A8:lI114|H107226550
+107226550:lI95|H107229268
+107229268:lI117|H10722BBD0
+10722BBD0:lI116|H10722E228
+10722E228:lI102|H1072305D0
+1072305D0:lI49|H1072326E8
+1072326E8:lI54|H1072344F0
+1072344F0:lI108|H107236018
+107236018:lI101|H107237890
+107237890:lI46|H107238F18
+107238F18:lI98|H10723A3E0
+10723A3E0:lI101|H10723B720
+10723B720:lI97|H10723C7E0
+10723C7E0:lI109|N
+1071F0D28:lH1071F24B8|N
+1071F24B8:lI120|H1071F4800
+1071F4800:lI109|H1071F7028
+1071F7028:lI101|H1071F9C80
+1071F9C80:lI114|H1071FCBC0
+1071FCBC0:lI108|H1071FFC78
+1071FFC78:lI95|H107202E20
+107202E20:lI115|H107206050
+107206050:lI97|H107209308
+107209308:lI120|H10720C568
+10720C568:lI95|H10720F788
+10720F788:lI111|H107212A38
+107212A38:lI108|H107215E00
+107215E00:lI100|H1072193E0
+1072193E0:lI95|H10721CA60
+10721CA60:lI100|H1072200A0
+1072200A0:lI111|H107223488
+107223488:lI109|H107226530
+107226530:lI46|H107229248
+107229248:lI98|H10722BBB0
+10722BBB0:lI101|H10722E208
+10722E208:lI97|H1072305B0
+1072305B0:lI109|N
+1071F0D18:lH1071F24A8|N
+1071F24A8:lI120|H1071F47F0
+1071F47F0:lI109|H1071F7018
+1071F7018:lI101|H1071F9C70
+1071F9C70:lI114|H1071FCBB0
+1071FCBB0:lI108|H1071FFC68
+1071FFC68:lI95|H107202E10
+107202E10:lI120|H107206040
+107206040:lI115|H1072092F8
+1072092F8:lI100|H10720C558
+10720C558:lI46|H10720F778
+10720F778:lI98|H107212A28
+107212A28:lI101|H107215DF0
+107215DF0:lI97|H1072193D0
+1072193D0:lI109|N
+1071F0D00:Mn2:H1071F2488,H1071F2498
+1071F2488:lH1071F47D0|N
+1071F47D0:lI120|H1071F6FF8
+1071F6FF8:lI109|H1071F9C50
+1071F9C50:lI101|H1071FCB90
+1071FCB90:lI114|H1071FFC48
+1071FFC48:lI108|H107202DF0
+107202DF0:lI95|H107206020
+107206020:lI115|H1072092D8
+1072092D8:lI105|H10720C538
+10720C538:lI109|H10720F758
+10720F758:lI112|H107212A08
+107212A08:lI108|H107215DD0
+107215DD0:lI101|H1072193B0
+1072193B0:lI46|H10721CA40
+10721CA40:lI98|H107220080
+107220080:lI101|H107223468
+107223468:lI97|H107226510
+107226510:lI109|N
+1071F2498:lH1071F47E0|N
+1071F47E0:lI120|H1071F7008
+1071F7008:lI109|H1071F9C60
+1071F9C60:lI101|H1071FCBA0
+1071FCBA0:lI114|H1071FFC58
+1071FFC58:lI108|H107202E00
+107202E00:lI95|H107206030
+107206030:lI98|H1072092E8
+1072092E8:lI54|H10720C548
+10720C548:lI52|H10720F768
+10720F768:lI66|H107212A18
+107212A18:lI105|H107215DE0
+107215DE0:lI110|H1072193C0
+1072193C0:lI95|H10721CA50
+10721CA50:lI115|H107220090
+107220090:lI99|H107223478
+107223478:lI97|H107226520
+107226520:lI110|H107229238
+107229238:lI46|H10722BBA0
+10722BBA0:lI98|H10722E1F8
+10722E1F8:lI101|H1072305A0
+1072305A0:lI97|H1072326C8
+1072326C8:lI109|N
+1071F0CE8:Mn2:H1071F2468,H1071F2478
+1071F2468:lH1071F47B0|N
+1071F47B0:lI120|H1071F6FD8
+1071F6FD8:lI109|H1071F9C30
+1071F9C30:lI101|H1071FCB70
+1071FCB70:lI114|H1071FFC28
+1071FFC28:lI108|H107202DD0
+107202DD0:lI95|H107206000
+107206000:lI120|H1072092B8
+1072092B8:lI108|H10720C518
+10720C518:lI97|H10720F738
+10720F738:lI116|H1072129E8
+1072129E8:lI101|H107215DB0
+107215DB0:lI46|H107219390
+107219390:lI98|H10721CA20
+10721CA20:lI101|H107220060
+107220060:lI97|H107223458
+107223458:lI109|N
+1071F2478:lH1071F47C0|N
+1071F47C0:lI120|H1071F6FE8
+1071F6FE8:lI109|H1071F9C40
+1071F9C40:lI101|H1071FCB80
+1071FCB80:lI114|H1071FFC38
+1071FFC38:lI108|H107202DE0
+107202DE0:lI95|H107206010
+107206010:lI115|H1072092C8
+1072092C8:lI99|H10720C528
+10720C528:lI97|H10720F748
+10720F748:lI110|H1072129F8
+1072129F8:lI46|H107215DC0
+107215DC0:lI98|H1072193A0
+1072193A0:lI101|H10721CA30
+10721CA30:lI97|H107220070
+107220070:lI109|N
+1071F0200:lI47|H1071F0CC8
+1071F0CC8:lI111|H1071F2448
+1071F2448:lI112|H1071F4790
+1071F4790:lI116|H1071F6FB8
+1071F6FB8:lI47|H1071F9C10
+1071F9C10:lI104|H1071FCB50
+1071FCB50:lI111|H1071FFC08
+1071FFC08:lI109|H107202DB0
+107202DB0:lI101|H107205FE0
+107205FE0:lI98|H107209298
+107209298:lI114|H10720C4F8
+10720C4F8:lI101|H10720F718
+10720F718:lI119|H1072129C8
+1072129C8:lI47|H107215D90
+107215D90:lI67|H107219370
+107219370:lI101|H10721CA00
+10721CA00:lI108|H107220040
+107220040:lI108|H107223438
+107223438:lI97|H1072264F0
+1072264F0:lI114|H107229218
+107229218:lI47|H10722BB80
+10722BB80:lI101|H10722E1D8
+10722E1D8:lI114|H107230590
+107230590:lI108|H1072326B8
+1072326B8:lI97|H1072344D0
+1072344D0:lI110|H107235FF8
+107235FF8:lI103|H107237870
+107237870:lI47|H107238EF8
+107238EF8:lI50|H10723A3C0
+10723A3C0:lI54|H10723B700
+10723B700:lI46|H10723C7D0
+10723C7D0:lI48|H10723D690
+10723D690:lI46|H10723E410
+10723E410:lI50|H10723F020
+10723F020:lI47|H10723FAF0
+10723FAF0:lI108|H107240440
+107240440:lI105|H107240CC0
+107240CC0:lI98|H107241450
+107241450:lI47|H107241B80
+107241B80:lI101|H107242250
+107242250:lI114|H1072428C0
+1072428C0:lI108|H107242EC0
+107242EC0:lI97|H107243430
+107243430:lI110|H107243970
+107243970:lI103|H107243E60
+107243E60:lI47|H107244350
+107244350:lI108|H107244800
+107244800:lI105|H107244C70
+107244C70:lI98|H1072450D0
+1072450D0:lI47|H107245520
+107245520:lI120|H107245920
+107245920:lI109|H107245CE0
+107245CE0:lI101|H107246070
+107246070:lI114|H107246400
+107246400:lI108|H107246790
+107246790:lI45|H107246B20
+107246B20:lI49|H107246E60
+107246E60:lI46|H107247180
+107247180:lI51|H1072474A0
+1072474A0:lI46|H1072477B0
+1072477B0:lI51|H107247AB0
+107247AB0:lI50|H107247DA0
+107247DA0:lI47|H280052C20
+10724AEE0:lH10724AF38|H10724AF50
+10724AF38:t2:H1071F02B8,H1071F02C8
+1071F02C8:MhF3:10:H1071F0E88,H1071F0EF8,H1071F0F50,H1071F0FA0,H1071F1000,H1071F1050,H1071F10B0,H1071F1130,H1071F1190,H1071F11E8,H1071F1238,H1071F12A0,H1071F12E8,H1071F1328,H1071F1370,H1071F13C8
+1071F0E88:MnD:H1071F26A8,H1071F26B8,H1071F26C8,H1071F26D8,H1071F26E8,H1071F2700,H1071F2710,H1071F2720,H1071F2738,H1071F2748,H1071F2760,H1071F2780,H1071F2790
+1071F26A8:lH1071F4A00|N
+1071F4A00:lI119|H1071F7228
+1071F7228:lI120|H1071F9E80
+1071F9E80:lI65|H1071FCDC0
+1071FCDC0:lI117|H1071FFE78
+1071FFE78:lI105|H107203020
+107203020:lI68|H107206250
+107206250:lI111|H107209508
+107209508:lI99|H10720C768
+10720C768:lI107|H10720F978
+10720F978:lI65|H107212C08
+107212C08:lI114|H107215FD0
+107215FD0:lI116|H1072195B0
+1072195B0:lI46|H10721CC20
+10721CC20:lI98|H107220230
+107220230:lI101|H1072235D8
+1072235D8:lI97|H107226670
+107226670:lI109|N
+1071F2790:Mn2:H1071F4B10,H1071F4B20
+1071F4B10:lH1071F7338|N
+1071F7338:lI119|H1071F9F90
+1071F9F90:lI120|H1071FCED0
+1071FCED0:lI70|H1071FFF88
+1071FFF88:lI105|H107203130
+107203130:lI108|H107206360
+107206360:lI101|H107209618
+107209618:lI68|H10720C878
+10720C878:lI105|H10720FA88
+10720FA88:lI97|H107212D18
+107212D18:lI108|H1072160D0
+1072160D0:lI111|H1072196A0
+1072196A0:lI103|H10721CD10
+10721CD10:lI46|H107220310
+107220310:lI98|H1072236B8
+1072236B8:lI101|H107226730
+107226730:lI97|H1072293F8
+1072293F8:lI109|N
+1071F4B20:lH1071F7348|N
+1071F7348:lI119|H1071F9FA0
+1071F9FA0:lI120|H1071FCEE0
+1071FCEE0:lI81|H1071FFF98
+1071FFF98:lI117|H107203140
+107203140:lI101|H107206370
+107206370:lI114|H107209628
+107209628:lI121|H10720C888
+10720C888:lI78|H10720FA98
+10720FA98:lI101|H107212D28
+107212D28:lI119|H1072160E0
+1072160E0:lI80|H1072196B0
+1072196B0:lI97|H10721CD20
+10721CD20:lI108|H107220320
+107220320:lI101|H1072236C8
+1072236C8:lI116|H107226740
+107226740:lI116|H107229408
+107229408:lI101|H10722BD30
+10722BD30:lI69|H10722E368
+10722E368:lI118|H1072306D0
+1072306D0:lI101|H1072327C8
+1072327C8:lI110|H107234590
+107234590:lI116|H1072360B8
+1072360B8:lI46|H107237930
+107237930:lI98|H107238F98
+107238F98:lI101|H10723A440
+10723A440:lI97|H10723B770
+10723B770:lI109|N
+1071F2780:lH1071F4B00|N
+1071F4B00:lI119|H1071F7328
+1071F7328:lI120|H1071F9F80
+1071F9F80:lI83|H1071FCEC0
+1071FCEC0:lI97|H1071FFF78
+1071FFF78:lI115|H107203120
+107203120:lI104|H107206350
+107206350:lI87|H107209608
+107209608:lI105|H10720C868
+10720C868:lI110|H10720FA78
+10720FA78:lI100|H107212D08
+107212D08:lI111|H1072160C0
+1072160C0:lI119|H107219690
+107219690:lI46|H10721CD00
+10721CD00:lI98|H107220300
+107220300:lI101|H1072236A8
+1072236A8:lI97|H107226720
+107226720:lI109|N
+1071F2760:Mn3:H1071F4AD0,H1071F4AE0,H1071F4AF0
+1071F4AD0:lH1071F72F8|N
+1071F72F8:lI119|H1071F9F50
+1071F9F50:lI120|H1071FCE90
+1071FCE90:lI80|H1071FFF48
+1071FFF48:lI111|H1072030F0
+1072030F0:lI115|H107206320
+107206320:lI116|H1072095D8
+1072095D8:lI83|H10720C838
+10720C838:lI99|H10720FA48
+10720FA48:lI114|H107212CD8
+107212CD8:lI105|H107216090
+107216090:lI112|H107219660
+107219660:lI116|H10721CCD0
+10721CCD0:lI68|H1072202E0
+1072202E0:lI67|H107223688
+107223688:lI46|H107226700
+107226700:lI98|H1072293D8
+1072293D8:lI101|H10722BD10
+10722BD10:lI97|H10722E348
+10722E348:lI109|N
+1071F4AF0:lH1071F7318|N
+1071F7318:lI119|H1071F9F70
+1071F9F70:lI120|H1071FCEB0
+1071FCEB0:lI87|H1071FFF68
+1071FFF68:lI105|H107203110
+107203110:lI110|H107206340
+107206340:lI100|H1072095F8
+1072095F8:lI111|H10720C858
+10720C858:lI119|H10720FA68
+10720FA68:lI67|H107212CF8
+107212CF8:lI114|H1072160B0
+1072160B0:lI101|H107219680
+107219680:lI97|H10721CCF0
+10721CCF0:lI116|H1072202F0
+1072202F0:lI101|H107223698
+107223698:lI69|H107226710
+107226710:lI118|H1072293E8
+1072293E8:lI101|H10722BD20
+10722BD20:lI110|H10722E358
+10722E358:lI116|H1072306C0
+1072306C0:lI46|H1072327B8
+1072327B8:lI98|H107234580
+107234580:lI101|H1072360A8
+1072360A8:lI97|H107237920
+107237920:lI109|N
+1071F4AE0:lH1071F7308|N
+1071F7308:lI119|H1071F9F60
+1071F9F60:lI120|H1071FCEA0
+1071FCEA0:lI67|H1071FFF58
+1071FFF58:lI117|H107203100
+107203100:lI114|H107206330
+107206330:lI115|H1072095E8
+1072095E8:lI111|H10720C848
+10720C848:lI114|H10720FA58
+10720FA58:lI46|H107212CE8
+107212CE8:lI98|H1072160A0
+1072160A0:lI101|H107219670
+107219670:lI97|H10721CCE0
+10721CCE0:lI109|N
+1071F2748:Mn2:H1071F4AB0,H1071F4AC0
+1071F4AB0:lH1071F72D8|N
+1071F72D8:lI119|H1071F9F30
+1071F9F30:lI120|H1071FCE70
+1071FCE70:lI71|H1071FFF28
+1071FFF28:lI114|H1072030D0
+1072030D0:lI97|H107206300
+107206300:lI112|H1072095B8
+1072095B8:lI104|H10720C818
+10720C818:lI105|H10720FA28
+10720FA28:lI99|H107212CB8
+107212CB8:lI115|H107216070
+107216070:lI80|H107219640
+107219640:lI101|H10721CCB0
+10721CCB0:lI110|H1072202C0
+1072202C0:lI46|H107223668
+107223668:lI98|H1072266F0
+1072266F0:lI101|H1072293C8
+1072293C8:lI97|H10722BD00
+10722BD00:lI109|N
+1071F4AC0:lH1071F72E8|N
+1071F72E8:lI119|H1071F9F40
+1071F9F40:lI120|H1071FCE80
+1071FCE80:lI70|H1071FFF38
+1071FFF38:lI111|H1072030E0
+1072030E0:lI110|H107206310
+107206310:lI116|H1072095C8
+1072095C8:lI68|H10720C828
+10720C828:lI97|H10720FA38
+10720FA38:lI116|H107212CC8
+107212CC8:lI97|H107216080
+107216080:lI46|H107219650
+107219650:lI98|H10721CCC0
+10721CCC0:lI101|H1072202D0
+1072202D0:lI97|H107223678
+107223678:lI109|N
+1071F2738:lH1071F4AA0|N
+1071F4AA0:lI119|H1071F72C8
+1071F72C8:lI120|H1071F9F20
+1071F9F20:lI80|H1071FCE60
+1071FCE60:lI114|H1071FFF18
+1071FFF18:lI105|H1072030C0
+1072030C0:lI110|H1072062F0
+1072062F0:lI116|H1072095A8
+1072095A8:lI68|H10720C808
+10720C808:lI105|H10720FA18
+10720FA18:lI97|H107212CA8
+107212CA8:lI108|H107216060
+107216060:lI111|H107219630
+107219630:lI103|H10721CCA0
+10721CCA0:lI68|H1072202B0
+1072202B0:lI97|H107223658
+107223658:lI116|H1072266E0
+1072266E0:lI97|H1072293B8
+1072293B8:lI46|H10722BCF0
+10722BCF0:lI98|H10722E338
+10722E338:lI101|H1072306B0
+1072306B0:lI97|H1072327A8
+1072327A8:lI109|N
+1071F2720:Mn2:H1071F4A80,H1071F4A90
+1071F4A80:lH1071F72A8|N
+1071F72A8:lI119|H1071F9F00
+1071F9F00:lI120|H1071FCE40
+1071FCE40:lI83|H1071FFEF8
+1071FFEF8:lI116|H1072030A0
+1072030A0:lI97|H1072062D0
+1072062D0:lI116|H107209588
+107209588:lI105|H10720C7E8
+10720C7E8:lI99|H10720F9F8
+10720F9F8:lI66|H107212C88
+107212C88:lI111|H107216040
+107216040:lI120|H107219610
+107219610:lI83|H10721CC80
+10721CC80:lI105|H107220290
+107220290:lI122|H107223638
+107223638:lI101|H1072266C0
+1072266C0:lI114|H107229398
+107229398:lI46|H10722BCD0
+10722BCD0:lI98|H10722E318
+10722E318:lI101|H107230690
+107230690:lI97|H107232788
+107232788:lI109|N
+1071F4A90:lH1071F72B8|N
+1071F72B8:lI119|H1071F9F10
+1071F9F10:lI120|H1071FCE50
+1071FCE50:lI83|H1071FFF08
+1071FFF08:lI101|H1072030B0
+1072030B0:lI116|H1072062E0
+1072062E0:lI67|H107209598
+107209598:lI117|H10720C7F8
+10720C7F8:lI114|H10720FA08
+10720FA08:lI115|H107212C98
+107212C98:lI111|H107216050
+107216050:lI114|H107219620
+107219620:lI69|H10721CC90
+10721CC90:lI118|H1072202A0
+1072202A0:lI101|H107223648
+107223648:lI110|H1072266D0
+1072266D0:lI116|H1072293A8
+1072293A8:lI46|H10722BCE0
+10722BCE0:lI98|H10722E328
+10722E328:lI101|H1072306A0
+1072306A0:lI97|H107232798
+107232798:lI109|N
+1071F2710:lH1071F4A70|N
+1071F4A70:lI119|H1071F7298
+1071F7298:lI120|H1071F9EF0
+1071F9EF0:lI80|H1071FCE30
+1071FCE30:lI97|H1071FFEE8
+1071FFEE8:lI103|H107203090
+107203090:lI101|H1072062C0
+1072062C0:lI83|H107209578
+107209578:lI101|H10720C7D8
+10720C7D8:lI116|H10720F9E8
+10720F9E8:lI117|H107212C78
+107212C78:lI112|H107216030
+107216030:lI68|H107219600
+107219600:lI105|H10721CC70
+10721CC70:lI97|H107220280
+107220280:lI108|H107223628
+107223628:lI111|H1072266B0
+1072266B0:lI103|H107229388
+107229388:lI68|H10722BCC0
+10722BCC0:lI97|H10722E308
+10722E308:lI116|H107230680
+107230680:lI97|H107232778
+107232778:lI46|H107234570
+107234570:lI98|H107236098
+107236098:lI101|H107237910
+107237910:lI97|H107238F88
+107238F88:lI109|N
+1071F2700:lH1071F4A60|N
+1071F4A60:lI119|H1071F7288
+1071F7288:lI120|H1071F9EE0
+1071F9EE0:lI71|H1071FCE20
+1071FCE20:lI66|H1071FFED8
+1071FFED8:lI83|H107203080
+107203080:lI105|H1072062B0
+1072062B0:lI122|H107209568
+107209568:lI101|H10720C7C8
+10720C7C8:lI114|H10720F9D8
+10720F9D8:lI73|H107212C68
+107212C68:lI116|H107216020
+107216020:lI101|H1072195F0
+1072195F0:lI109|H10721CC60
+10721CC60:lI46|H107220270
+107220270:lI98|H107223618
+107223618:lI101|H1072266A0
+1072266A0:lI97|H107229378
+107229378:lI109|N
+1071F26E8:Mn2:H1071F4A40,H1071F4A50
+1071F4A40:lH1071F7268|N
+1071F7268:lI119|H1071F9EC0
+1071F9EC0:lI120|H1071FCE00
+1071FCE00:lI71|H1071FFEB8
+1071FFEB8:lI114|H107203060
+107203060:lI105|H107206290
+107206290:lI100|H107209548
+107209548:lI46|H10720C7A8
+10720C7A8:lI98|H10720F9B8
+10720F9B8:lI101|H107212C48
+107212C48:lI97|H107216000
+107216000:lI109|N
+1071F4A50:lH1071F7278|N
+1071F7278:lI119|H1071F9ED0
+1071F9ED0:lI120|H1071FCE10
+1071FCE10:lI68|H1071FFEC8
+1071FFEC8:lI105|H107203070
+107203070:lI114|H1072062A0
+1072062A0:lI68|H107209558
+107209558:lI105|H10720C7B8
+10720C7B8:lI97|H10720F9C8
+10720F9C8:lI108|H107212C58
+107212C58:lI111|H107216010
+107216010:lI103|H1072195E0
+1072195E0:lI46|H10721CC50
+10721CC50:lI98|H107220260
+107220260:lI101|H107223608
+107223608:lI97|H107226690
+107226690:lI109|N
+1071F26D8:lH1071F4A30|N
+1071F4A30:lI119|H1071F7258
+1071F7258:lI120|H1071F9EB0
+1071F9EB0:lI83|H1071FCDF0
+1071FCDF0:lI116|H1071FFEA8
+1071FFEA8:lI97|H107203050
+107203050:lI116|H107206280
+107206280:lI117|H107209538
+107209538:lI115|H10720C798
+10720C798:lI66|H10720F9A8
+10720F9A8:lI97|H107212C38
+107212C38:lI114|H107215FF0
+107215FF0:lI46|H1072195D0
+1072195D0:lI98|H10721CC40
+10721CC40:lI101|H107220250
+107220250:lI97|H1072235F8
+1072235F8:lI109|N
+1071F26C8:lH1071F4A20|N
+1071F4A20:lI119|H1071F7248
+1071F7248:lI120|H1071F9EA0
+1071F9EA0:lI83|H1071FCDE0
+1071FCDE0:lI121|H1071FFE98
+1071FFE98:lI115|H107203040
+107203040:lI116|H107206270
+107206270:lI101|H107209528
+107209528:lI109|H10720C788
+10720C788:lI79|H10720F998
+10720F998:lI112|H107212C28
+107212C28:lI116|H107215FE0
+107215FE0:lI105|H1072195C0
+1072195C0:lI111|H10721CC30
+10721CC30:lI110|H107220240
+107220240:lI115|H1072235E8
+1072235E8:lI46|H107226680
+107226680:lI98|H107229368
+107229368:lI101|H10722BCB0
+10722BCB0:lI97|H10722E2F8
+10722E2F8:lI109|N
+1071F26B8:lH1071F4A10|N
+1071F4A10:lI119|H1071F7238
+1071F7238:lI120|H1071F9E90
+1071F9E90:lI77|H1071FCDD0
+1071FCDD0:lI101|H1071FFE88
+1071FFE88:lI110|H107203030
+107203030:lI117|H107206260
+107206260:lI46|H107209518
+107209518:lI98|H10720C778
+10720C778:lI101|H10720F988
+10720F988:lI97|H107212C18
+107212C18:lI109|N
+1071F13C8:Mn8:H1071F3270,H1071F3288,H1071F3298,H1071F32A8,H1071F32B8,H1071F32C8,H1071F32D8,H1071F32E8
+1071F3270:Mn2:H1071F5838,H1071F5848
+1071F5838:lH1071F8098|N
+1071F8098:lI119|H1071FACF0
+1071FACF0:lI120|H1071FDC30
+1071FDC30:lI80|H107200CE8
+107200CE8:lI97|H107203E90
+107203E90:lI108|H1072070C0
+1072070C0:lI101|H10720A348
+10720A348:lI116|H10720D5A8
+10720D5A8:lI116|H107210798
+107210798:lI101|H107213A08
+107213A08:lI67|H107216DC0
+107216DC0:lI104|H10721A330
+10721A330:lI97|H10721D900
+10721D900:lI110|H107220E50
+107220E50:lI103|H1072240E8
+1072240E8:lI101|H107227030
+107227030:lI100|H107229BB8
+107229BB8:lI69|H10722C3F0
+10722C3F0:lI118|H10722E938
+10722E938:lI101|H107230BC0
+107230BC0:lI110|H107232BC8
+107232BC8:lI116|H1072348B0
+1072348B0:lI46|H1072362E8
+1072362E8:lI98|H107237AB0
+107237AB0:lI101|H1072390D8
+1072390D8:lI97|H10723A570
+10723A570:lI109|N
+1071F5848:lH1071F80A8|N
+1071F80A8:lI119|H1071FAD00
+1071FAD00:lI120|H1071FDC40
+1071FDC40:lI77|H107200CF8
+107200CF8:lI111|H107203EA0
+107203EA0:lI117|H1072070D0
+1072070D0:lI115|H10720A358
+10720A358:lI101|H10720D5B8
+10720D5B8:lI69|H1072107A8
+1072107A8:lI118|H107213A18
+107213A18:lI101|H107216DD0
+107216DD0:lI110|H10721A340
+10721A340:lI116|H10721D910
+10721D910:lI46|H107220E60
+107220E60:lI98|H1072240F8
+1072240F8:lI101|H107227040
+107227040:lI97|H107229BC8
+107229BC8:lI109|N
+1071F32E8:Mn3:H1071F58C0,H1071F58D0,H1071F58E0
+1071F58C0:lH1071F8128|N
+1071F8128:lI119|H1071FAD80
+1071FAD80:lI120|H1071FDCC0
+1071FDCC0:lI80|H107200D78
+107200D78:lI114|H107203F20
+107203F20:lI111|H107207150
+107207150:lI103|H10720A3D8
+10720A3D8:lI114|H10720D638
+10720D638:lI101|H107210828
+107210828:lI115|H107213A98
+107213A98:lI115|H107216E50
+107216E50:lI68|H10721A3C0
+10721A3C0:lI105|H10721D990
+10721D990:lI97|H107220EE0
+107220EE0:lI108|H107224148
+107224148:lI111|H107227090
+107227090:lI103|H107229BF8
+107229BF8:lI46|H10722C420
+10722C420:lI98|H10722E968
+10722E968:lI101|H107230BF0
+107230BF0:lI97|H107232BE8
+107232BE8:lI109|N
+1071F58E0:lH1071F8148|N
+1071F8148:lI119|H1071FADA0
+1071FADA0:lI120|H1071FDCE0
+1071FDCE0:lI66|H107200D98
+107200D98:lI114|H107203F40
+107203F40:lI117|H107207170
+107207170:lI115|H10720A3F8
+10720A3F8:lI104|H10720D658
+10720D658:lI46|H107210848
+107210848:lI98|H107213AB8
+107213AB8:lI101|H107216E70
+107216E70:lI97|H10721A3E0
+10721A3E0:lI109|N
+1071F58D0:lH1071F8138|N
+1071F8138:lI119|H1071FAD90
+1071FAD90:lI120|H1071FDCD0
+1071FDCD0:lI76|H107200D88
+107200D88:lI105|H107203F30
+107203F30:lI115|H107207160
+107207160:lI116|H10720A3E8
+10720A3E8:lI73|H10720D648
+10720D648:lI116|H107210838
+107210838:lI101|H107213AA8
+107213AA8:lI109|H107216E60
+107216E60:lI65|H10721A3D0
+10721A3D0:lI116|H10721D9A0
+10721D9A0:lI116|H107220EF0
+107220EF0:lI114|H107224158
+107224158:lI46|H1072270A0
+1072270A0:lI98|H107229C08
+107229C08:lI101|H10722C430
+10722C430:lI97|H10722E978
+10722E978:lI109|N
+1071F32D8:Mn1:H1071F58A8
+1071F58A8:Mn2:H1071F8108,H1071F8118
+1071F8108:lH1071FAD60|N
+1071FAD60:lI119|H1071FDCA0
+1071FDCA0:lI120|H107200D58
+107200D58:lI87|H107203F00
+107203F00:lI105|H107207130
+107207130:lI110|H10720A3B8
+10720A3B8:lI100|H10720D618
+10720D618:lI111|H107210808
+107210808:lI119|H107213A78
+107213A78:lI68|H107216E30
+107216E30:lI67|H10721A3A0
+10721A3A0:lI46|H10721D970
+10721D970:lI98|H107220EC0
+107220EC0:lI101|H107224138
+107224138:lI97|H107227080
+107227080:lI109|N
+1071F8118:lH1071FAD70|N
+1071FAD70:lI119|H1071FDCB0
+1071FDCB0:lI120|H107200D68
+107200D68:lI83|H107203F10
+107203F10:lI108|H107207140
+107207140:lI105|H10720A3C8
+10720A3C8:lI100|H10720D628
+10720D628:lI101|H107210818
+107210818:lI114|H107213A88
+107213A88:lI46|H107216E40
+107216E40:lI98|H10721A3B0
+10721A3B0:lI101|H10721D980
+10721D980:lI97|H107220ED0
+107220ED0:lI109|N
+1071F32C8:lH1071F5898|N
+1071F5898:lI119|H1071F80F8
+1071F80F8:lI120|H1071FAD50
+1071FAD50:lI70|H1071FDC90
+1071FDC90:lI105|H107200D48
+107200D48:lI108|H107203EF0
+107203EF0:lI101|H107207120
+107207120:lI68|H10720A3A8
+10720A3A8:lI105|H10720D608
+10720D608:lI114|H1072107F8
+1072107F8:lI80|H107213A68
+107213A68:lI105|H107216E20
+107216E20:lI99|H10721A390
+10721A390:lI107|H10721D960
+10721D960:lI101|H107220EB0
+107220EB0:lI114|H107224128
+107224128:lI69|H107227070
+107227070:lI118|H107229BE8
+107229BE8:lI101|H10722C410
+10722C410:lI110|H10722E958
+10722E958:lI116|H107230BE0
+107230BE0:lI46|H107232BD8
+107232BD8:lI98|H1072348C0
+1072348C0:lI101|H1072362F8
+1072362F8:lI97|H107237AC0
+107237AC0:lI109|N
+1071F32B8:lH1071F5888|N
+1071F5888:lI119|H1071F80E8
+1071F80E8:lI120|H1071FAD40
+1071FAD40:lI84|H1071FDC80
+1071FDC80:lI101|H107200D38
+107200D38:lI120|H107203EE0
+107203EE0:lI116|H107207110
+107207110:lI67|H10720A398
+10720A398:lI116|H10720D5F8
+10720D5F8:lI114|H1072107E8
+1072107E8:lI108|H107213A58
+107213A58:lI46|H107216E10
+107216E10:lI98|H10721A380
+10721A380:lI101|H10721D950
+10721D950:lI97|H107220EA0
+107220EA0:lI109|N
+1071F32A8:lH1071F5878|N
+1071F5878:lI119|H1071F80D8
+1071F80D8:lI120|H1071FAD30
+1071FAD30:lI83|H1071FDC70
+1071FDC70:lI99|H107200D28
+107200D28:lI114|H107203ED0
+107203ED0:lI111|H107207100
+107207100:lI108|H10720A388
+10720A388:lI108|H10720D5E8
+10720D5E8:lI87|H1072107D8
+1072107D8:lI105|H107213A48
+107213A48:lI110|H107216E00
+107216E00:lI69|H10721A370
+10721A370:lI118|H10721D940
+10721D940:lI101|H107220E90
+107220E90:lI110|H107224118
+107224118:lI116|H107227060
+107227060:lI46|H107229BD8
+107229BD8:lI98|H10722C400
+10722C400:lI101|H10722E948
+10722E948:lI97|H107230BD0
+107230BD0:lI109|N
+1071F3298:lH1071F5868|N
+1071F5868:lI119|H1071F80C8
+1071F80C8:lI120|H1071FAD20
+1071FAD20:lI83|H1071FDC60
+1071FDC60:lI116|H107200D18
+107200D18:lI97|H107203EC0
+107203EC0:lI116|H1072070F0
+1072070F0:lI105|H10720A378
+10720A378:lI99|H10720D5D8
+10720D5D8:lI84|H1072107C8
+1072107C8:lI101|H107213A38
+107213A38:lI120|H107216DF0
+107216DF0:lI116|H10721A360
+10721A360:lI46|H10721D930
+10721D930:lI98|H107220E80
+107220E80:lI101|H107224108
+107224108:lI97|H107227050
+107227050:lI109|N
+1071F3288:lH1071F5858|N
+1071F5858:lI119|H1071F80B8
+1071F80B8:lI120|H1071FAD10
+1071FAD10:lI83|H1071FDC50
+1071FDC50:lI112|H107200D08
+107200D08:lI105|H107203EB0
+107203EB0:lI110|H1072070E0
+1072070E0:lI67|H10720A368
+10720A368:lI116|H10720D5C8
+10720D5C8:lI114|H1072107B8
+1072107B8:lI108|H107213A28
+107213A28:lI46|H107216DE0
+107216DE0:lI98|H10721A350
+10721A350:lI101|H10721D920
+10721D920:lI97|H107220E70
+107220E70:lI109|N
+1071F1370:MnA:H1071F31C0,H1071F31D0,H1071F31E0,H1071F31F8,H1071F3210,H1071F3220,H1071F3230,H1071F3240,H1071F3250,H1071F3260
+1071F31C0:lH1071F5770|N
+1071F5770:lI119|H1071F7FC8
+1071F7FC8:lI120|H1071FAC20
+1071FAC20:lI65|H1071FDB60
+1071FDB60:lI117|H107200C18
+107200C18:lI105|H107203DC0
+107203DC0:lI77|H107206FF0
+107206FF0:lI97|H10720A278
+10720A278:lI110|H10720D4D8
+10720D4D8:lI97|H1072106C8
+1072106C8:lI103|H107213938
+107213938:lI101|H107216CF0
+107216CF0:lI114|H10721A260
+10721A260:lI69|H10721D830
+10721D830:lI118|H107220DA0
+107220DA0:lI101|H107224048
+107224048:lI110|H107226FB0
+107226FB0:lI116|H107229B48
+107229B48:lI46|H10722C380
+10722C380:lI98|H10722E8C8
+10722E8C8:lI101|H107230B60
+107230B60:lI97|H107232B78
+107232B78:lI109|N
+1071F3260:lH1071F5828|N
+1071F5828:lI119|H1071F8088
+1071F8088:lI120|H1071FACE0
+1071FACE0:lI67|H1071FDC20
+1071FDC20:lI111|H107200CD8
+107200CD8:lI110|H107203E80
+107203E80:lI116|H1072070B0
+1072070B0:lI114|H10720A338
+10720A338:lI111|H10720D598
+10720D598:lI108|H107210788
+107210788:lI87|H1072139F8
+1072139F8:lI105|H107216DB0
+107216DB0:lI116|H10721A320
+10721A320:lI104|H10721D8F0
+10721D8F0:lI73|H107220E40
+107220E40:lI116|H1072240D8
+1072240D8:lI101|H107227020
+107227020:lI109|H107229BA8
+107229BA8:lI115|H10722C3E0
+10722C3E0:lI46|H10722E928
+10722E928:lI98|H107230BB0
+107230BB0:lI101|H107232BB8
+107232BB8:lI97|H1072348A0
+1072348A0:lI109|N
+1071F3250:lH1071F5818|N
+1071F5818:lI119|H1071F8078
+1071F8078:lI120|H1071FACD0
+1071FACD0:lI76|H1071FDC10
+1071FDC10:lI105|H107200CC8
+107200CC8:lI115|H107203E70
+107203E70:lI116|H1072070A0
+1072070A0:lI67|H10720A328
+10720A328:lI116|H10720D588
+10720D588:lI114|H107210778
+107210778:lI108|H1072139E8
+1072139E8:lI46|H107216DA0
+107216DA0:lI98|H10721A310
+10721A310:lI101|H10721D8E0
+10721D8E0:lI97|H107220E30
+107220E30:lI109|N
+1071F3240:lH1071F5808|N
+1071F5808:lI119|H1071F8068
+1071F8068:lI120|H1071FACC0
+1071FACC0:lI84|H1071FDC00
+1071FDC00:lI111|H107200CB8
+107200CB8:lI111|H107203E60
+107203E60:lI108|H107207090
+107207090:lI66|H10720A318
+10720A318:lI97|H10720D578
+10720D578:lI114|H107210768
+107210768:lI46|H1072139D8
+1072139D8:lI98|H107216D90
+107216D90:lI101|H10721A300
+10721A300:lI97|H10721D8D0
+10721D8D0:lI109|N
+1071F3230:Mn1:H1071F57F0
+1071F57F0:Mn2:H1071F8048,H1071F8058
+1071F8048:lH1071FACA0|N
+1071FACA0:lI119|H1071FDBE0
+1071FDBE0:lI120|H107200C98
+107200C98:lI82|H107203E40
+107203E40:lI97|H107207070
+107207070:lI100|H10720A2F8
+10720A2F8:lI105|H10720D558
+10720D558:lI111|H107210748
+107210748:lI66|H1072139B8
+1072139B8:lI117|H107216D70
+107216D70:lI116|H10721A2E0
+10721A2E0:lI116|H10721D8B0
+10721D8B0:lI111|H107220E20
+107220E20:lI110|H1072240C8
+1072240C8:lI46|H107227010
+107227010:lI98|H107229B98
+107229B98:lI101|H10722C3D0
+10722C3D0:lI97|H10722E918
+10722E918:lI109|N
+1071F8058:lH1071FACB0|N
+1071FACB0:lI119|H1071FDBF0
+1071FDBF0:lI120|H107200CA8
+107200CA8:lI69|H107203E50
+107203E50:lI118|H107207080
+107207080:lI101|H10720A308
+10720A308:lI110|H10720D568
+10720D568:lI116|H107210758
+107210758:lI46|H1072139C8
+1072139C8:lI98|H107216D80
+107216D80:lI101|H10721A2F0
+10721A2F0:lI97|H10721D8C0
+10721D8C0:lI109|N
+1071F3220:lH1071F57E0|N
+1071F57E0:lI119|H1071F8038
+1071F8038:lI120|H1071FAC90
+1071FAC90:lI71|H1071FDBD0
+1071FDBD0:lI114|H107200C88
+107200C88:lI105|H107203E30
+107203E30:lI100|H107207060
+107207060:lI67|H10720A2E8
+10720A2E8:lI101|H10720D548
+10720D548:lI108|H107210738
+107210738:lI108|H1072139A8
+1072139A8:lI67|H107216D60
+107216D60:lI104|H10721A2D0
+10721A2D0:lI111|H10721D8A0
+10721D8A0:lI105|H107220E10
+107220E10:lI99|H1072240B8
+1072240B8:lI101|H107227000
+107227000:lI69|H107229B88
+107229B88:lI100|H10722C3C0
+10722C3C0:lI105|H10722E908
+10722E908:lI116|H107230BA0
+107230BA0:lI111|H107232BA8
+107232BA8:lI114|H107234890
+107234890:lI46|H1072362D8
+1072362D8:lI98|H107237AA0
+107237AA0:lI101|H1072390C8
+1072390C8:lI97|H10723A560
+10723A560:lI109|N
+1071F3210:lH1071F57D0|N
+1071F57D0:lI119|H1071F8028
+1071F8028:lI120|H1071FAC80
+1071FAC80:lI87|H1071FDBC0
+1071FDBC0:lI105|H107200C78
+107200C78:lI110|H107203E20
+107203E20:lI100|H107207050
+107207050:lI111|H10720A2D8
+10720A2D8:lI119|H10720D538
+10720D538:lI68|H107210728
+107210728:lI101|H107213998
+107213998:lI115|H107216D50
+107216D50:lI116|H10721A2C0
+10721A2C0:lI114|H10721D890
+10721D890:lI111|H107220E00
+107220E00:lI121|H1072240A8
+1072240A8:lI69|H107226FF0
+107226FF0:lI118|H107229B78
+107229B78:lI101|H10722C3B0
+10722C3B0:lI110|H10722E8F8
+10722E8F8:lI116|H107230B90
+107230B90:lI46|H107232B98
+107232B98:lI98|H107234880
+107234880:lI101|H1072362C8
+1072362C8:lI97|H107237A90
+107237A90:lI109|N
+1071F31F8:Mn2:H1071F57B0,H1071F57C0
+1071F57B0:lH1071F8008|N
+1071F8008:lI119|H1071FAC60
+1071FAC60:lI120|H1071FDBA0
+1071FDBA0:lI83|H107200C58
+107200C58:lI105|H107203E00
+107203E00:lI122|H107207030
+107207030:lI101|H10720A2B8
+10720A2B8:lI114|H10720D518
+10720D518:lI73|H107210708
+107210708:lI116|H107213978
+107213978:lI101|H107216D30
+107216D30:lI109|H10721A2A0
+10721A2A0:lI46|H10721D870
+10721D870:lI98|H107220DE0
+107220DE0:lI101|H107224088
+107224088:lI97|H107226FE0
+107226FE0:lI109|N
+1071F57C0:lH1071F8018|N
+1071F8018:lI119|H1071FAC70
+1071FAC70:lI120|H1071FDBB0
+1071FDBB0:lI75|H107200C68
+107200C68:lI101|H107203E10
+107203E10:lI121|H107207040
+107207040:lI69|H10720A2C8
+10720A2C8:lI118|H10720D528
+10720D528:lI101|H107210718
+107210718:lI110|H107213988
+107213988:lI116|H107216D40
+107216D40:lI46|H10721A2B0
+10721A2B0:lI98|H10721D880
+10721D880:lI101|H107220DF0
+107220DF0:lI97|H107224098
+107224098:lI109|N
+1071F31E0:Mn2:H1071F5790,H1071F57A0
+1071F5790:lH1071F7FE8|N
+1071F7FE8:lI119|H1071FAC40
+1071FAC40:lI120|H1071FDB80
+1071FDB80:lI71|H107200C38
+107200C38:lI114|H107203DE0
+107203DE0:lI105|H107207010
+107207010:lI100|H10720A298
+10720A298:lI67|H10720D4F8
+10720D4F8:lI101|H1072106E8
+1072106E8:lI108|H107213958
+107213958:lI108|H107216D10
+107216D10:lI70|H10721A280
+10721A280:lI108|H10721D850
+10721D850:lI111|H107220DC0
+107220DC0:lI97|H107224068
+107224068:lI116|H107226FC0
+107226FC0:lI69|H107229B58
+107229B58:lI100|H10722C390
+10722C390:lI105|H10722E8D8
+10722E8D8:lI116|H107230B70
+107230B70:lI111|H107232B88
+107232B88:lI114|H107234870
+107234870:lI46|H1072362B8
+1072362B8:lI98|H107237A80
+107237A80:lI101|H1072390B8
+1072390B8:lI97|H10723A550
+10723A550:lI109|N
+1071F57A0:lH1071F7FF8|N
+1071F7FF8:lI119|H1071FAC50
+1071FAC50:lI120|H1071FDB90
+1071FDB90:lI65|H107200C48
+107200C48:lI99|H107203DF0
+107203DF0:lI116|H107207020
+107207020:lI105|H10720A2A8
+10720A2A8:lI118|H10720D508
+10720D508:lI97|H1072106F8
+1072106F8:lI116|H107213968
+107213968:lI101|H107216D20
+107216D20:lI69|H10721A290
+10721A290:lI118|H10721D860
+10721D860:lI101|H107220DD0
+107220DD0:lI110|H107224078
+107224078:lI116|H107226FD0
+107226FD0:lI46|H107229B68
+107229B68:lI98|H10722C3A0
+10722C3A0:lI101|H10722E8E8
+10722E8E8:lI97|H107230B80
+107230B80:lI109|N
+1071F31D0:lH1071F5780|N
+1071F5780:lI119|H1071F7FD8
+1071F7FD8:lI120|H1071FAC30
+1071FAC30:lI68|H1071FDB70
+1071FDB70:lI97|H107200C28
+107200C28:lI116|H107203DD0
+107203DD0:lI101|H107207000
+107207000:lI69|H10720A288
+10720A288:lI118|H10720D4E8
+10720D4E8:lI101|H1072106D8
+1072106D8:lI110|H107213948
+107213948:lI116|H107216D00
+107216D00:lI46|H10721A270
+10721A270:lI98|H10721D840
+10721D840:lI101|H107220DB0
+107220DB0:lI97|H107224058
+107224058:lI109|N
+1071F1328:Mn8:H1071F3118,H1071F3130,H1071F3150,H1071F3168,H1071F3178,H1071F3188,H1071F3198,H1071F31A8
+1071F3118:Mn2:H1071F56A0,H1071F56B0
+1071F56A0:lH1071F7EF8|N
+1071F7EF8:lI119|H1071FAB50
+1071FAB50:lI120|H1071FDA90
+1071FDA90:lI83|H107200B48
+107200B48:lI112|H107203CF0
+107203CF0:lI105|H107206F20
+107206F20:lI110|H10720A1A8
+10720A1A8:lI66|H10720D408
+10720D408:lI117|H1072105F8
+1072105F8:lI116|H107213878
+107213878:lI116|H107216C30
+107216C30:lI111|H10721A1B0
+10721A1B0:lI110|H10721D780
+10721D780:lI46|H107220CF0
+107220CF0:lI98|H107223FA8
+107223FA8:lI101|H107226F10
+107226F10:lI97|H107229AA8
+107229AA8:lI109|N
+1071F56B0:lH1071F7F08|N
+1071F7F08:lI119|H1071FAB60
+1071FAB60:lI120|H1071FDAA0
+1071FDAA0:lI67|H107200B58
+107200B58:lI111|H107203D00
+107203D00:lI110|H107206F30
+107206F30:lI116|H10720A1B8
+10720A1B8:lI114|H10720D418
+10720D418:lI111|H107210608
+107210608:lI108|H107213888
+107213888:lI46|H107216C40
+107216C40:lI98|H10721A1C0
+10721A1C0:lI101|H10721D790
+10721D790:lI97|H107220D00
+107220D00:lI109|N
+1071F31A8:Mn2:H1071F5750,H1071F5760
+1071F5750:lH1071F7FA8|N
+1071F7FA8:lI119|H1071FAC00
+1071FAC00:lI120|H1071FDB40
+1071FDB40:lI66|H107200BF8
+107200BF8:lI105|H107203DA0
+107203DA0:lI116|H107206FD0
+107206FD0:lI109|H10720A258
+10720A258:lI97|H10720D4B8
+10720D4B8:lI112|H1072106A8
+1072106A8:lI66|H107213918
+107213918:lI117|H107216CD0
+107216CD0:lI116|H10721A240
+10721A240:lI116|H10721D810
+10721D810:lI111|H107220D80
+107220D80:lI110|H107224028
+107224028:lI46|H107226F90
+107226F90:lI98|H107229B28
+107229B28:lI101|H10722C360
+10722C360:lI97|H10722E8A8
+10722E8A8:lI109|N
+1071F5760:lH1071F7FB8|N
+1071F7FB8:lI119|H1071FAC10
+1071FAC10:lI120|H1071FDB50
+1071FDB50:lI66|H107200C08
+107200C08:lI111|H107203DB0
+107203DB0:lI111|H107206FE0
+107206FE0:lI107|H10720A268
+10720A268:lI67|H10720D4C8
+10720D4C8:lI116|H1072106B8
+1072106B8:lI114|H107213928
+107213928:lI108|H107216CE0
+107216CE0:lI66|H10721A250
+10721A250:lI97|H10721D820
+10721D820:lI115|H107220D90
+107220D90:lI101|H107224038
+107224038:lI46|H107226FA0
+107226FA0:lI98|H107229B38
+107229B38:lI101|H10722C370
+10722C370:lI97|H10722E8B8
+10722E8B8:lI109|N
+1071F3198:lH1071F5740|N
+1071F5740:lI119|H1071F7F98
+1071F7F98:lI120|H1071FABF0
+1071FABF0:lI73|H1071FDB30
+1071FDB30:lI99|H107200BE8
+107200BE8:lI111|H107203D90
+107203D90:lI110|H107206FC0
+107206FC0:lI105|H10720A248
+10720A248:lI122|H10720D4A8
+10720D4A8:lI101|H107210698
+107210698:lI69|H107213908
+107213908:lI118|H107216CC0
+107216CC0:lI101|H10721A230
+10721A230:lI110|H10721D800
+10721D800:lI116|H107220D70
+107220D70:lI46|H107224018
+107224018:lI98|H107226F80
+107226F80:lI101|H107229B18
+107229B18:lI97|H10722C350
+10722C350:lI109|N
+1071F3188:lH1071F5730|N
+1071F5730:lI119|H1071F7F88
+1071F7F88:lI120|H1071FABE0
+1071FABE0:lI77|H1071FDB20
+1071FDB20:lI111|H107200BD8
+107200BD8:lI117|H107203D80
+107203D80:lI115|H107206FB0
+107206FB0:lI101|H10720A238
+10720A238:lI67|H10720D498
+10720D498:lI97|H107210688
+107210688:lI112|H1072138F8
+1072138F8:lI116|H107216CB0
+107216CB0:lI117|H10721A220
+10721A220:lI114|H10721D7F0
+10721D7F0:lI101|H107220D60
+107220D60:lI76|H107224008
+107224008:lI111|H107226F70
+107226F70:lI115|H107229B08
+107229B08:lI116|H10722C340
+10722C340:lI69|H10722E898
+10722E898:lI118|H107230B50
+107230B50:lI101|H107232B68
+107232B68:lI110|H107234860
+107234860:lI116|H1072362A8
+1072362A8:lI46|H107237A70
+107237A70:lI98|H1072390A8
+1072390A8:lI101|H10723A540
+10723A540:lI97|H10723B830
+10723B830:lI109|N
+1071F3178:lH1071F5720|N
+1071F5720:lI119|H1071F7F78
+1071F7F78:lI120|H1071FABD0
+1071FABD0:lI73|H1071FDB10
+1071FDB10:lI109|H107200BC8
+107200BC8:lI97|H107203D70
+107203D70:lI103|H107206FA0
+107206FA0:lI101|H10720A228
+10720A228:lI46|H10720D488
+10720D488:lI98|H107210678
+107210678:lI101|H1072138E8
+1072138E8:lI97|H107216CA0
+107216CA0:lI109|N
+1071F3168:lH1071F5710|N
+1071F5710:lI119|H1071F7F68
+1071F7F68:lI120|H1071FABC0
+1071FABC0:lI80|H1071FDB00
+1071FDB00:lI97|H107200BB8
+107200BB8:lI103|H107203D60
+107203D60:lI101|H107206F90
+107206F90:lI83|H10720A218
+10720A218:lI101|H10720D478
+10720D478:lI116|H107210668
+107210668:lI117|H1072138D8
+1072138D8:lI112|H107216C90
+107216C90:lI68|H10721A210
+10721A210:lI105|H10721D7E0
+10721D7E0:lI97|H107220D50
+107220D50:lI108|H107223FF8
+107223FF8:lI111|H107226F60
+107226F60:lI103|H107229AF8
+107229AF8:lI46|H10722C330
+10722C330:lI98|H10722E888
+10722E888:lI101|H107230B40
+107230B40:lI97|H107232B58
+107232B58:lI109|N
+1071F3150:Mn2:H1071F56F0,H1071F5700
+1071F56F0:lH1071F7F48|N
+1071F7F48:lI119|H1071FABA0
+1071FABA0:lI120|H1071FDAE0
+1071FDAE0:lI68|H107200B98
+107200B98:lI97|H107203D40
+107203D40:lI116|H107206F70
+107206F70:lI97|H10720A1F8
+10720A1F8:lI79|H10720D458
+10720D458:lI98|H107210648
+107210648:lI106|H1072138B8
+1072138B8:lI101|H107216C70
+107216C70:lI99|H10721A1F0
+10721A1F0:lI116|H10721D7C0
+10721D7C0:lI46|H107220D30
+107220D30:lI98|H107223FD8
+107223FD8:lI101|H107226F40
+107226F40:lI97|H107229AD8
+107229AD8:lI109|N
+1071F5700:lH1071F7F58|N
+1071F7F58:lI119|H1071FABB0
+1071FABB0:lI120|H1071FDAF0
+1071FDAF0:lI71|H107200BA8
+107200BA8:lI114|H107203D50
+107203D50:lI105|H107206F80
+107206F80:lI100|H10720A208
+10720A208:lI67|H10720D468
+10720D468:lI101|H107210658
+107210658:lI108|H1072138C8
+1072138C8:lI108|H107216C80
+107216C80:lI82|H10721A200
+10721A200:lI101|H10721D7D0
+10721D7D0:lI110|H107220D40
+107220D40:lI100|H107223FE8
+107223FE8:lI101|H107226F50
+107226F50:lI114|H107229AE8
+107229AE8:lI101|H10722C320
+10722C320:lI114|H10722E878
+10722E878:lI46|H107230B30
+107230B30:lI98|H107232B48
+107232B48:lI101|H107234850
+107234850:lI97|H107236298
+107236298:lI109|N
+1071F3130:Mn3:H1071F56C0,H1071F56D0,H1071F56E0
+1071F56C0:lH1071F7F18|N
+1071F7F18:lI119|H1071FAB70
+1071FAB70:lI120|H1071FDAB0
+1071FDAB0:lI67|H107200B68
+107200B68:lI111|H107203D10
+107203D10:lI110|H107206F40
+107206F40:lI116|H10720A1C8
+10720A1C8:lI101|H10720D428
+10720D428:lI120|H107210618
+107210618:lI116|H107213898
+107213898:lI77|H107216C50
+107216C50:lI101|H10721A1D0
+10721A1D0:lI110|H10721D7A0
+10721D7A0:lI117|H107220D10
+107220D10:lI69|H107223FB8
+107223FB8:lI118|H107226F20
+107226F20:lI101|H107229AB8
+107229AB8:lI110|H10722C300
+10722C300:lI116|H10722E858
+10722E858:lI46|H107230B10
+107230B10:lI98|H107232B28
+107232B28:lI101|H107234830
+107234830:lI97|H107236278
+107236278:lI109|N
+1071F56E0:lH1071F7F38|N
+1071F7F38:lI119|H1071FAB90
+1071FAB90:lI120|H1071FDAD0
+1071FDAD0:lI68|H107200B88
+107200B88:lI67|H107203D30
+107203D30:lI46|H107206F60
+107206F60:lI98|H10720A1E8
+10720A1E8:lI101|H10720D448
+10720D448:lI97|H107210638
+107210638:lI109|N
+1071F56D0:lH1071F7F28|N
+1071F7F28:lI119|H1071FAB80
+1071FAB80:lI120|H1071FDAC0
+1071FDAC0:lI71|H107200B78
+107200B78:lI114|H107203D20
+107203D20:lI97|H107206F50
+107206F50:lI112|H10720A1D8
+10720A1D8:lI104|H10720D438
+10720D438:lI105|H107210628
+107210628:lI99|H1072138A8
+1072138A8:lI115|H107216C60
+107216C60:lI71|H10721A1E0
+10721A1E0:lI114|H10721D7B0
+10721D7B0:lI97|H107220D20
+107220D20:lI100|H107223FC8
+107223FC8:lI105|H107226F30
+107226F30:lI101|H107229AC8
+107229AC8:lI110|H10722C310
+10722C310:lI116|H10722E868
+10722E868:lI83|H107230B20
+107230B20:lI116|H107232B38
+107232B38:lI111|H107234840
+107234840:lI112|H107236288
+107236288:lI115|H107237A60
+107237A60:lI46|H107239098
+107239098:lI98|H10723A530
+10723A530:lI101|H10723B820
+10723B820:lI97|H10723C880
+10723C880:lI109|N
+1071F12E8:Mn7:H1071F3088,H1071F30A0,H1071F30B0,H1071F30C0,H1071F30D8,H1071F30E8,H1071F3100
+1071F3088:Mn2:H1071F55F0,H1071F5600
+1071F55F0:lH1071F7E48|N
+1071F7E48:lI119|H1071FAAA0
+1071FAAA0:lI120|H1071FD9E0
+1071FD9E0:lI80|H107200A98
+107200A98:lI111|H107203C40
+107203C40:lI112|H107206E70
+107206E70:lI117|H10720A0F8
+10720A0F8:lI112|H10720D358
+10720D358:lI87|H107210548
+107210548:lI105|H1072137C8
+1072137C8:lI110|H107216B80
+107216B80:lI100|H10721A100
+10721A100:lI111|H10721D6E0
+10721D6E0:lI119|H107220C50
+107220C50:lI46|H107223F18
+107223F18:lI98|H107226EA0
+107226EA0:lI101|H107229A38
+107229A38:lI97|H10722C2A0
+10722C2A0:lI109|N
+1071F5600:lH1071F7E58|N
+1071F7E58:lI119|H1071FAAB0
+1071FAAB0:lI120|H1071FD9F0
+1071FD9F0:lI67|H107200AA8
+107200AA8:lI104|H107203C50
+107203C50:lI111|H107206E80
+107206E80:lI105|H10720A108
+10720A108:lI99|H10720D368
+10720D368:lI101|H107210558
+107210558:lI98|H1072137D8
+1072137D8:lI111|H107216B90
+107216B90:lI111|H10721A110
+10721A110:lI107|H10721D6F0
+10721D6F0:lI46|H107220C60
+107220C60:lI98|H107223F28
+107223F28:lI101|H107226EB0
+107226EB0:lI97|H107229A48
+107229A48:lI109|N
+1071F3100:Mn2:H1071F5680,H1071F5690
+1071F5680:lH1071F7ED8|N
+1071F7ED8:lI119|H1071FAB30
+1071FAB30:lI120|H1071FDA70
+1071FDA70:lI66|H107200B28
+107200B28:lI117|H107203CD0
+107203CD0:lI102|H107206F00
+107206F00:lI102|H10720A188
+10720A188:lI101|H10720D3E8
+10720D3E8:lI114|H1072105D8
+1072105D8:lI101|H107213858
+107213858:lI100|H107216C10
+107216C10:lI80|H10721A190
+10721A190:lI97|H10721D760
+10721D760:lI105|H107220CD0
+107220CD0:lI110|H107223F88
+107223F88:lI116|H107226EF0
+107226EF0:lI68|H107229A88
+107229A88:lI67|H10722C2E0
+10722C2E0:lI46|H10722E838
+10722E838:lI98|H107230AF0
+107230AF0:lI101|H107232B18
+107232B18:lI97|H107234820
+107234820:lI109|N
+1071F5690:lH1071F7EE8|N
+1071F7EE8:lI119|H1071FAB40
+1071FAB40:lI120|H1071FDA80
+1071FDA80:lI72|H107200B38
+107200B38:lI116|H107203CE0
+107203CE0:lI109|H107206F10
+107206F10:lI108|H10720A198
+10720A198:lI76|H10720D3F8
+10720D3F8:lI105|H1072105E8
+1072105E8:lI110|H107213868
+107213868:lI107|H107216C20
+107216C20:lI69|H10721A1A0
+10721A1A0:lI118|H10721D770
+10721D770:lI101|H107220CE0
+107220CE0:lI110|H107223F98
+107223F98:lI116|H107226F00
+107226F00:lI46|H107229A98
+107229A98:lI98|H10722C2F0
+10722C2F0:lI101|H10722E848
+10722E848:lI97|H107230B00
+107230B00:lI109|N
+1071F30E8:Mn2:H1071F5660,H1071F5670
+1071F5660:lH1071F7EB8|N
+1071F7EB8:lI119|H1071FAB10
+1071FAB10:lI120|H1071FDA50
+1071FDA50:lI67|H107200B08
+107200B08:lI104|H107203CB0
+107203CB0:lI101|H107206EE0
+107206EE0:lI99|H10720A168
+10720A168:lI107|H10720D3C8
+10720D3C8:lI66|H1072105B8
+1072105B8:lI111|H107213838
+107213838:lI120|H107216BF0
+107216BF0:lI46|H10721A170
+10721A170:lI98|H10721D750
+10721D750:lI101|H107220CC0
+107220CC0:lI97|H107223F78
+107223F78:lI109|N
+1071F5670:lH1071F7EC8|N
+1071F7EC8:lI119|H1071FAB20
+1071FAB20:lI120|H1071FDA60
+1071FDA60:lI95|H107200B18
+107200B18:lI109|H107203CC0
+107203CC0:lI105|H107206EF0
+107206EF0:lI115|H10720A178
+10720A178:lI99|H10720D3D8
+10720D3D8:lI46|H1072105C8
+1072105C8:lI98|H107213848
+107213848:lI101|H107216C00
+107216C00:lI97|H10721A180
+10721A180:lI109|N
+1071F30D8:lH1071F5650|N
+1071F5650:lI119|H1071F7EA8
+1071F7EA8:lI120|H1071FAB00
+1071FAB00:lI84|H1071FDA40
+1071FDA40:lI101|H107200AF8
+107200AF8:lI120|H107203CA0
+107203CA0:lI116|H107206ED0
+107206ED0:lI65|H10720A158
+10720A158:lI116|H10720D3B8
+10720D3B8:lI116|H1072105A8
+1072105A8:lI114|H107213828
+107213828:lI46|H107216BE0
+107216BE0:lI98|H10721A160
+10721A160:lI101|H10721D740
+10721D740:lI97|H107220CB0
+107220CB0:lI109|N
+1071F30C0:Mn2:H1071F5630,H1071F5640
+1071F5630:lH1071F7E88|N
+1071F7E88:lI119|H1071FAAE0
+1071FAAE0:lI120|H1071FDA20
+1071FDA20:lI84|H107200AD8
+107200AD8:lI111|H107203C80
+107203C80:lI111|H107206EB0
+107206EB0:lI108|H10720A138
+10720A138:lI98|H10720D398
+10720D398:lI111|H107210588
+107210588:lI111|H107213808
+107213808:lI107|H107216BC0
+107216BC0:lI46|H10721A140
+10721A140:lI98|H10721D720
+10721D720:lI101|H107220C90
+107220C90:lI97|H107223F58
+107223F58:lI109|N
+1071F5640:lH1071F7E98|N
+1071F7E98:lI119|H1071FAAF0
+1071FAAF0:lI120|H1071FDA30
+1071FDA30:lI66|H107200AE8
+107200AE8:lI105|H107203C90
+107203C90:lI116|H107206EC0
+107206EC0:lI109|H10720A148
+10720A148:lI97|H10720D3A8
+10720D3A8:lI112|H107210598
+107210598:lI68|H107213818
+107213818:lI97|H107216BD0
+107216BD0:lI116|H10721A150
+10721A150:lI97|H10721D730
+10721D730:lI79|H107220CA0
+107220CA0:lI98|H107223F68
+107223F68:lI106|H107226EE0
+107226EE0:lI101|H107229A78
+107229A78:lI99|H10722C2D0
+10722C2D0:lI116|H10722E828
+10722E828:lI46|H107230AE0
+107230AE0:lI98|H107232B08
+107232B08:lI101|H107234810
+107234810:lI97|H107236268
+107236268:lI109|N
+1071F30B0:lH1071F5620|N
+1071F5620:lI119|H1071F7E78
+1071F7E78:lI120|H1071FAAD0
+1071FAAD0:lI70|H1071FDA10
+1071FDA10:lI105|H107200AC8
+107200AC8:lI108|H107203C70
+107203C70:lI101|H107206EA0
+107206EA0:lI68|H10720A128
+10720A128:lI97|H10720D388
+10720D388:lI116|H107210578
+107210578:lI97|H1072137F8
+1072137F8:lI79|H107216BB0
+107216BB0:lI98|H10721A130
+10721A130:lI106|H10721D710
+10721D710:lI101|H107220C80
+107220C80:lI99|H107223F48
+107223F48:lI116|H107226ED0
+107226ED0:lI46|H107229A68
+107229A68:lI98|H10722C2C0
+10722C2C0:lI101|H10722E818
+10722E818:lI97|H107230AD0
+107230AD0:lI109|N
+1071F30A0:lH1071F5610|N
+1071F5610:lI119|H1071F7E68
+1071F7E68:lI120|H1071FAAC0
+1071FAAC0:lI80|H1071FDA00
+1071FDA00:lI114|H107200AB8
+107200AB8:lI105|H107203C60
+107203C60:lI110|H107206E90
+107206E90:lI116|H10720A118
+10720A118:lI80|H10720D378
+10720D378:lI114|H107210568
+107210568:lI101|H1072137E8
+1072137E8:lI118|H107216BA0
+107216BA0:lI105|H10721A120
+10721A120:lI101|H10721D700
+10721D700:lI119|H107220C70
+107220C70:lI46|H107223F38
+107223F38:lI98|H107226EC0
+107226EC0:lI101|H107229A58
+107229A58:lI97|H10722C2B0
+10722C2B0:lI109|N
+1071F12A0:Mn8:H1071F2FF0,H1071F3008,H1071F3018,H1071F3030,H1071F3040,H1071F3050,H1071F3060,H1071F3070
+1071F2FF0:Mn2:H1071F5530,H1071F5540
+1071F5530:lH1071F7D78|N
+1071F7D78:lI119|H1071FA9D0
+1071FA9D0:lI120|H1071FD910
+1071FD910:lI83|H1072009C8
+1072009C8:lI97|H107203B70
+107203B70:lI115|H107206DA0
+107206DA0:lI104|H10720A038
+10720A038:lI69|H10720D298
+10720D298:lI118|H107210488
+107210488:lI101|H107213708
+107213708:lI110|H107216AC0
+107216AC0:lI116|H10721A040
+10721A040:lI46|H10721D620
+10721D620:lI98|H107220BB0
+107220BB0:lI101|H107223E78
+107223E78:lI97|H107226E10
+107226E10:lI109|N
+1071F5540:lH1071F7D88|N
+1071F7D88:lI119|H1071FA9E0
+1071FA9E0:lI120|H1071FD920
+1071FD920:lI71|H1072009D8
+1072009D8:lI114|H107203B80
+107203B80:lI97|H107206DB0
+107206DB0:lI112|H10720A048
+10720A048:lI104|H10720D2A8
+10720D2A8:lI105|H107210498
+107210498:lI99|H107213718
+107213718:lI115|H107216AD0
+107216AD0:lI82|H10721A050
+10721A050:lI101|H10721D630
+10721D630:lI110|H107220BC0
+107220BC0:lI100|H107223E88
+107223E88:lI101|H107226E20
+107226E20:lI114|H1072299B8
+1072299B8:lI101|H10722C230
+10722C230:lI114|H10722E7A8
+10722E7A8:lI46|H107230A60
+107230A60:lI98|H107232AA8
+107232AA8:lI101|H1072347D0
+1072347D0:lI97|H107236248
+107236248:lI109|N
+1071F3070:Mn2:H1071F55D0,H1071F55E0
+1071F55D0:lH1071F7E28|N
+1071F7E28:lI119|H1071FAA80
+1071FAA80:lI120|H1071FD9C0
+1071FD9C0:lI69|H107200A78
+107200A78:lI114|H107203C20
+107203C20:lI97|H107206E50
+107206E50:lI115|H10720A0D8
+10720A0D8:lI101|H10720D338
+10720D338:lI69|H107210528
+107210528:lI118|H1072137A8
+1072137A8:lI101|H107216B60
+107216B60:lI110|H10721A0E0
+10721A0E0:lI116|H10721D6C0
+10721D6C0:lI46|H107220C40
+107220C40:lI98|H107223F08
+107223F08:lI101|H107226E90
+107226E90:lI97|H107229A28
+107229A28:lI109|N
+1071F55E0:lH1071F7E38|N
+1071F7E38:lI119|H1071FAA90
+1071FAA90:lI120|H1071FD9D0
+1071FD9D0:lI68|H107200A88
+107200A88:lI105|H107203C30
+107203C30:lI97|H107206E60
+107206E60:lI108|H10720A0E8
+10720A0E8:lI111|H10720D348
+10720D348:lI103|H107210538
+107210538:lI46|H1072137B8
+1072137B8:lI98|H107216B70
+107216B70:lI101|H10721A0F0
+10721A0F0:lI97|H10721D6D0
+10721D6D0:lI109|N
+1071F3060:lH1071F55C0|N
+1071F55C0:lI119|H1071F7E18
+1071F7E18:lI120|H1071FAA70
+1071FAA70:lI68|H1071FD9B0
+1071FD9B0:lI114|H107200A68
+107200A68:lI111|H107203C10
+107203C10:lI112|H107206E40
+107206E40:lI70|H10720A0C8
+10720A0C8:lI105|H10720D328
+10720D328:lI108|H107210518
+107210518:lI101|H107213798
+107213798:lI115|H107216B50
+107216B50:lI69|H10721A0D0
+10721A0D0:lI118|H10721D6B0
+10721D6B0:lI101|H107220C30
+107220C30:lI110|H107223EF8
+107223EF8:lI116|H107226E80
+107226E80:lI46|H107229A18
+107229A18:lI98|H10722C290
+10722C290:lI101|H10722E808
+10722E808:lI97|H107230AC0
+107230AC0:lI109|N
+1071F3050:lH1071F55B0|N
+1071F55B0:lI119|H1071F7E08
+1071F7E08:lI120|H1071FAA60
+1071FAA60:lI46|H1071FD9A0
+1071FD9A0:lI98|H107200A58
+107200A58:lI101|H107203C00
+107203C00:lI97|H107206E30
+107206E30:lI109|N
+1071F3040:lH1071F55A0|N
+1071F55A0:lI119|H1071F7DF8
+1071F7DF8:lI120|H1071FAA50
+1071FAA50:lI73|H1071FD990
+1071FD990:lI110|H107200A48
+107200A48:lI105|H107203BF0
+107203BF0:lI116|H107206E20
+107206E20:lI68|H10720A0B8
+10720A0B8:lI105|H10720D318
+10720D318:lI97|H107210508
+107210508:lI108|H107213788
+107213788:lI111|H107216B40
+107216B40:lI103|H10721A0C0
+10721A0C0:lI69|H10721D6A0
+10721D6A0:lI118|H107220C20
+107220C20:lI101|H107223EE8
+107223EE8:lI110|H107226E70
+107226E70:lI116|H107229A08
+107229A08:lI46|H10722C280
+10722C280:lI98|H10722E7F8
+10722E7F8:lI101|H107230AB0
+107230AB0:lI97|H107232AF8
+107232AF8:lI109|N
+1071F3030:lH1071F5590|N
+1071F5590:lI119|H1071F7DE8
+1071F7DE8:lI120|H1071FAA40
+1071FAA40:lI73|H1071FD980
+1071FD980:lI109|H107200A38
+107200A38:lI97|H107203BE0
+107203BE0:lI103|H107206E10
+107206E10:lI101|H10720A0A8
+10720A0A8:lI76|H10720D308
+10720D308:lI105|H1072104F8
+1072104F8:lI115|H107213778
+107213778:lI116|H107216B30
+107216B30:lI46|H10721A0B0
+10721A0B0:lI98|H10721D690
+10721D690:lI101|H107220C10
+107220C10:lI97|H107223ED8
+107223ED8:lI109|N
+1071F3018:Mn2:H1071F5560,H1071F5578
+1071F5560:Mn2:H1071F7DA8,H1071F7DB8
+1071F7DA8:lH1071FAA00|N
+1071FAA00:lI119|H1071FD940
+1071FD940:lI120|H1072009F8
+1072009F8:lI68|H107203BA0
+107203BA0:lI97|H107206DD0
+107206DD0:lI116|H10720A068
+10720A068:lI101|H10720D2C8
+10720D2C8:lI80|H1072104B8
+1072104B8:lI105|H107213738
+107213738:lI99|H107216AF0
+107216AF0:lI107|H10721A070
+10721A070:lI101|H10721D650
+10721D650:lI114|H107220BD0
+107220BD0:lI67|H107223E98
+107223E98:lI116|H107226E30
+107226E30:lI114|H1072299C8
+1072299C8:lI108|H10722C240
+10722C240:lI46|H10722E7B8
+10722E7B8:lI98|H107230A70
+107230A70:lI101|H107232AB8
+107232AB8:lI97|H1072347E0
+1072347E0:lI109|N
+1071F7DB8:lH1071FAA10|N
+1071FAA10:lI119|H1071FD950
+1071FD950:lI120|H107200A08
+107200A08:lI80|H107203BB0
+107203BB0:lI114|H107206DE0
+107206DE0:lI101|H10720A078
+10720A078:lI118|H10720D2D8
+10720D2D8:lI105|H1072104C8
+1072104C8:lI101|H107213748
+107213748:lI119|H107216B00
+107216B00:lI67|H10721A080
+10721A080:lI97|H10721D660
+10721D660:lI110|H107220BE0
+107220BE0:lI118|H107223EA8
+107223EA8:lI97|H107226E40
+107226E40:lI115|H1072299D8
+1072299D8:lI46|H10722C250
+10722C250:lI98|H10722E7C8
+10722E7C8:lI101|H107230A80
+107230A80:lI97|H107232AC8
+107232AC8:lI109|N
+1071F5578:Mn2:H1071F7DC8,H1071F7DD8
+1071F7DC8:lH1071FAA20|N
+1071FAA20:lI119|H1071FD960
+1071FD960:lI120|H107200A18
+107200A18:lI71|H107203BC0
+107203BC0:lI114|H107206DF0
+107206DF0:lI105|H10720A088
+10720A088:lI100|H10720D2E8
+10720D2E8:lI67|H1072104D8
+1072104D8:lI101|H107213758
+107213758:lI108|H107216B10
+107216B10:lI108|H10721A090
+10721A090:lI84|H10721D670
+10721D670:lI101|H107220BF0
+107220BF0:lI120|H107223EB8
+107223EB8:lI116|H107226E50
+107226E50:lI69|H1072299E8
+1072299E8:lI100|H10722C260
+10722C260:lI105|H10722E7D8
+10722E7D8:lI116|H107230A90
+107230A90:lI111|H107232AD8
+107232AD8:lI114|H1072347F0
+1072347F0:lI46|H107236258
+107236258:lI98|H107237A50
+107237A50:lI101|H107239088
+107239088:lI97|H10723A520
+10723A520:lI109|N
+1071F7DD8:lH1071FAA30|N
+1071FAA30:lI119|H1071FD970
+1071FD970:lI120|H107200A28
+107200A28:lI83|H107203BD0
+107203BD0:lI112|H107206E00
+107206E00:lI108|H10720A098
+10720A098:lI105|H10720D2F8
+10720D2F8:lI116|H1072104E8
+1072104E8:lI116|H107213768
+107213768:lI101|H107216B20
+107216B20:lI114|H10721A0A0
+10721A0A0:lI87|H10721D680
+10721D680:lI105|H107220C00
+107220C00:lI110|H107223EC8
+107223EC8:lI100|H107226E60
+107226E60:lI111|H1072299F8
+1072299F8:lI119|H10722C270
+10722C270:lI46|H10722E7E8
+10722E7E8:lI98|H107230AA0
+107230AA0:lI101|H107232AE8
+107232AE8:lI97|H107234800
+107234800:lI109|N
+1071F3008:lH1071F5550|N
+1071F5550:lI119|H1071F7D98
+1071F7D98:lI120|H1071FA9F0
+1071FA9F0:lI79|H1071FD930
+1071FD930:lI118|H1072009E8
+1072009E8:lI101|H107203B90
+107203B90:lI114|H107206DC0
+107206DC0:lI108|H10720A058
+10720A058:lI97|H10720D2B8
+10720D2B8:lI121|H1072104A8
+1072104A8:lI46|H107213728
+107213728:lI98|H107216AE0
+107216AE0:lI101|H10721A060
+10721A060:lI97|H10721D640
+10721D640:lI109|N
+1071F1238:MnC:H1071F2F00,H1071F2F10,H1071F2F20,H1071F2F30,H1071F2F50,H1071F2F60,H1071F2F78,H1071F2F90,H1071F2FA8,H1071F2FB8,H1071F2FD0,H1071F2FE0
+1071F2F00:lH1071F5408|N
+1071F5408:lI119|H1071F7C48
+1071F7C48:lI120|H1071FA8A0
+1071FA8A0:lI71|H1071FD7E0
+1071FD7E0:lI114|H107200898
+107200898:lI105|H107203A40
+107203A40:lI100|H107206C70
+107206C70:lI67|H107209F08
+107209F08:lI101|H10720D168
+10720D168:lI108|H107210358
+107210358:lI108|H1072135D8
+1072135D8:lI65|H107216990
+107216990:lI116|H107219F10
+107219F10:lI116|H10721D500
+10721D500:lI114|H107220A90
+107220A90:lI46|H107223D68
+107223D68:lI98|H107226D20
+107226D20:lI101|H107229918
+107229918:lI97|H10722C1A0
+10722C1A0:lI109|N
+1071F2FE0:lH1071F5520|N
+1071F5520:lI119|H1071F7D68
+1071F7D68:lI120|H1071FA9C0
+1071FA9C0:lI67|H1071FD900
+1071FD900:lI97|H1072009B8
+1072009B8:lI108|H107203B60
+107203B60:lI101|H107206D90
+107206D90:lI110|H10720A028
+10720A028:lI100|H10720D288
+10720D288:lI97|H107210478
+107210478:lI114|H1072136F8
+1072136F8:lI69|H107216AB0
+107216AB0:lI118|H10721A030
+10721A030:lI101|H10721D610
+10721D610:lI110|H107220BA0
+107220BA0:lI116|H107223E68
+107223E68:lI46|H107226E00
+107226E00:lI98|H1072299A8
+1072299A8:lI101|H10722C220
+10722C220:lI97|H10722E798
+10722E798:lI109|N
+1071F2FD0:lH1071F5510|N
+1071F5510:lI119|H1071F7D58
+1071F7D58:lI120|H1071FA9B0
+1071FA9B0:lI83|H1071FD8F0
+1071FD8F0:lI99|H1072009A8
+1072009A8:lI114|H107203B50
+107203B50:lI111|H107206D80
+107206D80:lI108|H10720A018
+10720A018:lI108|H10720D278
+10720D278:lI66|H107210468
+107210468:lI97|H1072136E8
+1072136E8:lI114|H107216AA0
+107216AA0:lI46|H10721A020
+10721A020:lI98|H10721D600
+10721D600:lI101|H107220B90
+107220B90:lI97|H107223E58
+107223E58:lI109|N
+1071F2FB8:Mn2:H1071F54F0,H1071F5500
+1071F54F0:lH1071F7D38|N
+1071F7D38:lI119|H1071FA990
+1071FA990:lI120|H1071FD8D0
+1071FD8D0:lI71|H107200988
+107200988:lI114|H107203B30
+107203B30:lI97|H107206D60
+107206D60:lI112|H107209FF8
+107209FF8:lI104|H10720D258
+10720D258:lI105|H107210448
+107210448:lI99|H1072136C8
+1072136C8:lI115|H107216A80
+107216A80:lI79|H10721A000
+10721A000:lI98|H10721D5E0
+10721D5E0:lI106|H107220B70
+107220B70:lI101|H107223E38
+107223E38:lI99|H107226DE0
+107226DE0:lI116|H107229988
+107229988:lI46|H10722C200
+10722C200:lI98|H10722E778
+10722E778:lI101|H107230A50
+107230A50:lI97|H107232A98
+107232A98:lI109|N
+1071F5500:lH1071F7D48|N
+1071F7D48:lI119|H1071FA9A0
+1071FA9A0:lI120|H1071FD8E0
+1071FD8E0:lI84|H107200998
+107200998:lI111|H107203B40
+107203B40:lI103|H107206D70
+107206D70:lI103|H10720A008
+10720A008:lI108|H10720D268
+10720D268:lI101|H107210458
+107210458:lI66|H1072136D8
+1072136D8:lI117|H107216A90
+107216A90:lI116|H10721A010
+10721A010:lI116|H10721D5F0
+10721D5F0:lI111|H107220B80
+107220B80:lI110|H107223E48
+107223E48:lI46|H107226DF0
+107226DF0:lI98|H107229998
+107229998:lI101|H10722C210
+10722C210:lI97|H10722E788
+10722E788:lI109|N
+1071F2FA8:lH1071F54E0|N
+1071F54E0:lI119|H1071F7D28
+1071F7D28:lI120|H1071FA980
+1071FA980:lI76|H1071FD8C0
+1071FD8C0:lI105|H107200978
+107200978:lI115|H107203B20
+107203B20:lI116|H107206D50
+107206D50:lI86|H107209FE8
+107209FE8:lI105|H10720D248
+10720D248:lI101|H107210438
+107210438:lI119|H1072136B8
+1072136B8:lI46|H107216A70
+107216A70:lI98|H107219FF0
+107219FF0:lI101|H10721D5D0
+10721D5D0:lI97|H107220B60
+107220B60:lI109|N
+1071F2F90:Mn2:H1071F54C0,H1071F54D0
+1071F54C0:lH1071F7D08|N
+1071F7D08:lI119|H1071FA960
+1071FA960:lI120|H1071FD8A0
+1071FD8A0:lI88|H107200958
+107200958:lI109|H107203B00
+107203B00:lI108|H107206D30
+107206D30:lI82|H107209FC8
+107209FC8:lI101|H10720D228
+10720D228:lI115|H107210418
+107210418:lI111|H107213698
+107213698:lI117|H107216A50
+107216A50:lI114|H107219FD0
+107219FD0:lI99|H10721D5B0
+10721D5B0:lI101|H107220B40
+107220B40:lI46|H107223E18
+107223E18:lI98|H107226DD0
+107226DD0:lI101|H107229978
+107229978:lI97|H10722C1F0
+10722C1F0:lI109|N
+1071F54D0:lH1071F7D18|N
+1071F7D18:lI119|H1071FA970
+1071FA970:lI120|H1071FD8B0
+1071FD8B0:lI76|H107200968
+107200968:lI105|H107203B10
+107203B10:lI115|H107206D40
+107206D40:lI116|H107209FD8
+107209FD8:lI98|H10720D238
+10720D238:lI111|H107210428
+107210428:lI111|H1072136A8
+1072136A8:lI107|H107216A60
+107216A60:lI46|H107219FE0
+107219FE0:lI98|H10721D5C0
+10721D5C0:lI101|H107220B50
+107220B50:lI97|H107223E28
+107223E28:lI109|N
+1071F2F78:Mn2:H1071F54A0,H1071F54B0
+1071F54A0:lH1071F7CE8|N
+1071F7CE8:lI119|H1071FA940
+1071FA940:lI120|H1071FD880
+1071FD880:lI73|H107200938
+107200938:lI100|H107203AE0
+107203AE0:lI108|H107206D10
+107206D10:lI101|H107209FA8
+107209FA8:lI69|H10720D208
+10720D208:lI118|H1072103F8
+1072103F8:lI101|H107213678
+107213678:lI110|H107216A30
+107216A30:lI116|H107219FB0
+107219FB0:lI46|H10721D590
+10721D590:lI98|H107220B20
+107220B20:lI101|H107223DF8
+107223DF8:lI97|H107226DB0
+107226DB0:lI109|N
+1071F54B0:lH1071F7CF8|N
+1071F7CF8:lI119|H1071FA950
+1071FA950:lI120|H1071FD890
+1071FD890:lI70|H107200948
+107200948:lI111|H107203AF0
+107203AF0:lI110|H107206D20
+107206D20:lI116|H107209FB8
+107209FB8:lI80|H10720D218
+10720D218:lI105|H107210408
+107210408:lI99|H107213688
+107213688:lI107|H107216A40
+107216A40:lI101|H107219FC0
+107219FC0:lI114|H10721D5A0
+10721D5A0:lI69|H107220B30
+107220B30:lI118|H107223E08
+107223E08:lI101|H107226DC0
+107226DC0:lI110|H107229968
+107229968:lI116|H10722C1E0
+10722C1E0:lI46|H10722E768
+10722E768:lI98|H107230A40
+107230A40:lI101|H107232A88
+107232A88:lI97|H1072347C0
+1072347C0:lI109|N
+1071F2F60:Mn2:H1071F5480,H1071F5490
+1071F5480:lH1071F7CC8|N
+1071F7CC8:lI119|H1071FA920
+1071FA920:lI120|H1071FD860
+1071FD860:lI84|H107200918
+107200918:lI114|H107203AC0
+107203AC0:lI101|H107206CF0
+107206CF0:lI101|H107209F88
+107209F88:lI69|H10720D1E8
+10720D1E8:lI118|H1072103D8
+1072103D8:lI101|H107213658
+107213658:lI110|H107216A10
+107216A10:lI116|H107219F90
+107219F90:lI46|H10721D570
+10721D570:lI98|H107220B00
+107220B00:lI101|H107223DD8
+107223DD8:lI97|H107226D90
+107226D90:lI109|N
+1071F5490:lH1071F7CD8|N
+1071F7CD8:lI119|H1071FA930
+1071FA930:lI120|H1071FD870
+1071FD870:lI83|H107200928
+107200928:lI105|H107203AD0
+107203AD0:lI122|H107206D00
+107206D00:lI101|H107209F98
+107209F98:lI69|H10720D1F8
+10720D1F8:lI118|H1072103E8
+1072103E8:lI101|H107213668
+107213668:lI110|H107216A20
+107216A20:lI116|H107219FA0
+107219FA0:lI46|H10721D580
+10721D580:lI98|H107220B10
+107220B10:lI101|H107223DE8
+107223DE8:lI97|H107226DA0
+107226DA0:lI109|N
+1071F2F50:lH1071F5470|N
+1071F5470:lI119|H1071F7CB8
+1071F7CB8:lI120|H1071FA910
+1071FA910:lI70|H1071FD850
+1071FD850:lI105|H107200908
+107200908:lI110|H107203AB0
+107203AB0:lI100|H107206CE0
+107206CE0:lI82|H107209F78
+107209F78:lI101|H10720D1D8
+10720D1D8:lI112|H1072103C8
+1072103C8:lI108|H107213648
+107213648:lI97|H107216A00
+107216A00:lI99|H107219F80
+107219F80:lI101|H10721D560
+10721D560:lI68|H107220AF0
+107220AF0:lI105|H107223DC8
+107223DC8:lI97|H107226D80
+107226D80:lI108|H107229958
+107229958:lI111|H10722C1D0
+10722C1D0:lI103|H10722E758
+10722E758:lI46|H107230A30
+107230A30:lI98|H107232A78
+107232A78:lI101|H1072347B0
+1072347B0:lI97|H107236238
+107236238:lI109|N
+1071F2F30:Mn3:H1071F5440,H1071F5450,H1071F5460
+1071F5440:lH1071F7C88|N
+1071F7C88:lI119|H1071FA8E0
+1071FA8E0:lI120|H1071FD820
+1071FD820:lI80|H1072008D8
+1072008D8:lI114|H107203A80
+107203A80:lI105|H107206CB0
+107206CB0:lI110|H107209F48
+107209F48:lI116|H10720D1A8
+10720D1A8:lI68|H107210398
+107210398:lI97|H107213618
+107213618:lI116|H1072169D0
+1072169D0:lI97|H107219F50
+107219F50:lI46|H10721D530
+10721D530:lI98|H107220AC0
+107220AC0:lI101|H107223D98
+107223D98:lI97|H107226D50
+107226D50:lI109|N
+1071F5460:lH1071F7CA8|N
+1071F7CA8:lI119|H1071FA900
+1071FA900:lI120|H1071FD840
+1071FD840:lI84|H1072008F8
+1072008F8:lI97|H107203AA0
+107203AA0:lI115|H107206CD0
+107206CD0:lI107|H107209F68
+107209F68:lI66|H10720D1C8
+10720D1C8:lI97|H1072103B8
+1072103B8:lI114|H107213638
+107213638:lI73|H1072169F0
+1072169F0:lI99|H107219F70
+107219F70:lI111|H10721D550
+10721D550:lI110|H107220AE0
+107220AE0:lI46|H107223DB8
+107223DB8:lI98|H107226D70
+107226D70:lI101|H107229948
+107229948:lI97|H10722C1C0
+10722C1C0:lI109|N
+1071F5450:lH1071F7C98|N
+1071F7C98:lI119|H1071FA8F0
+1071FA8F0:lI120|H1071FD830
+1071FD830:lI70|H1072008E8
+1072008E8:lI111|H107203A90
+107203A90:lI99|H107206CC0
+107206CC0:lI117|H107209F58
+107209F58:lI115|H10720D1B8
+10720D1B8:lI69|H1072103A8
+1072103A8:lI118|H107213628
+107213628:lI101|H1072169E0
+1072169E0:lI110|H107219F60
+107219F60:lI116|H10721D540
+10721D540:lI46|H107220AD0
+107220AD0:lI98|H107223DA8
+107223DA8:lI101|H107226D60
+107226D60:lI97|H107229938
+107229938:lI109|N
+1071F2F20:Mn1:H1071F5428
+1071F5428:Mn2:H1071F7C68,H1071F7C78
+1071F7C68:lH1071FA8C0|N
+1071FA8C0:lI119|H1071FD800
+1071FD800:lI120|H1072008B8
+1072008B8:lI67|H107203A60
+107203A60:lI108|H107206C90
+107206C90:lI105|H107209F28
+107209F28:lI112|H10720D188
+10720D188:lI98|H107210378
+107210378:lI111|H1072135F8
+1072135F8:lI97|H1072169B0
+1072169B0:lI114|H107219F30
+107219F30:lI100|H10721D510
+10721D510:lI84|H107220AA0
+107220AA0:lI101|H107223D78
+107223D78:lI120|H107226D30
+107226D30:lI116|H107229928
+107229928:lI69|H10722C1B0
+10722C1B0:lI118|H10722E748
+10722E748:lI101|H107230A20
+107230A20:lI110|H107232A68
+107232A68:lI116|H1072347A0
+1072347A0:lI46|H107236228
+107236228:lI98|H107237A40
+107237A40:lI101|H107239078
+107239078:lI97|H10723A510
+10723A510:lI109|N
+1071F7C78:lH1071FA8D0|N
+1071FA8D0:lI119|H1071FD810
+1071FD810:lI120|H1072008C8
+1072008C8:lI76|H107203A70
+107203A70:lI105|H107206CA0
+107206CA0:lI115|H107209F38
+107209F38:lI116|H10720D198
+10720D198:lI73|H107210388
+107210388:lI116|H107213608
+107213608:lI101|H1072169C0
+1072169C0:lI109|H107219F40
+107219F40:lI46|H10721D520
+10721D520:lI98|H107220AB0
+107220AB0:lI101|H107223D88
+107223D88:lI97|H107226D40
+107226D40:lI109|N
+1071F2F10:lH1071F5418|N
+1071F5418:lI119|H1071F7C58
+1071F7C58:lI120|H1071FA8B0
+1071FA8B0:lI66|H1071FD7F0
+1071FD7F0:lI117|H1072008A8
+1072008A8:lI116|H107203A50
+107203A50:lI116|H107206C80
+107206C80:lI111|H107209F18
+107209F18:lI110|H10720D178
+10720D178:lI46|H107210368
+107210368:lI98|H1072135E8
+1072135E8:lI101|H1072169A0
+1072169A0:lI97|H107219F20
+107219F20:lI109|N
+1071F11E8:Mn9:H1071F2E40,H1071F2E50,H1071F2E60,H1071F2E78,H1071F2EA0,H1071F2EB0,H1071F2EC0,H1071F2ED8,H1071F2EF0
+1071F2E40:lH1071F5318|N
+1071F5318:lI119|H1071F7B58
+1071F7B58:lI120|H1071FA7B0
+1071FA7B0:lI83|H1071FD6F0
+1071FD6F0:lI121|H1072007A8
+1072007A8:lI115|H107203950
+107203950:lI67|H107206B80
+107206B80:lI111|H107209E28
+107209E28:lI108|H10720D088
+10720D088:lI111|H107210288
+107210288:lI117|H107213508
+107213508:lI114|H1072168C0
+1072168C0:lI67|H107219E40
+107219E40:lI104|H10721D430
+10721D430:lI97|H1072209D0
+1072209D0:lI110|H107223CB8
+107223CB8:lI103|H107226C80
+107226C80:lI101|H107229878
+107229878:lI100|H10722C100
+10722C100:lI69|H10722E6C8
+10722E6C8:lI118|H1072309B0
+1072309B0:lI101|H107232A18
+107232A18:lI110|H107234760
+107234760:lI116|H1072361E8
+1072361E8:lI46|H107237A10
+107237A10:lI98|H107239048
+107239048:lI101|H10723A4E0
+10723A4E0:lI97|H10723B800
+10723B800:lI109|N
+1071F2EF0:lH1071F53F8|N
+1071F53F8:lI119|H1071F7C38
+1071F7C38:lI120|H1071FA890
+1071FA890:lI71|H1071FD7D0
+1071FD7D0:lI114|H107200888
+107200888:lI97|H107203A30
+107203A30:lI112|H107206C60
+107206C60:lI104|H107209EF8
+107209EF8:lI105|H10720D158
+10720D158:lI99|H107210348
+107210348:lI115|H1072135C8
+1072135C8:lI70|H107216980
+107216980:lI111|H107219F00
+107219F00:lI110|H10721D4F0
+10721D4F0:lI116|H107220A80
+107220A80:lI46|H107223D58
+107223D58:lI98|H107226D10
+107226D10:lI101|H107229908
+107229908:lI97|H10722C190
+10722C190:lI109|N
+1071F2ED8:Mn2:H1071F53D8,H1071F53E8
+1071F53D8:lH1071F7C18|N
+1071F7C18:lI119|H1071FA870
+1071FA870:lI120|H1071FD7B0
+1071FD7B0:lI46|H107200868
+107200868:lI97|H107203A10
+107203A10:lI112|H107206C40
+107206C40:lI112|N
+1071F53E8:lH1071F7C28|N
+1071F7C28:lI119|H1071FA880
+1071FA880:lI120|H1071FD7C0
+1071FD7C0:lI78|H107200878
+107200878:lI111|H107203A20
+107203A20:lI116|H107206C50
+107206C50:lI105|H107209EE8
+107209EE8:lI102|H10720D148
+10720D148:lI105|H107210338
+107210338:lI99|H1072135B8
+1072135B8:lI97|H107216970
+107216970:lI116|H107219EF0
+107219EF0:lI105|H10721D4E0
+10721D4E0:lI111|H107220A70
+107220A70:lI110|H107223D48
+107223D48:lI77|H107226D00
+107226D00:lI101|H1072298F8
+1072298F8:lI115|H10722C180
+10722C180:lI115|H10722E738
+10722E738:lI97|H107230A10
+107230A10:lI103|H107232A58
+107232A58:lI101|H107234790
+107234790:lI46|H107236218
+107236218:lI98|H107237A30
+107237A30:lI101|H107239068
+107239068:lI97|H10723A500
+10723A500:lI109|N
+1071F2EC0:Mn2:H1071F53B8,H1071F53C8
+1071F53B8:lH1071F7BF8|N
+1071F7BF8:lI119|H1071FA850
+1071FA850:lI120|H1071FD790
+1071FD790:lI82|H107200848
+107200848:lI101|H1072039F0
+1072039F0:lI103|H107206C20
+107206C20:lI105|H107209EC8
+107209EC8:lI111|H10720D128
+10720D128:lI110|H107210318
+107210318:lI46|H107213598
+107213598:lI98|H107216950
+107216950:lI101|H107219ED0
+107219ED0:lI97|H10721D4C0
+10721D4C0:lI109|N
+1071F53C8:lH1071F7C08|N
+1071F7C08:lI119|H1071FA860
+1071FA860:lI120|H1071FD7A0
+1071FD7A0:lI67|H107200858
+107200858:lI111|H107203A00
+107203A00:lI108|H107206C30
+107206C30:lI111|H107209ED8
+107209ED8:lI117|H10720D138
+10720D138:lI114|H107210328
+107210328:lI68|H1072135A8
+1072135A8:lI105|H107216960
+107216960:lI97|H107219EE0
+107219EE0:lI108|H10721D4D0
+10721D4D0:lI111|H107220A60
+107220A60:lI103|H107223D38
+107223D38:lI46|H107226CF0
+107226CF0:lI98|H1072298E8
+1072298E8:lI101|H10722C170
+10722C170:lI97|H10722E728
+10722E728:lI109|N
+1071F2EB0:lH1071F53A8|N
+1071F53A8:lI119|H1071F7BE8
+1071F7BE8:lI120|H1071FA840
+1071FA840:lI68|H1071FD780
+1071FD780:lI67|H107200838
+107200838:lI79|H1072039E0
+1072039E0:lI118|H107206C10
+107206C10:lI101|H107209EB8
+107209EB8:lI114|H10720D118
+10720D118:lI108|H107210308
+107210308:lI97|H107213588
+107213588:lI121|H107216940
+107216940:lI46|H107219EC0
+107219EC0:lI98|H10721D4B0
+10721D4B0:lI101|H107220A50
+107220A50:lI97|H107223D28
+107223D28:lI109|N
+1071F2EA0:lH1071F5398|N
+1071F5398:lI119|H1071F7BD8
+1071F7BD8:lI120|H1071FA830
+1071FA830:lI77|H1071FD770
+1071FD770:lI101|H107200828
+107200828:lI110|H1072039D0
+1072039D0:lI117|H107206C00
+107206C00:lI73|H107209EA8
+107209EA8:lI116|H10720D108
+10720D108:lI101|H1072102F8
+1072102F8:lI109|H107213578
+107213578:lI46|H107216930
+107216930:lI98|H107219EB0
+107219EB0:lI101|H10721D4A0
+10721D4A0:lI97|H107220A40
+107220A40:lI109|N
+1071F2E78:Mn4:H1071F5358,H1071F5368,H1071F5378,H1071F5388
+1071F5358:lH1071F7B98|N
+1071F7B98:lI119|H1071FA7F0
+1071FA7F0:lI120|H1071FD730
+1071FD730:lI77|H1072007E8
+1072007E8:lI68|H107203990
+107203990:lI73|H107206BC0
+107206BC0:lI67|H107209E68
+107209E68:lI104|H10720D0C8
+10720D0C8:lI105|H1072102C8
+1072102C8:lI108|H107213548
+107213548:lI100|H107216900
+107216900:lI70|H107219E80
+107219E80:lI114|H10721D470
+10721D470:lI97|H107220A10
+107220A10:lI109|H107223CF8
+107223CF8:lI101|H107226CC0
+107226CC0:lI46|H1072298B8
+1072298B8:lI98|H10722C140
+10722C140:lI101|H10722E6F8
+10722E6F8:lI97|H1072309E0
+1072309E0:lI109|N
+1071F5388:lH1071F7BC8|N
+1071F7BC8:lI103|H1071FA820
+1071FA820:lI108|H1071FD760
+1071FD760:lI117|H107200818
+107200818:lI46|H1072039C0
+1072039C0:lI98|H107206BF0
+107206BF0:lI101|H107209E98
+107209E98:lI97|H10720D0F8
+10720D0F8:lI109|N
+1071F5378:lH1071F7BB8|N
+1071F7BB8:lI119|H1071FA810
+1071FA810:lI120|H1071FD750
+1071FD750:lI65|H107200808
+107200808:lI117|H1072039B0
+1072039B0:lI105|H107206BE0
+107206BE0:lI78|H107209E88
+107209E88:lI111|H10720D0E8
+10720D0E8:lI116|H1072102E8
+1072102E8:lI101|H107213568
+107213568:lI98|H107216920
+107216920:lI111|H107219EA0
+107219EA0:lI111|H10721D490
+10721D490:lI107|H107220A30
+107220A30:lI69|H107223D18
+107223D18:lI118|H107226CE0
+107226CE0:lI101|H1072298D8
+1072298D8:lI110|H10722C160
+10722C160:lI116|H10722E718
+10722E718:lI46|H107230A00
+107230A00:lI98|H107232A48
+107232A48:lI101|H107234780
+107234780:lI97|H107236208
+107236208:lI109|N
+1071F5368:lH1071F7BA8|N
+1071F7BA8:lI119|H1071FA800
+1071FA800:lI120|H1071FD740
+1071FD740:lI71|H1072007F8
+1072007F8:lI114|H1072039A0
+1072039A0:lI97|H107206BD0
+107206BD0:lI112|H107209E78
+107209E78:lI104|H10720D0D8
+10720D0D8:lI105|H1072102D8
+1072102D8:lI99|H107213558
+107213558:lI115|H107216910
+107216910:lI77|H107219E90
+107219E90:lI97|H10721D480
+10721D480:lI116|H107220A20
+107220A20:lI114|H107223D08
+107223D08:lI105|H107226CD0
+107226CD0:lI120|H1072298C8
+1072298C8:lI46|H10722C150
+10722C150:lI98|H10722E708
+10722E708:lI101|H1072309F0
+1072309F0:lI97|H107232A38
+107232A38:lI109|N
+1071F2E60:Mn2:H1071F5338,H1071F5348
+1071F5338:lH1071F7B78|N
+1071F7B78:lI119|H1071FA7D0
+1071FA7D0:lI120|H1071FD710
+1071FD710:lI74|H1072007C8
+1072007C8:lI111|H107203970
+107203970:lI121|H107206BA0
+107206BA0:lI115|H107209E48
+107209E48:lI116|H10720D0A8
+10720D0A8:lI105|H1072102A8
+1072102A8:lI99|H107213528
+107213528:lI107|H1072168E0
+1072168E0:lI69|H107219E60
+107219E60:lI118|H10721D450
+10721D450:lI101|H1072209F0
+1072209F0:lI110|H107223CD8
+107223CD8:lI116|H107226CA0
+107226CA0:lI46|H107229898
+107229898:lI98|H10722C120
+10722C120:lI101|H10722E6D8
+10722E6D8:lI97|H1072309C0
+1072309C0:lI109|N
+1071F5348:lH1071F7B88|N
+1071F7B88:lI119|H1071FA7E0
+1071FA7E0:lI120|H1071FD720
+1071FD720:lI71|H1072007D8
+1072007D8:lI114|H107203980
+107203980:lI105|H107206BB0
+107206BB0:lI100|H107209E58
+107209E58:lI67|H10720D0B8
+10720D0B8:lI101|H1072102B8
+1072102B8:lI108|H107213538
+107213538:lI108|H1072168F0
+1072168F0:lI70|H107219E70
+107219E70:lI108|H10721D460
+10721D460:lI111|H107220A00
+107220A00:lI97|H107223CE8
+107223CE8:lI116|H107226CB0
+107226CB0:lI82|H1072298A8
+1072298A8:lI101|H10722C130
+10722C130:lI110|H10722E6E8
+10722E6E8:lI100|H1072309D0
+1072309D0:lI101|H107232A28
+107232A28:lI114|H107234770
+107234770:lI101|H1072361F8
+1072361F8:lI114|H107237A20
+107237A20:lI46|H107239058
+107239058:lI98|H10723A4F0
+10723A4F0:lI101|H10723B810
+10723B810:lI97|H10723C870
+10723C870:lI109|N
+1071F2E50:lH1071F5328|N
+1071F5328:lI119|H1071F7B68
+1071F7B68:lI120|H1071FA7C0
+1071FA7C0:lI80|H1071FD700
+1071FD700:lI114|H1072007B8
+1072007B8:lI101|H107203960
+107203960:lI118|H107206B90
+107206B90:lI105|H107209E38
+107209E38:lI101|H10720D098
+10720D098:lI119|H107210298
+107210298:lI70|H107213518
+107213518:lI114|H1072168D0
+1072168D0:lI97|H107219E50
+107219E50:lI109|H10721D440
+10721D440:lI101|H1072209E0
+1072209E0:lI46|H107223CC8
+107223CC8:lI98|H107226C90
+107226C90:lI101|H107229888
+107229888:lI97|H10722C110
+10722C110:lI109|N
+1071F1190:MnA:H1071F2D88,H1071F2DA0,H1071F2DB0,H1071F2DC8,H1071F2DD8,H1071F2DE8,H1071F2DF8,H1071F2E08,H1071F2E18,H1071F2E28
+1071F2D88:Mn2:H1071F5240,H1071F5250
+1071F5240:lH1071F7A78|N
+1071F7A78:lI119|H1071FA6D0
+1071FA6D0:lI120|H1071FD610
+1071FD610:lI71|H1072006C8
+1072006C8:lI114|H107203870
+107203870:lI105|H107206AA0
+107206AA0:lI100|H107209D48
+107209D48:lI83|H10720CFA8
+10720CFA8:lI105|H1072101B8
+1072101B8:lI122|H107213438
+107213438:lI101|H1072167F0
+1072167F0:lI114|H107219D80
+107219D80:lI46|H10721D380
+10721D380:lI98|H107220930
+107220930:lI101|H107223C28
+107223C28:lI97|H107226C00
+107226C00:lI109|N
+1071F5250:lH1071F7A88|N
+1071F7A88:lI119|H1071FA6E0
+1071FA6E0:lI120|H1071FD620
+1071FD620:lI70|H1072006D8
+1072006D8:lI111|H107203880
+107203880:lI110|H107206AB0
+107206AB0:lI116|H107209D58
+107209D58:lI46|H10720CFB8
+10720CFB8:lI98|H1072101C8
+1072101C8:lI101|H107213448
+107213448:lI97|H107216800
+107216800:lI109|N
+1071F2E28:Mn2:H1071F52F8,H1071F5308
+1071F52F8:lH1071F7B38|N
+1071F7B38:lI119|H1071FA790
+1071FA790:lI120|H1071FD6D0
+1071FD6D0:lI71|H107200788
+107200788:lI114|H107203930
+107203930:lI97|H107206B60
+107206B60:lI112|H107209E08
+107209E08:lI104|H10720D068
+10720D068:lI105|H107210268
+107210268:lI99|H1072134E8
+1072134E8:lI115|H1072168A0
+1072168A0:lI80|H107219E20
+107219E20:lI97|H10721D410
+10721D410:lI116|H1072209B0
+1072209B0:lI104|H107223C98
+107223C98:lI46|H107226C60
+107226C60:lI98|H107229858
+107229858:lI101|H10722C0E0
+10722C0E0:lI97|H10722E6A8
+10722E6A8:lI109|N
+1071F5308:lH1071F7B48|N
+1071F7B48:lI119|H1071FA7A0
+1071FA7A0:lI120|H1071FD6E0
+1071FD6E0:lI77|H107200798
+107200798:lI111|H107203940
+107203940:lI117|H107206B70
+107206B70:lI115|H107209E18
+107209E18:lI101|H10720D078
+10720D078:lI67|H107210278
+107210278:lI97|H1072134F8
+1072134F8:lI112|H1072168B0
+1072168B0:lI116|H107219E30
+107219E30:lI117|H10721D420
+10721D420:lI114|H1072209C0
+1072209C0:lI101|H107223CA8
+107223CA8:lI67|H107226C70
+107226C70:lI104|H107229868
+107229868:lI97|H10722C0F0
+10722C0F0:lI110|H10722E6B8
+10722E6B8:lI103|H1072309A0
+1072309A0:lI101|H107232A08
+107232A08:lI100|H107234750
+107234750:lI69|H1072361D8
+1072361D8:lI118|H107237A00
+107237A00:lI101|H107239038
+107239038:lI110|H10723A4D0
+10723A4D0:lI116|H10723B7F0
+10723B7F0:lI46|H10723C860
+10723C860:lI98|H10723D6F0
+10723D6F0:lI101|H10723E450
+10723E450:lI97|H10723F060
+10723F060:lI109|N
+1071F2E18:Mn1:H1071F52E0
+1071F52E0:Mn2:H1071F7B18,H1071F7B28
+1071F7B18:lH1071FA770|N
+1071FA770:lI119|H1071FD6B0
+1071FD6B0:lI120|H107200768
+107200768:lI80|H107203910
+107203910:lI114|H107206B40
+107206B40:lI105|H107209DE8
+107209DE8:lI110|H10720D048
+10720D048:lI116|H107210248
+107210248:lI101|H1072134C8
+1072134C8:lI114|H107216880
+107216880:lI46|H107219E00
+107219E00:lI98|H10721D3F0
+10721D3F0:lI101|H107220990
+107220990:lI97|H107223C78
+107223C78:lI109|N
+1071F7B28:lH1071FA780|N
+1071FA780:lI119|H1071FD6C0
+1071FD6C0:lI120|H107200778
+107200778:lI68|H107203920
+107203920:lI105|H107206B50
+107206B50:lI115|H107209DF8
+107209DF8:lI112|H10720D058
+10720D058:lI108|H107210258
+107210258:lI97|H1072134D8
+1072134D8:lI121|H107216890
+107216890:lI67|H107219E10
+107219E10:lI104|H10721D400
+10721D400:lI97|H1072209A0
+1072209A0:lI110|H107223C88
+107223C88:lI103|H107226C50
+107226C50:lI101|H107229848
+107229848:lI100|H10722C0D0
+10722C0D0:lI69|H10722E698
+10722E698:lI118|H107230990
+107230990:lI101|H1072329F8
+1072329F8:lI110|H107234740
+107234740:lI116|H1072361C8
+1072361C8:lI46|H1072379F0
+1072379F0:lI98|H107239028
+107239028:lI101|H10723A4C0
+10723A4C0:lI97|H10723B7E0
+10723B7E0:lI109|N
+1071F2E08:lH1071F52D0|N
+1071F52D0:lI119|H1071F7B08
+1071F7B08:lI120|H1071FA760
+1071FA760:lI66|H1071FD6A0
+1071FD6A0:lI117|H107200758
+107200758:lI102|H107203900
+107203900:lI102|H107206B30
+107206B30:lI101|H107209DD8
+107209DD8:lI114|H10720D038
+10720D038:lI101|H107210238
+107210238:lI100|H1072134B8
+1072134B8:lI68|H107216870
+107216870:lI67|H107219DF0
+107219DF0:lI46|H10721D3E0
+10721D3E0:lI98|H107220980
+107220980:lI101|H107223C68
+107223C68:lI97|H107226C40
+107226C40:lI109|N
+1071F2DF8:lH1071F52C0|N
+1071F52C0:lI119|H1071F7AF8
+1071F7AF8:lI120|H1071FA750
+1071FA750:lI67|H1071FD690
+1071FD690:lI111|H107200748
+107200748:lI108|H1072038F0
+1072038F0:lI111|H107206B20
+107206B20:lI117|H107209DC8
+107209DC8:lI114|H10720D028
+10720D028:lI80|H107210228
+107210228:lI105|H1072134A8
+1072134A8:lI99|H107216860
+107216860:lI107|H107219DE0
+107219DE0:lI101|H10721D3D0
+10721D3D0:lI114|H107220970
+107220970:lI69|H107223C58
+107223C58:lI118|H107226C30
+107226C30:lI101|H107229838
+107229838:lI110|H10722C0C0
+10722C0C0:lI116|H10722E688
+10722E688:lI46|H107230980
+107230980:lI98|H1072329E8
+1072329E8:lI101|H107234730
+107234730:lI97|H1072361B8
+1072361B8:lI109|N
+1071F2DE8:lH1071F52B0|N
+1071F52B0:lI119|H1071F7AE8
+1071F7AE8:lI120|H1071FA740
+1071FA740:lI101|H1071FD680
+1071FD680:lI95|H107200738
+107200738:lI117|H1072038E0
+1072038E0:lI116|H107206B10
+107206B10:lI105|H107209DB8
+107209DB8:lI108|H10720D018
+10720D018:lI46|H107210218
+107210218:lI98|H107213498
+107213498:lI101|H107216850
+107216850:lI97|H107219DD0
+107219DD0:lI109|N
+1071F2DD8:lH1071F52A0|N
+1071F52A0:lI119|H1071F7AD8
+1071F7AD8:lI120|H1071FA730
+1071FA730:lI70|H1071FD670
+1071FD670:lI108|H107200728
+107200728:lI101|H1072038D0
+1072038D0:lI120|H107206B00
+107206B00:lI71|H107209DA8
+107209DA8:lI114|H10720D008
+10720D008:lI105|H107210208
+107210208:lI100|H107213488
+107213488:lI83|H107216840
+107216840:lI105|H107219DC0
+107219DC0:lI122|H10721D3C0
+10721D3C0:lI101|H107220960
+107220960:lI114|H107223C48
+107223C48:lI46|H107226C20
+107226C20:lI98|H107229828
+107229828:lI101|H10722C0B0
+10722C0B0:lI97|H10722E678
+10722E678:lI109|N
+1071F2DC8:lH1071F5290|N
+1071F5290:lI119|H1071F7AC8
+1071F7AC8:lI120|H1071FA720
+1071FA720:lI87|H1071FD660
+1071FD660:lI101|H107200718
+107200718:lI98|H1072038C0
+1072038C0:lI86|H107206AF0
+107206AF0:lI105|H107209D98
+107209D98:lI101|H10720CFF8
+10720CFF8:lI119|H1072101F8
+1072101F8:lI46|H107213478
+107213478:lI98|H107216830
+107216830:lI101|H107219DB0
+107219DB0:lI97|H10721D3B0
+10721D3B0:lI109|N
+1071F2DB0:Mn2:H1071F5270,H1071F5280
+1071F5270:lH1071F7AA8|N
+1071F7AA8:lI119|H1071FA700
+1071FA700:lI120|H1071FD640
+1071FD640:lI46|H1072006F8
+1072006F8:lI97|H1072038A0
+1072038A0:lI112|H107206AD0
+107206AD0:lI112|H107209D78
+107209D78:lI117|H10720CFD8
+10720CFD8:lI112|N
+1071F5280:lH1071F7AB8|N
+1071F7AB8:lI119|H1071FA710
+1071FA710:lI120|H1071FD650
+1071FD650:lI83|H107200708
+107200708:lI116|H1072038B0
+1072038B0:lI121|H107206AE0
+107206AE0:lI108|H107209D88
+107209D88:lI101|H10720CFE8
+10720CFE8:lI100|H1072101E8
+1072101E8:lI84|H107213468
+107213468:lI101|H107216820
+107216820:lI120|H107219DA0
+107219DA0:lI116|H10721D3A0
+10721D3A0:lI67|H107220950
+107220950:lI116|H107223C38
+107223C38:lI114|H107226C10
+107226C10:lI108|H107229818
+107229818:lI46|H10722C0A0
+10722C0A0:lI98|H10722E668
+10722E668:lI101|H107230970
+107230970:lI97|H1072329D8
+1072329D8:lI109|N
+1071F2DA0:lH1071F5260|N
+1071F5260:lI119|H1071F7A98
+1071F7A98:lI120|H1071FA6F0
+1071FA6F0:lI77|H1071FD630
+1071FD630:lI101|H1072006E8
+1072006E8:lI109|H107203890
+107203890:lI111|H107206AC0
+107206AC0:lI114|H107209D68
+107209D68:lI121|H10720CFC8
+10720CFC8:lI68|H1072101D8
+1072101D8:lI67|H107213458
+107213458:lI46|H107216810
+107216810:lI98|H107219D90
+107219D90:lI101|H10721D390
+10721D390:lI97|H107220940
+107220940:lI109|N
+1071F1130:MnB:H1071F2CB8,H1071F2CC8,H1071F2CD8,H1071F2CF0,H1071F2D00,H1071F2D18,H1071F2D28,H1071F2D38,H1071F2D48,H1071F2D58,H1071F2D68
+1071F2CB8:lH1071F5150|N
+1071F5150:lI119|H1071F7988
+1071F7988:lI120|H1071FA5E0
+1071FA5E0:lI83|H1071FD520
+1071FD520:lI99|H1072005D8
+1072005D8:lI114|H107203780
+107203780:lI111|H1072069B0
+1072069B0:lI108|H107209C58
+107209C58:lI108|H10720CEB8
+10720CEB8:lI101|H1072100C8
+1072100C8:lI100|H107213348
+107213348:lI87|H107216700
+107216700:lI105|H107219C90
+107219C90:lI110|H10721D290
+10721D290:lI100|H107220850
+107220850:lI111|H107223B48
+107223B48:lI119|H107226B30
+107226B30:lI46|H107229758
+107229758:lI98|H10722BFE0
+10722BFE0:lI101|H10722E5C8
+10722E5C8:lI97|H1072308D0
+1072308D0:lI109|N
+1071F2D68:Mn3:H1071F5210,H1071F5220,H1071F5230
+1071F5210:lH1071F7A48|N
+1071F7A48:lI119|H1071FA6A0
+1071FA6A0:lI120|H1071FD5E0
+1071FD5E0:lI80|H107200698
+107200698:lI111|H107203840
+107203840:lI112|H107206A70
+107206A70:lI117|H107209D18
+107209D18:lI112|H10720CF78
+10720CF78:lI84|H107210188
+107210188:lI114|H107213408
+107213408:lI97|H1072167C0
+1072167C0:lI110|H107219D50
+107219D50:lI115|H10721D350
+10721D350:lI105|H107220900
+107220900:lI101|H107223BF8
+107223BF8:lI110|H107226BE0
+107226BE0:lI116|H1072297F8
+1072297F8:lI87|H10722C080
+10722C080:lI105|H10722E648
+10722E648:lI110|H107230950
+107230950:lI100|H1072329C8
+1072329C8:lI111|H107234720
+107234720:lI119|H1072361A8
+1072361A8:lI46|H1072379E0
+1072379E0:lI98|H107239018
+107239018:lI101|H10723A4B0
+10723A4B0:lI97|H10723B7D0
+10723B7D0:lI109|N
+1071F5230:lH1071F7A68|N
+1071F7A68:lI119|H1071FA6C0
+1071FA6C0:lI120|H1071FD600
+1071FD600:lI67|H1072006B8
+1072006B8:lI108|H107203860
+107203860:lI105|H107206A90
+107206A90:lI101|H107209D38
+107209D38:lI110|H10720CF98
+10720CF98:lI116|H1072101A8
+1072101A8:lI68|H107213428
+107213428:lI67|H1072167E0
+1072167E0:lI46|H107219D70
+107219D70:lI98|H10721D370
+10721D370:lI101|H107220920
+107220920:lI97|H107223C18
+107223C18:lI109|N
+1071F5220:lH1071F7A58|N
+1071F7A58:lI119|H1071FA6B0
+1071FA6B0:lI120|H1071FD5F0
+1071FD5F0:lI66|H1072006A8
+1072006A8:lI111|H107203850
+107203850:lI111|H107206A80
+107206A80:lI107|H107209D28
+107209D28:lI67|H10720CF88
+10720CF88:lI116|H107210198
+107210198:lI114|H107213418
+107213418:lI108|H1072167D0
+1072167D0:lI69|H107219D60
+107219D60:lI118|H10721D360
+10721D360:lI101|H107220910
+107220910:lI110|H107223C08
+107223C08:lI116|H107226BF0
+107226BF0:lI46|H107229808
+107229808:lI98|H10722C090
+10722C090:lI101|H10722E658
+10722E658:lI97|H107230960
+107230960:lI109|N
+1071F2D58:lH1071F5200|N
+1071F5200:lI119|H1071F7A38
+1071F7A38:lI120|H1071FA690
+1071FA690:lI77|H1071FD5D0
+1071FD5D0:lI101|H107200688
+107200688:lI110|H107203830
+107203830:lI117|H107206A60
+107206A60:lI66|H107209D08
+107209D08:lI97|H10720CF68
+10720CF68:lI114|H107210178
+107210178:lI46|H1072133F8
+1072133F8:lI98|H1072167B0
+1072167B0:lI101|H107219D40
+107219D40:lI97|H10721D340
+10721D340:lI109|N
+1071F2D48:lH1071F51F0|N
+1071F51F0:lI119|H1071F7A28
+1071F7A28:lI120|H1071FA680
+1071FA680:lI78|H1071FD5C0
+1071FD5C0:lI97|H107200678
+107200678:lI118|H107203820
+107203820:lI105|H107206A50
+107206A50:lI103|H107209CF8
+107209CF8:lI97|H10720CF58
+10720CF58:lI116|H107210168
+107210168:lI105|H1072133E8
+1072133E8:lI111|H1072167A0
+1072167A0:lI110|H107219D30
+107219D30:lI75|H10721D330
+10721D330:lI101|H1072208F0
+1072208F0:lI121|H107223BE8
+107223BE8:lI69|H107226BD0
+107226BD0:lI118|H1072297E8
+1072297E8:lI101|H10722C070
+10722C070:lI110|H10722E638
+10722E638:lI116|H107230940
+107230940:lI46|H1072329B8
+1072329B8:lI98|H107234710
+107234710:lI101|H107236198
+107236198:lI97|H1072379D0
+1072379D0:lI109|N
+1071F2D38:lH1071F51E0|N
+1071F51E0:lI119|H1071F7A18
+1071F7A18:lI120|H1071FA670
+1071FA670:lI84|H1071FD5B0
+1071FD5B0:lI111|H107200668
+107200668:lI112|H107203810
+107203810:lI76|H107206A40
+107206A40:lI101|H107209CE8
+107209CE8:lI118|H10720CF48
+10720CF48:lI101|H107210158
+107210158:lI108|H1072133D8
+1072133D8:lI87|H107216790
+107216790:lI105|H107219D20
+107219D20:lI110|H10721D320
+10721D320:lI100|H1072208E0
+1072208E0:lI111|H107223BD8
+107223BD8:lI119|H107226BC0
+107226BC0:lI46|H1072297D8
+1072297D8:lI98|H10722C060
+10722C060:lI101|H10722E628
+10722E628:lI97|H107230930
+107230930:lI109|N
+1071F2D28:lH1071F51D0|N
+1071F51D0:lI119|H1071F7A08
+1071F7A08:lI120|H1071FA660
+1071FA660:lI83|H1071FD5A0
+1071FD5A0:lI116|H107200658
+107200658:lI97|H107203800
+107203800:lI116|H107206A30
+107206A30:lI105|H107209CD8
+107209CD8:lI99|H10720CF38
+10720CF38:lI66|H107210148
+107210148:lI105|H1072133C8
+1072133C8:lI116|H107216780
+107216780:lI109|H107219D10
+107219D10:lI97|H10721D310
+10721D310:lI112|H1072208D0
+1072208D0:lI46|H107223BC8
+107223BC8:lI98|H107226BB0
+107226BB0:lI101|H1072297C8
+1072297C8:lI97|H10722C050
+10722C050:lI109|N
+1071F2D18:lH1071F51C0|N
+1071F51C0:lI119|H1071F79F8
+1071F79F8:lI120|H1071FA650
+1071FA650:lI83|H1071FD590
+1071FD590:lI121|H107200648
+107200648:lI115|H1072037F0
+1072037F0:lI116|H107206A20
+107206A20:lI101|H107209CC8
+107209CC8:lI109|H10720CF28
+10720CF28:lI83|H107210138
+107210138:lI101|H1072133B8
+1072133B8:lI116|H107216770
+107216770:lI116|H107219D00
+107219D00:lI105|H10721D300
+10721D300:lI110|H1072208C0
+1072208C0:lI103|H107223BB8
+107223BB8:lI115|H107226BA0
+107226BA0:lI46|H1072297B8
+1072297B8:lI98|H10722C040
+10722C040:lI101|H10722E618
+10722E618:lI97|H107230920
+107230920:lI109|N
+1071F2D00:Mn2:H1071F51A0,H1071F51B0
+1071F51A0:lH1071F79D8|N
+1071F79D8:lI119|H1071FA630
+1071FA630:lI120|H1071FD570
+1071FD570:lI80|H107200628
+107200628:lI114|H1072037D0
+1072037D0:lI101|H107206A00
+107206A00:lI118|H107209CA8
+107209CA8:lI105|H10720CF08
+10720CF08:lI101|H107210118
+107210118:lI119|H107213398
+107213398:lI67|H107216750
+107216750:lI111|H107219CE0
+107219CE0:lI110|H10721D2E0
+10721D2E0:lI116|H1072208A0
+1072208A0:lI114|H107223B98
+107223B98:lI111|H107226B80
+107226B80:lI108|H107229798
+107229798:lI66|H10722C020
+10722C020:lI97|H10722E608
+10722E608:lI114|H107230910
+107230910:lI46|H1072329A8
+1072329A8:lI98|H107234700
+107234700:lI101|H107236188
+107236188:lI97|H1072379C0
+1072379C0:lI109|N
+1071F51B0:lH1071F79E8|N
+1071F79E8:lI119|H1071FA640
+1071FA640:lI120|H1071FD580
+1071FD580:lI65|H107200638
+107200638:lI117|H1072037E0
+1072037E0:lI105|H107206A10
+107206A10:lI80|H107209CB8
+107209CB8:lI97|H10720CF18
+10720CF18:lI110|H107210128
+107210128:lI101|H1072133A8
+1072133A8:lI73|H107216760
+107216760:lI110|H107219CF0
+107219CF0:lI102|H10721D2F0
+10721D2F0:lI111|H1072208B0
+1072208B0:lI46|H107223BA8
+107223BA8:lI98|H107226B90
+107226B90:lI101|H1072297A8
+1072297A8:lI97|H10722C030
+10722C030:lI109|N
+1071F2CF0:lH1071F5190|N
+1071F5190:lI119|H1071F79C8
+1071F79C8:lI120|H1071FA620
+1071FA620:lI70|H1071FD560
+1071FD560:lI105|H107200618
+107200618:lI110|H1072037C0
+1072037C0:lI100|H1072069F0
+1072069F0:lI82|H107209C98
+107209C98:lI101|H10720CEF8
+10720CEF8:lI112|H107210108
+107210108:lI108|H107213388
+107213388:lI97|H107216740
+107216740:lI99|H107219CD0
+107219CD0:lI101|H10721D2D0
+10721D2D0:lI68|H107220890
+107220890:lI97|H107223B88
+107223B88:lI116|H107226B70
+107226B70:lI97|H107229788
+107229788:lI46|H10722C010
+10722C010:lI98|H10722E5F8
+10722E5F8:lI101|H107230900
+107230900:lI97|H107232998
+107232998:lI109|N
+1071F2CD8:Mn2:H1071F5170,H1071F5180
+1071F5170:lH1071F79A8|N
+1071F79A8:lI119|H1071FA600
+1071FA600:lI120|H1071FD540
+1071FD540:lI77|H1072005F8
+1072005F8:lI111|H1072037A0
+1072037A0:lI118|H1072069D0
+1072069D0:lI101|H107209C78
+107209C78:lI69|H10720CED8
+10720CED8:lI118|H1072100E8
+1072100E8:lI101|H107213368
+107213368:lI110|H107216720
+107216720:lI116|H107219CB0
+107219CB0:lI46|H10721D2B0
+10721D2B0:lI98|H107220870
+107220870:lI101|H107223B68
+107223B68:lI97|H107226B50
+107226B50:lI109|N
+1071F5180:lH1071F79B8|N
+1071F79B8:lI119|H1071FA610
+1071FA610:lI120|H1071FD550
+1071FD550:lI72|H107200608
+107200608:lI116|H1072037B0
+1072037B0:lI109|H1072069E0
+1072069E0:lI108|H107209C88
+107209C88:lI69|H10720CEE8
+10720CEE8:lI97|H1072100F8
+1072100F8:lI115|H107213378
+107213378:lI121|H107216730
+107216730:lI80|H107219CC0
+107219CC0:lI114|H10721D2C0
+10721D2C0:lI105|H107220880
+107220880:lI110|H107223B78
+107223B78:lI116|H107226B60
+107226B60:lI105|H107229778
+107229778:lI110|H10722C000
+10722C000:lI103|H10722E5E8
+10722E5E8:lI46|H1072308F0
+1072308F0:lI98|H107232988
+107232988:lI101|H1072346F0
+1072346F0:lI97|H107236178
+107236178:lI109|N
+1071F2CC8:lH1071F5160|N
+1071F5160:lI119|H1071F7998
+1071F7998:lI120|H1071FA5F0
+1071FA5F0:lI65|H1071FD530
+1071FD530:lI99|H1072005E8
+1072005E8:lI99|H107203790
+107203790:lI101|H1072069C0
+1072069C0:lI108|H107209C68
+107209C68:lI101|H10720CEC8
+10720CEC8:lI114|H1072100D8
+1072100D8:lI97|H107213358
+107213358:lI116|H107216710
+107216710:lI111|H107219CA0
+107219CA0:lI114|H10721D2A0
+10721D2A0:lI84|H107220860
+107220860:lI97|H107223B58
+107223B58:lI98|H107226B40
+107226B40:lI108|H107229768
+107229768:lI101|H10722BFF0
+10722BFF0:lI46|H10722E5D8
+10722E5D8:lI98|H1072308E0
+1072308E0:lI101|H107232978
+107232978:lI97|H1072346E0
+1072346E0:lI109|N
+1071F10B0:MnF:H1071F2B88,H1071F2B98,H1071F2BB0,H1071F2BC8,H1071F2BD8,H1071F2BE8,H1071F2BF8,H1071F2C10,H1071F2C20,H1071F2C40,H1071F2C50,H1071F2C60,H1071F2C78,H1071F2C88,H1071F2CA0
+1071F2B88:lH1071F4FE0|N
+1071F4FE0:lI119|H1071F7818
+1071F7818:lI120|H1071FA470
+1071FA470:lI76|H1071FD3B0
+1071FD3B0:lI97|H107200468
+107200468:lI121|H107203610
+107203610:lI111|H107206840
+107206840:lI117|H107209AE8
+107209AE8:lI116|H10720CD48
+10720CD48:lI65|H10720FF58
+10720FF58:lI108|H1072131D8
+1072131D8:lI103|H107216590
+107216590:lI111|H107219B30
+107219B30:lI114|H10721D150
+10721D150:lI105|H107220710
+107220710:lI116|H107223A48
+107223A48:lI104|H107226A60
+107226A60:lI109|H107229698
+107229698:lI46|H10722BF50
+10722BF50:lI98|H10722E538
+10722E538:lI101|H107230860
+107230860:lI97|H107232928
+107232928:lI109|N
+1071F2CA0:Mn2:H1071F5130,H1071F5140
+1071F5130:lH1071F7968|N
+1071F7968:lI119|H1071FA5C0
+1071FA5C0:lI120|H1071FD500
+1071FD500:lI76|H1072005B8
+1072005B8:lI111|H107203760
+107203760:lI103|H107206990
+107206990:lI78|H107209C38
+107209C38:lI117|H10720CE98
+10720CE98:lI108|H1072100A8
+1072100A8:lI108|H107213328
+107213328:lI46|H1072166E0
+1072166E0:lI98|H107219C70
+107219C70:lI101|H10721D270
+10721D270:lI97|H107220830
+107220830:lI109|N
+1071F5140:lH1071F7978|N
+1071F7978:lI119|H1071FA5D0
+1071FA5D0:lI120|H1071FD510
+1071FD510:lI71|H1072005C8
+1072005C8:lI114|H107203770
+107203770:lI105|H1072069A0
+1072069A0:lI100|H107209C48
+107209C48:lI67|H10720CEA8
+10720CEA8:lI101|H1072100B8
+1072100B8:lI108|H107213338
+107213338:lI108|H1072166F0
+1072166F0:lI78|H107219C80
+107219C80:lI117|H10721D280
+10721D280:lI109|H107220840
+107220840:lI98|H107223B38
+107223B38:lI101|H107226B20
+107226B20:lI114|H107229748
+107229748:lI82|H10722BFD0
+10722BFD0:lI101|H10722E5B8
+10722E5B8:lI110|H1072308C0
+1072308C0:lI100|H107232968
+107232968:lI101|H1072346D0
+1072346D0:lI114|H107236168
+107236168:lI101|H1072379B0
+1072379B0:lI114|H107239008
+107239008:lI46|H10723A4A0
+10723A4A0:lI98|H10723B7C0
+10723B7C0:lI101|H10723C850
+10723C850:lI97|H10723D6E0
+10723D6E0:lI109|N
+1071F2C88:Mn2:H1071F5110,H1071F5120
+1071F5110:lH1071F7948|N
+1071F7948:lI119|H1071FA5A0
+1071FA5A0:lI120|H1071FD4E0
+1071FD4E0:lI67|H107200598
+107200598:lI111|H107203740
+107203740:lI108|H107206970
+107206970:lI111|H107209C18
+107209C18:lI117|H10720CE78
+10720CE78:lI114|H107210088
+107210088:lI68|H107213308
+107213308:lI97|H1072166C0
+1072166C0:lI116|H107219C60
+107219C60:lI97|H10721D260
+10721D260:lI46|H107220820
+107220820:lI98|H107223B28
+107223B28:lI101|H107226B10
+107226B10:lI97|H107229738
+107229738:lI109|N
+1071F5120:lH1071F7958|N
+1071F7958:lI119|H1071FA5B0
+1071FA5B0:lI120|H1071FD4F0
+1071FD4F0:lI73|H1072005A8
+1072005A8:lI99|H107203750
+107203750:lI111|H107206980
+107206980:lI110|H107209C28
+107209C28:lI46|H10720CE88
+10720CE88:lI98|H107210098
+107210098:lI101|H107213318
+107213318:lI97|H1072166D0
+1072166D0:lI109|N
+1071F2C78:lH1071F5100|N
+1071F5100:lI119|H1071F7938
+1071F7938:lI120|H1071FA590
+1071FA590:lI77|H1071FD4D0
+1071FD4D0:lI105|H107200588
+107200588:lI114|H107203730
+107203730:lI114|H107206960
+107206960:lI111|H107209C08
+107209C08:lI114|H10720CE68
+10720CE68:lI68|H107210078
+107210078:lI67|H1072132F8
+1072132F8:lI46|H1072166B0
+1072166B0:lI98|H107219C50
+107219C50:lI101|H10721D250
+10721D250:lI97|H107220810
+107220810:lI109|N
+1071F2C60:Mn2:H1071F50E0,H1071F50F0
+1071F50E0:lH1071F7918|N
+1071F7918:lI119|H1071FA570
+1071FA570:lI120|H1071FD4B0
+1071FD4B0:lI65|H107200568
+107200568:lI117|H107203710
+107203710:lI105|H107206940
+107206940:lI83|H107209BE8
+107209BE8:lI105|H10720CE48
+10720CE48:lI109|H107210058
+107210058:lI112|H1072132D8
+1072132D8:lI108|H107216690
+107216690:lI101|H107219C30
+107219C30:lI84|H10721D230
+10721D230:lI97|H1072207F0
+1072207F0:lI98|H107223B08
+107223B08:lI65|H107226AF0
+107226AF0:lI114|H107229718
+107229718:lI116|H10722BFB0
+10722BFB0:lI46|H10722E598
+10722E598:lI98|H1072308B0
+1072308B0:lI101|H107232958
+107232958:lI97|H1072346C0
+1072346C0:lI109|N
+1071F50F0:lH1071F7928|N
+1071F7928:lI119|H1071FA580
+1071FA580:lI120|H1071FD4C0
+1071FD4C0:lI87|H107200578
+107200578:lI101|H107203720
+107203720:lI98|H107206950
+107206950:lI86|H107209BF8
+107209BF8:lI105|H10720CE58
+10720CE58:lI101|H107210068
+107210068:lI119|H1072132E8
+1072132E8:lI69|H1072166A0
+1072166A0:lI118|H107219C40
+107219C40:lI101|H10721D240
+10721D240:lI110|H107220800
+107220800:lI116|H107223B18
+107223B18:lI46|H107226B00
+107226B00:lI98|H107229728
+107229728:lI101|H10722BFC0
+10722BFC0:lI97|H10722E5A8
+10722E5A8:lI109|N
+1071F2C50:lH1071F50D0|N
+1071F50D0:lI119|H1071F7908
+1071F7908:lI120|H1071FA560
+1071FA560:lI78|H1071FD4A0
+1071FD4A0:lI111|H107200558
+107200558:lI116|H107203700
+107203700:lI105|H107206930
+107206930:lI102|H107209BD8
+107209BD8:lI121|H10720CE38
+10720CE38:lI69|H107210048
+107210048:lI118|H1072132C8
+1072132C8:lI101|H107216680
+107216680:lI110|H107219C20
+107219C20:lI116|H10721D220
+10721D220:lI46|H1072207E0
+1072207E0:lI98|H107223AF8
+107223AF8:lI101|H107226AE0
+107226AE0:lI97|H107229708
+107229708:lI109|N
+1071F2C40:lH1071F50C0|N
+1071F50C0:lI119|H1071F78F8
+1071F78F8:lI120|H1071FA550
+1071FA550:lI65|H1071FD490
+1071FD490:lI117|H107200548
+107200548:lI105|H1072036F0
+1072036F0:lI84|H107206920
+107206920:lI97|H107209BC8
+107209BC8:lI98|H10720CE28
+10720CE28:lI65|H107210038
+107210038:lI114|H1072132B8
+1072132B8:lI116|H107216670
+107216670:lI46|H107219C10
+107219C10:lI98|H10721D210
+10721D210:lI101|H1072207D0
+1072207D0:lI97|H107223AE8
+107223AE8:lI109|N
+1071F2C20:Mn3:H1071F5090,H1071F50A0,H1071F50B0
+1071F5090:lH1071F78C8|N
+1071F78C8:lI119|H1071FA520
+1071FA520:lI120|H1071FD460
+1071FD460:lI77|H107200518
+107200518:lI68|H1072036C0
+1072036C0:lI73|H1072068F0
+1072068F0:lI80|H107209B98
+107209B98:lI97|H10720CDF8
+10720CDF8:lI114|H107210008
+107210008:lI101|H107213288
+107213288:lI110|H107216640
+107216640:lI116|H107219BE0
+107219BE0:lI70|H10721D1E0
+10721D1E0:lI114|H1072207A0
+1072207A0:lI97|H107223AB8
+107223AB8:lI109|H107226AC0
+107226AC0:lI101|H1072296F8
+1072296F8:lI46|H10722BFA0
+10722BFA0:lI98|H10722E588
+10722E588:lI101|H1072308A0
+1072308A0:lI97|H107232948
+107232948:lI109|N
+1071F50B0:lH1071F78E8|N
+1071F78E8:lI119|H1071FA540
+1071FA540:lI120|H1071FD480
+1071FD480:lI71|H107200538
+107200538:lI114|H1072036E0
+1072036E0:lI105|H107206910
+107206910:lI100|H107209BB8
+107209BB8:lI69|H10720CE18
+10720CE18:lI118|H107210028
+107210028:lI101|H1072132A8
+1072132A8:lI110|H107216660
+107216660:lI116|H107219C00
+107219C00:lI46|H10721D200
+10721D200:lI98|H1072207C0
+1072207C0:lI101|H107223AD8
+107223AD8:lI97|H107226AD0
+107226AD0:lI109|N
+1071F50A0:lH1071F78D8|N
+1071F78D8:lI119|H1071FA530
+1071FA530:lI120|H1071FD470
+1071FD470:lI83|H107200528
+107200528:lI99|H1072036D0
+1072036D0:lI114|H107206900
+107206900:lI101|H107209BA8
+107209BA8:lI101|H10720CE08
+10720CE08:lI110|H107210018
+107210018:lI68|H107213298
+107213298:lI67|H107216650
+107216650:lI46|H107219BF0
+107219BF0:lI98|H10721D1F0
+10721D1F0:lI101|H1072207B0
+1072207B0:lI97|H107223AC8
+107223AC8:lI109|N
+1071F2C10:lH1071F5080|N
+1071F5080:lI119|H1071F78B8
+1071F78B8:lI120|H1071FA510
+1071FA510:lI80|H1071FD450
+1071FD450:lI114|H107200508
+107200508:lI105|H1072036B0
+1072036B0:lI110|H1072068E0
+1072068E0:lI116|H107209B88
+107209B88:lI111|H10720CDE8
+10720CDE8:lI117|H10720FFF8
+10720FFF8:lI116|H107213278
+107213278:lI46|H107216630
+107216630:lI98|H107219BD0
+107219BD0:lI101|H10721D1D0
+10721D1D0:lI97|H107220790
+107220790:lI109|N
+1071F2BF8:Mn2:H1071F5060,H1071F5070
+1071F5060:lH1071F7898|N
+1071F7898:lI119|H1071FA4F0
+1071FA4F0:lI120|H1071FD430
+1071FD430:lI69|H1072004E8
+1072004E8:lI118|H107203690
+107203690:lI116|H1072068C0
+1072068C0:lI72|H107209B68
+107209B68:lI97|H10720CDC8
+10720CDC8:lI110|H10720FFD8
+10720FFD8:lI100|H107213258
+107213258:lI108|H107216610
+107216610:lI101|H107219BB0
+107219BB0:lI114|H10721D1B0
+10721D1B0:lI46|H107220770
+107220770:lI98|H107223A98
+107223A98:lI101|H107226AA0
+107226AA0:lI97|H1072296D8
+1072296D8:lI109|N
+1071F5070:lH1071F78A8|N
+1071F78A8:lI119|H1071FA500
+1071FA500:lI120|H1071FD440
+1071FD440:lI68|H1072004F8
+1072004F8:lI105|H1072036A0
+1072036A0:lI114|H1072068D0
+1072068D0:lI80|H107209B78
+107209B78:lI105|H10720CDD8
+10720CDD8:lI99|H10720FFE8
+10720FFE8:lI107|H107213268
+107213268:lI101|H107216620
+107216620:lI114|H107219BC0
+107219BC0:lI67|H10721D1C0
+10721D1C0:lI116|H107220780
+107220780:lI114|H107223AA8
+107223AA8:lI108|H107226AB0
+107226AB0:lI46|H1072296E8
+1072296E8:lI98|H10722BF90
+10722BF90:lI101|H10722E578
+10722E578:lI97|H107230890
+107230890:lI109|N
+1071F2BE8:lH1071F5050|N
+1071F5050:lI119|H1071F7888
+1071F7888:lI120|H1071FA4E0
+1071FA4E0:lI84|H1071FD420
+1071FD420:lI114|H1072004D8
+1072004D8:lI101|H107203680
+107203680:lI101|H1072068B0
+1072068B0:lI98|H107209B58
+107209B58:lI111|H10720CDB8
+10720CDB8:lI111|H10720FFC8
+10720FFC8:lI107|H107213248
+107213248:lI46|H107216600
+107216600:lI98|H107219BA0
+107219BA0:lI101|H10721D1A0
+10721D1A0:lI97|H107220760
+107220760:lI109|N
+1071F2BD8:lH1071F5040|N
+1071F5040:lI119|H1071F7878
+1071F7878:lI120|H1071FA4D0
+1071FA4D0:lI76|H1071FD410
+1071FD410:lI111|H1072004C8
+1072004C8:lI99|H107203670
+107203670:lI97|H1072068A0
+1072068A0:lI108|H107209B48
+107209B48:lI101|H10720CDA8
+10720CDA8:lI46|H10720FFB8
+10720FFB8:lI98|H107213238
+107213238:lI101|H1072165F0
+1072165F0:lI97|H107219B90
+107219B90:lI109|N
+1071F2BC8:lH1071F5030|N
+1071F5030:lI119|H1071F7868
+1071F7868:lI120|H1071FA4C0
+1071FA4C0:lI77|H1071FD400
+1071FD400:lI97|H1072004B8
+1072004B8:lI120|H107203660
+107203660:lI105|H107206890
+107206890:lI109|H107209B38
+107209B38:lI105|H10720CD98
+10720CD98:lI122|H10720FFA8
+10720FFA8:lI101|H107213228
+107213228:lI69|H1072165E0
+1072165E0:lI118|H107219B80
+107219B80:lI101|H10721D190
+10721D190:lI110|H107220750
+107220750:lI116|H107223A88
+107223A88:lI46|H107226A90
+107226A90:lI98|H1072296C8
+1072296C8:lI101|H10722BF80
+10722BF80:lI97|H10722E568
+10722E568:lI109|N
+1071F2BB0:Mn2:H1071F5010,H1071F5020
+1071F5010:lH1071F7848|N
+1071F7848:lI119|H1071FA4A0
+1071FA4A0:lI120|H1071FD3E0
+1071FD3E0:lI77|H107200498
+107200498:lI101|H107203640
+107203640:lI115|H107206870
+107206870:lI115|H107209B18
+107209B18:lI97|H10720CD78
+10720CD78:lI103|H10720FF88
+10720FF88:lI101|H107213208
+107213208:lI68|H1072165C0
+1072165C0:lI105|H107219B60
+107219B60:lI97|H10721D170
+10721D170:lI108|H107220730
+107220730:lI111|H107223A68
+107223A68:lI103|H107226A70
+107226A70:lI46|H1072296A8
+1072296A8:lI98|H10722BF60
+10722BF60:lI101|H10722E548
+10722E548:lI97|H107230870
+107230870:lI109|N
+1071F5020:lH1071F7858|N
+1071F7858:lI119|H1071FA4B0
+1071FA4B0:lI120|H1071FD3F0
+1071FD3F0:lI71|H1072004A8
+1072004A8:lI101|H107203650
+107203650:lI110|H107206880
+107206880:lI101|H107209B28
+107209B28:lI114|H10720CD88
+10720CD88:lI105|H10720FF98
+10720FF98:lI99|H107213218
+107213218:lI68|H1072165D0
+1072165D0:lI105|H107219B70
+107219B70:lI114|H10721D180
+10721D180:lI67|H107220740
+107220740:lI116|H107223A78
+107223A78:lI114|H107226A80
+107226A80:lI108|H1072296B8
+1072296B8:lI46|H10722BF70
+10722BF70:lI98|H10722E558
+10722E558:lI101|H107230880
+107230880:lI97|H107232938
+107232938:lI109|N
+1071F2B98:Mn2:H1071F4FF0,H1071F5000
+1071F4FF0:lH1071F7828|N
+1071F7828:lI119|H1071FA480
+1071FA480:lI120|H1071FD3C0
+1071FD3C0:lI71|H107200478
+107200478:lI76|H107203620
+107203620:lI67|H107206850
+107206850:lI97|H107209AF8
+107209AF8:lI110|H10720CD58
+10720CD58:lI118|H10720FF68
+10720FF68:lI97|H1072131E8
+1072131E8:lI115|H1072165A0
+1072165A0:lI46|H107219B40
+107219B40:lI98|H10721D160
+10721D160:lI101|H107220720
+107220720:lI97|H107223A58
+107223A58:lI109|N
+1071F5000:lH1071F7838|N
+1071F7838:lI119|H1071FA490
+1071FA490:lI120|H1071FD3D0
+1071FD3D0:lI83|H107200488
+107200488:lI105|H107203630
+107203630:lI122|H107206860
+107206860:lI101|H107209B08
+107209B08:lI114|H10720CD68
+10720CD68:lI46|H10720FF78
+10720FF78:lI98|H1072131F8
+1072131F8:lI101|H1072165B0
+1072165B0:lI97|H107219B50
+107219B50:lI109|N
+1071F1050:MnB:H1071F2A98,H1071F2AB0,H1071F2AC8,H1071F2AE0,H1071F2AF8,H1071F2B18,H1071F2B28,H1071F2B38,H1071F2B50,H1071F2B60,H1071F2B70
+1071F2A98:Mn2:H1071F4EB0,H1071F4EC0
+1071F4EB0:lH1071F76E8|N
+1071F76E8:lI119|H1071FA340
+1071FA340:lI120|H1071FD280
+1071FD280:lI80|H107200338
+107200338:lI97|H1072034E0
+1072034E0:lI110|H107206710
+107206710:lI101|H1072099B8
+1072099B8:lI108|H10720CC18
+10720CC18:lI46|H10720FE28
+10720FE28:lI98|H1072130A8
+1072130A8:lI101|H107216460
+107216460:lI97|H107219A10
+107219A10:lI109|N
+1071F4EC0:lH1071F76F8|N
+1071F76F8:lI119|H1071FA350
+1071FA350:lI120|H1071FD290
+1071FD290:lI83|H107200348
+107200348:lI116|H1072034F0
+1072034F0:lI97|H107206720
+107206720:lI116|H1072099C8
+1072099C8:lI105|H10720CC28
+10720CC28:lI99|H10720FE38
+10720FE38:lI76|H1072130B8
+1072130B8:lI105|H107216470
+107216470:lI110|H107219A20
+107219A20:lI101|H10721D040
+10721D040:lI46|H107220610
+107220610:lI98|H107223948
+107223948:lI101|H107226980
+107226980:lI97|H1072295F8
+1072295F8:lI109|N
+1071F2B70:Mn2:H1071F4FC0,H1071F4FD0
+1071F4FC0:lH1071F77F8|N
+1071F77F8:lI119|H1071FA450
+1071FA450:lI120|H1071FD390
+1071FD390:lI67|H107200448
+107200448:lI111|H1072035F0
+1072035F0:lI108|H107206820
+107206820:lI111|H107209AC8
+107209AC8:lI117|H10720CD28
+10720CD28:lI114|H10720FF38
+10720FF38:lI80|H1072131B8
+1072131B8:lI105|H107216570
+107216570:lI99|H107219B10
+107219B10:lI107|H10721D130
+10721D130:lI101|H1072206F0
+1072206F0:lI114|H107223A28
+107223A28:lI67|H107226A40
+107226A40:lI116|H107229678
+107229678:lI114|H10722BF30
+10722BF30:lI108|H10722E518
+10722E518:lI46|H107230840
+107230840:lI98|H107232908
+107232908:lI101|H1072346A0
+1072346A0:lI97|H107236148
+107236148:lI109|N
+1071F4FD0:lH1071F7808|N
+1071F7808:lI119|H1071FA460
+1071FA460:lI120|H1071FD3A0
+1071FD3A0:lI71|H107200458
+107200458:lI114|H107203600
+107203600:lI105|H107206830
+107206830:lI100|H107209AD8
+107209AD8:lI67|H10720CD38
+10720CD38:lI101|H10720FF48
+10720FF48:lI108|H1072131C8
+1072131C8:lI108|H107216580
+107216580:lI66|H107219B20
+107219B20:lI111|H10721D140
+10721D140:lI111|H107220700
+107220700:lI108|H107223A38
+107223A38:lI82|H107226A50
+107226A50:lI101|H107229688
+107229688:lI110|H10722BF40
+10722BF40:lI100|H10722E528
+10722E528:lI101|H107230850
+107230850:lI114|H107232918
+107232918:lI101|H1072346B0
+1072346B0:lI114|H107236158
+107236158:lI46|H1072379A0
+1072379A0:lI98|H107238FF8
+107238FF8:lI101|H10723A490
+10723A490:lI97|H10723B7B0
+10723B7B0:lI109|N
+1071F2B60:lH1071F4FB0|N
+1071F4FB0:lI119|H1071F77E8
+1071F77E8:lI120|H1071FA440
+1071FA440:lI70|H1071FD380
+1071FD380:lI111|H107200438
+107200438:lI110|H1072035E0
+1072035E0:lI116|H107206810
+107206810:lI68|H107209AB8
+107209AB8:lI105|H10720CD18
+10720CD18:lI97|H10720FF28
+10720FF28:lI108|H1072131A8
+1072131A8:lI111|H107216560
+107216560:lI103|H107219B00
+107219B00:lI46|H10721D120
+10721D120:lI98|H1072206E0
+1072206E0:lI101|H107223A18
+107223A18:lI97|H107226A30
+107226A30:lI109|N
+1071F2B50:lH1071F4FA0|N
+1071F4FA0:lI119|H1071F77D8
+1071F77D8:lI120|H1071FA430
+1071FA430:lI77|H1071FD370
+1071FD370:lI105|H107200428
+107200428:lI110|H1072035D0
+1072035D0:lI105|H107206800
+107206800:lI70|H107209AA8
+107209AA8:lI114|H10720CD08
+10720CD08:lI97|H10720FF18
+10720FF18:lI109|H107213198
+107213198:lI101|H107216550
+107216550:lI46|H107219AF0
+107219AF0:lI98|H10721D110
+10721D110:lI101|H1072206D0
+1072206D0:lI97|H107223A08
+107223A08:lI109|N
+1071F2B38:Mn2:H1071F4F80,H1071F4F90
+1071F4F80:lH1071F77B8|N
+1071F77B8:lI119|H1071FA410
+1071FA410:lI120|H1071FD350
+1071FD350:lI71|H107200408
+107200408:lI114|H1072035B0
+1072035B0:lI105|H1072067E0
+1072067E0:lI100|H107209A88
+107209A88:lI67|H10720CCE8
+10720CCE8:lI101|H10720FEF8
+10720FEF8:lI108|H107213178
+107213178:lI108|H107216530
+107216530:lI78|H107219AD0
+107219AD0:lI117|H10721D0F0
+10721D0F0:lI109|H1072206B0
+1072206B0:lI98|H1072239E8
+1072239E8:lI101|H107226A10
+107226A10:lI114|H107229658
+107229658:lI69|H10722BF10
+10722BF10:lI100|H10722E508
+10722E508:lI105|H107230830
+107230830:lI116|H1072328F8
+1072328F8:lI111|H107234690
+107234690:lI114|H107236138
+107236138:lI46|H107237990
+107237990:lI98|H107238FE8
+107238FE8:lI101|H10723A480
+10723A480:lI97|H10723B7A0
+10723B7A0:lI109|N
+1071F4F90:lH1071F77C8|N
+1071F77C8:lI119|H1071FA420
+1071FA420:lI120|H1071FD360
+1071FD360:lI83|H107200418
+107200418:lI99|H1072035C0
+1072035C0:lI114|H1072067F0
+1072067F0:lI111|H107209A98
+107209A98:lI108|H10720CCF8
+10720CCF8:lI108|H10720FF08
+10720FF08:lI69|H107213188
+107213188:lI118|H107216540
+107216540:lI101|H107219AE0
+107219AE0:lI110|H10721D100
+10721D100:lI116|H1072206C0
+1072206C0:lI46|H1072239F8
+1072239F8:lI98|H107226A20
+107226A20:lI101|H107229668
+107229668:lI97|H10722BF20
+10722BF20:lI109|N
+1071F2B28:lH1071F4F70|N
+1071F4F70:lI119|H1071F77A8
+1071F77A8:lI120|H1071FA400
+1071FA400:lI83|H1071FD340
+1071FD340:lI112|H1072003F8
+1072003F8:lI108|H1072035A0
+1072035A0:lI97|H1072067D0
+1072067D0:lI115|H107209A78
+107209A78:lI104|H10720CCD8
+10720CCD8:lI83|H10720FEE8
+10720FEE8:lI99|H107213168
+107213168:lI114|H107216520
+107216520:lI101|H107219AC0
+107219AC0:lI101|H10721D0E0
+10721D0E0:lI110|H1072206A0
+1072206A0:lI46|H1072239D8
+1072239D8:lI98|H107226A00
+107226A00:lI101|H107229648
+107229648:lI97|H10722BF00
+10722BF00:lI109|N
+1071F2B18:lH1071F4F60|N
+1071F4F60:lI119|H1071F7798
+1071F7798:lI120|H1071FA3F0
+1071FA3F0:lI80|H1071FD330
+1071FD330:lI97|H1072003E8
+1072003E8:lI105|H107203590
+107203590:lI110|H1072067C0
+1072067C0:lI116|H107209A68
+107209A68:lI68|H10720CCC8
+10720CCC8:lI67|H10720FED8
+10720FED8:lI46|H107213158
+107213158:lI98|H107216510
+107216510:lI101|H107219AB0
+107219AB0:lI97|H10721D0D0
+10721D0D0:lI109|N
+1071F2AF8:Mn3:H1071F4F30,H1071F4F40,H1071F4F50
+1071F4F30:lH1071F7768|N
+1071F7768:lI119|H1071FA3C0
+1071FA3C0:lI120|H1071FD300
+1071FD300:lI71|H1072003B8
+1072003B8:lI67|H107203560
+107203560:lI68|H107206790
+107206790:lI67|H107209A38
+107209A38:lI46|H10720CC98
+10720CC98:lI98|H10720FEA8
+10720FEA8:lI101|H107213128
+107213128:lI97|H1072164E0
+1072164E0:lI109|N
+1071F4F50:lH1071F7788|N
+1071F7788:lI119|H1071FA3E0
+1071FA3E0:lI120|H1071FD320
+1071FD320:lI84|H1072003D8
+1072003D8:lI101|H107203580
+107203580:lI120|H1072067B0
+1072067B0:lI116|H107209A58
+107209A58:lI68|H10720CCB8
+10720CCB8:lI97|H10720FEC8
+10720FEC8:lI116|H107213148
+107213148:lI97|H107216500
+107216500:lI79|H107219AA0
+107219AA0:lI98|H10721D0C0
+10721D0C0:lI106|H107220690
+107220690:lI101|H1072239C8
+1072239C8:lI99|H1072269F0
+1072269F0:lI116|H107229638
+107229638:lI46|H10722BEF0
+10722BEF0:lI98|H10722E4F8
+10722E4F8:lI101|H107230820
+107230820:lI97|H1072328E8
+1072328E8:lI109|N
+1071F4F40:lH1071F7778|N
+1071F7778:lI119|H1071FA3D0
+1071FA3D0:lI120|H1071FD310
+1071FD310:lI71|H1072003C8
+1072003C8:lI114|H107203570
+107203570:lI97|H1072067A0
+1072067A0:lI112|H107209A48
+107209A48:lI104|H10720CCA8
+10720CCA8:lI105|H10720FEB8
+10720FEB8:lI99|H107213138
+107213138:lI115|H1072164F0
+1072164F0:lI66|H107219A90
+107219A90:lI114|H10721D0B0
+10721D0B0:lI117|H107220680
+107220680:lI115|H1072239B8
+1072239B8:lI104|H1072269E0
+1072269E0:lI46|H107229628
+107229628:lI98|H10722BEE0
+10722BEE0:lI101|H10722E4E8
+10722E4E8:lI97|H107230810
+107230810:lI109|N
+1071F2AE0:Mn2:H1071F4F10,H1071F4F20
+1071F4F10:lH1071F7748|N
+1071F7748:lI119|H1071FA3A0
+1071FA3A0:lI120|H1071FD2E0
+1071FD2E0:lI67|H107200398
+107200398:lI108|H107203540
+107203540:lI105|H107206770
+107206770:lI112|H107209A18
+107209A18:lI98|H10720CC78
+10720CC78:lI111|H10720FE88
+10720FE88:lI97|H107213108
+107213108:lI114|H1072164C0
+1072164C0:lI100|H107219A70
+107219A70:lI46|H10721D090
+10721D090:lI98|H107220660
+107220660:lI101|H107223998
+107223998:lI97|H1072269C0
+1072269C0:lI109|N
+1071F4F20:lH1071F7758|N
+1071F7758:lI119|H1071FA3B0
+1071FA3B0:lI120|H1071FD2F0
+1071FD2F0:lI77|H1072003A8
+1072003A8:lI101|H107203550
+107203550:lI110|H107206780
+107206780:lI117|H107209A28
+107209A28:lI69|H10720CC88
+10720CC88:lI118|H10720FE98
+10720FE98:lI101|H107213118
+107213118:lI110|H1072164D0
+1072164D0:lI116|H107219A80
+107219A80:lI46|H10721D0A0
+10721D0A0:lI98|H107220670
+107220670:lI101|H1072239A8
+1072239A8:lI97|H1072269D0
+1072269D0:lI109|N
+1071F2AC8:Mn2:H1071F4EF0,H1071F4F00
+1071F4EF0:lH1071F7728|N
+1071F7728:lI119|H1071FA380
+1071FA380:lI120|H1071FD2C0
+1071FD2C0:lI67|H107200378
+107200378:lI108|H107203520
+107203520:lI111|H107206750
+107206750:lI115|H1072099F8
+1072099F8:lI101|H10720CC58
+10720CC58:lI69|H10720FE68
+10720FE68:lI118|H1072130E8
+1072130E8:lI101|H1072164A0
+1072164A0:lI110|H107219A50
+107219A50:lI116|H10721D070
+10721D070:lI46|H107220640
+107220640:lI98|H107223978
+107223978:lI101|H1072269A0
+1072269A0:lI97|H107229618
+107229618:lI109|N
+1071F4F00:lH1071F7738|N
+1071F7738:lI119|H1071FA390
+1071FA390:lI120|H1071FD2D0
+1071FD2D0:lI83|H107200388
+107200388:lI112|H107203530
+107203530:lI105|H107206760
+107206760:lI110|H107209A08
+107209A08:lI69|H10720CC68
+10720CC68:lI118|H10720FE78
+10720FE78:lI101|H1072130F8
+1072130F8:lI110|H1072164B0
+1072164B0:lI116|H107219A60
+107219A60:lI46|H10721D080
+10721D080:lI98|H107220650
+107220650:lI101|H107223988
+107223988:lI97|H1072269B0
+1072269B0:lI109|N
+1071F2AB0:Mn2:H1071F4ED0,H1071F4EE0
+1071F4ED0:lH1071F7708|N
+1071F7708:lI119|H1071FA360
+1071FA360:lI120|H1071FD2A0
+1071FD2A0:lI83|H107200358
+107200358:lI97|H107203500
+107203500:lI115|H107206730
+107206730:lI104|H1072099D8
+1072099D8:lI76|H10720CC38
+10720CC38:lI97|H10720FE48
+10720FE48:lI121|H1072130C8
+1072130C8:lI111|H107216480
+107216480:lI117|H107219A30
+107219A30:lI116|H10721D050
+10721D050:lI87|H107220620
+107220620:lI105|H107223958
+107223958:lI110|H107226990
+107226990:lI100|H107229608
+107229608:lI111|H10722BED0
+10722BED0:lI119|H10722E4D8
+10722E4D8:lI46|H107230800
+107230800:lI98|H1072328D8
+1072328D8:lI101|H107234680
+107234680:lI97|H107236128
+107236128:lI109|N
+1071F4EE0:lH1071F7718|N
+1071F7718:lI119|H1071FA370
+1071FA370:lI120|H1071FD2B0
+1071FD2B0:lI66|H107200368
+107200368:lI111|H107203510
+107203510:lI120|H107206740
+107206740:lI83|H1072099E8
+1072099E8:lI105|H10720CC48
+10720CC48:lI122|H10720FE58
+10720FE58:lI101|H1072130D8
+1072130D8:lI114|H107216490
+107216490:lI46|H107219A40
+107219A40:lI98|H10721D060
+10721D060:lI101|H107220630
+107220630:lI97|H107223968
+107223968:lI109|N
+1071F1000:Mn9:H1071F29E0,H1071F29F0,H1071F2A08,H1071F2A18,H1071F2A28,H1071F2A48,H1071F2A58,H1071F2A68,H1071F2A78
+1071F29E0:lH1071F4DD0|N
+1071F4DD0:lI119|H1071F7608
+1071F7608:lI120|H1071FA260
+1071FA260:lI80|H1071FD1A0
+1071FD1A0:lI105|H107200258
+107200258:lI99|H107203400
+107203400:lI107|H107206630
+107206630:lI101|H1072098D8
+1072098D8:lI114|H10720CB38
+10720CB38:lI66|H10720FD48
+10720FD48:lI97|H107212FC8
+107212FC8:lI115|H107216380
+107216380:lI101|H107219930
+107219930:lI46|H10721CF70
+10721CF70:lI98|H107220550
+107220550:lI101|H107223898
+107223898:lI97|H1072268D0
+1072268D0:lI109|N
+1071F2A78:Mn3:H1071F4E80,H1071F4E90,H1071F4EA0
+1071F4E80:lH1071F76B8|N
+1071F76B8:lI119|H1071FA310
+1071FA310:lI120|H1071FD250
+1071FD250:lI71|H107200308
+107200308:lI114|H1072034B0
+1072034B0:lI105|H1072066E0
+1072066E0:lI100|H107209988
+107209988:lI67|H10720CBE8
+10720CBE8:lI101|H10720FDF8
+10720FDF8:lI108|H107213078
+107213078:lI108|H107216430
+107216430:lI69|H1072199E0
+1072199E0:lI100|H10721D010
+10721D010:lI105|H1072205E0
+1072205E0:lI116|H107223918
+107223918:lI111|H107226950
+107226950:lI114|H1072295C8
+1072295C8:lI46|H10722BEA0
+10722BEA0:lI98|H10722E4A8
+10722E4A8:lI101|H1072307D0
+1072307D0:lI97|H1072328A8
+1072328A8:lI109|N
+1071F4EA0:lH1071F76D8|N
+1071F76D8:lI119|H1071FA330
+1071FA330:lI120|H1071FD270
+1071FD270:lI71|H107200328
+107200328:lI114|H1072034D0
+1072034D0:lI105|H107206700
+107206700:lI100|H1072099A8
+1072099A8:lI67|H10720CC08
+10720CC08:lI101|H10720FE18
+10720FE18:lI108|H107213098
+107213098:lI108|H107216450
+107216450:lI83|H107219A00
+107219A00:lI116|H10721D030
+10721D030:lI114|H107220600
+107220600:lI105|H107223938
+107223938:lI110|H107226970
+107226970:lI103|H1072295E8
+1072295E8:lI82|H10722BEC0
+10722BEC0:lI101|H10722E4C8
+10722E4C8:lI110|H1072307F0
+1072307F0:lI100|H1072328C8
+1072328C8:lI101|H107234670
+107234670:lI114|H107236118
+107236118:lI101|H107237980
+107237980:lI114|H107238FD8
+107238FD8:lI46|H10723A470
+10723A470:lI98|H10723B790
+10723B790:lI101|H10723C840
+10723C840:lI97|H10723D6D0
+10723D6D0:lI109|N
+1071F4E90:lH1071F76C8|N
+1071F76C8:lI119|H1071FA320
+1071FA320:lI120|H1071FD260
+1071FD260:lI83|H107200318
+107200318:lI116|H1072034C0
+1072034C0:lI121|H1072066F0
+1072066F0:lI108|H107209998
+107209998:lI101|H10720CBF8
+10720CBF8:lI100|H10720FE08
+10720FE08:lI84|H107213088
+107213088:lI101|H107216440
+107216440:lI120|H1072199F0
+1072199F0:lI116|H10721D020
+10721D020:lI69|H1072205F0
+1072205F0:lI118|H107223928
+107223928:lI101|H107226960
+107226960:lI110|H1072295D8
+1072295D8:lI116|H10722BEB0
+10722BEB0:lI46|H10722E4B8
+10722E4B8:lI98|H1072307E0
+1072307E0:lI101|H1072328B8
+1072328B8:lI97|H107234660
+107234660:lI109|N
+1071F2A68:lH1071F4E70|N
+1071F4E70:lI119|H1071F76A8
+1071F76A8:lI120|H1071FA300
+1071FA300:lI83|H1071FD240
+1071FD240:lI105|H1072002F8
+1072002F8:lI122|H1072034A0
+1072034A0:lI101|H1072066D0
+1072066D0:lI114|H107209978
+107209978:lI70|H10720CBD8
+10720CBD8:lI108|H10720FDE8
+10720FDE8:lI97|H107213068
+107213068:lI103|H107216420
+107216420:lI115|H1072199D0
+1072199D0:lI46|H10721D000
+10721D000:lI98|H1072205D0
+1072205D0:lI101|H107223908
+107223908:lI97|H107226940
+107226940:lI109|N
+1071F2A58:lH1071F4E60|N
+1071F4E60:lI119|H1071F7698
+1071F7698:lI120|H1071FA2F0
+1071FA2F0:lI77|H1071FD230
+1071FD230:lI117|H1072002E8
+1072002E8:lI108|H107203490
+107203490:lI116|H1072066C0
+1072066C0:lI105|H107209968
+107209968:lI67|H10720CBC8
+10720CBC8:lI104|H10720FDD8
+10720FDD8:lI111|H107213058
+107213058:lI105|H107216410
+107216410:lI99|H1072199C0
+1072199C0:lI101|H10721CFF0
+10721CFF0:lI68|H1072205C0
+1072205C0:lI105|H1072238F8
+1072238F8:lI97|H107226930
+107226930:lI108|H1072295B8
+1072295B8:lI111|H10722BE90
+10722BE90:lI103|H10722E498
+10722E498:lI46|H1072307C0
+1072307C0:lI98|H107232898
+107232898:lI101|H107234650
+107234650:lI97|H107236108
+107236108:lI109|N
+1071F2A48:lH1071F4E50|N
+1071F4E50:lI119|H1071F7688
+1071F7688:lI120|H1071FA2E0
+1071FA2E0:lI67|H1071FD220
+1071FD220:lI111|H1072002D8
+1072002D8:lI109|H107203480
+107203480:lI98|H1072066B0
+1072066B0:lI111|H107209958
+107209958:lI66|H10720CBB8
+10720CBB8:lI111|H10720FDC8
+10720FDC8:lI120|H107213048
+107213048:lI46|H107216400
+107216400:lI98|H1072199B0
+1072199B0:lI101|H10721CFE0
+10721CFE0:lI97|H1072205B0
+1072205B0:lI109|N
+1071F2A28:Mn3:H1071F4E20,H1071F4E30,H1071F4E40
+1071F4E20:lH1071F7658|N
+1071F7658:lI119|H1071FA2B0
+1071FA2B0:lI120|H1071FD1F0
+1071FD1F0:lI80|H1072002A8
+1072002A8:lI97|H107203450
+107203450:lI115|H107206680
+107206680:lI115|H107209928
+107209928:lI119|H10720CB88
+10720CB88:lI111|H10720FD98
+10720FD98:lI114|H107213018
+107213018:lI100|H1072163D0
+1072163D0:lI69|H107219980
+107219980:lI110|H10721CFB0
+10721CFB0:lI116|H107220580
+107220580:lI114|H1072238C8
+1072238C8:lI121|H107226900
+107226900:lI68|H107229588
+107229588:lI105|H10722BE60
+10722BE60:lI97|H10722E478
+10722E478:lI108|H1072307A0
+1072307A0:lI111|H107232878
+107232878:lI103|H107234630
+107234630:lI46|H1072360E8
+1072360E8:lI98|H107237960
+107237960:lI101|H107238FB8
+107238FB8:lI97|H10723A460
+10723A460:lI109|N
+1071F4E40:lH1071F7678|N
+1071F7678:lI119|H1071FA2D0
+1071FA2D0:lI120|H1071FD210
+1071FD210:lI65|H1072002C8
+1072002C8:lI114|H107203470
+107203470:lI116|H1072066A0
+1072066A0:lI80|H107209948
+107209948:lI114|H10720CBA8
+10720CBA8:lI111|H10720FDB8
+10720FDB8:lI118|H107213038
+107213038:lI105|H1072163F0
+1072163F0:lI100|H1072199A0
+1072199A0:lI101|H10721CFD0
+10721CFD0:lI114|H1072205A0
+1072205A0:lI46|H1072238E8
+1072238E8:lI98|H107226920
+107226920:lI101|H1072295A8
+1072295A8:lI97|H10722BE80
+10722BE80:lI109|N
+1071F4E30:lH1071F7668|N
+1071F7668:lI119|H1071FA2C0
+1071FA2C0:lI120|H1071FD200
+1071FD200:lI83|H1072002B8
+1072002B8:lI105|H107203460
+107203460:lI110|H107206690
+107206690:lI103|H107209938
+107209938:lI108|H10720CB98
+10720CB98:lI101|H10720FDA8
+10720FDA8:lI67|H107213028
+107213028:lI104|H1072163E0
+1072163E0:lI111|H107219990
+107219990:lI105|H10721CFC0
+10721CFC0:lI99|H107220590
+107220590:lI101|H1072238D8
+1072238D8:lI68|H107226910
+107226910:lI105|H107229598
+107229598:lI97|H10722BE70
+10722BE70:lI108|H10722E488
+10722E488:lI111|H1072307B0
+1072307B0:lI103|H107232888
+107232888:lI46|H107234640
+107234640:lI98|H1072360F8
+1072360F8:lI101|H107237970
+107237970:lI97|H107238FC8
+107238FC8:lI109|N
+1071F2A18:lH1071F4E10|N
+1071F4E10:lI119|H1071F7648
+1071F7648:lI120|H1071FA2A0
+1071FA2A0:lI95|H1071FD1E0
+1071FD1E0:lI111|H107200298
+107200298:lI98|H107203440
+107203440:lI106|H107206670
+107206670:lI101|H107209918
+107209918:lI99|H10720CB78
+10720CB78:lI116|H10720FD88
+10720FD88:lI46|H107213008
+107213008:lI98|H1072163C0
+1072163C0:lI101|H107219970
+107219970:lI97|H10721CFA0
+10721CFA0:lI109|N
+1071F2A08:lH1071F4E00|N
+1071F4E00:lI119|H1071F7638
+1071F7638:lI120|H1071FA290
+1071FA290:lI65|H1071FD1D0
+1071FD1D0:lI99|H107200288
+107200288:lI99|H107203430
+107203430:lI101|H107206660
+107206660:lI108|H107209908
+107209908:lI101|H10720CB68
+10720CB68:lI114|H10720FD78
+10720FD78:lI97|H107212FF8
+107212FF8:lI116|H1072163B0
+1072163B0:lI111|H107219960
+107219960:lI114|H10721CF90
+10721CF90:lI69|H107220570
+107220570:lI110|H1072238B8
+1072238B8:lI116|H1072268F0
+1072268F0:lI114|H107229578
+107229578:lI121|H10722BE50
+10722BE50:lI46|H10722E468
+10722E468:lI98|H107230790
+107230790:lI101|H107232868
+107232868:lI97|H107234620
+107234620:lI109|N
+1071F29F0:Mn2:H1071F4DE0,H1071F4DF0
+1071F4DE0:lH1071F7618|N
+1071F7618:lI119|H1071FA270
+1071FA270:lI120|H1071FD1B0
+1071FD1B0:lI70|H107200268
+107200268:lI114|H107203410
+107203410:lI97|H107206640
+107206640:lI109|H1072098E8
+1072098E8:lI101|H10720CB48
+10720CB48:lI46|H10720FD58
+10720FD58:lI98|H107212FD8
+107212FD8:lI101|H107216390
+107216390:lI97|H107219940
+107219940:lI109|N
+1071F4DF0:lH1071F7628|N
+1071F7628:lI119|H1071FA280
+1071FA280:lI120|H1071FD1C0
+1071FD1C0:lI67|H107200278
+107200278:lI104|H107203420
+107203420:lI105|H107206650
+107206650:lI108|H1072098F8
+1072098F8:lI100|H10720CB58
+10720CB58:lI70|H10720FD68
+10720FD68:lI111|H107212FE8
+107212FE8:lI99|H1072163A0
+1072163A0:lI117|H107219950
+107219950:lI115|H10721CF80
+10721CF80:lI69|H107220560
+107220560:lI118|H1072238A8
+1072238A8:lI101|H1072268E0
+1072268E0:lI110|H107229568
+107229568:lI116|H10722BE40
+10722BE40:lI46|H10722E458
+10722E458:lI98|H107230780
+107230780:lI101|H107232858
+107232858:lI97|H107234610
+107234610:lI109|N
+1071F0FA0:MnB:H1071F28F8,H1071F2908,H1071F2918,H1071F2928,H1071F2938,H1071F2948,H1071F2978,H1071F2990,H1071F29A0,H1071F29B8,H1071F29D0
+1071F28F8:lH1071F4CA8|N
+1071F4CA8:lI119|H1071F74D8
+1071F74D8:lI120|H1071FA130
+1071FA130:lI71|H1071FD070
+1071FD070:lI76|H107200128
+107200128:lI67|H1072032D0
+1072032D0:lI111|H107206500
+107206500:lI110|H1072097B8
+1072097B8:lI116|H10720CA18
+10720CA18:lI101|H10720FC28
+10720FC28:lI120|H107212EA8
+107212EA8:lI116|H107216260
+107216260:lI46|H107219810
+107219810:lI98|H10721CE50
+10721CE50:lI101|H107220440
+107220440:lI97|H1072237B8
+1072237B8:lI109|N
+1071F29D0:lH1071F4DC0|N
+1071F4DC0:lI119|H1071F75F8
+1071F75F8:lI120|H1071FA250
+1071FA250:lI78|H1071FD190
+1071FD190:lI111|H107200248
+107200248:lI116|H1072033F0
+1072033F0:lI101|H107206620
+107206620:lI98|H1072098C8
+1072098C8:lI111|H10720CB28
+10720CB28:lI111|H10720FD38
+10720FD38:lI107|H107212FB8
+107212FB8:lI46|H107216370
+107216370:lI98|H107219920
+107219920:lI101|H10721CF60
+10721CF60:lI97|H107220540
+107220540:lI109|N
+1071F29B8:Mn2:H1071F4DA0,H1071F4DB0
+1071F4DA0:lH1071F75D8|N
+1071F75D8:lI119|H1071FA230
+1071FA230:lI120|H1071FD170
+1071FD170:lI76|H107200228
+107200228:lI105|H1072033D0
+1072033D0:lI115|H107206600
+107206600:lI116|H1072098A8
+1072098A8:lI69|H10720CB08
+10720CB08:lI118|H10720FD18
+10720FD18:lI101|H107212F98
+107212F98:lI110|H107216350
+107216350:lI116|H107219900
+107219900:lI46|H10721CF40
+10721CF40:lI98|H107220520
+107220520:lI101|H107223878
+107223878:lI97|H1072268B0
+1072268B0:lI109|N
+1071F4DB0:lH1071F75E8|N
+1071F75E8:lI119|H1071FA240
+1071FA240:lI120|H1071FD180
+1071FD180:lI65|H107200238
+107200238:lI117|H1072033E0
+1072033E0:lI105|H107206610
+107206610:lI77|H1072098B8
+1072098B8:lI97|H10720CB18
+10720CB18:lI110|H10720FD28
+10720FD28:lI97|H107212FA8
+107212FA8:lI103|H107216360
+107216360:lI101|H107219910
+107219910:lI114|H10721CF50
+10721CF50:lI46|H107220530
+107220530:lI98|H107223888
+107223888:lI101|H1072268C0
+1072268C0:lI97|H107229558
+107229558:lI109|N
+1071F29A0:Mn2:H1071F4D80,H1071F4D90
+1071F4D80:lH1071F75B8|N
+1071F75B8:lI119|H1071FA210
+1071FA210:lI120|H1071FD150
+1071FD150:lI87|H107200208
+107200208:lI105|H1072033B0
+1072033B0:lI110|H1072065E0
+1072065E0:lI100|H107209888
+107209888:lI111|H10720CAE8
+10720CAE8:lI119|H10720FCF8
+10720FCF8:lI46|H107212F78
+107212F78:lI98|H107216330
+107216330:lI101|H1072198E0
+1072198E0:lI97|H10721CF20
+10721CF20:lI109|N
+1071F4D90:lH1071F75C8|N
+1071F75C8:lI119|H1071FA220
+1071FA220:lI120|H1071FD160
+1071FD160:lI80|H107200218
+107200218:lI97|H1072033C0
+1072033C0:lI108|H1072065F0
+1072065F0:lI101|H107209898
+107209898:lI116|H10720CAF8
+10720CAF8:lI116|H10720FD08
+10720FD08:lI101|H107212F88
+107212F88:lI46|H107216340
+107216340:lI98|H1072198F0
+1072198F0:lI101|H10721CF30
+10721CF30:lI97|H107220510
+107220510:lI109|N
+1071F2990:lH1071F4D70|N
+1071F4D70:lI119|H1071F75A8
+1071F75A8:lI120|H1071FA200
+1071FA200:lI67|H1071FD140
+1071FD140:lI97|H1072001F8
+1072001F8:lI108|H1072033A0
+1072033A0:lI101|H1072065D0
+1072065D0:lI110|H107209878
+107209878:lI100|H10720CAD8
+10720CAD8:lI97|H10720FCE8
+10720FCE8:lI114|H107212F68
+107212F68:lI68|H107216320
+107216320:lI97|H1072198D0
+1072198D0:lI116|H10721CF10
+10721CF10:lI101|H107220500
+107220500:lI65|H107223868
+107223868:lI116|H1072268A0
+1072268A0:lI116|H107229548
+107229548:lI114|H10722BE30
+10722BE30:lI46|H10722E448
+10722E448:lI98|H107230770
+107230770:lI101|H107232848
+107232848:lI97|H107234600
+107234600:lI109|N
+1071F2978:Mn2:H1071F4D50,H1071F4D60
+1071F4D50:lH1071F7588|N
+1071F7588:lI119|H1071FA1E0
+1071FA1E0:lI120|H1071FD120
+1071FD120:lI84|H1072001D8
+1072001D8:lI101|H107203380
+107203380:lI120|H1072065B0
+1072065B0:lI116|H107209858
+107209858:lI69|H10720CAB8
+10720CAB8:lI110|H10720FCC8
+10720FCC8:lI116|H107212F48
+107212F48:lI114|H107216300
+107216300:lI121|H1072198B0
+1072198B0:lI68|H10721CEF0
+10721CEF0:lI105|H1072204E0
+1072204E0:lI97|H107223858
+107223858:lI108|H107226890
+107226890:lI111|H107229538
+107229538:lI103|H10722BE20
+10722BE20:lI46|H10722E438
+10722E438:lI98|H107230760
+107230760:lI101|H107232838
+107232838:lI97|H1072345F0
+1072345F0:lI109|N
+1071F4D60:lH1071F7598|N
+1071F7598:lI119|H1071FA1F0
+1071FA1F0:lI120|H1071FD130
+1071FD130:lI84|H1072001E8
+1072001E8:lI111|H107203390
+107203390:lI111|H1072065C0
+1072065C0:lI108|H107209868
+107209868:lI84|H10720CAC8
+10720CAC8:lI105|H10720FCD8
+10720FCD8:lI112|H107212F58
+107212F58:lI46|H107216310
+107216310:lI98|H1072198C0
+1072198C0:lI101|H10721CF00
+10721CF00:lI97|H1072204F0
+1072204F0:lI109|N
+1071F2948:Mn5:H1071F4CF8,H1071F4D10,H1071F4D20,H1071F4D30,H1071F4D40
+1071F4CF8:Mn2:H1071F7528,H1071F7538
+1071F7528:lH1071FA180|N
+1071FA180:lI119|H1071FD0C0
+1071FD0C0:lI120|H107200178
+107200178:lI83|H107203320
+107203320:lI116|H107206550
+107206550:lI100|H1072097F8
+1072097F8:lI68|H10720CA58
+10720CA58:lI105|H10720FC68
+10720FC68:lI97|H107212EE8
+107212EE8:lI108|H1072162A0
+1072162A0:lI111|H107219850
+107219850:lI103|H10721CE90
+10721CE90:lI66|H107220480
+107220480:lI117|H1072237F8
+1072237F8:lI116|H107226850
+107226850:lI116|H1072294F8
+1072294F8:lI111|H10722BE00
+10722BE00:lI110|H10722E418
+10722E418:lI83|H107230750
+107230750:lI105|H107232828
+107232828:lI122|H1072345E0
+1072345E0:lI101|H1072360D8
+1072360D8:lI114|H107237950
+107237950:lI46|H107238FA8
+107238FA8:lI98|H10723A450
+10723A450:lI101|H10723B780
+10723B780:lI97|H10723C830
+10723C830:lI109|N
+1071F7538:lH1071FA190|N
+1071FA190:lI119|H1071FD0D0
+1071FD0D0:lI120|H107200188
+107200188:lI83|H107203330
+107203330:lI116|H107206560
+107206560:lI97|H107209808
+107209808:lI116|H10720CA68
+10720CA68:lI105|H10720FC78
+10720FC78:lI99|H107212EF8
+107212EF8:lI66|H1072162B0
+1072162B0:lI111|H107219860
+107219860:lI120|H10721CEA0
+10721CEA0:lI46|H107220490
+107220490:lI98|H107223808
+107223808:lI101|H107226860
+107226860:lI97|H107229508
+107229508:lI109|N
+1071F4D40:lH1071F7578|N
+1071F7578:lI119|H1071FA1D0
+1071FA1D0:lI120|H1071FD110
+1071FD110:lI73|H1072001C8
+1072001C8:lI99|H107203370
+107203370:lI111|H1072065A0
+1072065A0:lI110|H107209848
+107209848:lI66|H10720CAA8
+10720CAA8:lI117|H10720FCB8
+10720FCB8:lI110|H107212F38
+107212F38:lI100|H1072162F0
+1072162F0:lI108|H1072198A0
+1072198A0:lI101|H10721CEE0
+10721CEE0:lI46|H1072204D0
+1072204D0:lI98|H107223848
+107223848:lI101|H107226880
+107226880:lI97|H107229528
+107229528:lI109|N
+1071F4D30:lH1071F7568|N
+1071F7568:lI119|H1071FA1C0
+1071FA1C0:lI120|H1071FD100
+1071FD100:lI84|H1072001B8
+1072001B8:lI114|H107203360
+107203360:lI101|H107206590
+107206590:lI101|H107209838
+107209838:lI67|H10720CA98
+10720CA98:lI116|H10720FCA8
+10720FCA8:lI114|H107212F28
+107212F28:lI108|H1072162E0
+1072162E0:lI46|H107219890
+107219890:lI98|H10721CED0
+10721CED0:lI101|H1072204C0
+1072204C0:lI97|H107223838
+107223838:lI109|N
+1071F4D20:lH1071F7558|N
+1071F7558:lI119|H1071FA1B0
+1071FA1B0:lI120|H1071FD0F0
+1071FD0F0:lI67|H1072001A8
+1072001A8:lI97|H107203350
+107203350:lI108|H107206580
+107206580:lI101|H107209828
+107209828:lI110|H10720CA88
+10720CA88:lI100|H10720FC98
+10720FC98:lI97|H107212F18
+107212F18:lI114|H1072162D0
+1072162D0:lI67|H107219880
+107219880:lI116|H10721CEC0
+10721CEC0:lI114|H1072204B0
+1072204B0:lI108|H107223828
+107223828:lI46|H107226870
+107226870:lI98|H107229518
+107229518:lI101|H10722BE10
+10722BE10:lI97|H10722E428
+10722E428:lI109|N
+1071F4D10:lH1071F7548|N
+1071F7548:lI119|H1071FA1A0
+1071FA1A0:lI120|H1071FD0E0
+1071FD0E0:lI82|H107200198
+107200198:lI97|H107203340
+107203340:lI100|H107206570
+107206570:lI105|H107209818
+107209818:lI111|H10720CA78
+10720CA78:lI66|H10720FC88
+10720FC88:lI111|H107212F08
+107212F08:lI120|H1072162C0
+1072162C0:lI46|H107219870
+107219870:lI98|H10721CEB0
+10721CEB0:lI101|H1072204A0
+1072204A0:lI97|H107223818
+107223818:lI109|N
+1071F2938:lH1071F4CE8|N
+1071F4CE8:lI119|H1071F7518
+1071F7518:lI120|H1071FA170
+1071FA170:lI84|H1071FD0B0
+1071FD0B0:lI97|H107200168
+107200168:lI115|H107203310
+107203310:lI107|H107206540
+107206540:lI66|H1072097E8
+1072097E8:lI97|H10720CA48
+10720CA48:lI114|H10720FC58
+10720FC58:lI73|H107212ED8
+107212ED8:lI99|H107216290
+107216290:lI111|H107219840
+107219840:lI110|H10721CE80
+10721CE80:lI69|H107220470
+107220470:lI118|H1072237E8
+1072237E8:lI101|H107226840
+107226840:lI110|H1072294E8
+1072294E8:lI116|H10722BDF0
+10722BDF0:lI46|H10722E408
+10722E408:lI98|H107230740
+107230740:lI101|H107232818
+107232818:lI97|H1072345D0
+1072345D0:lI109|N
+1071F2928:lH1071F4CD8|N
+1071F4CD8:lI119|H1071F7508
+1071F7508:lI120|H1071FA160
+1071FA160:lI70|H1071FD0A0
+1071FD0A0:lI105|H107200158
+107200158:lI108|H107203300
+107203300:lI101|H107206530
+107206530:lI80|H1072097D8
+1072097D8:lI105|H10720CA38
+10720CA38:lI99|H10720FC48
+10720FC48:lI107|H107212EC8
+107212EC8:lI101|H107216280
+107216280:lI114|H107219830
+107219830:lI67|H10721CE70
+10721CE70:lI116|H107220460
+107220460:lI114|H1072237D8
+1072237D8:lI108|H107226830
+107226830:lI46|H1072294D8
+1072294D8:lI98|H10722BDE0
+10722BDE0:lI101|H10722E3F8
+10722E3F8:lI97|H107230730
+107230730:lI109|N
+1071F2918:lH1071F4CC8|N
+1071F4CC8:lI119|H1071F74F8
+1071F74F8:lI120|H1071FA150
+1071FA150:lI80|H1071FD090
+1071FD090:lI97|H107200148
+107200148:lI105|H1072032F0
+1072032F0:lI110|H107206520
+107206520:lI116|H1072097C8
+1072097C8:lI69|H10720CA28
+10720CA28:lI118|H10720FC38
+10720FC38:lI101|H107212EB8
+107212EB8:lI110|H107216270
+107216270:lI116|H107219820
+107219820:lI46|H10721CE60
+10721CE60:lI98|H107220450
+107220450:lI101|H1072237C8
+1072237C8:lI97|H107226820
+107226820:lI109|N
+1071F2908:lH1071F4CB8|N
+1071F4CB8:lI103|H1071F74E8
+1071F74E8:lI108|H1071FA140
+1071FA140:lI46|H1071FD080
+1071FD080:lI98|H107200138
+107200138:lI101|H1072032E0
+1072032E0:lI97|H107206510
+107206510:lI109|N
+1071F0F50:Mn9:H1071F2858,H1071F2868,H1071F2878,H1071F2890,H1071F28A0,H1071F28B0,H1071F28C8,H1071F28D8,H1071F28E8
+1071F2858:lH1071F4BF8|N
+1071F4BF8:lI119|H1071F7428
+1071F7428:lI120|H1071FA080
+1071FA080:lI70|H1071FCFC0
+1071FCFC0:lI111|H107200078
+107200078:lI110|H107203220
+107203220:lI116|H107206450
+107206450:lI80|H107209708
+107209708:lI105|H10720C968
+10720C968:lI99|H10720FB78
+10720FB78:lI107|H107212E08
+107212E08:lI101|H1072161C0
+1072161C0:lI114|H107219780
+107219780:lI67|H10721CDD0
+10721CDD0:lI116|H1072203D0
+1072203D0:lI114|H107223758
+107223758:lI108|H1072267D0
+1072267D0:lI46|H107229488
+107229488:lI98|H10722BD90
+10722BD90:lI101|H10722E3A8
+10722E3A8:lI97|H1072306F0
+1072306F0:lI109|N
+1071F28E8:lH1071F4C98|N
+1071F4C98:lI119|H1071F74C8
+1071F74C8:lI120|H1071FA120
+1071FA120:lI76|H1071FD060
+1071FD060:lI105|H107200118
+107200118:lI115|H1072032C0
+1072032C0:lI116|H1072064F0
+1072064F0:lI66|H1072097A8
+1072097A8:lI111|H10720CA08
+10720CA08:lI120|H10720FC18
+10720FC18:lI46|H107212E98
+107212E98:lI98|H107216250
+107216250:lI101|H107219800
+107219800:lI97|H10721CE40
+10721CE40:lI109|N
+1071F28D8:lH1071F4C88|N
+1071F4C88:lI119|H1071F74B8
+1071F74B8:lI120|H1071FA110
+1071FA110:lI83|H1071FD050
+1071FD050:lI104|H107200108
+107200108:lI111|H1072032B0
+1072032B0:lI119|H1072064E0
+1072064E0:lI69|H107209798
+107209798:lI118|H10720C9F8
+10720C9F8:lI101|H10720FC08
+10720FC08:lI110|H107212E88
+107212E88:lI116|H107216240
+107216240:lI46|H1072197F0
+1072197F0:lI98|H10721CE30
+10721CE30:lI101|H107220430
+107220430:lI97|H1072237A8
+1072237A8:lI109|N
+1071F28C8:lH1071F4C78|N
+1071F4C78:lI119|H1071F74A8
+1071F74A8:lI120|H1071FA100
+1071FA100:lI71|H1071FD040
+1071FD040:lI114|H1072000F8
+1072000F8:lI105|H1072032A0
+1072032A0:lI100|H1072064D0
+1072064D0:lI67|H107209788
+107209788:lI101|H10720C9E8
+10720C9E8:lI108|H10720FBF8
+10720FBF8:lI108|H107212E78
+107212E78:lI66|H107216230
+107216230:lI111|H1072197E0
+1072197E0:lI111|H10721CE20
+10721CE20:lI108|H107220420
+107220420:lI69|H107223798
+107223798:lI100|H107226810
+107226810:lI105|H1072294C8
+1072294C8:lI116|H10722BDD0
+10722BDD0:lI111|H10722E3E8
+10722E3E8:lI114|H107230720
+107230720:lI46|H107232808
+107232808:lI98|H1072345C0
+1072345C0:lI101|H1072360C8
+1072360C8:lI97|H107237940
+107237940:lI109|N
+1071F28B0:Mn2:H1071F4C58,H1071F4C68
+1071F4C58:lH1071F7488|N
+1071F7488:lI119|H1071FA0E0
+1071FA0E0:lI120|H1071FD020
+1071FD020:lI77|H1072000D8
+1072000D8:lI68|H107203280
+107203280:lI73|H1072064B0
+1072064B0:lI67|H107209768
+107209768:lI108|H10720C9C8
+10720C9C8:lI105|H10720FBD8
+10720FBD8:lI101|H107212E58
+107212E58:lI110|H107216210
+107216210:lI116|H1072197C0
+1072197C0:lI87|H10721CE00
+10721CE00:lI105|H107220400
+107220400:lI110|H107223788
+107223788:lI100|H107226800
+107226800:lI111|H1072294B8
+1072294B8:lI119|H10722BDC0
+10722BDC0:lI46|H10722E3D8
+10722E3D8:lI98|H107230710
+107230710:lI101|H1072327F8
+1072327F8:lI97|H1072345B0
+1072345B0:lI109|N
+1071F4C68:lH1071F7498|N
+1071F7498:lI119|H1071FA0F0
+1071FA0F0:lI120|H1071FD030
+1071FD030:lI68|H1072000E8
+1072000E8:lI105|H107203290
+107203290:lI115|H1072064C0
+1072064C0:lI112|H107209778
+107209778:lI108|H10720C9D8
+10720C9D8:lI97|H10720FBE8
+10720FBE8:lI121|H107212E68
+107212E68:lI46|H107216220
+107216220:lI98|H1072197D0
+1072197D0:lI101|H10721CE10
+10721CE10:lI97|H107220410
+107220410:lI109|N
+1071F28A0:lH1071F4C48|N
+1071F4C48:lI119|H1071F7478
+1071F7478:lI120|H1071FA0D0
+1071FA0D0:lI66|H1071FD010
+1071FD010:lI105|H1072000C8
+1072000C8:lI116|H107203270
+107203270:lI109|H1072064A0
+1072064A0:lI97|H107209758
+107209758:lI112|H10720C9B8
+10720C9B8:lI46|H10720FBC8
+10720FBC8:lI98|H107212E48
+107212E48:lI101|H107216200
+107216200:lI97|H1072197B0
+1072197B0:lI109|N
+1071F2890:lH1071F4C38|N
+1071F4C38:lI119|H1071F7468
+1071F7468:lI120|H1071FA0C0
+1071FA0C0:lI80|H1071FD000
+1071FD000:lI101|H1072000B8
+1072000B8:lI110|H107203260
+107203260:lI46|H107206490
+107206490:lI98|H107209748
+107209748:lI101|H10720C9A8
+10720C9A8:lI97|H10720FBB8
+10720FBB8:lI109|N
+1071F2878:Mn2:H1071F4C18,H1071F4C28
+1071F4C18:lH1071F7448|N
+1071F7448:lI119|H1071FA0A0
+1071FA0A0:lI120|H1071FCFE0
+1071FCFE0:lI71|H107200098
+107200098:lI114|H107203240
+107203240:lI97|H107206470
+107206470:lI112|H107209728
+107209728:lI104|H10720C988
+10720C988:lI105|H10720FB98
+10720FB98:lI99|H107212E28
+107212E28:lI115|H1072161E0
+1072161E0:lI67|H1072197A0
+1072197A0:lI111|H10721CDF0
+10721CDF0:lI110|H1072203F0
+1072203F0:lI116|H107223778
+107223778:lI101|H1072267F0
+1072267F0:lI120|H1072294A8
+1072294A8:lI116|H10722BDB0
+10722BDB0:lI46|H10722E3C8
+10722E3C8:lI98|H107230700
+107230700:lI101|H1072327E8
+1072327E8:lI97|H1072345A0
+1072345A0:lI109|N
+1071F4C28:lH1071F7458|N
+1071F7458:lI119|H1071FA0B0
+1071FA0B0:lI120|H1071FCFF0
+1071FCFF0:lI77|H1072000A8
+1072000A8:lI97|H107203250
+107203250:lI115|H107206480
+107206480:lI107|H107209738
+107209738:lI46|H10720C998
+10720C998:lI98|H10720FBA8
+10720FBA8:lI101|H107212E38
+107212E38:lI97|H1072161F0
+1072161F0:lI109|N
+1071F2868:lH1071F4C08|N
+1071F4C08:lI119|H1071F7438
+1071F7438:lI120|H1071FA090
+1071FA090:lI83|H1071FCFD0
+1071FCFD0:lI112|H107200088
+107200088:lI108|H107203230
+107203230:lI105|H107206460
+107206460:lI116|H107209718
+107209718:lI116|H10720C978
+10720C978:lI101|H10720FB88
+10720FB88:lI114|H107212E18
+107212E18:lI69|H1072161D0
+1072161D0:lI118|H107219790
+107219790:lI101|H10721CDE0
+10721CDE0:lI110|H1072203E0
+1072203E0:lI116|H107223768
+107223768:lI46|H1072267E0
+1072267E0:lI98|H107229498
+107229498:lI101|H10722BDA0
+10722BDA0:lI97|H10722E3B8
+10722E3B8:lI109|N
+1071F0EF8:MnA:H1071F27A8,H1071F27C0,H1071F27D0,H1071F27E8,H1071F27F8,H1071F2808,H1071F2818,H1071F2828,H1071F2838,H1071F2848
+1071F27A8:Mn2:H1071F4B30,H1071F4B40
+1071F4B30:lH1071F7358|N
+1071F7358:lI119|H1071F9FB0
+1071F9FB0:lI120|H1071FCEF0
+1071FCEF0:lI72|H1071FFFA8
+1071FFFA8:lI116|H107203150
+107203150:lI109|H107206380
+107206380:lI108|H107209638
+107209638:lI87|H10720C898
+10720C898:lI105|H10720FAA8
+10720FAA8:lI110|H107212D38
+107212D38:lI100|H1072160F0
+1072160F0:lI111|H1072196C0
+1072196C0:lI119|H10721CD30
+10721CD30:lI46|H107220330
+107220330:lI98|H1072236D8
+1072236D8:lI101|H107226750
+107226750:lI97|H107229418
+107229418:lI109|N
+1071F4B40:lH1071F7368|N
+1071F7368:lI119|H1071F9FC0
+1071F9FC0:lI120|H1071FCF00
+1071FCF00:lI67|H1071FFFB8
+1071FFFB8:lI97|H107203160
+107203160:lI114|H107206390
+107206390:lI101|H107209648
+107209648:lI116|H10720C8A8
+10720C8A8:lI46|H10720FAB8
+10720FAB8:lI98|H107212D48
+107212D48:lI101|H107216100
+107216100:lI97|H1072196D0
+1072196D0:lI109|N
+1071F2848:lH1071F4BE8|N
+1071F4BE8:lI119|H1071F7418
+1071F7418:lI120|H1071FA070
+1071FA070:lI101|H1071FCFB0
+1071FCFB0:lI95|H107200068
+107200068:lI109|H107203210
+107203210:lI97|H107206440
+107206440:lI115|H1072096F8
+1072096F8:lI116|H10720C958
+10720C958:lI101|H10720FB68
+10720FB68:lI114|H107212DF8
+107212DF8:lI46|H1072161B0
+1072161B0:lI98|H107219770
+107219770:lI101|H10721CDC0
+10721CDC0:lI97|H1072203C0
+1072203C0:lI109|N
+1071F2838:Mn1:H1071F4BD0
+1071F4BD0:Mn2:H1071F73F8,H1071F7408
+1071F73F8:lH1071FA050|N
+1071FA050:lI119|H1071FCF90
+1071FCF90:lI120|H107200048
+107200048:lI65|H1072031F0
+1072031F0:lI117|H107206420
+107206420:lI105|H1072096D8
+1072096D8:lI78|H10720C938
+10720C938:lI111|H10720FB48
+10720FB48:lI116|H107212DD8
+107212DD8:lI101|H107216190
+107216190:lI98|H107219750
+107219750:lI111|H10721CDA0
+10721CDA0:lI111|H1072203A0
+1072203A0:lI107|H107223738
+107223738:lI46|H1072267B0
+1072267B0:lI98|H107229468
+107229468:lI101|H10722BD70
+10722BD70:lI97|H10722E388
+10722E388:lI109|N
+1071F7408:lH1071FA060|N
+1071FA060:lI119|H1071FCFA0
+1071FCFA0:lI120|H107200058
+107200058:lI85|H107203200
+107203200:lI112|H107206430
+107206430:lI100|H1072096E8
+1072096E8:lI97|H10720C948
+10720C948:lI116|H10720FB58
+10720FB58:lI101|H107212DE8
+107212DE8:lI85|H1072161A0
+1072161A0:lI73|H107219760
+107219760:lI69|H10721CDB0
+10721CDB0:lI118|H1072203B0
+1072203B0:lI101|H107223748
+107223748:lI110|H1072267C0
+1072267C0:lI116|H107229478
+107229478:lI46|H10722BD80
+10722BD80:lI98|H10722E398
+10722E398:lI101|H1072306E0
+1072306E0:lI97|H1072327D8
+1072327D8:lI109|N
+1071F2828:lH1071F4BC0|N
+1071F4BC0:lI119|H1071F73E8
+1071F73E8:lI120|H1071FA040
+1071FA040:lI101|H1071FCF80
+1071FCF80:lI95|H107200038
+107200038:lI115|H1072031E0
+1072031E0:lI101|H107206410
+107206410:lI114|H1072096C8
+1072096C8:lI118|H10720C928
+10720C928:lI101|H10720FB38
+10720FB38:lI114|H107212DC8
+107212DC8:lI46|H107216180
+107216180:lI98|H107219740
+107219740:lI101|H10721CD90
+10721CD90:lI97|H107220390
+107220390:lI109|N
+1071F2818:lH1071F4BB0|N
+1071F4BB0:lI119|H1071F73D8
+1071F73D8:lI120|H1071FA030
+1071FA030:lI67|H1071FCF70
+1071FCF70:lI111|H107200028
+107200028:lI109|H1072031D0
+1072031D0:lI109|H107206400
+107206400:lI97|H1072096B8
+1072096B8:lI110|H10720C918
+10720C918:lI100|H10720FB28
+10720FB28:lI69|H107212DB8
+107212DB8:lI118|H107216170
+107216170:lI101|H107219730
+107219730:lI110|H10721CD80
+10721CD80:lI116|H107220380
+107220380:lI46|H107223728
+107223728:lI98|H1072267A0
+1072267A0:lI101|H107229458
+107229458:lI97|H10722BD60
+10722BD60:lI109|N
+1071F2808:lH1071F4BA0|N
+1071F4BA0:lI119|H1071F73C8
+1071F73C8:lI120|H1071FA020
+1071FA020:lI67|H1071FCF60
+1071FCF60:lI104|H107200018
+107200018:lI111|H1072031C0
+1072031C0:lI105|H1072063F0
+1072063F0:lI99|H1072096A8
+1072096A8:lI101|H10720C908
+10720C908:lI46|H10720FB18
+10720FB18:lI98|H107212DA8
+107212DA8:lI101|H107216160
+107216160:lI97|H107219720
+107219720:lI109|N
+1071F27F8:lH1071F4B90|N
+1071F4B90:lI119|H1071F73B8
+1071F73B8:lI120|H1071FA010
+1071FA010:lI71|H1071FCF50
+1071FCF50:lI114|H107200008
+107200008:lI105|H1072031B0
+1072031B0:lI100|H1072063E0
+1072063E0:lI66|H107209698
+107209698:lI97|H10720C8F8
+10720C8F8:lI103|H10720FB08
+10720FB08:lI83|H107212D98
+107212D98:lI105|H107216150
+107216150:lI122|H107219710
+107219710:lI101|H10721CD70
+10721CD70:lI114|H107220370
+107220370:lI46|H107223718
+107223718:lI98|H107226790
+107226790:lI101|H107229448
+107229448:lI97|H10722BD50
+10722BD50:lI109|N
+1071F27E8:lH1071F4B80|N
+1071F4B80:lI119|H1071F73A8
+1071F73A8:lI120|H1071FA000
+1071FA000:lI71|H1071FCF40
+1071FCF40:lI97|H1071FFFF8
+1071FFFF8:lI117|H1072031A0
+1072031A0:lI103|H1072063D0
+1072063D0:lI101|H107209688
+107209688:lI46|H10720C8E8
+10720C8E8:lI98|H10720FAF8
+10720FAF8:lI101|H107212D88
+107212D88:lI97|H107216140
+107216140:lI109|N
+1071F27D0:Mn2:H1071F4B60,H1071F4B70
+1071F4B60:lH1071F7388|N
+1071F7388:lI119|H1071F9FE0
+1071F9FE0:lI120|H1071FCF20
+1071FCF20:lI72|H1071FFFD8
+1071FFFD8:lI101|H107203180
+107203180:lI108|H1072063B0
+1072063B0:lI112|H107209668
+107209668:lI69|H10720C8C8
+10720C8C8:lI118|H10720FAD8
+10720FAD8:lI101|H107212D68
+107212D68:lI110|H107216120
+107216120:lI116|H1072196F0
+1072196F0:lI46|H10721CD50
+10721CD50:lI98|H107220350
+107220350:lI101|H1072236F8
+1072236F8:lI97|H107226770
+107226770:lI109|N
+1071F4B70:lH1071F7398|N
+1071F7398:lI119|H1071F9FF0
+1071F9FF0:lI120|H1071FCF30
+1071FCF30:lI67|H1071FFFE8
+1071FFFE8:lI104|H107203190
+107203190:lI101|H1072063C0
+1072063C0:lI99|H107209678
+107209678:lI107|H10720C8D8
+10720C8D8:lI76|H10720FAE8
+10720FAE8:lI105|H107212D78
+107212D78:lI115|H107216130
+107216130:lI116|H107219700
+107219700:lI66|H10721CD60
+10721CD60:lI111|H107220360
+107220360:lI120|H107223708
+107223708:lI46|H107226780
+107226780:lI98|H107229438
+107229438:lI101|H10722BD40
+10722BD40:lI97|H10722E378
+10722E378:lI109|N
+1071F27C0:lH1071F4B50|N
+1071F4B50:lI119|H1071F7378
+1071F7378:lI120|H1071F9FD0
+1071F9FD0:lI80|H1071FCF10
+1071FCF10:lI114|H1071FFFC8
+1071FFFC8:lI105|H107203170
+107203170:lI110|H1072063A0
+1072063A0:lI116|H107209658
+107209658:lI68|H10720C8B8
+10720C8B8:lI105|H10720FAC8
+10720FAC8:lI97|H107212D58
+107212D58:lI108|H107216110
+107216110:lI111|H1072196E0
+1072196E0:lI103|H10721CD40
+10721CD40:lI46|H107220340
+107220340:lI98|H1072236E8
+1072236E8:lI101|H107226760
+107226760:lI97|H107229428
+107229428:lI109|N
+1071F02B8:lI47|H1071F0E78
+1071F0E78:lI111|H1071F2698
+1071F2698:lI112|H1071F49F0
+1071F49F0:lI116|H1071F7218
+1071F7218:lI47|H1071F9E70
+1071F9E70:lI104|H1071FCDB0
+1071FCDB0:lI111|H1071FFE68
+1071FFE68:lI109|H107203010
+107203010:lI101|H107206240
+107206240:lI98|H1072094F8
+1072094F8:lI114|H10720C758
+10720C758:lI101|H10720F968
+10720F968:lI119|H107212BF8
+107212BF8:lI47|H107215FC0
+107215FC0:lI67|H1072195A0
+1072195A0:lI101|H10721CC10
+10721CC10:lI108|H107220220
+107220220:lI108|H1072235C8
+1072235C8:lI97|H107226660
+107226660:lI114|H107229358
+107229358:lI47|H10722BCA0
+10722BCA0:lI101|H10722E2E8
+10722E2E8:lI114|H107230670
+107230670:lI108|H107232768
+107232768:lI97|H107234560
+107234560:lI110|H107236088
+107236088:lI103|H107237900
+107237900:lI47|H107238F78
+107238F78:lI50|H10723A430
+10723A430:lI54|H10723B760
+10723B760:lI46|H10723C820
+10723C820:lI48|H10723D6C0
+10723D6C0:lI46|H10723E440
+10723E440:lI50|H10723F050
+10723F050:lI47|H10723FB20
+10723FB20:lI108|H107240470
+107240470:lI105|H107240CF0
+107240CF0:lI98|H107241480
+107241480:lI47|H107241BB0
+107241BB0:lI101|H107242280
+107242280:lI114|H1072428F0
+1072428F0:lI108|H107242EF0
+107242EF0:lI97|H107243460
+107243460:lI110|H1072439A0
+1072439A0:lI103|H107243E90
+107243E90:lI47|H107244380
+107244380:lI108|H107244830
+107244830:lI105|H107244CA0
+107244CA0:lI98|H107245100
+107245100:lI47|H107245550
+107245550:lI119|H107245950
+107245950:lI120|H107245D10
+107245D10:lI45|H1072460A0
+1072460A0:lI50|H107246430
+107246430:lI46|H1072467C0
+1072467C0:lI51|H107246B50
+107246B50:lI47|H280052C20
+10724AF50:lH10724AFC0|H10724AFD8
+10724AFC0:t2:H1071F0378,H1071F0388
+1071F0388:Mf10:H1071F1440:N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
+1071F1440:t10:H1071F3338,H1071F3348,H1071F3358,H1071F3368,H1071F3378,H1071F3388,H1071F3398,H1071F33A8,H1071F33B8,H1071F33C8,H1071F33D8,H1071F33E8,H1071F33F8,H1071F3408,H1071F3418,H1071F3428
+1071F3428:lI120|H1071F5A10
+1071F5A10:lI114|H1071F8278
+1071F8278:lI101|H1071FAED0
+1071FAED0:lI102|H1071FDE10
+1071FDE10:lI95|H107200EC8
+107200EC8:lI117|H107204070
+107204070:lI116|H1072072A0
+1072072A0:lI105|H10720A528
+10720A528:lI108|H10720D738
+10720D738:lI115|H1072108E8
+1072108E8:lI46|H107213B48
+107213B48:lI98|H107216F00
+107216F00:lI101|H10721A470
+10721A470:lI97|H10721DA20
+10721DA20:lI109|N
+1071F3418:lI120|H1071F5A00
+1071F5A00:lI114|H1071F8268
+1071F8268:lI101|H1071FAEC0
+1071FAEC0:lI102|H1071FDE00
+1071FDE00:lI95|H107200EB8
+107200EB8:lI115|H107204060
+107204060:lI99|H107207290
+107207290:lI97|H10720A518
+10720A518:lI110|H10720D728
+10720D728:lI110|H1072108D8
+1072108D8:lI101|H107213B38
+107213B38:lI114|H107216EF0
+107216EF0:lI46|H10721A460
+10721A460:lI98|H10721DA10
+10721DA10:lI101|H107220F60
+107220F60:lI97|H1072241A8
+1072241A8:lI109|N
+1071F3408:lI120|H1071F59F0
+1071F59F0:lI114|H1071F8258
+1071F8258:lI101|H1071FAEB0
+1071FAEB0:lI102|H1071FDDF0
+1071FDDF0:lI95|H107200EA8
+107200EA8:lI114|H107204050
+107204050:lI101|H107207280
+107207280:lI97|H10720A508
+10720A508:lI100|H10720D718
+10720D718:lI101|H1072108C8
+1072108C8:lI114|H107213B28
+107213B28:lI46|H107216EE0
+107216EE0:lI98|H10721A450
+10721A450:lI101|H10721DA00
+10721DA00:lI97|H107220F50
+107220F50:lI109|N
+1071F33F8:lI120|H1071F59E0
+1071F59E0:lI114|H1071F8248
+1071F8248:lI101|H1071FAEA0
+1071FAEA0:lI102|H1071FDDE0
+1071FDDE0:lI95|H107200E98
+107200E98:lI112|H107204040
+107204040:lI97|H107207270
+107207270:lI114|H10720A4F8
+10720A4F8:lI115|H10720D708
+10720D708:lI101|H1072108B8
+1072108B8:lI114|H107213B18
+107213B18:lI46|H107216ED0
+107216ED0:lI98|H10721A440
+10721A440:lI101|H10721D9F0
+10721D9F0:lI97|H107220F40
+107220F40:lI109|N
+1071F33E8:lI120|H1071F59D0
+1071F59D0:lI114|H1071F8238
+1071F8238:lI101|H1071FAE90
+1071FAE90:lI102|H1071FDDD0
+1071FDDD0:lI95|H107200E88
+107200E88:lI99|H107204030
+107204030:lI111|H107207260
+107207260:lI109|H10720A4E8
+10720A4E8:lI112|H10720D6F8
+10720D6F8:lI105|H1072108A8
+1072108A8:lI108|H107213B08
+107213B08:lI101|H107216EC0
+107216EC0:lI114|H10721A430
+10721A430:lI46|H10721D9E0
+10721D9E0:lI98|H107220F30
+107220F30:lI101|H107224198
+107224198:lI97|H1072270E0
+1072270E0:lI109|N
+1071F33D8:lI120|H1071F59C0
+1071F59C0:lI114|H1071F8228
+1071F8228:lI101|H1071FAE80
+1071FAE80:lI102|H1071FDDC0
+1071FDDC0:lI95|H107200E78
+107200E78:lI98|H107204020
+107204020:lI97|H107207250
+107207250:lI115|H10720A4D8
+10720A4D8:lI101|H10720D6E8
+10720D6E8:lI46|H107210898
+107210898:lI98|H107213AF8
+107213AF8:lI101|H107216EB0
+107216EB0:lI97|H10721A420
+10721A420:lI109|N
+1071F33C8:lI120|H1071F59B0
+1071F59B0:lI114|H1071F8218
+1071F8218:lI101|H1071FAE70
+1071FAE70:lI102|H1071FDDB0
+1071FDDB0:lI46|H107200E68
+107200E68:lI98|H107204010
+107204010:lI101|H107207240
+107207240:lI97|H10720A4C8
+10720A4C8:lI109|N
+1071F33B8:lI116|H1071F59A0
+1071F59A0:lI111|H1071F8208
+1071F8208:lI111|H1071FAE60
+1071FAE60:lI108|H1071FDDA0
+1071FDDA0:lI115|H107200E58
+107200E58:lI46|H107204000
+107204000:lI97|H107207230
+107207230:lI112|H10720A4B8
+10720A4B8:lI112|H10720D6D8
+10720D6D8:lI117|H107210888
+107210888:lI112|N
+1071F33A8:lI116|H1071F5990
+1071F5990:lI111|H1071F81F8
+1071F81F8:lI111|H1071FAE50
+1071FAE50:lI108|H1071FDD90
+1071FDD90:lI115|H107200E48
+107200E48:lI46|H107203FF0
+107203FF0:lI97|H107207220
+107207220:lI112|H10720A4A8
+10720A4A8:lI112|N
+1071F3398:lI116|H1071F5980
+1071F5980:lI97|H1071F81E8
+1071F81E8:lI103|H1071FAE40
+1071FAE40:lI115|H1071FDD80
+1071FDD80:lI46|H107200E38
+107200E38:lI98|H107203FE0
+107203FE0:lI101|H107207210
+107207210:lI97|H10720A498
+10720A498:lI109|N
+1071F3388:lI109|H1071F5970
+1071F5970:lI97|H1071F81D8
+1071F81D8:lI107|H1071FAE30
+1071FAE30:lI101|H1071FDD70
+1071FDD70:lI46|H107200E28
+107200E28:lI98|H107203FD0
+107203FD0:lI101|H107207200
+107207200:lI97|H10720A488
+10720A488:lI109|N
+1071F3378:lI108|H1071F5960
+1071F5960:lI99|H1071F81C8
+1071F81C8:lI110|H1071FAE20
+1071FAE20:lI116|H1071FDD60
+1071FDD60:lI46|H107200E18
+107200E18:lI98|H107203FC0
+107203FC0:lI101|H1072071F0
+1072071F0:lI97|H10720A478
+10720A478:lI109|N
+1071F3368:lI102|H1071F5950
+1071F5950:lI112|H1071F81B8
+1071F81B8:lI114|H1071FAE10
+1071FAE10:lI111|H1071FDD50
+1071FDD50:lI102|H107200E08
+107200E08:lI46|H107203FB0
+107203FB0:lI98|H1072071E0
+1072071E0:lI101|H10720A468
+10720A468:lI97|H10720D6C8
+10720D6C8:lI109|N
+1071F3358:lI101|H1071F5940
+1071F5940:lI112|H1071F81A8
+1071F81A8:lI114|H1071FAE00
+1071FAE00:lI111|H1071FDD40
+1071FDD40:lI102|H107200DF8
+107200DF8:lI46|H107203FA0
+107203FA0:lI98|H1072071D0
+1072071D0:lI101|H10720A458
+10720A458:lI97|H10720D6B8
+10720D6B8:lI109|N
+1071F3348:lI99|H1071F5930
+1071F5930:lI112|H1071F8198
+1071F8198:lI114|H1071FADF0
+1071FADF0:lI111|H1071FDD30
+1071FDD30:lI102|H107200DE8
+107200DE8:lI46|H107203F90
+107203F90:lI98|H1072071C0
+1072071C0:lI101|H10720A448
+10720A448:lI97|H10720D6A8
+10720D6A8:lI109|N
+1071F3338:lI99|H1071F5920
+1071F5920:lI111|H1071F8188
+1071F8188:lI118|H1071FADE0
+1071FADE0:lI101|H1071FDD20
+1071FDD20:lI114|H107200DD8
+107200DD8:lI46|H107203F80
+107203F80:lI98|H1072071B0
+1072071B0:lI101|H10720A438
+10720A438:lI97|H10720D698
+10720D698:lI109|N
+1071F0378:lI47|H1071F1430
+1071F1430:lI111|H1071F3328
+1071F3328:lI112|H1071F5910
+1071F5910:lI116|H1071F8178
+1071F8178:lI47|H1071FADD0
+1071FADD0:lI104|H1071FDD10
+1071FDD10:lI111|H107200DC8
+107200DC8:lI109|H107203F70
+107203F70:lI101|H1072071A0
+1072071A0:lI98|H10720A428
+10720A428:lI114|H10720D688
+10720D688:lI101|H107210878
+107210878:lI119|H107213AE8
+107213AE8:lI47|H107216EA0
+107216EA0:lI67|H10721A410
+10721A410:lI101|H10721D9D0
+10721D9D0:lI108|H107220F20
+107220F20:lI108|H107224188
+107224188:lI97|H1072270D0
+1072270D0:lI114|H107229C38
+107229C38:lI47|H10722C460
+10722C460:lI101|H10722E9A8
+10722E9A8:lI114|H107230C20
+107230C20:lI108|H107232C18
+107232C18:lI97|H1072348F0
+1072348F0:lI110|H107236328
+107236328:lI103|H107237AF0
+107237AF0:lI47|H107239108
+107239108:lI50|H10723A5A0
+10723A5A0:lI54|H10723B860
+10723B860:lI46|H10723C8B0
+10723C8B0:lI48|H10723D720
+10723D720:lI46|H10723E480
+10723E480:lI50|H10723F090
+10723F090:lI47|H10723FB50
+10723FB50:lI108|H1072404A0
+1072404A0:lI105|H107240D20
+107240D20:lI98|H1072414B0
+1072414B0:lI47|H107241BE0
+107241BE0:lI101|H1072422B0
+1072422B0:lI114|H107242920
+107242920:lI108|H107242F20
+107242F20:lI97|H107243490
+107243490:lI110|H1072439D0
+1072439D0:lI103|H107243EC0
+107243EC0:lI47|H1072443B0
+1072443B0:lI108|H107244860
+107244860:lI105|H107244CD0
+107244CD0:lI98|H107245130
+107245130:lI47|H107245580
+107245580:lI116|H107245980
+107245980:lI111|H107245D40
+107245D40:lI111|H1072460D0
+1072460D0:lI108|H107246460
+107246460:lI115|H1072467F0
+1072467F0:lI45|H107246B80
+107246B80:lI51|H107246EB0
+107246EB0:lI46|H1072471D0
+1072471D0:lI54|H1072474F0
+1072474F0:lI47|H280052C20
+10724AFD8:lH10724B048|H10724B060
+10724B048:t2:H1071F0440,H1071F0450
+1071F0450:MfA:H1071F14F8:N,N,N,N,N,N,N,N,N,N
+1071F14F8:tA:H1071F3468,H1071F3478,H1071F3488,H1071F3498,H1071F34A8,H1071F34B8,H1071F34C8,H1071F34D8,H1071F34E8,H1071F34F8
+1071F34F8:lI116|H1071F5AE0
+1071F5AE0:lI102|H1071F8348
+1071F8348:lI116|H1071FAFA0
+1071FAFA0:lI112|H1071FDEE0
+1071FDEE0:lI95|H107200F98
+107200F98:lI115|H107204140
+107204140:lI117|H107207370
+107207370:lI112|H10720A5E8
+10720A5E8:lI46|H10720D7E8
+10720D7E8:lI98|H107210988
+107210988:lI101|H107213BE8
+107213BE8:lI97|H107216FA0
+107216FA0:lI109|N
+1071F34E8:lI116|H1071F5AD0
+1071F5AD0:lI102|H1071F8338
+1071F8338:lI116|H1071FAF90
+1071FAF90:lI112|H1071FDED0
+1071FDED0:lI95|H107200F88
+107200F88:lI108|H107204130
+107204130:lI111|H107207360
+107207360:lI103|H10720A5D8
+10720A5D8:lI103|H10720D7D8
+10720D7D8:lI101|H107210978
+107210978:lI114|H107213BD8
+107213BD8:lI46|H107216F90
+107216F90:lI98|H10721A4E0
+10721A4E0:lI101|H10721DA80
+10721DA80:lI97|H107220FC0
+107220FC0:lI109|N
+1071F34D8:lI116|H1071F5AC0
+1071F5AC0:lI102|H1071F8328
+1071F8328:lI116|H1071FAF80
+1071FAF80:lI112|H1071FDEC0
+1071FDEC0:lI95|H107200F78
+107200F78:lI108|H107204120
+107204120:lI105|H107207350
+107207350:lI98|H10720A5C8
+10720A5C8:lI46|H10720D7C8
+10720D7C8:lI98|H107210968
+107210968:lI101|H107213BC8
+107213BC8:lI97|H107216F80
+107216F80:lI109|N
+1071F34C8:lI116|H1071F5AB0
+1071F5AB0:lI102|H1071F8318
+1071F8318:lI116|H1071FAF70
+1071FAF70:lI112|H1071FDEB0
+1071FDEB0:lI95|H107200F68
+107200F68:lI102|H107204110
+107204110:lI105|H107207340
+107207340:lI108|H10720A5B8
+10720A5B8:lI101|H10720D7B8
+10720D7B8:lI46|H107210958
+107210958:lI98|H107213BB8
+107213BB8:lI101|H107216F70
+107216F70:lI97|H10721A4D0
+10721A4D0:lI109|N
+1071F34B8:lI116|H1071F5AA0
+1071F5AA0:lI102|H1071F8308
+1071F8308:lI116|H1071FAF60
+1071FAF60:lI112|H1071FDEA0
+1071FDEA0:lI95|H107200F58
+107200F58:lI101|H107204100
+107204100:lI110|H107207330
+107207330:lI103|H10720A5A8
+10720A5A8:lI105|H10720D7A8
+10720D7A8:lI110|H107210948
+107210948:lI101|H107213BA8
+107213BA8:lI46|H107216F60
+107216F60:lI98|H10721A4C0
+10721A4C0:lI101|H10721DA70
+10721DA70:lI97|H107220FB0
+107220FB0:lI109|N
+1071F34A8:lI116|H1071F5A90
+1071F5A90:lI102|H1071F82F8
+1071F82F8:lI116|H1071FAF50
+1071FAF50:lI112|H1071FDE90
+1071FDE90:lI95|H107200F48
+107200F48:lI98|H1072040F0
+1072040F0:lI105|H107207320
+107207320:lI110|H10720A598
+10720A598:lI97|H10720D798
+10720D798:lI114|H107210938
+107210938:lI121|H107213B98
+107213B98:lI46|H107216F50
+107216F50:lI98|H10721A4B0
+10721A4B0:lI101|H10721DA60
+10721DA60:lI97|H107220FA0
+107220FA0:lI109|N
+1071F3498:lI116|H1071F5A80
+1071F5A80:lI102|H1071F82E8
+1071F82E8:lI116|H1071FAF40
+1071FAF40:lI112|H1071FDE80
+1071FDE80:lI95|H107200F38
+107200F38:lI97|H1072040E0
+1072040E0:lI112|H107207310
+107207310:lI112|H10720A588
+10720A588:lI46|H10720D788
+10720D788:lI98|H107210928
+107210928:lI101|H107213B88
+107213B88:lI97|H107216F40
+107216F40:lI109|N
+1071F3488:lI116|H1071F5A70
+1071F5A70:lI102|H1071F82D8
+1071F82D8:lI116|H1071FAF30
+1071FAF30:lI112|H1071FDE70
+1071FDE70:lI46|H107200F28
+107200F28:lI98|H1072040D0
+1072040D0:lI101|H107207300
+107207300:lI97|H10720A578
+10720A578:lI109|N
+1071F3478:lI116|H1071F5A60
+1071F5A60:lI102|H1071F82C8
+1071F82C8:lI116|H1071FAF20
+1071FAF20:lI112|H1071FDE60
+1071FDE60:lI46|H107200F18
+107200F18:lI97|H1072040C0
+1072040C0:lI112|H1072072F0
+1072072F0:lI112|H10720A568
+10720A568:lI117|H10720D778
+10720D778:lI112|N
+1071F3468:lI116|H1071F5A50
+1071F5A50:lI102|H1071F82B8
+1071F82B8:lI116|H1071FAF10
+1071FAF10:lI112|H1071FDE50
+1071FDE50:lI46|H107200F08
+107200F08:lI97|H1072040B0
+1072040B0:lI112|H1072072E0
+1072072E0:lI112|N
+1071F0440:lI47|H1071F14E8
+1071F14E8:lI111|H1071F3458
+1071F3458:lI112|H1071F5A40
+1071F5A40:lI116|H1071F82A8
+1071F82A8:lI47|H1071FAF00
+1071FAF00:lI104|H1071FDE40
+1071FDE40:lI111|H107200EF8
+107200EF8:lI109|H1072040A0
+1072040A0:lI101|H1072072D0
+1072072D0:lI98|H10720A558
+10720A558:lI114|H10720D768
+10720D768:lI101|H107210918
+107210918:lI119|H107213B78
+107213B78:lI47|H107216F30
+107216F30:lI67|H10721A4A0
+10721A4A0:lI101|H10721DA50
+10721DA50:lI108|H107220F90
+107220F90:lI108|H1072241D8
+1072241D8:lI97|H107227110
+107227110:lI114|H107229C68
+107229C68:lI47|H10722C490
+10722C490:lI101|H10722E9D8
+10722E9D8:lI114|H107230C50
+107230C50:lI108|H107232C48
+107232C48:lI97|H107234920
+107234920:lI110|H107236358
+107236358:lI103|H107237B20
+107237B20:lI47|H107239138
+107239138:lI50|H10723A5D0
+10723A5D0:lI54|H10723B890
+10723B890:lI46|H10723C8E0
+10723C8E0:lI48|H10723D750
+10723D750:lI46|H10723E4B0
+10723E4B0:lI50|H10723F0C0
+10723F0C0:lI47|H10723FB80
+10723FB80:lI108|H1072404D0
+1072404D0:lI105|H107240D50
+107240D50:lI98|H1072414E0
+1072414E0:lI47|H107241C10
+107241C10:lI101|H1072422E0
+1072422E0:lI114|H107242950
+107242950:lI108|H107242F50
+107242F50:lI97|H1072434C0
+1072434C0:lI110|H107243A00
+107243A00:lI103|H107243EF0
+107243EF0:lI47|H1072443E0
+1072443E0:lI108|H107244890
+107244890:lI105|H107244D00
+107244D00:lI98|H107245160
+107245160:lI47|H1072455B0
+1072455B0:lI116|H1072459B0
+1072459B0:lI102|H107245D70
+107245D70:lI116|H107246100
+107246100:lI112|H107246490
+107246490:lI45|H107246820
+107246820:lI49|H107246BB0
+107246BB0:lI46|H107246EE0
+107246EE0:lI49|H107247200
+107247200:lI47|H280052C20
+10724B060:lH10724B0D0|H10724B0E8
+10724B0D0:t2:H1071F04B8,H1071F04C8
+1071F04C8:MfB:H1071F1560:N,N,N,N,N,N,N,N,N,N,N
+1071F1560:tB:H1071F3518,H1071F3528,H1071F3538,H1071F3548,H1071F3558,H1071F3568,H1071F3578,H1071F3588,H1071F3598,H1071F35A8,H1071F35B8
+1071F35B8:lI115|H1071F5BA0
+1071F5BA0:lI121|H1071F8408
+1071F8408:lI110|H1071FB060
+1071FB060:lI116|H1071FDFA0
+1071FDFA0:lI97|H107201058
+107201058:lI120|H107204200
+107204200:lI95|H107207430
+107207430:lI116|H10720A6A8
+10720A6A8:lI111|H10720D898
+10720D898:lI111|H107210A38
+107210A38:lI108|H107213C98
+107213C98:lI115|H107217050
+107217050:lI46|H10721A580
+10721A580:lI97|H10721DB20
+10721DB20:lI112|H107221040
+107221040:lI112|H107224248
+107224248:lI117|H107227170
+107227170:lI112|N
+1071F35A8:lI115|H1071F5B90
+1071F5B90:lI121|H1071F83F8
+1071F83F8:lI110|H1071FB050
+1071FB050:lI116|H1071FDF90
+1071FDF90:lI97|H107201048
+107201048:lI120|H1072041F0
+1072041F0:lI95|H107207420
+107207420:lI116|H10720A698
+10720A698:lI111|H10720D888
+10720D888:lI111|H107210A28
+107210A28:lI108|H107213C88
+107213C88:lI115|H107217040
+107217040:lI46|H10721A570
+10721A570:lI97|H10721DB10
+10721DB10:lI112|H107221030
+107221030:lI112|N
+1071F3598:lI112|H1071F5B80
+1071F5B80:lI114|H1071F83E8
+1071F83E8:lI101|H1071FB040
+1071FB040:lI116|H1071FDF80
+1071FDF80:lI116|H107201038
+107201038:lI121|H1072041E0
+1072041E0:lI112|H107207410
+107207410:lI114|H10720A688
+10720A688:lI46|H10720D878
+10720D878:lI98|H107210A18
+107210A18:lI101|H107213C78
+107213C78:lI97|H107217030
+107217030:lI109|N
+1071F3588:lI109|H1071F5B70
+1071F5B70:lI101|H1071F83D8
+1071F83D8:lI114|H1071FB030
+1071FB030:lI108|H1071FDF70
+1071FDF70:lI95|H107201028
+107201028:lI116|H1072041D0
+1072041D0:lI114|H107207400
+107207400:lI97|H10720A678
+10720A678:lI110|H10720D868
+10720D868:lI115|H107210A08
+107210A08:lI102|H107213C68
+107213C68:lI111|H107217020
+107217020:lI114|H10721A560
+10721A560:lI109|H10721DB00
+10721DB00:lI46|H107221020
+107221020:lI98|H107224238
+107224238:lI101|H107227160
+107227160:lI97|H107229CA8
+107229CA8:lI109|N
+1071F3578:lI109|H1071F5B60
+1071F5B60:lI101|H1071F83C8
+1071F83C8:lI114|H1071FB020
+1071FB020:lI108|H1071FDF60
+1071FDF60:lI46|H107201018
+107201018:lI98|H1072041C0
+1072041C0:lI101|H1072073F0
+1072073F0:lI97|H10720A668
+10720A668:lI109|N
+1071F3568:lI101|H1071F5B50
+1071F5B50:lI114|H1071F83B8
+1071F83B8:lI108|H1071FB010
+1071FB010:lI95|H1071FDF50
+1071FDF50:lI115|H107201008
+107201008:lI121|H1072041B0
+1072041B0:lI110|H1072073E0
+1072073E0:lI116|H10720A658
+10720A658:lI97|H10720D858
+10720D858:lI120|H1072109F8
+1072109F8:lI95|H107213C58
+107213C58:lI108|H107217010
+107217010:lI105|H10721A550
+10721A550:lI98|H10721DAF0
+10721DAF0:lI46|H107221010
+107221010:lI98|H107224228
+107224228:lI101|H107227150
+107227150:lI97|H107229C98
+107229C98:lI109|N
+1071F3558:lI101|H1071F5B40
+1071F5B40:lI114|H1071F83A8
+1071F83A8:lI108|H1071FB000
+1071FB000:lI95|H1071FDF40
+1071FDF40:lI115|H107200FF8
+107200FF8:lI121|H1072041A0
+1072041A0:lI110|H1072073D0
+1072073D0:lI116|H10720A648
+10720A648:lI97|H10720D848
+10720D848:lI120|H1072109E8
+1072109E8:lI46|H107213C48
+107213C48:lI98|H107217000
+107217000:lI101|H10721A540
+10721A540:lI97|H10721DAE0
+10721DAE0:lI109|N
+1071F3548:lI101|H1071F5B30
+1071F5B30:lI114|H1071F8398
+1071F8398:lI108|H1071FAFF0
+1071FAFF0:lI95|H1071FDF30
+1071FDF30:lI114|H107200FE8
+107200FE8:lI101|H107204190
+107204190:lI99|H1072073C0
+1072073C0:lI111|H10720A638
+10720A638:lI109|H10720D838
+10720D838:lI109|H1072109D8
+1072109D8:lI101|H107213C38
+107213C38:lI110|H107216FF0
+107216FF0:lI116|H10721A530
+10721A530:lI46|H10721DAD0
+10721DAD0:lI98|H107221000
+107221000:lI101|H107224218
+107224218:lI97|H107227140
+107227140:lI109|N
+1071F3538:lI101|H1071F5B20
+1071F5B20:lI114|H1071F8388
+1071F8388:lI108|H1071FAFE0
+1071FAFE0:lI95|H1071FDF20
+1071FDF20:lI112|H107200FD8
+107200FD8:lI114|H107204180
+107204180:lI101|H1072073B0
+1072073B0:lI116|H10720A628
+10720A628:lI116|H10720D828
+10720D828:lI121|H1072109C8
+1072109C8:lI112|H107213C28
+107213C28:lI114|H107216FE0
+107216FE0:lI46|H10721A520
+10721A520:lI98|H10721DAC0
+10721DAC0:lI101|H107220FF0
+107220FF0:lI97|H107224208
+107224208:lI109|N
+1071F3528:lI101|H1071F5B10
+1071F5B10:lI114|H1071F8378
+1071F8378:lI108|H1071FAFD0
+1071FAFD0:lI95|H1071FDF10
+1071FDF10:lI99|H107200FC8
+107200FC8:lI111|H107204170
+107204170:lI109|H1072073A0
+1072073A0:lI109|H10720A618
+10720A618:lI101|H10720D818
+10720D818:lI110|H1072109B8
+1072109B8:lI116|H107213C18
+107213C18:lI95|H107216FD0
+107216FD0:lI115|H10721A510
+10721A510:lI99|H10721DAB0
+10721DAB0:lI97|H107220FE0
+107220FE0:lI110|H1072241F8
+1072241F8:lI46|H107227130
+107227130:lI98|H107229C88
+107229C88:lI101|H10722C4B0
+10722C4B0:lI97|H10722E9F8
+10722E9F8:lI109|N
+1071F3518:lI101|H1071F5B00
+1071F5B00:lI112|H1071F8368
+1071F8368:lI112|H1071FAFC0
+1071FAFC0:lI95|H1071FDF00
+1071FDF00:lI100|H107200FB8
+107200FB8:lI111|H107204160
+107204160:lI100|H107207390
+107207390:lI103|H10720A608
+10720A608:lI101|H10720D808
+10720D808:lI114|H1072109A8
+1072109A8:lI46|H107213C08
+107213C08:lI98|H107216FC0
+107216FC0:lI101|H10721A500
+10721A500:lI97|H10721DAA0
+10721DAA0:lI109|N
+1071F04B8:lI47|H1071F1550
+1071F1550:lI111|H1071F3508
+1071F3508:lI112|H1071F5AF0
+1071F5AF0:lI116|H1071F8358
+1071F8358:lI47|H1071FAFB0
+1071FAFB0:lI104|H1071FDEF0
+1071FDEF0:lI111|H107200FA8
+107200FA8:lI109|H107204150
+107204150:lI101|H107207380
+107207380:lI98|H10720A5F8
+10720A5F8:lI114|H10720D7F8
+10720D7F8:lI101|H107210998
+107210998:lI119|H107213BF8
+107213BF8:lI47|H107216FB0
+107216FB0:lI67|H10721A4F0
+10721A4F0:lI101|H10721DA90
+10721DA90:lI108|H107220FD0
+107220FD0:lI108|H1072241E8
+1072241E8:lI97|H107227120
+107227120:lI114|H107229C78
+107229C78:lI47|H10722C4A0
+10722C4A0:lI101|H10722E9E8
+10722E9E8:lI114|H107230C60
+107230C60:lI108|H107232C58
+107232C58:lI97|H107234930
+107234930:lI110|H107236368
+107236368:lI103|H107237B30
+107237B30:lI47|H107239148
+107239148:lI50|H10723A5E0
+10723A5E0:lI54|H10723B8A0
+10723B8A0:lI46|H10723C8F0
+10723C8F0:lI48|H10723D760
+10723D760:lI46|H10723E4C0
+10723E4C0:lI50|H10723F0D0
+10723F0D0:lI47|H10723FB90
+10723FB90:lI108|H1072404E0
+1072404E0:lI105|H107240D60
+107240D60:lI98|H1072414F0
+1072414F0:lI47|H107241C20
+107241C20:lI101|H1072422F0
+1072422F0:lI114|H107242960
+107242960:lI108|H107242F60
+107242F60:lI97|H1072434D0
+1072434D0:lI110|H107243A10
+107243A10:lI103|H107243F00
+107243F00:lI47|H1072443F0
+1072443F0:lI108|H1072448A0
+1072448A0:lI105|H107244D10
+107244D10:lI98|H107245170
+107245170:lI47|H1072455C0
+1072455C0:lI115|H1072459C0
+1072459C0:lI121|H107245D80
+107245D80:lI110|H107246110
+107246110:lI116|H1072464A0
+1072464A0:lI97|H107246830
+107246830:lI120|H107246BC0
+107246BC0:lI95|H107246EF0
+107246EF0:lI116|H107247210
+107247210:lI111|H107247520
+107247520:lI111|H107247820
+107247820:lI108|H107247B20
+107247B20:lI115|H107247E10
+107247E10:lI45|H1072480E0
+1072480E0:lI51|H1072483A0
+1072483A0:lI46|H107248660
+107248660:lI49|H107248910
+107248910:lI47|H280052C20
+10724B0E8:lH10724B158|H1071F0538
+10724B158:t2:H1071F0548,H1071F0558
+1071F0558:Mh4A:10:H1071F15F8,H1071F1610,H1071F1640,H1071F1678,H1071F16A8,H1071F16D8,H1071F16F8,H1071F1728,H1071F1748,H1071F1770,H1071F1790,H1071F17B8,H1071F17F0,H1071F1810,H1071F1838,H1071F1850
+1071F15F8:Mn2:H1071F36A0,H1071F36B0
+1071F36A0:lH1071F5E60|N
+1071F5E60:lI115|H1071F8AB0
+1071F8AB0:lI115|H1071FB9F0
+1071FB9F0:lI108|H1071FEAA8
+1071FEAA8:lI46|H107201C50
+107201C50:lI97|H107204E90
+107204E90:lI112|H107208188
+107208188:lI112|N
+1071F36B0:lH1071F5E70|N
+1071F5E70:lI116|H1071F8AC0
+1071F8AC0:lI108|H1071FBA00
+1071FBA00:lI115|H1071FEAB8
+1071FEAB8:lI95|H107201C60
+107201C60:lI114|H107204EA0
+107204EA0:lI101|H107208198
+107208198:lI99|H10720B468
+10720B468:lI111|H10720E728
+10720E728:lI114|H107211AA8
+107211AA8:lI100|H107214F80
+107214F80:lI46|H107218620
+107218620:lI98|H10721BE80
+10721BE80:lI101|H10721F5B0
+10721F5B0:lI97|H107222AB8
+107222AB8:lI109|N
+1071F1850:Mn3:H1071F3AB8,H1071F3AC8,H1071F3AD8
+1071F3AB8:lH1071F62D0|N
+1071F62D0:lI116|H1071F8F20
+1071F8F20:lI108|H1071FBE60
+1071FBE60:lI115|H1071FEF18
+1071FEF18:lI95|H1072020C0
+1072020C0:lI99|H107205300
+107205300:lI108|H1072085F8
+1072085F8:lI105|H10720B8C8
+10720B8C8:lI101|H10720EB88
+10720EB88:lI110|H107211EE8
+107211EE8:lI116|H1072153C0
+1072153C0:lI95|H107218A50
+107218A50:lI99|H10721C280
+10721C280:lI111|H10721F980
+10721F980:lI110|H107222E78
+107222E78:lI110|H107225FE0
+107225FE0:lI101|H107228DC8
+107228DC8:lI99|H10722B800
+10722B800:lI116|H10722DED8
+10722DED8:lI105|H107230300
+107230300:lI111|H107232478
+107232478:lI110|H1072342F0
+1072342F0:lI95|H107235E58
+107235E58:lI49|H107237750
+107237750:lI95|H107238DD8
+107238DD8:lI51|H10723A2B0
+10723A2B0:lI46|H10723B610
+10723B610:lI98|H10723C700
+10723C700:lI101|H10723D5C0
+10723D5C0:lI97|H10723E340
+10723E340:lI109|N
+1071F3AD8:lH1071F62F0|N
+1071F62F0:lI116|H1071F8F40
+1071F8F40:lI108|H1071FBE80
+1071FBE80:lI115|H1071FEF38
+1071FEF38:lI95|H1072020E0
+1072020E0:lI98|H107205320
+107205320:lI108|H107208618
+107208618:lI111|H10720B8E8
+10720B8E8:lI111|H10720EBA8
+10720EBA8:lI109|H107211F08
+107211F08:lI95|H1072153E0
+1072153E0:lI102|H107218A70
+107218A70:lI105|H10721C2A0
+10721C2A0:lI108|H10721F9A0
+10721F9A0:lI116|H107222E98
+107222E98:lI101|H107226000
+107226000:lI114|H107228DE8
+107228DE8:lI46|H10722B820
+10722B820:lI98|H10722DEF8
+10722DEF8:lI101|H107230320
+107230320:lI97|H107232498
+107232498:lI109|N
+1071F3AC8:lH1071F62E0|N
+1071F62E0:lI115|H1071F8F30
+1071F8F30:lI115|H1071FBE70
+1071FBE70:lI108|H1071FEF28
+1071FEF28:lI95|H1072020D0
+1072020D0:lI108|H107205310
+107205310:lI105|H107208608
+107208608:lI115|H10720B8D8
+10720B8D8:lI116|H10720EB98
+10720EB98:lI101|H107211EF8
+107211EF8:lI110|H1072153D0
+1072153D0:lI95|H107218A60
+107218A60:lI116|H10721C290
+10721C290:lI114|H10721F990
+10721F990:lI97|H107222E88
+107222E88:lI99|H107225FF0
+107225FF0:lI107|H107228DD8
+107228DD8:lI101|H10722B810
+10722B810:lI114|H10722DEE8
+10722DEE8:lI95|H107230310
+107230310:lI115|H107232488
+107232488:lI117|H107234300
+107234300:lI112|H107235E68
+107235E68:lI46|H107237760
+107237760:lI98|H107238DE8
+107238DE8:lI101|H10723A2C0
+10723A2C0:lI97|H10723B620
+10723B620:lI109|N
+1071F1838:Mn2:H1071F3A98,H1071F3AA8
+1071F3A98:lH1071F62B0|N
+1071F62B0:lI100|H1071F8F00
+1071F8F00:lI116|H1071FBE40
+1071FBE40:lI108|H1071FEEF8
+1071FEEF8:lI115|H1072020A0
+1072020A0:lI95|H1072052E0
+1072052E0:lI104|H1072085D8
+1072085D8:lI97|H10720B8A8
+10720B8A8:lI110|H10720EB68
+10720EB68:lI100|H107211EC8
+107211EC8:lI115|H1072153A0
+1072153A0:lI104|H107218A30
+107218A30:lI97|H10721C260
+10721C260:lI107|H10721F960
+10721F960:lI101|H107222E58
+107222E58:lI46|H107225FC0
+107225FC0:lI98|H107228DA8
+107228DA8:lI101|H10722B7E0
+10722B7E0:lI97|H10722DEC8
+10722DEC8:lI109|N
+1071F3AA8:lH1071F62C0|N
+1071F62C0:lI115|H1071F8F10
+1071F8F10:lI115|H1071FBE50
+1071FBE50:lI108|H1071FEF08
+1071FEF08:lI95|H1072020B0
+1072020B0:lI104|H1072052F0
+1072052F0:lI97|H1072085E8
+1072085E8:lI110|H10720B8B8
+10720B8B8:lI100|H10720EB78
+10720EB78:lI115|H107211ED8
+107211ED8:lI104|H1072153B0
+1072153B0:lI97|H107218A40
+107218A40:lI107|H10721C270
+10721C270:lI101|H10721F970
+10721F970:lI46|H107222E68
+107222E68:lI98|H107225FD0
+107225FD0:lI101|H107228DB8
+107228DB8:lI97|H10722B7F0
+10722B7F0:lI109|N
+1071F1810:Mn4:H1071F3A58,H1071F3A68,H1071F3A78,H1071F3A88
+1071F3A58:lH1071F6270|N
+1071F6270:lI116|H1071F8EC0
+1071F8EC0:lI108|H1071FBE00
+1071FBE00:lI115|H1071FEEB8
+1071FEEB8:lI95|H107202060
+107202060:lI115|H1072052A0
+1072052A0:lI101|H107208598
+107208598:lI114|H10720B868
+10720B868:lI118|H10720EB28
+10720EB28:lI101|H107211E88
+107211E88:lI114|H107215360
+107215360:lI95|H107218A00
+107218A00:lI115|H10721C230
+10721C230:lI101|H10721F930
+10721F930:lI115|H107222E28
+107222E28:lI115|H107225F90
+107225F90:lI105|H107228D88
+107228D88:lI111|H10722B7D0
+10722B7D0:lI110|H10722DEB8
+10722DEB8:lI95|H1072302F0
+1072302F0:lI116|H107232468
+107232468:lI105|H1072342E0
+1072342E0:lI99|H107235E48
+107235E48:lI107|H107237740
+107237740:lI101|H107238DC8
+107238DC8:lI116|H10723A2A0
+10723A2A0:lI95|H10723B600
+10723B600:lI115|H10723C6F0
+10723C6F0:lI117|H10723D5B0
+10723D5B0:lI112|H10723E330
+10723E330:lI46|H10723EF50
+10723EF50:lI98|H10723FA20
+10723FA20:lI101|H107240370
+107240370:lI97|H107240BF0
+107240BF0:lI109|N
+1071F3A88:lH1071F62A0|N
+1071F62A0:lI116|H1071F8EF0
+1071F8EF0:lI108|H1071FBE30
+1071FBE30:lI115|H1071FEEE8
+1071FEEE8:lI95|H107202090
+107202090:lI118|H1072052D0
+1072052D0:lI49|H1072085C8
+1072085C8:lI46|H10720B898
+10720B898:lI98|H10720EB58
+10720EB58:lI101|H107211EB8
+107211EB8:lI97|H107215390
+107215390:lI109|N
+1071F3A78:lH1071F6290|N
+1071F6290:lI116|H1071F8EE0
+1071F8EE0:lI108|H1071FBE20
+1071FBE20:lI115|H1071FEED8
+1071FEED8:lI95|H107202080
+107202080:lI100|H1072052C0
+1072052C0:lI105|H1072085B8
+1072085B8:lI115|H10720B888
+10720B888:lI116|H10720EB48
+10720EB48:lI95|H107211EA8
+107211EA8:lI115|H107215380
+107215380:lI117|H107218A20
+107218A20:lI112|H10721C250
+10721C250:lI46|H10721F950
+10721F950:lI98|H107222E48
+107222E48:lI101|H107225FB0
+107225FB0:lI97|H107228D98
+107228D98:lI109|N
+1071F3A68:lH1071F6280|N
+1071F6280:lI115|H1071F8ED0
+1071F8ED0:lI115|H1071FBE10
+1071FBE10:lI108|H1071FEEC8
+1071FEEC8:lI95|H107202070
+107202070:lI112|H1072052B0
+1072052B0:lI107|H1072085A8
+1072085A8:lI105|H10720B878
+10720B878:lI120|H10720EB38
+10720EB38:lI95|H107211E98
+107211E98:lI100|H107215370
+107215370:lI98|H107218A10
+107218A10:lI46|H10721C240
+10721C240:lI98|H10721F940
+10721F940:lI101|H107222E38
+107222E38:lI97|H107225FA0
+107225FA0:lI109|N
+1071F17F0:Mn3:H1071F3A20,H1071F3A30,H1071F3A40
+1071F3A20:lH1071F6230|N
+1071F6230:lI100|H1071F8E80
+1071F8E80:lI116|H1071FBDC0
+1071FBDC0:lI108|H1071FEE78
+1071FEE78:lI115|H107202020
+107202020:lI95|H107205260
+107205260:lI115|H107208558
+107208558:lI111|H10720B828
+10720B828:lI99|H10720EAE8
+10720EAE8:lI107|H107211E48
+107211E48:lI101|H107215320
+107215320:lI116|H1072189C0
+1072189C0:lI46|H10721C1F0
+10721C1F0:lI98|H10721F8F0
+10721F8F0:lI101|H107222DE8
+107222DE8:lI97|H107225F50
+107225F50:lI109|N
+1071F3A40:Mn2:H1071F6250,H1071F6260
+1071F6250:lH1071F8EA0|N
+1071F8EA0:lI115|H1071FBDE0
+1071FBDE0:lI115|H1071FEE98
+1071FEE98:lI108|H107202040
+107202040:lI95|H107205280
+107205280:lI108|H107208578
+107208578:lI111|H10720B848
+10720B848:lI103|H10720EB08
+10720EB08:lI103|H107211E68
+107211E68:lI101|H107215340
+107215340:lI114|H1072189E0
+1072189E0:lI46|H10721C210
+10721C210:lI98|H10721F910
+10721F910:lI101|H107222E08
+107222E08:lI97|H107225F70
+107225F70:lI109|N
+1071F6260:lH1071F8EB0|N
+1071F8EB0:lI116|H1071FBDF0
+1071FBDF0:lI108|H1071FEEA8
+1071FEEA8:lI115|H107202050
+107202050:lI95|H107205290
+107205290:lI99|H107208588
+107208588:lI111|H10720B858
+10720B858:lI110|H10720EB18
+10720EB18:lI110|H107211E78
+107211E78:lI101|H107215350
+107215350:lI99|H1072189F0
+1072189F0:lI116|H10721C220
+10721C220:lI105|H10721F920
+10721F920:lI111|H107222E18
+107222E18:lI110|H107225F80
+107225F80:lI95|H107228D78
+107228D78:lI115|H10722B7C0
+10722B7C0:lI117|H10722DEA8
+10722DEA8:lI112|H1072302E0
+1072302E0:lI46|H107232458
+107232458:lI98|H1072342D0
+1072342D0:lI101|H107235E38
+107235E38:lI97|H107237730
+107237730:lI109|N
+1071F3A30:lH1071F6240|N
+1071F6240:lI115|H1071F8E90
+1071F8E90:lI115|H1071FBDD0
+1071FBDD0:lI108|H1071FEE88
+1071FEE88:lI95|H107202030
+107202030:lI112|H107205270
+107205270:lI101|H107208568
+107208568:lI109|H10720B838
+10720B838:lI95|H10720EAF8
+10720EAF8:lI99|H107211E58
+107211E58:lI97|H107215330
+107215330:lI99|H1072189D0
+1072189D0:lI104|H10721C200
+10721C200:lI101|H10721F900
+10721F900:lI46|H107222DF8
+107222DF8:lI98|H107225F60
+107225F60:lI101|H107228D68
+107228D68:lI97|H10722B7B0
+10722B7B0:lI109|N
+1071F17B8:Mn6:H1071F39C0,H1071F39D0,H1071F39E0,H1071F39F0,H1071F3A00,H1071F3A10
+1071F39C0:lH1071F61D0|N
+1071F61D0:lI115|H1071F8E20
+1071F8E20:lI115|H1071FBD60
+1071FBD60:lI108|H1071FEE18
+1071FEE18:lI95|H107201FC0
+107201FC0:lI100|H107205200
+107205200:lI104|H1072084F8
+1072084F8:lI95|H10720B7C8
+10720B7C8:lI103|H10720EA88
+10720EA88:lI114|H107211DE8
+107211DE8:lI111|H1072152C0
+1072152C0:lI117|H107218960
+107218960:lI112|H10721C190
+10721C190:lI115|H10721F890
+10721F890:lI46|H107222D88
+107222D88:lI98|H107225EF0
+107225EF0:lI101|H107228D08
+107228D08:lI97|H10722B750
+10722B750:lI109|N
+1071F3A10:lH1071F6220|N
+1071F6220:lI115|H1071F8E70
+1071F8E70:lI115|H1071FBDB0
+1071FBDB0:lI108|H1071FEE68
+1071FEE68:lI95|H107202010
+107202010:lI99|H107205250
+107205250:lI105|H107208548
+107208548:lI112|H10720B818
+10720B818:lI104|H10720EAD8
+10720EAD8:lI101|H107211E38
+107211E38:lI114|H107215310
+107215310:lI95|H1072189B0
+1072189B0:lI102|H10721C1E0
+10721C1E0:lI111|H10721F8E0
+10721F8E0:lI114|H107222DD8
+107222DD8:lI109|H107225F40
+107225F40:lI97|H107228D58
+107228D58:lI116|H10722B7A0
+10722B7A0:lI46|H10722DE98
+10722DE98:lI98|H1072302D0
+1072302D0:lI101|H107232448
+107232448:lI97|H1072342C0
+1072342C0:lI109|N
+1071F3A00:lH1071F6210|N
+1071F6210:lI116|H1071F8E60
+1071F8E60:lI108|H1071FBDA0
+1071FBDA0:lI115|H1071FEE58
+1071FEE58:lI95|H107202000
+107202000:lI103|H107205240
+107205240:lI101|H107208538
+107208538:lI110|H10720B808
+10720B808:lI95|H10720EAC8
+10720EAC8:lI99|H107211E28
+107211E28:lI111|H107215300
+107215300:lI110|H1072189A0
+1072189A0:lI110|H10721C1D0
+10721C1D0:lI101|H10721F8D0
+10721F8D0:lI99|H107222DC8
+107222DC8:lI116|H107225F30
+107225F30:lI105|H107228D48
+107228D48:lI111|H10722B790
+10722B790:lI110|H10722DE88
+10722DE88:lI95|H1072302C0
+1072302C0:lI49|H107232438
+107232438:lI95|H1072342B0
+1072342B0:lI51|H107235E28
+107235E28:lI46|H107237720
+107237720:lI98|H107238DB8
+107238DB8:lI101|H10723A290
+10723A290:lI97|H10723B5F0
+10723B5F0:lI109|N
+1071F39F0:lH1071F6200|N
+1071F6200:lI115|H1071F8E50
+1071F8E50:lI115|H1071FBD90
+1071FBD90:lI108|H1071FEE48
+1071FEE48:lI95|H107201FF0
+107201FF0:lI115|H107205230
+107205230:lI114|H107208528
+107208528:lI112|H10720B7F8
+10720B7F8:lI95|H10720EAB8
+10720EAB8:lI112|H107211E18
+107211E18:lI114|H1072152F0
+1072152F0:lI105|H107218990
+107218990:lI109|H10721C1C0
+10721C1C0:lI101|H10721F8C0
+10721F8C0:lI115|H107222DB8
+107222DB8:lI46|H107225F20
+107225F20:lI98|H107228D38
+107228D38:lI101|H10722B780
+10722B780:lI97|H10722DE78
+10722DE78:lI109|N
+1071F39E0:lH1071F61F0|N
+1071F61F0:lI105|H1071F8E40
+1071F8E40:lI110|H1071FBD80
+1071FBD80:lI101|H1071FEE38
+1071FEE38:lI116|H107201FE0
+107201FE0:lI54|H107205220
+107205220:lI95|H107208518
+107208518:lI116|H10720B7E8
+10720B7E8:lI108|H10720EAA8
+10720EAA8:lI115|H107211E08
+107211E08:lI95|H1072152E0
+1072152E0:lI100|H107218980
+107218980:lI105|H10721C1B0
+10721C1B0:lI115|H10721F8B0
+10721F8B0:lI116|H107222DA8
+107222DA8:lI46|H107225F10
+107225F10:lI98|H107228D28
+107228D28:lI101|H10722B770
+10722B770:lI97|H10722DE68
+10722DE68:lI109|N
+1071F39D0:lH1071F61E0|N
+1071F61E0:lI115|H1071F8E30
+1071F8E30:lI115|H1071FBD70
+1071FBD70:lI108|H1071FEE28
+1071FEE28:lI95|H107201FD0
+107201FD0:lI115|H107205210
+107205210:lI101|H107208508
+107208508:lI114|H10720B7D8
+10720B7D8:lI118|H10720EA98
+10720EA98:lI101|H107211DF8
+107211DF8:lI114|H1072152D0
+1072152D0:lI95|H107218970
+107218970:lI115|H10721C1A0
+10721C1A0:lI101|H10721F8A0
+10721F8A0:lI115|H107222D98
+107222D98:lI115|H107225F00
+107225F00:lI105|H107228D18
+107228D18:lI111|H10722B760
+10722B760:lI110|H10722DE58
+10722DE58:lI95|H1072302B0
+1072302B0:lI99|H107232428
+107232428:lI97|H1072342A0
+1072342A0:lI99|H107235E18
+107235E18:lI104|H107237710
+107237710:lI101|H107238DA8
+107238DA8:lI95|H10723A280
+10723A280:lI115|H10723B5E0
+10723B5E0:lI117|H10723C6E0
+10723C6E0:lI112|H10723D5A0
+10723D5A0:lI46|H10723E320
+10723E320:lI98|H10723EF40
+10723EF40:lI101|H10723FA10
+10723FA10:lI97|H107240360
+107240360:lI109|N
+1071F1790:Mn4:H1071F3980,H1071F3990,H1071F39A0,H1071F39B0
+1071F3980:lH1071F6190|N
+1071F6190:lI116|H1071F8DE0
+1071F8DE0:lI108|H1071FBD20
+1071FBD20:lI115|H1071FEDD8
+1071FEDD8:lI95|H107201F80
+107201F80:lI115|H1072051C0
+1072051C0:lI101|H1072084B8
+1072084B8:lI114|H10720B788
+10720B788:lI118|H10720EA48
+10720EA48:lI101|H107211DA8
+107211DA8:lI114|H107215280
+107215280:lI95|H107218920
+107218920:lI115|H10721C150
+10721C150:lI101|H10721F850
+10721F850:lI115|H107222D48
+107222D48:lI115|H107225EC0
+107225EC0:lI105|H107228CD8
+107228CD8:lI111|H10722B720
+10722B720:lI110|H10722DE28
+10722DE28:lI95|H1072302A0
+1072302A0:lI116|H107232418
+107232418:lI105|H107234290
+107234290:lI99|H107235E08
+107235E08:lI107|H107237700
+107237700:lI101|H107238D98
+107238D98:lI116|H10723A270
+10723A270:lI46|H10723B5D0
+10723B5D0:lI98|H10723C6D0
+10723C6D0:lI101|H10723D590
+10723D590:lI97|H10723E310
+10723E310:lI109|N
+1071F39B0:lH1071F61C0|N
+1071F61C0:lI115|H1071F8E10
+1071F8E10:lI115|H1071FBD50
+1071FBD50:lI108|H1071FEE08
+1071FEE08:lI95|H107201FB0
+107201FB0:lI103|H1072051F0
+1072051F0:lI101|H1072084E8
+1072084E8:lI110|H10720B7B8
+10720B7B8:lI95|H10720EA78
+10720EA78:lI115|H107211DD8
+107211DD8:lI116|H1072152B0
+1072152B0:lI97|H107218950
+107218950:lI116|H10721C180
+10721C180:lI101|H10721F880
+10721F880:lI109|H107222D78
+107222D78:lI46|H107225EE0
+107225EE0:lI98|H107228CF8
+107228CF8:lI101|H10722B740
+10722B740:lI97|H10722DE48
+10722DE48:lI109|N
+1071F39A0:lH1071F61B0|N
+1071F61B0:lI116|H1071F8E00
+1071F8E00:lI108|H1071FBD40
+1071FBD40:lI115|H1071FEDF8
+1071FEDF8:lI95|H107201FA0
+107201FA0:lI99|H1072051E0
+1072051E0:lI111|H1072084D8
+1072084D8:lI110|H10720B7A8
+10720B7A8:lI110|H10720EA68
+10720EA68:lI101|H107211DC8
+107211DC8:lI99|H1072152A0
+1072152A0:lI116|H107218940
+107218940:lI105|H10721C170
+10721C170:lI111|H10721F870
+10721F870:lI110|H107222D68
+107222D68:lI46|H107225ED0
+107225ED0:lI98|H107228CE8
+107228CE8:lI101|H10722B730
+10722B730:lI97|H10722DE38
+10722DE38:lI109|N
+1071F3990:lH1071F61A0|N
+1071F61A0:lI115|H1071F8DF0
+1071F8DF0:lI115|H1071FBD30
+1071FBD30:lI108|H1071FEDE8
+1071FEDE8:lI95|H107201F90
+107201F90:lI99|H1072051D0
+1072051D0:lI105|H1072084C8
+1072084C8:lI112|H10720B798
+10720B798:lI104|H10720EA58
+10720EA58:lI101|H107211DB8
+107211DB8:lI114|H107215290
+107215290:lI46|H107218930
+107218930:lI98|H10721C160
+10721C160:lI101|H10721F860
+10721F860:lI97|H107222D58
+107222D58:lI109|N
+1071F1770:Mn3:H1071F3940,H1071F3958,H1071F3968
+1071F3940:Mn2:H1071F6140,H1071F6150
+1071F6140:lH1071F8D90|N
+1071F8D90:lI115|H1071FBCD0
+1071FBCD0:lI115|H1071FED88
+1071FED88:lI108|H107201F30
+107201F30:lI95|H107205170
+107205170:lI114|H107208468
+107208468:lI101|H10720B738
+10720B738:lI99|H10720E9F8
+10720E9F8:lI111|H107211D58
+107211D58:lI114|H107215230
+107215230:lI100|H1072188D0
+1072188D0:lI46|H10721C100
+10721C100:lI98|H10721F800
+10721F800:lI101|H107222CF8
+107222CF8:lI97|H107225E70
+107225E70:lI109|N
+1071F6150:lH1071F8DA0|N
+1071F8DA0:lI116|H1071FBCE0
+1071FBCE0:lI108|H1071FED98
+1071FED98:lI115|H107201F40
+107201F40:lI95|H107205180
+107205180:lI99|H107208478
+107208478:lI108|H10720B748
+10720B748:lI105|H10720EA08
+10720EA08:lI101|H107211D68
+107211D68:lI110|H107215240
+107215240:lI116|H1072188E0
+1072188E0:lI95|H10721C110
+10721C110:lI116|H10721F810
+10721F810:lI105|H107222D08
+107222D08:lI99|H107225E80
+107225E80:lI107|H107228C98
+107228C98:lI101|H10722B6E0
+10722B6E0:lI116|H10722DDE8
+10722DDE8:lI95|H107230260
+107230260:lI115|H1072323D8
+1072323D8:lI116|H107234250
+107234250:lI111|H107235DD8
+107235DD8:lI114|H1072376D0
+1072376D0:lI101|H107238D68
+107238D68:lI46|H10723A250
+10723A250:lI98|H10723B5B0
+10723B5B0:lI101|H10723C6B0
+10723C6B0:lI97|H10723D570
+10723D570:lI109|N
+1071F3968:Mn2:H1071F6170,H1071F6180
+1071F6170:lH1071F8DC0|N
+1071F8DC0:lI115|H1071FBD00
+1071FBD00:lI115|H1071FEDB8
+1071FEDB8:lI108|H107201F60
+107201F60:lI95|H1072051A0
+1072051A0:lI100|H107208498
+107208498:lI105|H10720B768
+10720B768:lI115|H10720EA28
+10720EA28:lI116|H107211D88
+107211D88:lI95|H107215260
+107215260:lI99|H107218900
+107218900:lI111|H10721C130
+10721C130:lI110|H10721F830
+10721F830:lI110|H107222D28
+107222D28:lI101|H107225EA0
+107225EA0:lI99|H107228CB8
+107228CB8:lI116|H10722B700
+10722B700:lI105|H10722DE08
+10722DE08:lI111|H107230280
+107230280:lI110|H1072323F8
+1072323F8:lI95|H107234270
+107234270:lI115|H107235DE8
+107235DE8:lI117|H1072376E0
+1072376E0:lI112|H107238D78
+107238D78:lI46|H10723A260
+10723A260:lI98|H10723B5C0
+10723B5C0:lI101|H10723C6C0
+10723C6C0:lI97|H10723D580
+10723D580:lI109|N
+1071F6180:lH1071F8DD0|N
+1071F8DD0:lI100|H1071FBD10
+1071FBD10:lI116|H1071FEDC8
+1071FEDC8:lI108|H107201F70
+107201F70:lI115|H1072051B0
+1072051B0:lI95|H1072084A8
+1072084A8:lI99|H10720B778
+10720B778:lI111|H10720EA38
+10720EA38:lI110|H107211D98
+107211D98:lI110|H107215270
+107215270:lI101|H107218910
+107218910:lI99|H10721C140
+10721C140:lI116|H10721F840
+10721F840:lI105|H107222D38
+107222D38:lI111|H107225EB0
+107225EB0:lI110|H107228CC8
+107228CC8:lI95|H10722B710
+10722B710:lI115|H10722DE18
+10722DE18:lI117|H107230290
+107230290:lI112|H107232408
+107232408:lI46|H107234280
+107234280:lI98|H107235DF8
+107235DF8:lI101|H1072376F0
+1072376F0:lI97|H107238D88
+107238D88:lI109|N
+1071F3958:lH1071F6160|N
+1071F6160:lI115|H1071F8DB0
+1071F8DB0:lI115|H1071FBCF0
+1071FBCF0:lI108|H1071FEDA8
+1071FEDA8:lI95|H107201F50
+107201F50:lI99|H107205190
+107205190:lI114|H107208488
+107208488:lI108|H10720B758
+10720B758:lI95|H10720EA18
+10720EA18:lI99|H107211D78
+107211D78:lI97|H107215250
+107215250:lI99|H1072188F0
+1072188F0:lI104|H10721C120
+10721C120:lI101|H10721F820
+10721F820:lI95|H107222D18
+107222D18:lI97|H107225E90
+107225E90:lI112|H107228CA8
+107228CA8:lI105|H10722B6F0
+10722B6F0:lI46|H10722DDF8
+10722DDF8:lI98|H107230270
+107230270:lI101|H1072323E8
+1072323E8:lI97|H107234260
+107234260:lI109|N
+1071F1748:Mn4:H1071F3900,H1071F3910,H1071F3920,H1071F3930
+1071F3900:lH1071F6100|N
+1071F6100:lI115|H1071F8D50
+1071F8D50:lI115|H1071FBC90
+1071FBC90:lI108|H1071FED48
+1071FED48:lI95|H107201EF0
+107201EF0:lI117|H107205130
+107205130:lI112|H107208428
+107208428:lI103|H10720B6F8
+10720B6F8:lI114|H10720E9B8
+10720E9B8:lI97|H107211D18
+107211D18:lI100|H1072151F0
+1072151F0:lI101|H107218890
+107218890:lI95|H10721C0C0
+10721C0C0:lI115|H10721F7C0
+10721F7C0:lI101|H107222CB8
+107222CB8:lI114|H107225E30
+107225E30:lI118|H107228C68
+107228C68:lI101|H10722B6B0
+10722B6B0:lI114|H10722DDB8
+10722DDB8:lI95|H107230230
+107230230:lI115|H1072323A8
+1072323A8:lI101|H107234230
+107234230:lI115|H107235DB8
+107235DB8:lI115|H1072376B0
+1072376B0:lI105|H107238D58
+107238D58:lI111|H10723A240
+10723A240:lI110|H10723B5A0
+10723B5A0:lI95|H10723C6A0
+10723C6A0:lI99|H10723D560
+10723D560:lI97|H10723E300
+10723E300:lI99|H10723EF30
+10723EF30:lI104|H10723FA00
+10723FA00:lI101|H107240350
+107240350:lI95|H107240BE0
+107240BE0:lI115|H107241380
+107241380:lI117|H107241AB0
+107241AB0:lI112|H107242180
+107242180:lI46|H1072427F0
+1072427F0:lI98|H107242DF0
+107242DF0:lI101|H107243360
+107243360:lI97|H1072438A0
+1072438A0:lI109|N
+1071F3930:lH1071F6130|N
+1071F6130:lI115|H1071F8D80
+1071F8D80:lI115|H1071FBCC0
+1071FBCC0:lI108|H1071FED78
+1071FED78:lI95|H107201F20
+107201F20:lI99|H107205160
+107205160:lI114|H107208458
+107208458:lI108|H10720B728
+10720B728:lI95|H10720E9E8
+10720E9E8:lI104|H107211D48
+107211D48:lI97|H107215220
+107215220:lI115|H1072188C0
+1072188C0:lI104|H10721C0F0
+10721C0F0:lI95|H10721F7F0
+10721F7F0:lI100|H107222CE8
+107222CE8:lI105|H107225E60
+107225E60:lI114|H107228C88
+107228C88:lI46|H10722B6D0
+10722B6D0:lI98|H10722DDD8
+10722DDD8:lI101|H107230250
+107230250:lI97|H1072323C8
+1072323C8:lI109|N
+1071F3920:lH1071F6120|N
+1071F6120:lI115|H1071F8D70
+1071F8D70:lI115|H1071FBCB0
+1071FBCB0:lI108|H1071FED68
+1071FED68:lI95|H107201F10
+107201F10:lI109|H107205150
+107205150:lI97|H107208448
+107208448:lI110|H10720B718
+10720B718:lI97|H10720E9D8
+10720E9D8:lI103|H107211D38
+107211D38:lI101|H107215210
+107215210:lI114|H1072188B0
+1072188B0:lI46|H10721C0E0
+10721C0E0:lI98|H10721F7E0
+10721F7E0:lI101|H107222CD8
+107222CD8:lI97|H107225E50
+107225E50:lI109|N
+1071F3910:lH1071F6110|N
+1071F6110:lI100|H1071F8D60
+1071F8D60:lI116|H1071FBCA0
+1071FBCA0:lI108|H1071FED58
+1071FED58:lI115|H107201F00
+107201F00:lI95|H107205140
+107205140:lI103|H107208438
+107208438:lI101|H10720B708
+10720B708:lI110|H10720E9C8
+10720E9C8:lI95|H107211D28
+107211D28:lI99|H107215200
+107215200:lI111|H1072188A0
+1072188A0:lI110|H10721C0D0
+10721C0D0:lI110|H10721F7D0
+10721F7D0:lI101|H107222CC8
+107222CC8:lI99|H107225E40
+107225E40:lI116|H107228C78
+107228C78:lI105|H10722B6C0
+10722B6C0:lI111|H10722DDC8
+10722DDC8:lI110|H107230240
+107230240:lI46|H1072323B8
+1072323B8:lI98|H107234240
+107234240:lI101|H107235DC8
+107235DC8:lI97|H1072376C0
+1072376C0:lI109|N
+1071F1728:Mn3:H1071F38D0,H1071F38E0,H1071F38F0
+1071F38D0:lH1071F60D0|N
+1071F60D0:lI116|H1071F8D20
+1071F8D20:lI108|H1071FBC60
+1071FBC60:lI115|H1071FED18
+1071FED18:lI95|H107201EC0
+107201EC0:lI100|H107205100
+107205100:lI105|H1072083F8
+1072083F8:lI115|H10720B6C8
+10720B6C8:lI116|H10720E988
+10720E988:lI95|H107211CF8
+107211CF8:lI115|H1072151D0
+1072151D0:lI101|H107218870
+107218870:lI114|H10721C0A0
+10721C0A0:lI118|H10721F7A0
+10721F7A0:lI101|H107222C98
+107222C98:lI114|H107225E10
+107225E10:lI95|H107228C48
+107228C48:lI115|H10722B6A0
+10722B6A0:lI117|H10722DDA8
+10722DDA8:lI112|H107230220
+107230220:lI46|H107232398
+107232398:lI98|H107234220
+107234220:lI101|H107235DA8
+107235DA8:lI97|H1072376A0
+1072376A0:lI109|N
+1071F38F0:lH1071F60F0|N
+1071F60F0:lI115|H1071F8D40
+1071F8D40:lI115|H1071FBC80
+1071FBC80:lI108|H1071FED38
+1071FED38:lI95|H107201EE0
+107201EE0:lI100|H107205120
+107205120:lI105|H107208418
+107208418:lI115|H10720B6E8
+10720B6E8:lI116|H10720E9A8
+10720E9A8:lI95|H107211D08
+107211D08:lI115|H1072151E0
+1072151E0:lI117|H107218880
+107218880:lI112|H10721C0B0
+10721C0B0:lI46|H10721F7B0
+10721F7B0:lI98|H107222CA8
+107222CA8:lI101|H107225E20
+107225E20:lI97|H107228C58
+107228C58:lI109|N
+1071F38E0:lH1071F60E0|N
+1071F60E0:lI115|H1071F8D30
+1071F8D30:lI115|H1071FBC70
+1071FBC70:lI108|H1071FED28
+1071FED28:lI46|H107201ED0
+107201ED0:lI97|H107205110
+107205110:lI112|H107208408
+107208408:lI112|H10720B6D8
+10720B6D8:lI117|H10720E998
+10720E998:lI112|N
+1071F16F8:Mn5:H1071F3878,H1071F3888,H1071F38A0,H1071F38B0,H1071F38C0
+1071F3878:lH1071F6070|N
+1071F6070:lI100|H1071F8CC0
+1071F8CC0:lI116|H1071FBC00
+1071FBC00:lI108|H1071FECB8
+1071FECB8:lI115|H107201E60
+107201E60:lI95|H1072050A0
+1072050A0:lI115|H107208398
+107208398:lI117|H10720B668
+10720B668:lI112|H10720E928
+10720E928:lI46|H107211CA8
+107211CA8:lI98|H107215180
+107215180:lI101|H107218820
+107218820:lI97|H10721C060
+10721C060:lI109|N
+1071F38C0:lH1071F60C0|N
+1071F60C0:lI116|H1071F8D10
+1071F8D10:lI108|H1071FBC50
+1071FBC50:lI115|H1071FED08
+1071FED08:lI95|H107201EB0
+107201EB0:lI115|H1072050F0
+1072050F0:lI101|H1072083E8
+1072083E8:lI110|H10720B6B8
+10720B6B8:lI100|H10720E978
+10720E978:lI101|H107211CE8
+107211CE8:lI114|H1072151C0
+1072151C0:lI46|H107218860
+107218860:lI98|H10721C090
+10721C090:lI101|H10721F790
+10721F790:lI97|H107222C88
+107222C88:lI109|N
+1071F38B0:lH1071F60B0|N
+1071F60B0:lI100|H1071F8D00
+1071F8D00:lI116|H1071FBC40
+1071FBC40:lI108|H1071FECF8
+1071FECF8:lI115|H107201EA0
+107201EA0:lI95|H1072050E0
+1072050E0:lI118|H1072083D8
+1072083D8:lI49|H10720B6A8
+10720B6A8:lI46|H10720E968
+10720E968:lI98|H107211CD8
+107211CD8:lI101|H1072151B0
+1072151B0:lI97|H107218850
+107218850:lI109|N
+1071F38A0:lH1071F60A0|N
+1071F60A0:lI115|H1071F8CF0
+1071F8CF0:lI115|H1071FBC30
+1071FBC30:lI108|H1071FECE8
+1071FECE8:lI95|H107201E90
+107201E90:lI99|H1072050D0
+1072050D0:lI101|H1072083C8
+1072083C8:lI114|H10720B698
+10720B698:lI116|H10720E958
+10720E958:lI105|H107211CC8
+107211CC8:lI102|H1072151A0
+1072151A0:lI105|H107218840
+107218840:lI99|H10721C080
+10721C080:lI97|H10721F780
+10721F780:lI116|H107222C78
+107222C78:lI101|H107225E00
+107225E00:lI46|H107228C38
+107228C38:lI98|H10722B690
+10722B690:lI101|H10722DD98
+10722DD98:lI97|H107230210
+107230210:lI109|N
+1071F3888:Mn2:H1071F6080,H1071F6090
+1071F6080:lH1071F8CD0|N
+1071F8CD0:lI115|H1071FBC10
+1071FBC10:lI115|H1071FECC8
+1071FECC8:lI108|H107201E70
+107201E70:lI46|H1072050B0
+1072050B0:lI98|H1072083A8
+1072083A8:lI101|H10720B678
+10720B678:lI97|H10720E938
+10720E938:lI109|N
+1071F6090:lH1071F8CE0|N
+1071F8CE0:lI115|H1071FBC20
+1071FBC20:lI115|H1071FECD8
+1071FECD8:lI108|H107201E80
+107201E80:lI95|H1072050C0
+1072050C0:lI115|H1072083B8
+1072083B8:lI101|H10720B688
+10720B688:lI115|H10720E948
+10720E948:lI115|H107211CB8
+107211CB8:lI105|H107215190
+107215190:lI111|H107218830
+107218830:lI110|H10721C070
+10721C070:lI95|H10721F770
+10721F770:lI99|H107222C68
+107222C68:lI97|H107225DF0
+107225DF0:lI99|H107228C28
+107228C28:lI104|H10722B680
+10722B680:lI101|H10722DD88
+10722DD88:lI95|H107230200
+107230200:lI97|H107232388
+107232388:lI112|H107234210
+107234210:lI105|H107235D98
+107235D98:lI46|H107237690
+107237690:lI98|H107238D48
+107238D48:lI101|H10723A230
+10723A230:lI97|H10723B590
+10723B590:lI109|N
+1071F16D8:Mn3:H1071F3840,H1071F3858,H1071F3868
+1071F3840:Mn2:H1071F6030,H1071F6040
+1071F6030:lH1071F8C80|N
+1071F8C80:lI115|H1071FBBC0
+1071FBBC0:lI115|H1071FEC78
+1071FEC78:lI108|H107201E20
+107201E20:lI95|H107205060
+107205060:lI99|H107208358
+107208358:lI111|H10720B628
+10720B628:lI110|H10720E8E8
+10720E8E8:lI102|H107211C68
+107211C68:lI105|H107215140
+107215140:lI103|H1072187E0
+1072187E0:lI46|H10721C020
+10721C020:lI98|H10721F730
+10721F730:lI101|H107222C28
+107222C28:lI97|H107225DB0
+107225DB0:lI109|N
+1071F6040:lH1071F8C90|N
+1071F8C90:lI116|H1071FBBD0
+1071FBBD0:lI108|H1071FEC88
+1071FEC88:lI115|H107201E30
+107201E30:lI95|H107205070
+107205070:lI114|H107208368
+107208368:lI101|H10720B638
+10720B638:lI99|H10720E8F8
+10720E8F8:lI111|H107211C78
+107211C78:lI114|H107215150
+107215150:lI100|H1072187F0
+1072187F0:lI95|H10721C030
+10721C030:lI49|H10721F740
+10721F740:lI95|H107222C38
+107222C38:lI51|H107225DC0
+107225DC0:lI46|H107228C08
+107228C08:lI98|H10722B660
+10722B660:lI101|H10722DD68
+10722DD68:lI97|H1072301E0
+1072301E0:lI109|N
+1071F3868:lH1071F6060|N
+1071F6060:lI115|H1071F8CB0
+1071F8CB0:lI115|H1071FBBF0
+1071FBBF0:lI108|H1071FECA8
+1071FECA8:lI95|H107201E50
+107201E50:lI115|H107205090
+107205090:lI101|H107208388
+107208388:lI115|H10720B658
+10720B658:lI115|H10720E918
+10720E918:lI105|H107211C98
+107211C98:lI111|H107215170
+107215170:lI110|H107218810
+107218810:lI46|H10721C050
+10721C050:lI98|H10721F760
+10721F760:lI101|H107222C58
+107222C58:lI97|H107225DE0
+107225DE0:lI109|N
+1071F3858:lH1071F6050|N
+1071F6050:lI115|H1071F8CA0
+1071F8CA0:lI115|H1071FBBE0
+1071FBBE0:lI108|H1071FEC98
+1071FEC98:lI95|H107201E40
+107201E40:lI115|H107205080
+107205080:lI101|H107208378
+107208378:lI114|H10720B648
+10720B648:lI118|H10720E908
+10720E908:lI101|H107211C88
+107211C88:lI114|H107215160
+107215160:lI95|H107218800
+107218800:lI115|H10721C040
+10721C040:lI101|H10721F750
+10721F750:lI115|H107222C48
+107222C48:lI115|H107225DD0
+107225DD0:lI105|H107228C18
+107228C18:lI111|H10722B670
+10722B670:lI110|H10722DD78
+10722DD78:lI95|H1072301F0
+1072301F0:lI99|H107232378
+107232378:lI97|H107234200
+107234200:lI99|H107235D88
+107235D88:lI104|H107237680
+107237680:lI101|H107238D38
+107238D38:lI95|H10723A220
+10723A220:lI100|H10723B580
+10723B580:lI98|H10723C690
+10723C690:lI46|H10723D550
+10723D550:lI98|H10723E2F0
+10723E2F0:lI101|H10723EF20
+10723EF20:lI97|H10723F9F0
+10723F9F0:lI109|N
+1071F16A8:Mn5:H1071F37F0,H1071F3800,H1071F3810,H1071F3820,H1071F3830
+1071F37F0:lH1071F5FE0|N
+1071F5FE0:lI100|H1071F8C30
+1071F8C30:lI116|H1071FBB70
+1071FBB70:lI108|H1071FEC28
+1071FEC28:lI115|H107201DD0
+107201DD0:lI95|H107205010
+107205010:lI115|H107208308
+107208308:lI101|H10720B5D8
+10720B5D8:lI114|H10720E898
+10720E898:lI118|H107211C18
+107211C18:lI101|H1072150F0
+1072150F0:lI114|H107218790
+107218790:lI95|H10721BFD0
+10721BFD0:lI115|H10721F6E0
+10721F6E0:lI117|H107222BD8
+107222BD8:lI112|H107225D60
+107225D60:lI46|H107228BB8
+107228BB8:lI98|H10722B610
+10722B610:lI101|H10722DD28
+10722DD28:lI97|H1072301A0
+1072301A0:lI109|N
+1071F3830:lH1071F6020|N
+1071F6020:lI116|H1071F8C70
+1071F8C70:lI108|H1071FBBB0
+1071FBBB0:lI115|H1071FEC68
+1071FEC68:lI95|H107201E10
+107201E10:lI103|H107205050
+107205050:lI101|H107208348
+107208348:lI110|H10720B618
+10720B618:lI95|H10720E8D8
+10720E8D8:lI99|H107211C58
+107211C58:lI111|H107215130
+107215130:lI110|H1072187D0
+1072187D0:lI110|H10721C010
+10721C010:lI101|H10721F720
+10721F720:lI99|H107222C18
+107222C18:lI116|H107225DA0
+107225DA0:lI105|H107228BF8
+107228BF8:lI111|H10722B650
+10722B650:lI110|H10722DD58
+10722DD58:lI46|H1072301D0
+1072301D0:lI98|H107232368
+107232368:lI101|H1072341F0
+1072341F0:lI97|H107235D78
+107235D78:lI109|N
+1071F3820:lH1071F6010|N
+1071F6010:lI105|H1071F8C60
+1071F8C60:lI110|H1071FBBA0
+1071FBBA0:lI101|H1071FEC58
+1071FEC58:lI116|H107201E00
+107201E00:lI95|H107205040
+107205040:lI116|H107208338
+107208338:lI108|H10720B608
+10720B608:lI115|H10720E8C8
+10720E8C8:lI95|H107211C48
+107211C48:lI100|H107215120
+107215120:lI105|H1072187C0
+1072187C0:lI115|H10721C000
+10721C000:lI116|H10721F710
+10721F710:lI46|H107222C08
+107222C08:lI98|H107225D90
+107225D90:lI101|H107228BE8
+107228BE8:lI97|H10722B640
+10722B640:lI109|N
+1071F3810:lH1071F6000|N
+1071F6000:lI115|H1071F8C50
+1071F8C50:lI115|H1071FBB90
+1071FBB90:lI108|H1071FEC48
+1071FEC48:lI95|H107201DF0
+107201DF0:lI99|H107205030
+107205030:lI111|H107208328
+107208328:lI110|H10720B5F8
+10720B5F8:lI110|H10720E8B8
+10720E8B8:lI101|H107211C38
+107211C38:lI99|H107215110
+107215110:lI116|H1072187B0
+1072187B0:lI105|H10721BFF0
+10721BFF0:lI111|H10721F700
+10721F700:lI110|H107222BF8
+107222BF8:lI95|H107225D80
+107225D80:lI115|H107228BD8
+107228BD8:lI117|H10722B630
+10722B630:lI112|H10722DD48
+10722DD48:lI46|H1072301C0
+1072301C0:lI98|H107232358
+107232358:lI101|H1072341E0
+1072341E0:lI97|H107235D68
+107235D68:lI109|N
+1071F3800:lH1071F5FF0|N
+1071F5FF0:lI115|H1071F8C40
+1071F8C40:lI115|H1071FBB80
+1071FBB80:lI108|H1071FEC38
+1071FEC38:lI95|H107201DE0
+107201DE0:lI100|H107205020
+107205020:lI105|H107208318
+107208318:lI115|H10720B5E8
+10720B5E8:lI116|H10720E8A8
+10720E8A8:lI95|H107211C28
+107211C28:lI97|H107215100
+107215100:lI100|H1072187A0
+1072187A0:lI109|H10721BFE0
+10721BFE0:lI105|H10721F6F0
+10721F6F0:lI110|H107222BE8
+107222BE8:lI95|H107225D70
+107225D70:lI115|H107228BC8
+107228BC8:lI117|H10722B620
+10722B620:lI112|H10722DD38
+10722DD38:lI46|H1072301B0
+1072301B0:lI98|H107232348
+107232348:lI101|H1072341D0
+1072341D0:lI97|H107235D58
+107235D58:lI109|N
+1071F1678:Mn5:H1071F37A0,H1071F37B0,H1071F37C0,H1071F37D0,H1071F37E0
+1071F37A0:lH1071F5F90|N
+1071F5F90:lI116|H1071F8BE0
+1071F8BE0:lI108|H1071FBB20
+1071FBB20:lI115|H1071FEBD8
+1071FEBD8:lI95|H107201D80
+107201D80:lI115|H107204FC0
+107204FC0:lI111|H1072082B8
+1072082B8:lI99|H10720B588
+10720B588:lI107|H10720E848
+10720E848:lI101|H107211BC8
+107211BC8:lI116|H1072150A0
+1072150A0:lI46|H107218740
+107218740:lI98|H10721BF90
+10721BF90:lI101|H10721F6A0
+10721F6A0:lI97|H107222BA8
+107222BA8:lI109|N
+1071F37E0:lH1071F5FD0|N
+1071F5FD0:lI115|H1071F8C20
+1071F8C20:lI115|H1071FBB60
+1071FBB60:lI108|H1071FEC18
+1071FEC18:lI95|H107201DC0
+107201DC0:lI99|H107205000
+107205000:lI114|H1072082F8
+1072082F8:lI108|H10720B5C8
+10720B5C8:lI46|H10720E888
+10720E888:lI98|H107211C08
+107211C08:lI101|H1072150E0
+1072150E0:lI97|H107218780
+107218780:lI109|N
+1071F37D0:lH1071F5FC0|N
+1071F5FC0:lI115|H1071F8C10
+1071F8C10:lI115|H1071FBB50
+1071FBB50:lI108|H1071FEC08
+1071FEC08:lI95|H107201DB0
+107201DB0:lI116|H107204FF0
+107204FF0:lI114|H1072082E8
+1072082E8:lI97|H10720B5B8
+10720B5B8:lI99|H10720E878
+10720E878:lI101|H107211BF8
+107211BF8:lI46|H1072150D0
+1072150D0:lI98|H107218770
+107218770:lI101|H10721BFC0
+10721BFC0:lI97|H10721F6D0
+10721F6D0:lI109|N
+1071F37C0:lH1071F5FB0|N
+1071F5FB0:lI100|H1071F8C00
+1071F8C00:lI116|H1071FBB40
+1071FBB40:lI108|H1071FEBF8
+1071FEBF8:lI115|H107201DA0
+107201DA0:lI95|H107204FE0
+107204FE0:lI114|H1072082D8
+1072082D8:lI101|H10720B5A8
+10720B5A8:lI99|H10720E868
+10720E868:lI111|H107211BE8
+107211BE8:lI114|H1072150C0
+1072150C0:lI100|H107218760
+107218760:lI46|H10721BFB0
+10721BFB0:lI98|H10721F6C0
+10721F6C0:lI101|H107222BC8
+107222BC8:lI97|H107225D50
+107225D50:lI109|N
+1071F37B0:lH1071F5FA0|N
+1071F5FA0:lI100|H1071F8BF0
+1071F8BF0:lI116|H1071FBB30
+1071FBB30:lI108|H1071FEBE8
+1071FEBE8:lI115|H107201D90
+107201D90:lI95|H107204FD0
+107204FD0:lI108|H1072082C8
+1072082C8:lI105|H10720B598
+10720B598:lI115|H10720E858
+10720E858:lI116|H107211BD8
+107211BD8:lI101|H1072150B0
+1072150B0:lI110|H107218750
+107218750:lI101|H10721BFA0
+10721BFA0:lI114|H10721F6B0
+10721F6B0:lI95|H107222BB8
+107222BB8:lI115|H107225D40
+107225D40:lI117|H107228BA8
+107228BA8:lI112|H10722B600
+10722B600:lI46|H10722DD18
+10722DD18:lI98|H107230190
+107230190:lI101|H107232338
+107232338:lI97|H1072341C0
+1072341C0:lI109|N
+1071F1640:Mn6:H1071F3720,H1071F3740,H1071F3750,H1071F3760,H1071F3780,H1071F3790
+1071F3720:Mn3:H1071F5EF0,H1071F5F00,H1071F5F10
+1071F5EF0:lH1071F8B40|N
+1071F8B40:lI115|H1071FBA80
+1071FBA80:lI115|H1071FEB38
+1071FEB38:lI108|H107201CE0
+107201CE0:lI95|H107204F20
+107204F20:lI115|H107208218
+107208218:lI101|H10720B4E8
+10720B4E8:lI114|H10720E7A8
+10720E7A8:lI118|H107211B28
+107211B28:lI101|H107215000
+107215000:lI114|H1072186A0
+1072186A0:lI95|H10721BF00
+10721BF00:lI115|H10721F620
+10721F620:lI101|H107222B28
+107222B28:lI115|H107225CD0
+107225CD0:lI115|H107228B38
+107228B38:lI105|H10722B590
+10722B590:lI111|H10722DCA8
+10722DCA8:lI110|H107230140
+107230140:lI95|H1072322E8
+1072322E8:lI99|H107234170
+107234170:lI97|H107235D08
+107235D08:lI99|H107237630
+107237630:lI104|H107238CE8
+107238CE8:lI101|H10723A1D0
+10723A1D0:lI46|H10723B530
+10723B530:lI98|H10723C640
+10723C640:lI101|H10723D510
+10723D510:lI97|H10723E2B0
+10723E2B0:lI109|N
+1071F5F10:lH1071F8B60|N
+1071F8B60:lI116|H1071FBAA0
+1071FBAA0:lI108|H1071FEB58
+1071FEB58:lI115|H107201D00
+107201D00:lI95|H107204F40
+107204F40:lI100|H107208238
+107208238:lI121|H10720B508
+10720B508:lI110|H10720E7C8
+10720E7C8:lI95|H107211B48
+107211B48:lI99|H107215020
+107215020:lI111|H1072186C0
+1072186C0:lI110|H10721BF20
+10721BF20:lI110|H10721F640
+10721F640:lI101|H107222B48
+107222B48:lI99|H107225CF0
+107225CF0:lI116|H107228B58
+107228B58:lI105|H10722B5B0
+10722B5B0:lI111|H10722DCC8
+10722DCC8:lI110|H107230150
+107230150:lI95|H1072322F8
+1072322F8:lI115|H107234180
+107234180:lI117|H107235D18
+107235D18:lI112|H107237640
+107237640:lI46|H107238CF8
+107238CF8:lI98|H10723A1E0
+10723A1E0:lI101|H10723B540
+10723B540:lI97|H10723C650
+10723C650:lI109|N
+1071F5F00:lH1071F8B50|N
+1071F8B50:lI116|H1071FBA90
+1071FBA90:lI108|H1071FEB48
+1071FEB48:lI115|H107201CF0
+107201CF0:lI95|H107204F30
+107204F30:lI104|H107208228
+107208228:lI97|H10720B4F8
+10720B4F8:lI110|H10720E7B8
+10720E7B8:lI100|H107211B38
+107211B38:lI115|H107215010
+107215010:lI104|H1072186B0
+1072186B0:lI97|H10721BF10
+10721BF10:lI107|H10721F630
+10721F630:lI101|H107222B38
+107222B38:lI46|H107225CE0
+107225CE0:lI98|H107228B48
+107228B48:lI101|H10722B5A0
+10722B5A0:lI97|H10722DCB8
+10722DCB8:lI109|N
+1071F3790:lH1071F5F80|N
+1071F5F80:lI115|H1071F8BD0
+1071F8BD0:lI115|H1071FBB10
+1071FBB10:lI108|H1071FEBC8
+1071FEBC8:lI95|H107201D70
+107201D70:lI99|H107204FB0
+107204FB0:lI108|H1072082A8
+1072082A8:lI105|H10720B578
+10720B578:lI101|H10720E838
+10720E838:lI110|H107211BB8
+107211BB8:lI116|H107215090
+107215090:lI95|H107218730
+107218730:lI115|H10721BF80
+10721BF80:lI101|H10721F690
+10721F690:lI115|H107222B98
+107222B98:lI115|H107225D30
+107225D30:lI105|H107228B98
+107228B98:lI111|H10722B5F0
+10722B5F0:lI110|H10722DD08
+10722DD08:lI95|H107230180
+107230180:lI99|H107232328
+107232328:lI97|H1072341B0
+1072341B0:lI99|H107235D48
+107235D48:lI104|H107237670
+107237670:lI101|H107238D28
+107238D28:lI95|H10723A210
+10723A210:lI100|H10723B570
+10723B570:lI98|H10723C680
+10723C680:lI46|H10723D540
+10723D540:lI98|H10723E2E0
+10723E2E0:lI101|H10723EF10
+10723EF10:lI97|H10723F9E0
+10723F9E0:lI109|N
+1071F3780:lH1071F5F70|N
+1071F5F70:lI115|H1071F8BC0
+1071F8BC0:lI115|H1071FBB00
+1071FBB00:lI108|H1071FEBB8
+1071FEBB8:lI95|H107201D60
+107201D60:lI97|H107204FA0
+107204FA0:lI112|H107208298
+107208298:lI112|H10720B568
+10720B568:lI46|H10720E828
+10720E828:lI98|H107211BA8
+107211BA8:lI101|H107215080
+107215080:lI97|H107218720
+107218720:lI109|N
+1071F3760:Mn3:H1071F5F40,H1071F5F50,H1071F5F60
+1071F5F40:lH1071F8B90|N
+1071F8B90:lI115|H1071FBAD0
+1071FBAD0:lI115|H1071FEB88
+1071FEB88:lI108|H107201D30
+107201D30:lI95|H107204F70
+107204F70:lI115|H107208268
+107208268:lI117|H10720B538
+10720B538:lI112|H10720E7F8
+10720E7F8:lI46|H107211B78
+107211B78:lI98|H107215050
+107215050:lI101|H1072186F0
+1072186F0:lI97|H10721BF50
+10721BF50:lI109|N
+1071F5F60:lH1071F8BB0|N
+1071F8BB0:lI116|H1071FBAF0
+1071FBAF0:lI108|H1071FEBA8
+1071FEBA8:lI115|H107201D50
+107201D50:lI95|H107204F90
+107204F90:lI115|H107208288
+107208288:lI101|H10720B558
+10720B558:lI114|H10720E818
+10720E818:lI118|H107211B98
+107211B98:lI101|H107215070
+107215070:lI114|H107218710
+107218710:lI95|H10721BF70
+10721BF70:lI99|H10721F680
+10721F680:lI111|H107222B88
+107222B88:lI110|H107225D20
+107225D20:lI110|H107228B88
+107228B88:lI101|H10722B5E0
+10722B5E0:lI99|H10722DCF8
+10722DCF8:lI116|H107230170
+107230170:lI105|H107232318
+107232318:lI111|H1072341A0
+1072341A0:lI110|H107235D38
+107235D38:lI95|H107237660
+107237660:lI49|H107238D18
+107238D18:lI95|H10723A200
+10723A200:lI51|H10723B560
+10723B560:lI46|H10723C670
+10723C670:lI98|H10723D530
+10723D530:lI101|H10723E2D0
+10723E2D0:lI97|H10723EF00
+10723EF00:lI109|N
+1071F5F50:lH1071F8BA0|N
+1071F8BA0:lI115|H1071FBAE0
+1071FBAE0:lI115|H1071FEB98
+1071FEB98:lI108|H107201D40
+107201D40:lI95|H107204F80
+107204F80:lI97|H107208278
+107208278:lI108|H10720B548
+10720B548:lI101|H10720E808
+10720E808:lI114|H107211B88
+107211B88:lI116|H107215060
+107215060:lI46|H107218700
+107218700:lI98|H10721BF60
+10721BF60:lI101|H10721F670
+10721F670:lI97|H107222B78
+107222B78:lI109|N
+1071F3750:lH1071F5F30|N
+1071F5F30:lI100|H1071F8B80
+1071F8B80:lI116|H1071FBAC0
+1071FBAC0:lI108|H1071FEB78
+1071FEB78:lI115|H107201D20
+107201D20:lI95|H107204F60
+107204F60:lI115|H107208258
+107208258:lI101|H10720B528
+10720B528:lI114|H10720E7E8
+10720E7E8:lI118|H107211B68
+107211B68:lI101|H107215040
+107215040:lI114|H1072186E0
+1072186E0:lI95|H10721BF40
+10721BF40:lI115|H10721F660
+10721F660:lI101|H107222B68
+107222B68:lI115|H107225D10
+107225D10:lI115|H107228B78
+107228B78:lI105|H10722B5D0
+10722B5D0:lI111|H10722DCE8
+10722DCE8:lI110|H107230160
+107230160:lI95|H107232308
+107232308:lI99|H107234190
+107234190:lI97|H107235D28
+107235D28:lI99|H107237650
+107237650:lI104|H107238D08
+107238D08:lI101|H10723A1F0
+10723A1F0:lI95|H10723B550
+10723B550:lI115|H10723C660
+10723C660:lI117|H10723D520
+10723D520:lI112|H10723E2C0
+10723E2C0:lI46|H10723EEF0
+10723EEF0:lI98|H10723F9D0
+10723F9D0:lI101|H107240340
+107240340:lI97|H107240BD0
+107240BD0:lI109|N
+1071F3740:lH1071F5F20|N
+1071F5F20:lI116|H1071F8B70
+1071F8B70:lI108|H1071FBAB0
+1071FBAB0:lI115|H1071FEB68
+1071FEB68:lI95|H107201D10
+107201D10:lI115|H107204F50
+107204F50:lI101|H107208248
+107208248:lI114|H10720B518
+10720B518:lI118|H10720E7D8
+10720E7D8:lI101|H107211B58
+107211B58:lI114|H107215030
+107215030:lI95|H1072186D0
+1072186D0:lI115|H10721BF30
+10721BF30:lI117|H10721F650
+10721F650:lI112|H107222B58
+107222B58:lI46|H107225D00
+107225D00:lI98|H107228B68
+107228B68:lI101|H10722B5C0
+10722B5C0:lI97|H10722DCD8
+10722DCD8:lI109|N
+1071F1610:Mn5:H1071F36C0,H1071F36D8,H1071F36E8,H1071F36F8,H1071F3708
+1071F36C0:Mn2:H1071F5E80,H1071F5E90
+1071F5E80:lH1071F8AD0|N
+1071F8AD0:lI116|H1071FBA10
+1071FBA10:lI108|H1071FEAC8
+1071FEAC8:lI115|H107201C70
+107201C70:lI95|H107204EB0
+107204EB0:lI104|H1072081A8
+1072081A8:lI97|H10720B478
+10720B478:lI110|H10720E738
+10720E738:lI100|H107211AB8
+107211AB8:lI115|H107214F90
+107214F90:lI104|H107218630
+107218630:lI97|H10721BE90
+10721BE90:lI107|H10721F5C0
+10721F5C0:lI101|H107222AC8
+107222AC8:lI95|H107225C70
+107225C70:lI49|H107228AD8
+107228AD8:lI95|H10722B530
+10722B530:lI51|H10722DC58
+10722DC58:lI46|H107230100
+107230100:lI98|H1072322A8
+1072322A8:lI101|H107234140
+107234140:lI97|H107235CE8
+107235CE8:lI109|N
+1071F5E90:lH1071F8AE0|N
+1071F8AE0:lI115|H1071FBA20
+1071FBA20:lI115|H1071FEAD8
+1071FEAD8:lI108|H107201C80
+107201C80:lI95|H107204EC0
+107204EC0:lI97|H1072081B8
+1072081B8:lI100|H10720B488
+10720B488:lI109|H10720E748
+10720E748:lI105|H107211AC8
+107211AC8:lI110|H107214FA0
+107214FA0:lI95|H107218640
+107218640:lI115|H10721BEA0
+10721BEA0:lI117|H10721F5D0
+10721F5D0:lI112|H107222AD8
+107222AD8:lI46|H107225C80
+107225C80:lI98|H107228AE8
+107228AE8:lI101|H10722B540
+10722B540:lI97|H10722DC68
+10722DC68:lI109|N
+1071F3708:Mn2:H1071F5ED0,H1071F5EE0
+1071F5ED0:lH1071F8B20|N
+1071F8B20:lI116|H1071FBA60
+1071FBA60:lI108|H1071FEB18
+1071FEB18:lI115|H107201CC0
+107201CC0:lI95|H107204F00
+107204F00:lI115|H1072081F8
+1072081F8:lI117|H10720B4C8
+10720B4C8:lI112|H10720E788
+10720E788:lI46|H107211B08
+107211B08:lI98|H107214FE0
+107214FE0:lI101|H107218680
+107218680:lI97|H10721BEE0
+10721BEE0:lI109|N
+1071F5EE0:lH1071F8B30|N
+1071F8B30:lI100|H1071FBA70
+1071FBA70:lI116|H1071FEB28
+1071FEB28:lI108|H107201CD0
+107201CD0:lI115|H107204F10
+107204F10:lI95|H107208208
+107208208:lI99|H10720B4D8
+10720B4D8:lI111|H10720E798
+10720E798:lI110|H107211B18
+107211B18:lI110|H107214FF0
+107214FF0:lI101|H107218690
+107218690:lI99|H10721BEF0
+10721BEF0:lI116|H10721F610
+10721F610:lI105|H107222B18
+107222B18:lI111|H107225CC0
+107225CC0:lI110|H107228B28
+107228B28:lI46|H10722B580
+10722B580:lI98|H10722DC98
+10722DC98:lI101|H107230130
+107230130:lI97|H1072322D8
+1072322D8:lI109|N
+1071F36F8:lH1071F5EC0|N
+1071F5EC0:lI115|H1071F8B10
+1071F8B10:lI115|H1071FBA50
+1071FBA50:lI108|H1071FEB08
+1071FEB08:lI95|H107201CB0
+107201CB0:lI99|H107204EF0
+107204EF0:lI114|H1072081E8
+1072081E8:lI108|H10720B4B8
+10720B4B8:lI95|H10720E778
+10720E778:lI99|H107211AF8
+107211AF8:lI97|H107214FD0
+107214FD0:lI99|H107218670
+107218670:lI104|H10721BED0
+10721BED0:lI101|H10721F600
+10721F600:lI46|H107222B08
+107222B08:lI98|H107225CB0
+107225CB0:lI101|H107228B18
+107228B18:lI97|H10722B570
+10722B570:lI109|N
+1071F36E8:lH1071F5EB0|N
+1071F5EB0:lI100|H1071F8B00
+1071F8B00:lI116|H1071FBA40
+1071FBA40:lI108|H1071FEAF8
+1071FEAF8:lI115|H107201CA0
+107201CA0:lI95|H107204EE0
+107204EE0:lI112|H1072081D8
+1072081D8:lI97|H10720B4A8
+10720B4A8:lI99|H10720E768
+10720E768:lI107|H107211AE8
+107211AE8:lI101|H107214FC0
+107214FC0:lI116|H107218660
+107218660:lI95|H10721BEC0
+10721BEC0:lI100|H10721F5F0
+10721F5F0:lI101|H107222AF8
+107222AF8:lI109|H107225CA0
+107225CA0:lI117|H107228B08
+107228B08:lI120|H10722B560
+10722B560:lI46|H10722DC88
+10722DC88:lI98|H107230120
+107230120:lI101|H1072322C8
+1072322C8:lI97|H107234160
+107234160:lI109|N
+1071F36D8:lH1071F5EA0|N
+1071F5EA0:lI116|H1071F8AF0
+1071F8AF0:lI108|H1071FBA30
+1071FBA30:lI115|H1071FEAE8
+1071FEAE8:lI95|H107201C90
+107201C90:lI100|H107204ED0
+107204ED0:lI116|H1072081C8
+1072081C8:lI108|H10720B498
+10720B498:lI115|H10720E758
+10720E758:lI95|H107211AD8
+107211AD8:lI99|H107214FB0
+107214FB0:lI111|H107218650
+107218650:lI110|H10721BEB0
+10721BEB0:lI110|H10721F5E0
+10721F5E0:lI101|H107222AE8
+107222AE8:lI99|H107225C90
+107225C90:lI116|H107228AF8
+107228AF8:lI105|H10722B550
+10722B550:lI111|H10722DC78
+10722DC78:lI110|H107230110
+107230110:lI46|H1072322B8
+1072322B8:lI98|H107234150
+107234150:lI101|H107235CF8
+107235CF8:lI97|H107237620
+107237620:lI109|N
+1071F0548:lI47|H1071F15E8
+1071F15E8:lI111|H1071F3690
+1071F3690:lI112|H1071F5E50
+1071F5E50:lI116|H1071F8AA0
+1071F8AA0:lI47|H1071FB9E0
+1071FB9E0:lI104|H1071FEA98
+1071FEA98:lI111|H107201C40
+107201C40:lI109|H107204E80
+107204E80:lI101|H107208178
+107208178:lI98|H10720B458
+10720B458:lI114|H10720E718
+10720E718:lI101|H107211A98
+107211A98:lI119|H107214F70
+107214F70:lI47|H107218610
+107218610:lI67|H10721BE70
+10721BE70:lI101|H10721F5A0
+10721F5A0:lI108|H107222AA8
+107222AA8:lI108|H107225C60
+107225C60:lI97|H107228AC8
+107228AC8:lI114|H10722B520
+10722B520:lI47|H10722DC48
+10722DC48:lI101|H1072300F0
+1072300F0:lI114|H107232298
+107232298:lI108|H107234130
+107234130:lI97|H107235CD8
+107235CD8:lI110|H107237610
+107237610:lI103|H107238CD8
+107238CD8:lI47|H10723A1C0
+10723A1C0:lI50|H10723B520
+10723B520:lI54|H10723C630
+10723C630:lI46|H10723D500
+10723D500:lI48|H10723E2A0
+10723E2A0:lI46|H10723EEE0
+10723EEE0:lI50|H10723F9C0
+10723F9C0:lI47|H107240330
+107240330:lI108|H107240BC0
+107240BC0:lI105|H107241370
+107241370:lI98|H107241AA0
+107241AA0:lI47|H107242170
+107242170:lI101|H1072427E0
+1072427E0:lI114|H107242DE0
+107242DE0:lI108|H107243350
+107243350:lI97|H107243890
+107243890:lI110|H107243DA0
+107243DA0:lI103|H107244290
+107244290:lI47|H107244740
+107244740:lI108|H107244BB0
+107244BB0:lI105|H107245010
+107245010:lI98|H107245460
+107245460:lI47|H107245860
+107245860:lI115|H107245C20
+107245C20:lI115|H107245FB0
+107245FB0:lI108|H107246340
+107246340:lI45|H1072466D0
+1072466D0:lI49|H107246A60
+107246A60:lI49|H107246DA0
+107246DA0:lI46|H1072470C0
+1072470C0:lI48|H1072473E0
+1072473E0:lI46|H1072476F0
+1072476F0:lI50|H1072479F0
+1072479F0:lI47|H280052C20
+1071F0538:lH1071F15C0|H1071F15D8
+1071F15C0:t2:H1071F35C8,H1071F35D8
+1071F35D8:Mh2B:10:H1071F5BC0,H1071F5BF8,H1071F5C10,H1071F5C30,H1071F5C48,H1071F5C58,H1071F5C70,H1071F5C90,H1071F5CA8,H1071F5CD0,H1071F5CE8,H1071F5D10,H1071F5D20,H1071F5D40,H1071F5D58,H1071F5D70
+1071F5BC0:Mn6:H1071F8428,H1071F8438,H1071F8450,H1071F8460,H1071F8470,H1071F8480
+1071F8428:lH1071FB080|N
+1071FB080:lI115|H1071FDFC0
+1071FDFC0:lI115|H107201078
+107201078:lI104|H107204220
+107204220:lI95|H107207450
+107207450:lI99|H10720A6C8
+10720A6C8:lI108|H10720D8B8
+10720D8B8:lI105|H107210A58
+107210A58:lI101|H107213CB8
+107213CB8:lI110|H107217070
+107217070:lI116|H10721A5A0
+10721A5A0:lI95|H10721DB40
+10721DB40:lI99|H107221060
+107221060:lI104|H107224268
+107224268:lI97|H107227190
+107227190:lI110|H107229CC8
+107229CC8:lI110|H10722C4D0
+10722C4D0:lI101|H10722EA18
+10722EA18:lI108|H107230C80
+107230C80:lI46|H107232C78
+107232C78:lI98|H107234950
+107234950:lI101|H107236388
+107236388:lI97|H107237B50
+107237B50:lI109|N
+1071F8480:lH1071FB0E0|N
+1071FB0E0:lI115|H1071FE020
+1071FE020:lI115|H1072010D8
+1072010D8:lI104|H107204280
+107204280:lI95|H1072074B0
+1072074B0:lI115|H10720A728
+10720A728:lI101|H10720D918
+10720D918:lI114|H107210AA8
+107210AA8:lI118|H107213D08
+107213D08:lI101|H1072170C0
+1072170C0:lI114|H10721A5F0
+10721A5F0:lI95|H10721DB90
+10721DB90:lI99|H1072210B0
+1072210B0:lI104|H1072242B8
+1072242B8:lI97|H1072271D0
+1072271D0:lI110|H107229D08
+107229D08:lI110|H10722C500
+10722C500:lI101|H10722EA48
+10722EA48:lI108|H107230CB0
+107230CB0:lI46|H107232CA8
+107232CA8:lI98|H107234980
+107234980:lI101|H1072363A8
+1072363A8:lI97|H107237B70
+107237B70:lI109|N
+1071F8470:lH1071FB0D0|N
+1071FB0D0:lI115|H1071FE010
+1071FE010:lI115|H1072010C8
+1072010C8:lI104|H107204270
+107204270:lI95|H1072074A0
+1072074A0:lI115|H10720A718
+10720A718:lI101|H10720D908
+10720D908:lI114|H107210A98
+107210A98:lI118|H107213CF8
+107213CF8:lI101|H1072170B0
+1072170B0:lI114|H10721A5E0
+10721A5E0:lI95|H10721DB80
+10721DB80:lI107|H1072210A0
+1072210A0:lI101|H1072242A8
+1072242A8:lI121|H1072271C0
+1072271C0:lI95|H107229CF8
+107229CF8:lI97|H10722C4F0
+10722C4F0:lI112|H10722EA38
+10722EA38:lI105|H107230CA0
+107230CA0:lI46|H107232C98
+107232C98:lI98|H107234970
+107234970:lI101|H107236398
+107236398:lI97|H107237B60
+107237B60:lI109|N
+1071F8460:lH1071FB0C0|N
+1071FB0C0:lI115|H1071FE000
+1071FE000:lI115|H1072010B8
+1072010B8:lI104|H107204260
+107204260:lI95|H107207490
+107207490:lI109|H10720A708
+10720A708:lI101|H10720D8F8
+10720D8F8:lI115|H107210A88
+107210A88:lI115|H107213CE8
+107213CE8:lI97|H1072170A0
+1072170A0:lI103|H10721A5D0
+10721A5D0:lI101|H10721DB70
+10721DB70:lI46|H107221090
+107221090:lI98|H107224298
+107224298:lI101|H1072271B0
+1072271B0:lI97|H107229CE8
+107229CE8:lI109|N
+1071F8450:lH1071FB0B0|N
+1071FB0B0:lI115|H1071FDFF0
+1071FDFF0:lI115|H1072010A8
+1072010A8:lI104|H107204250
+107204250:lI46|H107207480
+107207480:lI97|H10720A6F8
+10720A6F8:lI112|H10720D8E8
+10720D8E8:lI112|N
+1071F8438:Mn2:H1071FB090,H1071FB0A0
+1071FB090:lH1071FDFD0|N
+1071FDFD0:lI115|H107201088
+107201088:lI115|H107204230
+107204230:lI104|H107207460
+107207460:lI95|H10720A6D8
+10720A6D8:lI99|H10720D8C8
+10720D8C8:lI104|H107210A68
+107210A68:lI97|H107213CC8
+107213CC8:lI110|H107217080
+107217080:lI110|H10721A5B0
+10721A5B0:lI101|H10721DB50
+10721DB50:lI108|H107221070
+107221070:lI95|H107224278
+107224278:lI115|H1072271A0
+1072271A0:lI117|H107229CD8
+107229CD8:lI112|H10722C4E0
+10722C4E0:lI46|H10722EA28
+10722EA28:lI98|H107230C90
+107230C90:lI101|H107232C88
+107232C88:lI97|H107234960
+107234960:lI109|N
+1071FB0A0:lH1071FDFE0|N
+1071FDFE0:lI115|H107201098
+107201098:lI115|H107204240
+107204240:lI104|H107207470
+107207470:lI95|H10720A6E8
+10720A6E8:lI115|H10720D8D8
+10720D8D8:lI102|H107210A78
+107210A78:lI116|H107213CD8
+107213CD8:lI112|H107217090
+107217090:lI46|H10721A5C0
+10721A5C0:lI98|H10721DB60
+10721DB60:lI101|H107221080
+107221080:lI97|H107224288
+107224288:lI109|N
+1071F5D70:Mn2:H1071F86A8,H1071F86B8
+1071F86A8:lH1071FB310|N
+1071FB310:lI115|H1071FE250
+1071FE250:lI115|H107201308
+107201308:lI104|H1072044B0
+1072044B0:lI95|H1072076E0
+1072076E0:lI115|H10720A958
+10720A958:lI102|H10720DB48
+10720DB48:lI116|H107210CD8
+107210CD8:lI112|H107213F38
+107213F38:lI100|H1072172D0
+1072172D0:lI95|H10721A800
+10721A800:lI102|H10721DD80
+10721DD80:lI105|H107221280
+107221280:lI108|H107224428
+107224428:lI101|H107227300
+107227300:lI46|H107229E38
+107229E38:lI98|H10722C620
+10722C620:lI101|H10722EB58
+10722EB58:lI97|H107230DB0
+107230DB0:lI109|N
+1071F86B8:lH1071FB320|N
+1071FB320:lI115|H1071FE260
+1071FE260:lI115|H107201318
+107201318:lI104|H1072044C0
+1072044C0:lI95|H1072076F0
+1072076F0:lI99|H10720A968
+10720A968:lI104|H10720DB58
+10720DB58:lI97|H107210CE8
+107210CE8:lI110|H107213F48
+107213F48:lI110|H1072172E0
+1072172E0:lI101|H10721A810
+10721A810:lI108|H10721DD90
+10721DD90:lI46|H107221290
+107221290:lI98|H107224438
+107224438:lI101|H107227310
+107227310:lI97|H107229E48
+107229E48:lI109|N
+1071F5D58:Mn2:H1071F8688,H1071F8698
+1071F8688:lH1071FB2F0|N
+1071FB2F0:lI115|H1071FE230
+1071FE230:lI115|H1072012E8
+1072012E8:lI104|H107204490
+107204490:lI95|H1072076C0
+1072076C0:lI97|H10720A938
+10720A938:lI99|H10720DB28
+10720DB28:lI99|H107210CB8
+107210CB8:lI101|H107213F18
+107213F18:lI112|H1072172B0
+1072172B0:lI116|H10721A7E0
+10721A7E0:lI111|H10721DD60
+10721DD60:lI114|H107221260
+107221260:lI46|H107224418
+107224418:lI98|H1072272F0
+1072272F0:lI101|H107229E28
+107229E28:lI97|H10722C610
+10722C610:lI109|N
+1071F8698:lH1071FB300|N
+1071FB300:lI115|H1071FE240
+1071FE240:lI115|H1072012F8
+1072012F8:lI104|H1072044A0
+1072044A0:lI95|H1072076D0
+1072076D0:lI102|H10720A948
+10720A948:lI105|H10720DB38
+10720DB38:lI108|H107210CC8
+107210CC8:lI101|H107213F28
+107213F28:lI46|H1072172C0
+1072172C0:lI98|H10721A7F0
+10721A7F0:lI101|H10721DD70
+10721DD70:lI97|H107221270
+107221270:lI109|N
+1071F5D40:Mn2:H1071F8668,H1071F8678
+1071F8668:lH1071FB2D0|N
+1071FB2D0:lI115|H1071FE210
+1071FE210:lI115|H1072012C8
+1072012C8:lI104|H107204470
+107204470:lI95|H1072076A0
+1072076A0:lI115|H10720A918
+10720A918:lI117|H10720DB08
+10720DB08:lI98|H107210C98
+107210C98:lI115|H107213EF8
+107213EF8:lI121|H107217290
+107217290:lI115|H10721A7C0
+10721A7C0:lI116|H10721DD40
+10721DD40:lI101|H107221240
+107221240:lI109|H1072243F8
+1072243F8:lI95|H1072272D0
+1072272D0:lI115|H107229E08
+107229E08:lI117|H10722C5F0
+10722C5F0:lI112|H10722EB38
+10722EB38:lI46|H107230D90
+107230D90:lI98|H107232D68
+107232D68:lI101|H107234A30
+107234A30:lI97|H107236448
+107236448:lI109|N
+1071F8678:lH1071FB2E0|N
+1071FB2E0:lI115|H1071FE220
+1071FE220:lI115|H1072012D8
+1072012D8:lI104|H107204480
+107204480:lI95|H1072076B0
+1072076B0:lI102|H10720A928
+10720A928:lI115|H10720DB18
+10720DB18:lI109|H107210CA8
+107210CA8:lI95|H107213F08
+107213F08:lI117|H1072172A0
+1072172A0:lI115|H10721A7D0
+10721A7D0:lI101|H10721DD50
+10721DD50:lI114|H107221250
+107221250:lI97|H107224408
+107224408:lI117|H1072272E0
+1072272E0:lI116|H107229E18
+107229E18:lI104|H10722C600
+10722C600:lI95|H10722EB48
+10722EB48:lI99|H107230DA0
+107230DA0:lI108|H107232D78
+107232D78:lI105|H107234A40
+107234A40:lI101|H107236458
+107236458:lI110|H107237C10
+107237C10:lI116|H1072391C8
+1072391C8:lI46|H10723A660
+10723A660:lI98|H10723B920
+10723B920:lI101|H10723C950
+10723C950:lI97|H10723D7C0
+10723D7C0:lI109|N
+1071F5D20:Mn3:H1071F8638,H1071F8648,H1071F8658
+1071F8638:lH1071FB2A0|N
+1071FB2A0:lI115|H1071FE1E0
+1071FE1E0:lI115|H107201298
+107201298:lI104|H107204440
+107204440:lI95|H107207670
+107207670:lI97|H10720A8E8
+10720A8E8:lI103|H10720DAD8
+10720DAD8:lI101|H107210C68
+107210C68:lI110|H107213EC8
+107213EC8:lI116|H107217260
+107217260:lI46|H10721A790
+10721A790:lI98|H10721DD10
+10721DD10:lI101|H107221210
+107221210:lI97|H1072243C8
+1072243C8:lI109|N
+1071F8658:lH1071FB2C0|N
+1071FB2C0:lI115|H1071FE200
+1071FE200:lI115|H1072012B8
+1072012B8:lI104|H107204460
+107204460:lI95|H107207690
+107207690:lI100|H10720A908
+10720A908:lI97|H10720DAF8
+10720DAF8:lI101|H107210C88
+107210C88:lI109|H107213EE8
+107213EE8:lI111|H107217280
+107217280:lI110|H10721A7B0
+10721A7B0:lI95|H10721DD30
+10721DD30:lI99|H107221230
+107221230:lI104|H1072243E8
+1072243E8:lI97|H1072272C0
+1072272C0:lI110|H107229DF8
+107229DF8:lI110|H10722C5E0
+10722C5E0:lI101|H10722EB28
+10722EB28:lI108|H107230D80
+107230D80:lI46|H107232D58
+107232D58:lI98|H107234A20
+107234A20:lI101|H107236438
+107236438:lI97|H107237C00
+107237C00:lI109|N
+1071F8648:lH1071FB2B0|N
+1071FB2B0:lI115|H1071FE1F0
+1071FE1F0:lI115|H1072012A8
+1072012A8:lI104|H107204450
+107204450:lI95|H107207680
+107207680:lI116|H10720A8F8
+10720A8F8:lI99|H10720DAE8
+10720DAE8:lI112|H107210C78
+107210C78:lI105|H107213ED8
+107213ED8:lI112|H107217270
+107217270:lI95|H10721A7A0
+10721A7A0:lI102|H10721DD20
+10721DD20:lI111|H107221220
+107221220:lI114|H1072243D8
+1072243D8:lI119|H1072272B0
+1072272B0:lI97|H107229DE8
+107229DE8:lI114|H10722C5D0
+10722C5D0:lI100|H10722EB18
+10722EB18:lI95|H107230D70
+107230D70:lI99|H107232D48
+107232D48:lI108|H107234A10
+107234A10:lI105|H107236428
+107236428:lI101|H107237BF0
+107237BF0:lI110|H1072391B8
+1072391B8:lI116|H10723A650
+10723A650:lI46|H10723B910
+10723B910:lI98|H10723C940
+10723C940:lI101|H10723D7B0
+10723D7B0:lI97|H10723E500
+10723E500:lI109|N
+1071F5D10:lH1071F8628|N
+1071F8628:lI115|H1071FB290
+1071FB290:lI115|H1071FE1D0
+1071FE1D0:lI104|H107201288
+107201288:lI95|H107204430
+107204430:lI97|H107207660
+107207660:lI112|H10720A8D8
+10720A8D8:lI112|H10720DAC8
+10720DAC8:lI46|H107210C58
+107210C58:lI98|H107213EB8
+107213EB8:lI101|H107217250
+107217250:lI97|H10721A780
+10721A780:lI109|N
+1071F5CE8:Mn4:H1071F85E8,H1071F85F8,H1071F8608,H1071F8618
+1071F85E8:lH1071FB250|N
+1071FB250:lI115|H1071FE190
+1071FE190:lI115|H107201248
+107201248:lI104|H1072043F0
+1072043F0:lI95|H107207620
+107207620:lI120|H10720A898
+10720A898:lI102|H10720DA88
+10720DA88:lI101|H107210C18
+107210C18:lI114|H107213E78
+107213E78:lI46|H107217210
+107217210:lI98|H10721A740
+10721A740:lI101|H10721DCD0
+10721DCD0:lI97|H1072211D0
+1072211D0:lI109|N
+1071F8618:lH1071FB280|N
+1071FB280:lI115|H1071FE1C0
+1071FE1C0:lI115|H107201278
+107201278:lI104|H107204420
+107204420:lI95|H107207650
+107207650:lI98|H10720A8C8
+10720A8C8:lI105|H10720DAB8
+10720DAB8:lI116|H107210C48
+107210C48:lI115|H107213EA8
+107213EA8:lI46|H107217240
+107217240:lI98|H10721A770
+10721A770:lI101|H10721DD00
+10721DD00:lI97|H107221200
+107221200:lI109|N
+1071F8608:lH1071FB270|N
+1071FB270:lI115|H1071FE1B0
+1071FE1B0:lI115|H107201268
+107201268:lI104|H107204410
+107204410:lI95|H107207640
+107207640:lI102|H10720A8B8
+10720A8B8:lI115|H10720DAA8
+10720DAA8:lI109|H107210C38
+107210C38:lI95|H107213E98
+107213E98:lI107|H107217230
+107217230:lI101|H10721A760
+10721A760:lI120|H10721DCF0
+10721DCF0:lI105|H1072211F0
+1072211F0:lI110|H1072243B8
+1072243B8:lI105|H1072272A0
+1072272A0:lI116|H107229DD8
+107229DD8:lI46|H10722C5C0
+10722C5C0:lI98|H10722EB08
+10722EB08:lI101|H107230D60
+107230D60:lI97|H107232D38
+107232D38:lI109|N
+1071F85F8:lH1071FB260|N
+1071FB260:lI115|H1071FE1A0
+1071FE1A0:lI115|H107201258
+107201258:lI104|H107204400
+107204400:lI95|H107207630
+107207630:lI111|H10720A8A8
+10720A8A8:lI112|H10720DA98
+10720DA98:lI116|H107210C28
+107210C28:lI105|H107213E88
+107213E88:lI111|H107217220
+107217220:lI110|H10721A750
+10721A750:lI115|H10721DCE0
+10721DCE0:lI46|H1072211E0
+1072211E0:lI98|H1072243A8
+1072243A8:lI101|H107227290
+107227290:lI97|H107229DC8
+107229DC8:lI109|N
+1071F5CD0:Mn2:H1071F85C8,H1071F85D8
+1071F85C8:lH1071FB230|N
+1071FB230:lI115|H1071FE170
+1071FE170:lI115|H107201228
+107201228:lI104|H1072043D0
+1072043D0:lI95|H107207600
+107207600:lI116|H10720A878
+10720A878:lI99|H10720DA68
+10720DA68:lI112|H107210BF8
+107210BF8:lI105|H107213E58
+107213E58:lI112|H1072171F0
+1072171F0:lI95|H10721A720
+10721A720:lI102|H10721DCB0
+10721DCB0:lI111|H1072211B0
+1072211B0:lI114|H107224388
+107224388:lI119|H107227270
+107227270:lI97|H107229DA8
+107229DA8:lI114|H10722C5A0
+10722C5A0:lI100|H10722EAE8
+10722EAE8:lI95|H107230D40
+107230D40:lI97|H107232D28
+107232D28:lI99|H107234A00
+107234A00:lI99|H107236418
+107236418:lI101|H107237BE0
+107237BE0:lI112|H1072391A8
+1072391A8:lI116|H10723A640
+10723A640:lI111|H10723B900
+10723B900:lI114|H10723C930
+10723C930:lI95|H10723D7A0
+10723D7A0:lI115|H10723E4F0
+10723E4F0:lI117|H10723F100
+10723F100:lI112|H10723FBC0
+10723FBC0:lI46|H107240500
+107240500:lI98|H107240D80
+107240D80:lI101|H107241510
+107241510:lI97|H107241C40
+107241C40:lI109|N
+1071F85D8:lH1071FB240|N
+1071FB240:lI115|H1071FE180
+1071FE180:lI115|H107201238
+107201238:lI104|H1072043E0
+1072043E0:lI95|H107207610
+107207610:lI115|H10720A888
+10720A888:lI121|H10720DA78
+10720DA78:lI115|H107210C08
+107210C08:lI116|H107213E68
+107213E68:lI101|H107217200
+107217200:lI109|H10721A730
+10721A730:lI95|H10721DCC0
+10721DCC0:lI115|H1072211C0
+1072211C0:lI117|H107224398
+107224398:lI112|H107227280
+107227280:lI46|H107229DB8
+107229DB8:lI98|H10722C5B0
+10722C5B0:lI101|H10722EAF8
+10722EAF8:lI97|H107230D50
+107230D50:lI109|N
+1071F5CA8:Mn4:H1071F8588,H1071F8598,H1071F85A8,H1071F85B8
+1071F8588:lH1071FB1F0|N
+1071FB1F0:lI115|H1071FE130
+1071FE130:lI115|H1072011E8
+1072011E8:lI104|H107204390
+107204390:lI95|H1072075C0
+1072075C0:lI116|H10720A838
+10720A838:lI99|H10720DA28
+10720DA28:lI112|H107210BB8
+107210BB8:lI105|H107213E18
+107213E18:lI112|H1072171B0
+1072171B0:lI95|H10721A6E0
+10721A6E0:lI102|H10721DC70
+10721DC70:lI111|H107221170
+107221170:lI114|H107224358
+107224358:lI119|H107227250
+107227250:lI97|H107229D88
+107229D88:lI114|H10722C580
+10722C580:lI100|H10722EAC8
+10722EAC8:lI95|H107230D30
+107230D30:lI115|H107232D18
+107232D18:lI114|H1072349F0
+1072349F0:lI118|H107236408
+107236408:lI46|H107237BD0
+107237BD0:lI98|H107239198
+107239198:lI101|H10723A630
+10723A630:lI97|H10723B8F0
+10723B8F0:lI109|N
+1071F85B8:lH1071FB220|N
+1071FB220:lI115|H1071FE160
+1071FE160:lI115|H107201218
+107201218:lI104|H1072043C0
+1072043C0:lI95|H1072075F0
+1072075F0:lI97|H10720A868
+10720A868:lI117|H10720DA58
+10720DA58:lI116|H107210BE8
+107210BE8:lI104|H107213E48
+107213E48:lI46|H1072171E0
+1072171E0:lI98|H10721A710
+10721A710:lI101|H10721DCA0
+10721DCA0:lI97|H1072211A0
+1072211A0:lI109|N
+1071F85A8:lH1071FB210|N
+1071FB210:lI115|H1071FE150
+1071FE150:lI115|H107201208
+107201208:lI104|H1072043B0
+1072043B0:lI95|H1072075E0
+1072075E0:lI116|H10720A858
+10720A858:lI114|H10720DA48
+10720DA48:lI97|H107210BD8
+107210BD8:lI110|H107213E38
+107213E38:lI115|H1072171D0
+1072171D0:lI112|H10721A700
+10721A700:lI111|H10721DC90
+10721DC90:lI114|H107221190
+107221190:lI116|H107224378
+107224378:lI46|H107227260
+107227260:lI98|H107229D98
+107229D98:lI101|H10722C590
+10722C590:lI97|H10722EAD8
+10722EAD8:lI109|N
+1071F8598:lH1071FB200|N
+1071FB200:lI115|H1071FE140
+1071FE140:lI115|H1072011F8
+1072011F8:lI104|H1072043A0
+1072043A0:lI95|H1072075D0
+1072075D0:lI115|H10720A848
+10720A848:lI104|H10720DA38
+10720DA38:lI101|H107210BC8
+107210BC8:lI108|H107213E28
+107213E28:lI108|H1072171C0
+1072171C0:lI46|H10721A6F0
+10721A6F0:lI98|H10721DC80
+10721DC80:lI101|H107221180
+107221180:lI97|H107224368
+107224368:lI109|N
+1071F5C90:Mn2:H1071F8568,H1071F8578
+1071F8568:lH1071FB1D0|N
+1071FB1D0:lI115|H1071FE110
+1071FE110:lI115|H1072011C8
+1072011C8:lI104|H107204370
+107204370:lI95|H1072075A0
+1072075A0:lI102|H10720A818
+10720A818:lI115|H10720DA08
+10720DA08:lI109|H107210B98
+107210B98:lI95|H107213DF8
+107213DF8:lI117|H107217190
+107217190:lI115|H10721A6C0
+10721A6C0:lI101|H10721DC50
+10721DC50:lI114|H107221150
+107221150:lI97|H107224338
+107224338:lI117|H107227230
+107227230:lI116|H107229D68
+107229D68:lI104|H10722C560
+10722C560:lI95|H10722EAA8
+10722EAA8:lI115|H107230D10
+107230D10:lI101|H107232CF8
+107232CF8:lI114|H1072349D0
+1072349D0:lI118|H1072363E8
+1072363E8:lI101|H107237BB0
+107237BB0:lI114|H107239188
+107239188:lI46|H10723A620
+10723A620:lI98|H10723B8E0
+10723B8E0:lI101|H10723C920
+10723C920:lI97|H10723D790
+10723D790:lI109|N
+1071F8578:lH1071FB1E0|N
+1071FB1E0:lI115|H1071FE120
+1071FE120:lI115|H1072011D8
+1072011D8:lI104|H107204380
+107204380:lI95|H1072075B0
+1072075B0:lI99|H10720A828
+10720A828:lI108|H10720DA18
+10720DA18:lI105|H107210BA8
+107210BA8:lI101|H107213E08
+107213E08:lI110|H1072171A0
+1072171A0:lI116|H10721A6D0
+10721A6D0:lI95|H10721DC60
+10721DC60:lI107|H107221160
+107221160:lI101|H107224348
+107224348:lI121|H107227240
+107227240:lI95|H107229D78
+107229D78:lI97|H10722C570
+10722C570:lI112|H10722EAB8
+10722EAB8:lI105|H107230D20
+107230D20:lI46|H107232D08
+107232D08:lI98|H1072349E0
+1072349E0:lI101|H1072363F8
+1072363F8:lI97|H107237BC0
+107237BC0:lI109|N
+1071F5C70:Mn3:H1071F8538,H1071F8548,H1071F8558
+1071F8538:lH1071FB1A0|N
+1071FB1A0:lI115|H1071FE0E0
+1071FE0E0:lI115|H107201198
+107201198:lI104|H107204340
+107204340:lI46|H107207570
+107207570:lI97|H10720A7E8
+10720A7E8:lI112|H10720D9D8
+10720D9D8:lI112|H107210B68
+107210B68:lI117|H107213DC8
+107213DC8:lI112|N
+1071F8558:lH1071FB1C0|N
+1071FB1C0:lI115|H1071FE100
+1071FE100:lI115|H1072011B8
+1072011B8:lI104|H107204360
+107204360:lI95|H107207590
+107207590:lI105|H10720A808
+10720A808:lI111|H10720D9F8
+10720D9F8:lI46|H107210B88
+107210B88:lI98|H107213DE8
+107213DE8:lI101|H107217180
+107217180:lI97|H10721A6B0
+10721A6B0:lI109|N
+1071F8548:lH1071FB1B0|N
+1071FB1B0:lI115|H1071FE0F0
+1071FE0F0:lI115|H1072011A8
+1072011A8:lI104|H107204350
+107204350:lI95|H107207580
+107207580:lI99|H10720A7F8
+10720A7F8:lI111|H10720D9E8
+10720D9E8:lI110|H107210B78
+107210B78:lI110|H107213DD8
+107213DD8:lI101|H107217170
+107217170:lI99|H10721A6A0
+10721A6A0:lI116|H10721DC40
+10721DC40:lI105|H107221140
+107221140:lI111|H107224328
+107224328:lI110|H107227220
+107227220:lI46|H107229D58
+107229D58:lI98|H10722C550
+10722C550:lI101|H10722EA98
+10722EA98:lI97|H107230D00
+107230D00:lI109|N
+1071F5C58:Mn2:H1071F8518,H1071F8528
+1071F8518:lH1071FB180|N
+1071FB180:lI115|H1071FE0C0
+1071FE0C0:lI115|H107201178
+107201178:lI104|H107204320
+107204320:lI95|H107207550
+107207550:lI115|H10720A7C8
+10720A7C8:lI102|H10720D9B8
+10720D9B8:lI116|H107210B48
+107210B48:lI112|H107213DA8
+107213DA8:lI100|H107217150
+107217150:lI95|H10721A680
+10721A680:lI102|H10721DC20
+10721DC20:lI105|H107221120
+107221120:lI108|H107224318
+107224318:lI101|H107227210
+107227210:lI95|H107229D48
+107229D48:lI97|H10722C540
+10722C540:lI112|H10722EA88
+10722EA88:lI105|H107230CF0
+107230CF0:lI46|H107232CE8
+107232CE8:lI98|H1072349C0
+1072349C0:lI101|H1072363D8
+1072363D8:lI97|H107237BA0
+107237BA0:lI109|N
+1071F8528:lH1071FB190|N
+1071FB190:lI115|H1071FE0D0
+1071FE0D0:lI115|H107201188
+107201188:lI104|H107204330
+107204330:lI95|H107207560
+107207560:lI105|H10720A7D8
+10720A7D8:lI110|H10720D9C8
+10720D9C8:lI102|H107210B58
+107210B58:lI111|H107213DB8
+107213DB8:lI46|H107217160
+107217160:lI98|H10721A690
+10721A690:lI101|H10721DC30
+10721DC30:lI97|H107221130
+107221130:lI109|N
+1071F5C48:lH1071F8508|N
+1071F8508:lI115|H1071FB170
+1071FB170:lI115|H1071FE0B0
+1071FE0B0:lI104|H107201168
+107201168:lI95|H107204310
+107204310:lI99|H107207540
+107207540:lI111|H10720A7B8
+10720A7B8:lI110|H10720D9A8
+10720D9A8:lI110|H107210B38
+107210B38:lI101|H107213D98
+107213D98:lI99|H107217140
+107217140:lI116|H10721A670
+10721A670:lI105|H10721DC10
+10721DC10:lI111|H107221110
+107221110:lI110|H107224308
+107224308:lI95|H107227200
+107227200:lI104|H107229D38
+107229D38:lI97|H10722C530
+10722C530:lI110|H10722EA78
+10722EA78:lI100|H107230CE0
+107230CE0:lI108|H107232CD8
+107232CD8:lI101|H1072349B0
+1072349B0:lI114|H1072363C8
+1072363C8:lI46|H107237B90
+107237B90:lI98|H107239178
+107239178:lI101|H10723A610
+10723A610:lI97|H10723B8D0
+10723B8D0:lI109|N
+1071F5C30:Mn2:H1071F84E0,H1071F84F8
+1071F84E0:Mn2:H1071FB140,H1071FB150
+1071FB140:lH1071FE080|N
+1071FE080:lI115|H107201138
+107201138:lI115|H1072042E0
+1072042E0:lI104|H107207510
+107207510:lI95|H10720A788
+10720A788:lI100|H10720D978
+10720D978:lI98|H107210B08
+107210B08:lI103|H107213D68
+107213D68:lI46|H107217120
+107217120:lI98|H10721A650
+10721A650:lI101|H10721DBF0
+10721DBF0:lI97|H1072210F0
+1072210F0:lI109|N
+1071FB150:lH1071FE090|N
+1071FE090:lI115|H107201148
+107201148:lI115|H1072042F0
+1072042F0:lI104|H107207520
+107207520:lI46|H10720A798
+10720A798:lI98|H10720D988
+10720D988:lI101|H107210B18
+107210B18:lI97|H107213D78
+107213D78:lI109|N
+1071F84F8:lH1071FB160|N
+1071FB160:lI115|H1071FE0A0
+1071FE0A0:lI115|H107201158
+107201158:lI104|H107204300
+107204300:lI95|H107207530
+107207530:lI115|H10720A7A8
+10720A7A8:lI102|H10720D998
+10720D998:lI116|H107210B28
+107210B28:lI112|H107213D88
+107213D88:lI100|H107217130
+107217130:lI46|H10721A660
+10721A660:lI98|H10721DC00
+10721DC00:lI101|H107221100
+107221100:lI97|H1072242F8
+1072242F8:lI109|N
+1071F5C10:Mn3:H1071F84B0,H1071F84C0,H1071F84D0
+1071F84B0:lH1071FB110|N
+1071FB110:lI115|H1071FE050
+1071FE050:lI115|H107201108
+107201108:lI104|H1072042B0
+1072042B0:lI95|H1072074E0
+1072074E0:lI110|H10720A758
+10720A758:lI111|H10720D948
+10720D948:lI95|H107210AD8
+107210AD8:lI105|H107213D38
+107213D38:lI111|H1072170F0
+1072170F0:lI46|H10721A620
+10721A620:lI98|H10721DBC0
+10721DBC0:lI101|H1072210D0
+1072210D0:lI97|H1072242D8
+1072242D8:lI109|N
+1071F84D0:lH1071FB130|N
+1071FB130:lI115|H1071FE070
+1071FE070:lI115|H107201128
+107201128:lI104|H1072042D0
+1072042D0:lI95|H107207500
+107207500:lI99|H10720A778
+10720A778:lI108|H10720D968
+10720D968:lI105|H107210AF8
+107210AF8:lI46|H107213D58
+107213D58:lI98|H107217110
+107217110:lI101|H10721A640
+10721A640:lI97|H10721DBE0
+10721DBE0:lI109|N
+1071F84C0:lH1071FB120|N
+1071FB120:lI115|H1071FE060
+1071FE060:lI115|H107201118
+107201118:lI104|H1072042C0
+1072042C0:lI95|H1072074F0
+1072074F0:lI116|H10720A768
+10720A768:lI99|H10720D958
+10720D958:lI112|H107210AE8
+107210AE8:lI105|H107213D48
+107213D48:lI112|H107217100
+107217100:lI95|H10721A630
+10721A630:lI102|H10721DBD0
+10721DBD0:lI111|H1072210E0
+1072210E0:lI114|H1072242E8
+1072242E8:lI119|H1072271F0
+1072271F0:lI97|H107229D28
+107229D28:lI114|H10722C520
+10722C520:lI100|H10722EA68
+10722EA68:lI95|H107230CD0
+107230CD0:lI97|H107232CC8
+107232CC8:lI99|H1072349A0
+1072349A0:lI99|H1072363B8
+1072363B8:lI101|H107237B80
+107237B80:lI112|H107239168
+107239168:lI116|H10723A600
+10723A600:lI111|H10723B8C0
+10723B8C0:lI114|H10723C910
+10723C910:lI46|H10723D780
+10723D780:lI98|H10723E4E0
+10723E4E0:lI101|H10723F0F0
+10723F0F0:lI97|H10723FBB0
+10723FBB0:lI109|N
+1071F5BF8:Mn2:H1071F8490,H1071F84A0
+1071F8490:lH1071FB0F0|N
+1071FB0F0:lI115|H1071FE030
+1071FE030:lI115|H1072010E8
+1072010E8:lI104|H107204290
+107204290:lI95|H1072074C0
+1072074C0:lI97|H10720A738
+10720A738:lI99|H10720D928
+10720D928:lI99|H107210AB8
+107210AB8:lI101|H107213D18
+107213D18:lI112|H1072170D0
+1072170D0:lI116|H10721A600
+10721A600:lI111|H10721DBA0
+10721DBA0:lI114|H1072210C0
+1072210C0:lI95|H1072242C8
+1072242C8:lI115|H1072271E0
+1072271E0:lI117|H107229D18
+107229D18:lI112|H10722C510
+10722C510:lI46|H10722EA58
+10722EA58:lI98|H107230CC0
+107230CC0:lI101|H107232CB8
+107232CB8:lI97|H107234990
+107234990:lI109|N
+1071F84A0:lH1071FB100|N
+1071FB100:lI115|H1071FE040
+1071FE040:lI115|H1072010F8
+1072010F8:lI104|H1072042A0
+1072042A0:lI95|H1072074D0
+1072074D0:lI108|H10720A748
+10720A748:lI105|H10720D938
+10720D938:lI98|H107210AC8
+107210AC8:lI46|H107213D28
+107213D28:lI98|H1072170E0
+1072170E0:lI101|H10721A610
+10721A610:lI97|H10721DBB0
+10721DBB0:lI109|N
+1071F35C8:lI47|H1071F5BB0
+1071F5BB0:lI111|H1071F8418
+1071F8418:lI112|H1071FB070
+1071FB070:lI116|H1071FDFB0
+1071FDFB0:lI47|H107201068
+107201068:lI104|H107204210
+107204210:lI111|H107207440
+107207440:lI109|H10720A6B8
+10720A6B8:lI101|H10720D8A8
+10720D8A8:lI98|H107210A48
+107210A48:lI114|H107213CA8
+107213CA8:lI101|H107217060
+107217060:lI119|H10721A590
+10721A590:lI47|H10721DB30
+10721DB30:lI67|H107221050
+107221050:lI101|H107224258
+107224258:lI108|H107227180
+107227180:lI108|H107229CB8
+107229CB8:lI97|H10722C4C0
+10722C4C0:lI114|H10722EA08
+10722EA08:lI47|H107230C70
+107230C70:lI101|H107232C68
+107232C68:lI114|H107234940
+107234940:lI108|H107236378
+107236378:lI97|H107237B40
+107237B40:lI110|H107239158
+107239158:lI103|H10723A5F0
+10723A5F0:lI47|H10723B8B0
+10723B8B0:lI50|H10723C900
+10723C900:lI54|H10723D770
+10723D770:lI46|H10723E4D0
+10723E4D0:lI48|H10723F0E0
+10723F0E0:lI46|H10723FBA0
+10723FBA0:lI50|H1072404F0
+1072404F0:lI47|H107240D70
+107240D70:lI108|H107241500
+107241500:lI105|H107241C30
+107241C30:lI98|H107242300
+107242300:lI47|H107242970
+107242970:lI101|H107242F70
+107242F70:lI114|H1072434E0
+1072434E0:lI108|H107243A20
+107243A20:lI97|H107243F10
+107243F10:lI110|H107244400
+107244400:lI103|H1072448B0
+1072448B0:lI47|H107244D20
+107244D20:lI108|H107245180
+107245180:lI105|H1072455D0
+1072455D0:lI98|H1072459D0
+1072459D0:lI47|H107245D90
+107245D90:lI115|H107246120
+107246120:lI115|H1072464B0
+1072464B0:lI104|H107246840
+107246840:lI45|H107246BD0
+107246BD0:lI53|H107246F00
+107246F00:lI46|H107247220
+107247220:lI48|H107247530
+107247530:lI46|H107247830
+107247830:lI49|H107247B30
+107247B30:lI47|H280052C20
+1071F15D8:lH1071F3668|H1071F3680
+1071F3668:t2:H1071F5D88,H1071F5D98
+1071F5D98:Mh5B:10:H1071F86D8,H1071F8700,H1071F8720,H1071F8740,H1071F8778,H1071F8788,H1071F87B8,H1071F87D8,H1071F87F8,H1071F8840,H1071F8878,H1071F8898,H1071F88E0,H1071F8920,H1071F8950,H1071F8988
+1071F86D8:Mn4:H1071FB340,H1071FB350,H1071FB370,H1071FB380
+1071FB340:lH1071FE280|N
+1071FE280:lI115|H107201338
+107201338:lI110|H1072044E0
+1072044E0:lI109|H107207710
+107207710:lI112|H10720A988
+10720A988:lI95|H10720DB78
+10720DB78:lI118|H107210D08
+107210D08:lI105|H107213F68
+107213F68:lI101|H107217300
+107217300:lI119|H10721A830
+10721A830:lI95|H10721DDB0
+10721DDB0:lI98|H1072212B0
+1072212B0:lI97|H107224458
+107224458:lI115|H107227330
+107227330:lI101|H107229E68
+107229E68:lI100|H10722C640
+10722C640:lI95|H10722EB78
+10722EB78:lI97|H107230DD0
+107230DD0:lI99|H107232D98
+107232D98:lI109|H107234A60
+107234A60:lI95|H107236478
+107236478:lI109|H107237C30
+107237C30:lI105|H1072391E8
+1072391E8:lI98|H10723A680
+10723A680:lI46|H10723B940
+10723B940:lI98|H10723C970
+10723C970:lI101|H10723D7E0
+10723D7E0:lI97|H10723E520
+10723E520:lI109|N
+1071FB380:lH1071FE2D0|N
+1071FE2D0:lI115|H107201388
+107201388:lI110|H107204530
+107204530:lI109|H107207760
+107207760:lI112|H10720A9D8
+10720A9D8:lI97|H10720DBC8
+10720DBC8:lI95|H107210D58
+107210D58:lI97|H107213FB8
+107213FB8:lI103|H107217350
+107217350:lI101|H10721A880
+10721A880:lI110|H10721DE00
+10721DE00:lI116|H107221300
+107221300:lI95|H1072244A8
+1072244A8:lI115|H107227380
+107227380:lI117|H107229EB8
+107229EB8:lI112|H10722C670
+10722C670:lI46|H10722EBA8
+10722EBA8:lI98|H107230E00
+107230E00:lI101|H107232DC8
+107232DC8:lI97|H107234A90
+107234A90:lI109|N
+1071FB370:lH1071FE2C0|N
+1071FE2C0:lI115|H107201378
+107201378:lI110|H107204520
+107204520:lI109|H107207750
+107207750:lI112|H10720A9C8
+10720A9C8:lI97|H10720DBB8
+10720DBB8:lI95|H107210D48
+107210D48:lI115|H107213FA8
+107213FA8:lI118|H107217340
+107217340:lI98|H10721A870
+10721A870:lI108|H10721DDF0
+10721DDF0:lI46|H1072212F0
+1072212F0:lI98|H107224498
+107224498:lI101|H107227370
+107227370:lI97|H107229EA8
+107229EA8:lI109|N
+1071FB350:Mn3:H1071FE290,H1071FE2A0,H1071FE2B0
+1071FE290:lH107201348|N
+107201348:lI115|H1072044F0
+1072044F0:lI110|H107207720
+107207720:lI109|H10720A998
+10720A998:lI112|H10720DB88
+10720DB88:lI95|H107210D18
+107210D18:lI102|H107213F78
+107213F78:lI114|H107217310
+107217310:lI97|H10721A840
+10721A840:lI109|H10721DDC0
+10721DDC0:lI101|H1072212C0
+1072212C0:lI119|H107224468
+107224468:lI111|H107227340
+107227340:lI114|H107229E78
+107229E78:lI107|H10722C650
+10722C650:lI95|H10722EB88
+10722EB88:lI109|H107230DE0
+107230DE0:lI105|H107232DA8
+107232DA8:lI98|H107234A70
+107234A70:lI46|H107236488
+107236488:lI98|H107237C40
+107237C40:lI101|H1072391F8
+1072391F8:lI97|H10723A690
+10723A690:lI109|N
+1071FE2B0:lH107201368|N
+107201368:lI115|H107204510
+107204510:lI110|H107207740
+107207740:lI109|H10720A9B8
+10720A9B8:lI112|H10720DBA8
+10720DBA8:lI97|H107210D38
+107210D38:lI95|H107213F98
+107213F98:lI97|H107217330
+107217330:lI99|H10721A860
+10721A860:lI109|H10721DDE0
+10721DDE0:lI46|H1072212E0
+1072212E0:lI98|H107224488
+107224488:lI101|H107227360
+107227360:lI97|H107229E98
+107229E98:lI109|N
+1071FE2A0:lH107201358|N
+107201358:lI115|H107204500
+107204500:lI110|H107207730
+107207730:lI109|H10720A9A8
+10720A9A8:lI112|H10720DB98
+10720DB98:lI109|H107210D28
+107210D28:lI95|H107213F88
+107213F88:lI117|H107217320
+107217320:lI115|H10721A850
+10721A850:lI101|H10721DDD0
+10721DDD0:lI114|H1072212D0
+1072212D0:lI95|H107224478
+107224478:lI100|H107227350
+107227350:lI101|H107229E88
+107229E88:lI102|H10722C660
+10722C660:lI97|H10722EB98
+10722EB98:lI117|H107230DF0
+107230DF0:lI108|H107232DB8
+107232DB8:lI116|H107234A80
+107234A80:lI46|H107236498
+107236498:lI98|H107237C50
+107237C50:lI101|H107239208
+107239208:lI97|H10723A6A0
+10723A6A0:lI109|N
+1071F8988:Mn5:H1071FB820,H1071FB830,H1071FB840,H1071FB850,H1071FB860
+1071FB820:lH1071FE7D0|N
+1071FE7D0:lI115|H107201888
+107201888:lI110|H107204A30
+107204A30:lI109|H107207C60
+107207C60:lI112|H10720AED8
+10720AED8:lI97|H10720E0C8
+10720E0C8:lI95|H107211258
+107211258:lI116|H1072144B8
+1072144B8:lI97|H107217850
+107217850:lI114|H10721AD60
+10721AD60:lI103|H10721E2C0
+10721E2C0:lI101|H1072217A0
+1072217A0:lI116|H107224948
+107224948:lI95|H1072277E0
+1072277E0:lI99|H10722A268
+10722A268:lI97|H10722C9C0
+10722C9C0:lI99|H10722EED8
+10722EED8:lI104|H107231100
+107231100:lI101|H107233058
+107233058:lI46|H107234CC0
+107234CC0:lI98|H107236688
+107236688:lI101|H107237DF0
+107237DF0:lI97|H107239388
+107239388:lI109|N
+1071FB860:lH1071FE818|N
+1071FE818:lI115|H1072018D8
+1072018D8:lI110|H107204A80
+107204A80:lI109|H107207CB0
+107207CB0:lI112|H10720AF28
+10720AF28:lI97|H10720E118
+10720E118:lI95|H1072112A8
+1072112A8:lI109|H107214508
+107214508:lI105|H1072178A0
+1072178A0:lI98|H10721ADB0
+10721ADB0:lI95|H10721E310
+10721E310:lI100|H1072217F0
+1072217F0:lI97|H107224998
+107224998:lI116|H107227830
+107227830:lI97|H10722A2B8
+10722A2B8:lI95|H10722CA10
+10722CA10:lI116|H10722EF28
+10722EF28:lI116|H107231140
+107231140:lI116|H107233078
+107233078:lI110|H107234CE0
+107234CE0:lI46|H1072366A8
+1072366A8:lI98|H107237E10
+107237E10:lI101|H1072393A8
+1072393A8:lI97|H10723A800
+10723A800:lI109|N
+1071FB850:Mn1:H1071FE800
+1071FE800:Mn2:H1072018B8,H1072018C8
+1072018B8:lH107204A60|N
+107204A60:lI115|H107207C90
+107207C90:lI110|H10720AF08
+10720AF08:lI109|H10720E0F8
+10720E0F8:lI112|H107211288
+107211288:lI95|H1072144E8
+1072144E8:lI105|H107217880
+107217880:lI110|H10721AD90
+10721AD90:lI100|H10721E2F0
+10721E2F0:lI101|H1072217D0
+1072217D0:lI120|H107224978
+107224978:lI46|H107227810
+107227810:lI98|H10722A298
+10722A298:lI101|H10722C9F0
+10722C9F0:lI97|H10722EF08
+10722EF08:lI109|N
+1072018C8:lH107204A70|N
+107204A70:lI115|H107207CA0
+107207CA0:lI110|H10720AF18
+10720AF18:lI109|H10720E108
+10720E108:lI112|H107211298
+107211298:lI97|H1072144F8
+1072144F8:lI95|H107217890
+107217890:lI97|H10721ADA0
+10721ADA0:lI103|H10721E300
+10721E300:lI101|H1072217E0
+1072217E0:lI110|H107224988
+107224988:lI116|H107227820
+107227820:lI46|H10722A2A8
+10722A2A8:lI98|H10722CA00
+10722CA00:lI101|H10722EF18
+10722EF18:lI97|H107231130
+107231130:lI109|N
+1071FB840:lH1071FE7F0|N
+1071FE7F0:lI115|H1072018A8
+1072018A8:lI110|H107204A50
+107204A50:lI109|H107207C80
+107207C80:lI112|H10720AEF8
+10720AEF8:lI97|H10720E0E8
+10720E0E8:lI95|H107211278
+107211278:lI103|H1072144D8
+1072144D8:lI101|H107217870
+107217870:lI116|H10721AD80
+10721AD80:lI95|H10721E2E0
+10721E2E0:lI108|H1072217C0
+1072217C0:lI105|H107224968
+107224968:lI98|H107227800
+107227800:lI46|H10722A288
+10722A288:lI98|H10722C9E0
+10722C9E0:lI101|H10722EEF8
+10722EEF8:lI97|H107231120
+107231120:lI109|N
+1071FB830:lH1071FE7E0|N
+1071FE7E0:lI115|H107201898
+107201898:lI110|H107204A40
+107204A40:lI109|H107207C70
+107207C70:lI112|H10720AEE8
+10720AEE8:lI97|H10720E0D8
+10720E0D8:lI95|H107211268
+107211268:lI109|H1072144C8
+1072144C8:lI105|H107217860
+107217860:lI98|H10721AD70
+10721AD70:lI95|H10721E2D0
+10721E2D0:lI115|H1072217B0
+1072217B0:lI116|H107224958
+107224958:lI111|H1072277F0
+1072277F0:lI114|H10722A278
+10722A278:lI97|H10722C9D0
+10722C9D0:lI103|H10722EEE8
+10722EEE8:lI101|H107231110
+107231110:lI95|H107233068
+107233068:lI109|H107234CD0
+107234CD0:lI110|H107236698
+107236698:lI101|H107237E00
+107237E00:lI115|H107239398
+107239398:lI105|H10723A7F0
+10723A7F0:lI97|H10723BA30
+10723BA30:lI46|H10723CA60
+10723CA60:lI98|H10723D8C0
+10723D8C0:lI101|H10723E5C0
+10723E5C0:lI97|H10723F1A0
+10723F1A0:lI109|N
+1071F8950:Mn6:H1071FB7B8,H1071FB7C8,H1071FB7D8,H1071FB7E8,H1071FB7F8,H1071FB808
+1071FB7B8:lH1071FE760|N
+1071FE760:lI115|H107201818
+107201818:lI110|H1072049C0
+1072049C0:lI109|H107207BF0
+107207BF0:lI112|H10720AE68
+10720AE68:lI97|H10720E058
+10720E058:lI95|H1072111E8
+1072111E8:lI108|H107214448
+107214448:lI111|H1072177E0
+1072177E0:lI99|H10721AD00
+10721AD00:lI97|H10721E270
+10721E270:lI108|H107221750
+107221750:lI95|H1072248F8
+1072248F8:lI100|H107227790
+107227790:lI98|H10722A218
+10722A218:lI46|H10722C970
+10722C970:lI98|H10722EE88
+10722EE88:lI101|H1072310B0
+1072310B0:lI97|H107233008
+107233008:lI109|N
+1071FB808:Mn2:H1071FE7B0,H1071FE7C0
+1071FE7B0:lH107201868|N
+107201868:lI115|H107204A10
+107204A10:lI110|H107207C40
+107207C40:lI109|H10720AEB8
+10720AEB8:lI112|H10720E0A8
+10720E0A8:lI46|H107211238
+107211238:lI97|H107214498
+107214498:lI112|H107217830
+107217830:lI112|N
+1071FE7C0:lH107201878|N
+107201878:lI115|H107204A20
+107204A20:lI110|H107207C50
+107207C50:lI109|H10720AEC8
+10720AEC8:lI112|H10720E0B8
+10720E0B8:lI97|H107211248
+107211248:lI95|H1072144A8
+1072144A8:lI109|H107217840
+107217840:lI105|H10721AD50
+10721AD50:lI98|H10721E2B0
+10721E2B0:lI95|H107221790
+107221790:lI115|H107224938
+107224938:lI116|H1072277D0
+1072277D0:lI111|H10722A258
+10722A258:lI114|H10722C9B0
+10722C9B0:lI97|H10722EEC8
+10722EEC8:lI103|H1072310F0
+1072310F0:lI101|H107233048
+107233048:lI95|H107234CB0
+107234CB0:lI101|H107236678
+107236678:lI116|H107237DE0
+107237DE0:lI115|H107239378
+107239378:lI46|H10723A7E0
+10723A7E0:lI98|H10723BA20
+10723BA20:lI101|H10723CA50
+10723CA50:lI97|H10723D8B0
+10723D8B0:lI109|N
+1071FB7F8:lH1071FE7A0|N
+1071FE7A0:lI115|H107201858
+107201858:lI110|H107204A00
+107204A00:lI109|H107207C30
+107207C30:lI112|H10720AEA8
+10720AEA8:lI97|H10720E098
+10720E098:lI46|H107211228
+107211228:lI98|H107214488
+107214488:lI101|H107217820
+107217820:lI97|H10721AD40
+10721AD40:lI109|N
+1071FB7E8:lH1071FE790|N
+1071FE790:lI115|H107201848
+107201848:lI110|H1072049F0
+1072049F0:lI109|H107207C20
+107207C20:lI112|H10720AE98
+10720AE98:lI109|H10720E088
+10720E088:lI95|H107211218
+107211218:lI115|H107214478
+107214478:lI117|H107217810
+107217810:lI112|H10721AD30
+10721AD30:lI101|H10721E2A0
+10721E2A0:lI114|H107221780
+107221780:lI118|H107224928
+107224928:lI105|H1072277C0
+1072277C0:lI115|H10722A248
+10722A248:lI111|H10722C9A0
+10722C9A0:lI114|H10722EEB8
+10722EEB8:lI46|H1072310E0
+1072310E0:lI98|H107233038
+107233038:lI101|H107234CA0
+107234CA0:lI97|H107236668
+107236668:lI109|N
+1071FB7D8:lH1071FE780|N
+1071FE780:lI115|H107201838
+107201838:lI110|H1072049E0
+1072049E0:lI109|H107207C10
+107207C10:lI112|H10720AE88
+10720AE88:lI97|H10720E078
+10720E078:lI95|H107211208
+107211208:lI103|H107214468
+107214468:lI101|H107217800
+107217800:lI116|H10721AD20
+10721AD20:lI95|H10721E290
+10721E290:lI109|H107221770
+107221770:lI101|H107224918
+107224918:lI99|H1072277B0
+1072277B0:lI104|H10722A238
+10722A238:lI97|H10722C990
+10722C990:lI110|H10722EEA8
+10722EEA8:lI105|H1072310D0
+1072310D0:lI115|H107233028
+107233028:lI109|H107234C90
+107234C90:lI46|H107236658
+107236658:lI98|H107237DD0
+107237DD0:lI101|H107239368
+107239368:lI97|H10723A7D0
+10723A7D0:lI109|N
+1071FB7C8:lH1071FE770|N
+1071FE770:lI115|H107201828
+107201828:lI110|H1072049D0
+1072049D0:lI109|H107207C00
+107207C00:lI112|H10720AE78
+10720AE78:lI97|H10720E068
+10720E068:lI95|H1072111F8
+1072111F8:lI110|H107214458
+107214458:lI101|H1072177F0
+1072177F0:lI116|H10721AD10
+10721AD10:lI95|H10721E280
+10721E280:lI105|H107221760
+107221760:lI102|H107224908
+107224908:lI95|H1072277A0
+1072277A0:lI102|H10722A228
+10722A228:lI105|H10722C980
+10722C980:lI108|H10722EE98
+10722EE98:lI116|H1072310C0
+1072310C0:lI101|H107233018
+107233018:lI114|H107234C80
+107234C80:lI46|H107236648
+107236648:lI98|H107237DC0
+107237DC0:lI101|H107239358
+107239358:lI97|H10723A7C0
+10723A7C0:lI109|N
+1071F8920:Mn5:H1071FB760,H1071FB778,H1071FB788,H1071FB798,H1071FB7A8
+1071FB760:Mn2:H1071FE700,H1071FE710
+1071FE700:lH1072017B8|N
+1072017B8:lI115|H107204960
+107204960:lI110|H107207B90
+107207B90:lI109|H10720AE08
+10720AE08:lI112|H10720DFF8
+10720DFF8:lI97|H107211188
+107211188:lI95|H1072143E8
+1072143E8:lI101|H107217780
+107217780:lI114|H10721ACA0
+10721ACA0:lI114|H10721E210
+10721E210:lI111|H1072216F0
+1072216F0:lI114|H107224898
+107224898:lI46|H107227740
+107227740:lI98|H10722A1C8
+10722A1C8:lI101|H10722C920
+10722C920:lI97|H10722EE38
+10722EE38:lI109|N
+1071FE710:lH1072017C8|N
+1072017C8:lI115|H107204970
+107204970:lI110|H107207BA0
+107207BA0:lI109|H10720AE18
+10720AE18:lI112|H10720E008
+10720E008:lI109|H107211198
+107211198:lI95|H1072143F8
+1072143F8:lI110|H107217790
+107217790:lI101|H10721ACB0
+10721ACB0:lI116|H10721E220
+10721E220:lI95|H107221700
+107221700:lI105|H1072248A8
+1072248A8:lI102|H107227750
+107227750:lI46|H10722A1D8
+10722A1D8:lI98|H10722C930
+10722C930:lI101|H10722EE48
+10722EE48:lI97|H107231080
+107231080:lI109|N
+1071FB7A8:lH1071FE750|N
+1071FE750:lI115|H107201808
+107201808:lI110|H1072049B0
+1072049B0:lI109|H107207BE0
+107207BE0:lI112|H10720AE58
+10720AE58:lI109|H10720E048
+10720E048:lI95|H1072111D8
+1072111D8:lI109|H107214438
+107214438:lI105|H1072177D0
+1072177D0:lI115|H10721ACF0
+10721ACF0:lI99|H10721E260
+10721E260:lI95|H107221740
+107221740:lI115|H1072248E8
+1072248E8:lI117|H107227780
+107227780:lI112|H10722A208
+10722A208:lI46|H10722C960
+10722C960:lI98|H10722EE78
+10722EE78:lI101|H1072310A0
+1072310A0:lI97|H107232FF8
+107232FF8:lI109|N
+1071FB798:lH1071FE740|N
+1071FE740:lI115|H1072017F8
+1072017F8:lI110|H1072049A0
+1072049A0:lI109|H107207BD0
+107207BD0:lI112|H10720AE48
+10720AE48:lI95|H10720E038
+10720E038:lI117|H1072111C8
+1072111C8:lI115|H107214428
+107214428:lI109|H1072177C0
+1072177C0:lI46|H10721ACE0
+10721ACE0:lI98|H10721E250
+10721E250:lI101|H107221730
+107221730:lI97|H1072248D8
+1072248D8:lI109|N
+1071FB788:lH1071FE730|N
+1071FE730:lI115|H1072017E8
+1072017E8:lI110|H107204990
+107204990:lI109|H107207BC0
+107207BC0:lI112|H10720AE38
+10720AE38:lI109|H10720E028
+10720E028:lI95|H1072111B8
+1072111B8:lI117|H107214418
+107214418:lI115|H1072177B0
+1072177B0:lI101|H10721ACD0
+10721ACD0:lI114|H10721E240
+10721E240:lI95|H107221720
+107221720:lI111|H1072248C8
+1072248C8:lI108|H107227770
+107227770:lI100|H10722A1F8
+10722A1F8:lI46|H10722C950
+10722C950:lI98|H10722EE68
+10722EE68:lI101|H107231090
+107231090:lI97|H107232FE8
+107232FE8:lI109|N
+1071FB778:lH1071FE720|N
+1071FE720:lI115|H1072017D8
+1072017D8:lI110|H107204980
+107204980:lI109|H107207BB0
+107207BB0:lI112|H10720AE28
+10720AE28:lI95|H10720E018
+10720E018:lI103|H1072111A8
+1072111A8:lI101|H107214408
+107214408:lI110|H1072177A0
+1072177A0:lI101|H10721ACC0
+10721ACC0:lI114|H10721E230
+10721E230:lI105|H107221710
+107221710:lI99|H1072248B8
+1072248B8:lI46|H107227760
+107227760:lI98|H10722A1E8
+10722A1E8:lI101|H10722C940
+10722C940:lI97|H10722EE58
+10722EE58:lI109|N
+1071F88E0:Mn7:H1071FB6E8,H1071FB6F8,H1071FB708,H1071FB718,H1071FB728,H1071FB740,H1071FB750
+1071FB6E8:lH1071FE680|N
+1071FE680:lI115|H107201738
+107201738:lI110|H1072048E0
+1072048E0:lI109|H107207B10
+107207B10:lI112|H10720AD88
+10720AD88:lI99|H10720DF78
+10720DF78:lI95|H107211108
+107211108:lI109|H107214368
+107214368:lI105|H107217700
+107217700:lI98|H10721AC30
+10721AC30:lI95|H10721E1A0
+10721E1A0:lI116|H107221680
+107221680:lI111|H107224828
+107224828:lI95|H1072276D0
+1072276D0:lI104|H10722A158
+10722A158:lI114|H10722C8C0
+10722C8C0:lI108|H10722EDD8
+10722EDD8:lI46|H107231020
+107231020:lI98|H107232F88
+107232F88:lI101|H107234C30
+107234C30:lI97|H1072365F8
+1072365F8:lI109|N
+1071FB750:lH1071FE6F0|N
+1071FE6F0:lI115|H1072017A8
+1072017A8:lI110|H107204950
+107204950:lI109|H107207B80
+107207B80:lI112|H10720ADF8
+10720ADF8:lI97|H10720DFE8
+10720DFE8:lI95|H107211178
+107211178:lI109|H1072143D8
+1072143D8:lI105|H107217770
+107217770:lI115|H10721AC90
+10721AC90:lI99|H10721E200
+10721E200:lI95|H1072216E0
+1072216E0:lI115|H107224888
+107224888:lI117|H107227730
+107227730:lI112|H10722A1B8
+10722A1B8:lI46|H10722C910
+10722C910:lI98|H10722EE28
+10722EE28:lI101|H107231070
+107231070:lI97|H107232FD8
+107232FD8:lI109|N
+1071FB740:lH1071FE6E0|N
+1071FE6E0:lI115|H107201798
+107201798:lI110|H107204940
+107204940:lI109|H107207B70
+107207B70:lI112|H10720ADE8
+10720ADE8:lI97|H10720DFD8
+10720DFD8:lI95|H107211168
+107211168:lI99|H1072143C8
+1072143C8:lI111|H107217760
+107217760:lI110|H10721AC80
+10721AC80:lI102|H10721E1F0
+10721E1F0:lI46|H1072216D0
+1072216D0:lI98|H107224878
+107224878:lI101|H107227720
+107227720:lI97|H10722A1A8
+10722A1A8:lI109|N
+1071FB728:Mn2:H1071FE6C0,H1071FE6D0
+1071FE6C0:lH107201778|N
+107201778:lI115|H107204920
+107204920:lI110|H107207B50
+107207B50:lI109|H10720ADC8
+10720ADC8:lI112|H10720DFB8
+10720DFB8:lI95|H107211148
+107211148:lI110|H1072143A8
+1072143A8:lI111|H107217740
+107217740:lI116|H10721AC60
+10721AC60:lI101|H10721E1D0
+10721E1D0:lI95|H1072216B0
+1072216B0:lI115|H107224858
+107224858:lI116|H107227700
+107227700:lI111|H10722A188
+10722A188:lI114|H10722C8F0
+10722C8F0:lI101|H10722EE08
+10722EE08:lI46|H107231050
+107231050:lI98|H107232FB8
+107232FB8:lI101|H107234C60
+107234C60:lI97|H107236628
+107236628:lI109|N
+1071FE6D0:lH107201788|N
+107201788:lI115|H107204930
+107204930:lI110|H107207B60
+107207B60:lI109|H10720ADD8
+10720ADD8:lI112|H10720DFC8
+10720DFC8:lI97|H107211158
+107211158:lI95|H1072143B8
+1072143B8:lI100|H107217750
+107217750:lI105|H10721AC70
+10721AC70:lI115|H10721E1E0
+10721E1E0:lI99|H1072216C0
+1072216C0:lI111|H107224868
+107224868:lI118|H107227710
+107227710:lI101|H10722A198
+10722A198:lI114|H10722C900
+10722C900:lI121|H10722EE18
+10722EE18:lI95|H107231060
+107231060:lI104|H107232FC8
+107232FC8:lI97|H107234C70
+107234C70:lI110|H107236638
+107236638:lI100|H107237DB0
+107237DB0:lI108|H107239348
+107239348:lI101|H10723A7B0
+10723A7B0:lI114|H10723BA10
+10723BA10:lI46|H10723CA40
+10723CA40:lI98|H10723D8A0
+10723D8A0:lI101|H10723E5B0
+10723E5B0:lI97|H10723F190
+10723F190:lI109|N
+1071FB718:lH1071FE6B0|N
+1071FE6B0:lI115|H107201768
+107201768:lI110|H107204910
+107204910:lI109|H107207B40
+107207B40:lI112|H10720ADB8
+10720ADB8:lI109|H10720DFA8
+10720DFA8:lI95|H107211138
+107211138:lI115|H107214398
+107214398:lI101|H107217730
+107217730:lI114|H10721AC50
+10721AC50:lI118|H10721E1C0
+10721E1C0:lI101|H1072216A0
+1072216A0:lI114|H107224848
+107224848:lI95|H1072276F0
+1072276F0:lI115|H10722A178
+10722A178:lI117|H10722C8E0
+10722C8E0:lI112|H10722EDF8
+10722EDF8:lI46|H107231040
+107231040:lI98|H107232FA8
+107232FA8:lI101|H107234C50
+107234C50:lI97|H107236618
+107236618:lI109|N
+1071FB708:lH1071FE6A0|N
+1071FE6A0:lI115|H107201758
+107201758:lI110|H107204900
+107204900:lI109|H107207B30
+107207B30:lI112|H10720ADA8
+10720ADA8:lI46|H10720DF98
+10720DF98:lI98|H107211128
+107211128:lI101|H107214388
+107214388:lI97|H107217720
+107217720:lI109|N
+1071FB6F8:lH1071FE690|N
+1071FE690:lI115|H107201748
+107201748:lI110|H1072048F0
+1072048F0:lI109|H107207B20
+107207B20:lI112|H10720AD98
+10720AD98:lI97|H10720DF88
+10720DF88:lI95|H107211118
+107211118:lI100|H107214378
+107214378:lI105|H107217710
+107217710:lI115|H10721AC40
+10721AC40:lI99|H10721E1B0
+10721E1B0:lI111|H107221690
+107221690:lI118|H107224838
+107224838:lI101|H1072276E0
+1072276E0:lI114|H10722A168
+10722A168:lI121|H10722C8D0
+10722C8D0:lI95|H10722EDE8
+10722EDE8:lI104|H107231030
+107231030:lI97|H107232F98
+107232F98:lI110|H107234C40
+107234C40:lI100|H107236608
+107236608:lI108|H107237DA0
+107237DA0:lI101|H107239338
+107239338:lI114|H10723A7A0
+10723A7A0:lI95|H10723BA00
+10723BA00:lI100|H10723CA30
+10723CA30:lI101|H10723D890
+10723D890:lI102|H10723E5A0
+10723E5A0:lI97|H10723F180
+10723F180:lI117|H10723FC30
+10723FC30:lI108|H107240570
+107240570:lI116|H107240DE0
+107240DE0:lI46|H107241570
+107241570:lI98|H107241C90
+107241C90:lI101|H107242350
+107242350:lI97|H1072429B0
+1072429B0:lI109|N
+1071F8898:Mn8:H1071FB650,H1071FB660,H1071FB680,H1071FB690,H1071FB6A0,H1071FB6B0,H1071FB6C0,H1071FB6D0
+1071FB650:lH1071FE5D0|N
+1071FE5D0:lI115|H107201688
+107201688:lI110|H107204830
+107204830:lI109|H107207A60
+107207A60:lI112|H10720ACD8
+10720ACD8:lI95|H10720DEC8
+10720DEC8:lI115|H107211058
+107211058:lI104|H1072142B8
+1072142B8:lI97|H107217650
+107217650:lI100|H10721AB80
+10721AB80:lI111|H10721E0F0
+10721E0F0:lI119|H1072215E0
+1072215E0:lI95|H107224788
+107224788:lI116|H107227640
+107227640:lI97|H10722A0E8
+10722A0E8:lI98|H10722C860
+10722C860:lI108|H10722ED88
+10722ED88:lI101|H107230FD0
+107230FD0:lI46|H107232F48
+107232F48:lI98|H107234BF0
+107234BF0:lI101|H1072365B8
+1072365B8:lI97|H107237D60
+107237D60:lI109|N
+1071FB6D0:Mn2:H1071FE660,H1071FE670
+1071FE660:lH107201718|N
+107201718:lI115|H1072048C0
+1072048C0:lI110|H107207AF0
+107207AF0:lI109|H10720AD68
+10720AD68:lI112|H10720DF58
+10720DF58:lI97|H1072110E8
+1072110E8:lI95|H107214348
+107214348:lI118|H1072176E0
+1072176E0:lI97|H10721AC10
+10721AC10:lI99|H10721E180
+10721E180:lI109|H107221670
+107221670:lI46|H107224818
+107224818:lI98|H1072276C0
+1072276C0:lI101|H10722A148
+10722A148:lI97|H10722C8B0
+10722C8B0:lI109|N
+1071FE670:lH107201728|N
+107201728:lI115|H1072048D0
+1072048D0:lI110|H107207B00
+107207B00:lI109|H10720AD78
+10720AD78:lI112|H10720DF68
+10720DF68:lI109|H1072110F8
+1072110F8:lI46|H107214358
+107214358:lI98|H1072176F0
+1072176F0:lI101|H10721AC20
+10721AC20:lI97|H10721E190
+10721E190:lI109|N
+1071FB6C0:lH1071FE650|N
+1071FE650:lI115|H107201708
+107201708:lI110|H1072048B0
+1072048B0:lI109|H107207AE0
+107207AE0:lI112|H10720AD58
+10720AD58:lI95|H10720DF48
+10720DF48:lI112|H1072110D8
+1072110D8:lI100|H107214338
+107214338:lI117|H1072176D0
+1072176D0:lI115|H10721AC00
+10721AC00:lI46|H10721E170
+10721E170:lI98|H107221660
+107221660:lI101|H107224808
+107224808:lI97|H1072276B0
+1072276B0:lI109|N
+1071FB6B0:lH1071FE640|N
+1071FE640:lI115|H1072016F8
+1072016F8:lI110|H1072048A0
+1072048A0:lI109|H107207AD0
+107207AD0:lI112|H10720AD48
+10720AD48:lI97|H10720DF38
+10720DF38:lI95|H1072110C8
+1072110C8:lI116|H107214328
+107214328:lI114|H1072176C0
+1072176C0:lI97|H10721ABF0
+10721ABF0:lI112|H10721E160
+10721E160:lI46|H107221650
+107221650:lI98|H1072247F8
+1072247F8:lI101|H1072276A0
+1072276A0:lI97|H10722A138
+10722A138:lI109|N
+1071FB6A0:lH1071FE630|N
+1071FE630:lI115|H1072016E8
+1072016E8:lI110|H107204890
+107204890:lI109|H107207AC0
+107207AC0:lI112|H10720AD38
+10720AD38:lI97|H10720DF28
+10720DF28:lI95|H1072110B8
+1072110B8:lI109|H107214318
+107214318:lI112|H1072176B0
+1072176B0:lI100|H10721ABE0
+10721ABE0:lI46|H10721E150
+10721E150:lI98|H107221640
+107221640:lI101|H1072247E8
+1072247E8:lI97|H107227690
+107227690:lI109|N
+1071FB690:lH1071FE620|N
+1071FE620:lI115|H1072016D8
+1072016D8:lI110|H107204880
+107204880:lI109|H107207AB0
+107207AB0:lI112|H10720AD28
+10720AD28:lI97|H10720DF18
+10720DF18:lI95|H1072110A8
+1072110A8:lI110|H107214308
+107214308:lI111|H1072176A0
+1072176A0:lI116|H10721ABD0
+10721ABD0:lI105|H10721E140
+10721E140:lI102|H107221630
+107221630:lI105|H1072247D8
+1072247D8:lI99|H107227680
+107227680:lI97|H10722A128
+10722A128:lI116|H10722C8A0
+10722C8A0:lI105|H10722EDC8
+10722EDC8:lI111|H107231010
+107231010:lI110|H107232F78
+107232F78:lI95|H107234C20
+107234C20:lI100|H1072365E8
+1072365E8:lI101|H107237D90
+107237D90:lI108|H107239328
+107239328:lI105|H10723A790
+10723A790:lI118|H10723B9F0
+10723B9F0:lI101|H10723CA20
+10723CA20:lI114|H10723D880
+10723D880:lI121|H10723E590
+10723E590:lI95|H10723F170
+10723F170:lI105|H10723FC20
+10723FC20:lI110|H107240560
+107240560:lI102|H107240DD0
+107240DD0:lI111|H107241560
+107241560:lI95|H107241C80
+107241C80:lI114|H107242340
+107242340:lI101|H1072429A0
+1072429A0:lI99|H107242F90
+107242F90:lI101|H107243500
+107243500:lI105|H107243A40
+107243A40:lI118|H107243F30
+107243F30:lI101|H107244420
+107244420:lI114|H1072448D0
+1072448D0:lI46|H107244D40
+107244D40:lI98|H1072451A0
+1072451A0:lI101|H1072455F0
+1072455F0:lI97|H1072459F0
+1072459F0:lI109|N
+1071FB680:lH1071FE610|N
+1071FE610:lI115|H1072016C8
+1072016C8:lI110|H107204870
+107204870:lI109|H107207AA0
+107207AA0:lI112|H10720AD18
+10720AD18:lI95|H10720DF08
+10720DF08:lI108|H107211098
+107211098:lI111|H1072142F8
+1072142F8:lI103|H107217690
+107217690:lI46|H10721ABC0
+10721ABC0:lI98|H10721E130
+10721E130:lI101|H107221620
+107221620:lI97|H1072247C8
+1072247C8:lI109|N
+1071FB660:Mn3:H1071FE5E0,H1071FE5F0,H1071FE600
+1071FE5E0:lH107201698|N
+107201698:lI115|H107204840
+107204840:lI110|H107207A70
+107207A70:lI109|H10720ACE8
+10720ACE8:lI112|H10720DED8
+10720DED8:lI95|H107211068
+107211068:lI99|H1072142C8
+1072142C8:lI111|H107217660
+107217660:lI109|H10721AB90
+10721AB90:lI109|H10721E100
+10721E100:lI117|H1072215F0
+1072215F0:lI110|H107224798
+107224798:lI105|H107227650
+107227650:lI116|H10722A0F8
+10722A0F8:lI121|H10722C870
+10722C870:lI95|H10722ED98
+10722ED98:lI109|H107230FE0
+107230FE0:lI105|H107232F58
+107232F58:lI98|H107234C00
+107234C00:lI46|H1072365C8
+1072365C8:lI98|H107237D70
+107237D70:lI101|H107239308
+107239308:lI97|H10723A770
+10723A770:lI109|N
+1071FE600:lH1072016B8|N
+1072016B8:lI115|H107204860
+107204860:lI110|H107207A90
+107207A90:lI109|H10720AD08
+10720AD08:lI112|H10720DEF8
+10720DEF8:lI109|H107211088
+107211088:lI95|H1072142E8
+1072142E8:lI115|H107217680
+107217680:lI101|H10721ABB0
+10721ABB0:lI114|H10721E120
+10721E120:lI118|H107221610
+107221610:lI101|H1072247B8
+1072247B8:lI114|H107227670
+107227670:lI46|H10722A118
+10722A118:lI98|H10722C890
+10722C890:lI101|H10722EDB8
+10722EDB8:lI97|H107231000
+107231000:lI109|N
+1071FE5F0:lH1072016A8|N
+1072016A8:lI115|H107204850
+107204850:lI110|H107207A80
+107207A80:lI109|H10720ACF8
+10720ACF8:lI112|H10720DEE8
+10720DEE8:lI97|H107211078
+107211078:lI95|H1072142D8
+1072142D8:lI110|H107217670
+107217670:lI101|H10721ABA0
+10721ABA0:lI116|H10721E110
+10721E110:lI119|H107221600
+107221600:lI111|H1072247A8
+1072247A8:lI114|H107227660
+107227660:lI107|H10722A108
+10722A108:lI95|H10722C880
+10722C880:lI105|H10722EDA8
+10722EDA8:lI110|H107230FF0
+107230FF0:lI116|H107232F68
+107232F68:lI101|H107234C10
+107234C10:lI114|H1072365D8
+1072365D8:lI102|H107237D80
+107237D80:lI97|H107239318
+107239318:lI99|H10723A780
+10723A780:lI101|H10723B9E0
+10723B9E0:lI46|H10723CA10
+10723CA10:lI98|H10723D870
+10723D870:lI101|H10723E580
+10723E580:lI97|H10723F160
+10723F160:lI109|N
+1071F8878:Mn3:H1071FB620,H1071FB630,H1071FB640
+1071FB620:lH1071FE5A0|N
+1071FE5A0:lI115|H107201658
+107201658:lI110|H107204800
+107204800:lI109|H107207A30
+107207A30:lI112|H10720ACA8
+10720ACA8:lI95|H10720DE98
+10720DE98:lI116|H107211028
+107211028:lI97|H107214288
+107214288:lI114|H107217620
+107217620:lI103|H10721AB50
+10721AB50:lI101|H10721E0C0
+10721E0C0:lI116|H1072215B0
+1072215B0:lI95|H107224758
+107224758:lI109|H107227610
+107227610:lI105|H10722A0C8
+10722A0C8:lI98|H10722C850
+10722C850:lI46|H10722ED78
+10722ED78:lI98|H107230FC0
+107230FC0:lI101|H107232F38
+107232F38:lI97|H107234BE0
+107234BE0:lI109|N
+1071FB640:lH1071FE5C0|N
+1071FE5C0:lI115|H107201678
+107201678:lI110|H107204820
+107204820:lI109|H107207A50
+107207A50:lI112|H10720ACC8
+10720ACC8:lI95|H10720DEB8
+10720DEB8:lI109|H107211048
+107211048:lI105|H1072142A8
+1072142A8:lI115|H107217640
+107217640:lI99|H10721AB70
+10721AB70:lI46|H10721E0E0
+10721E0E0:lI98|H1072215D0
+1072215D0:lI101|H107224778
+107224778:lI97|H107227630
+107227630:lI109|N
+1071FB630:lH1071FE5B0|N
+1071FE5B0:lI115|H107201668
+107201668:lI110|H107204810
+107204810:lI109|H107207A40
+107207A40:lI112|H10720ACB8
+10720ACB8:lI99|H10720DEA8
+10720DEA8:lI95|H107211038
+107211038:lI109|H107214298
+107214298:lI105|H107217630
+107217630:lI115|H10721AB60
+10721AB60:lI99|H10721E0D0
+10721E0D0:lI46|H1072215C0
+1072215C0:lI98|H107224768
+107224768:lI101|H107227620
+107227620:lI97|H10722A0D8
+10722A0D8:lI109|N
+1071F8840:Mn6:H1071FB5B8,H1071FB5C8,H1071FB5D8,H1071FB5E8,H1071FB5F8,H1071FB610
+1071FB5B8:lH1071FE530|N
+1071FE530:lI115|H1072015E8
+1072015E8:lI110|H107204790
+107204790:lI109|H1072079C0
+1072079C0:lI112|H10720AC38
+10720AC38:lI97|H10720DE28
+10720DE28:lI95|H107210FB8
+107210FB8:lI115|H107214218
+107214218:lI101|H1072175B0
+1072175B0:lI116|H10721AAE0
+10721AAE0:lI46|H10721E050
+10721E050:lI98|H107221540
+107221540:lI101|H1072246E8
+1072246E8:lI97|H1072275A0
+1072275A0:lI109|N
+1071FB610:lH1071FE590|N
+1071FE590:lI115|H107201648
+107201648:lI110|H1072047F0
+1072047F0:lI109|H107207A20
+107207A20:lI112|H10720AC98
+10720AC98:lI109|H10720DE88
+10720DE88:lI95|H107211018
+107211018:lI110|H107214278
+107214278:lI101|H107217610
+107217610:lI116|H10721AB40
+10721AB40:lI119|H10721E0B0
+10721E0B0:lI111|H1072215A0
+1072215A0:lI114|H107224748
+107224748:lI107|H107227600
+107227600:lI95|H10722A0B8
+10722A0B8:lI105|H10722C840
+10722C840:lI110|H10722ED68
+10722ED68:lI116|H107230FB0
+107230FB0:lI101|H107232F28
+107232F28:lI114|H107234BD0
+107234BD0:lI102|H1072365A8
+1072365A8:lI97|H107237D50
+107237D50:lI99|H1072392F8
+1072392F8:lI101|H10723A760
+10723A760:lI95|H10723B9D0
+10723B9D0:lI102|H10723CA00
+10723CA00:lI105|H10723D860
+10723D860:lI108|H10723E570
+10723E570:lI116|H10723F150
+10723F150:lI101|H10723FC10
+10723FC10:lI114|H107240550
+107240550:lI46|H107240DC0
+107240DC0:lI98|H107241550
+107241550:lI101|H107241C70
+107241C70:lI97|H107242330
+107242330:lI109|N
+1071FB5F8:Mn2:H1071FE570,H1071FE580
+1071FE570:lH107201628|N
+107201628:lI115|H1072047D0
+1072047D0:lI110|H107207A00
+107207A00:lI109|H10720AC78
+10720AC78:lI112|H10720DE68
+10720DE68:lI97|H107210FF8
+107210FF8:lI95|H107214258
+107214258:lI110|H1072175F0
+1072175F0:lI111|H10721AB20
+10721AB20:lI116|H10721E090
+10721E090:lI105|H107221580
+107221580:lI102|H107224728
+107224728:lI105|H1072275E0
+1072275E0:lI99|H10722A098
+10722A098:lI97|H10722C820
+10722C820:lI116|H10722ED48
+10722ED48:lI105|H107230F90
+107230F90:lI111|H107232F08
+107232F08:lI110|H107234BB0
+107234BB0:lI95|H107236588
+107236588:lI102|H107237D30
+107237D30:lI105|H1072392D8
+1072392D8:lI108|H10723A740
+10723A740:lI116|H10723B9B0
+10723B9B0:lI101|H10723C9E0
+10723C9E0:lI114|H10723D850
+10723D850:lI46|H10723E560
+10723E560:lI98|H10723F140
+10723F140:lI101|H10723FC00
+10723FC00:lI97|H107240540
+107240540:lI109|N
+1071FE580:lH107201638|N
+107201638:lI115|H1072047E0
+1072047E0:lI110|H107207A10
+107207A10:lI109|H10720AC88
+10720AC88:lI112|H10720DE78
+10720DE78:lI97|H107211008
+107211008:lI95|H107214268
+107214268:lI115|H107217600
+107217600:lI121|H10721AB30
+10721AB30:lI109|H10721E0A0
+10721E0A0:lI98|H107221590
+107221590:lI111|H107224738
+107224738:lI108|H1072275F0
+1072275F0:lI105|H10722A0A8
+10722A0A8:lI99|H10722C830
+10722C830:lI95|H10722ED58
+10722ED58:lI115|H107230FA0
+107230FA0:lI116|H107232F18
+107232F18:lI111|H107234BC0
+107234BC0:lI114|H107236598
+107236598:lI101|H107237D40
+107237D40:lI46|H1072392E8
+1072392E8:lI98|H10723A750
+10723A750:lI101|H10723B9C0
+10723B9C0:lI97|H10723C9F0
+10723C9F0:lI109|N
+1071FB5E8:lH1071FE560|N
+1071FE560:lI115|H107201618
+107201618:lI110|H1072047C0
+1072047C0:lI109|H1072079F0
+1072079F0:lI112|H10720AC68
+10720AC68:lI109|H10720DE58
+10720DE58:lI95|H107210FE8
+107210FE8:lI110|H107214248
+107214248:lI101|H1072175E0
+1072175E0:lI116|H10721AB10
+10721AB10:lI119|H10721E080
+10721E080:lI111|H107221570
+107221570:lI114|H107224718
+107224718:lI107|H1072275D0
+1072275D0:lI95|H10722A088
+10722A088:lI105|H10722C810
+10722C810:lI110|H10722ED38
+10722ED38:lI116|H107230F80
+107230F80:lI101|H107232EF8
+107232EF8:lI114|H107234BA0
+107234BA0:lI102|H107236578
+107236578:lI97|H107237D20
+107237D20:lI99|H1072392C8
+1072392C8:lI101|H10723A730
+10723A730:lI46|H10723B9A0
+10723B9A0:lI98|H10723C9D0
+10723C9D0:lI101|H10723D840
+10723D840:lI97|H10723E550
+10723E550:lI109|N
+1071FB5D8:lH1071FE550|N
+1071FE550:lI115|H107201608
+107201608:lI110|H1072047B0
+1072047B0:lI109|H1072079E0
+1072079E0:lI112|H10720AC58
+10720AC58:lI109|H10720DE48
+10720DE48:lI95|H107210FD8
+107210FD8:lI117|H107214238
+107214238:lI115|H1072175D0
+1072175D0:lI101|H10721AB00
+10721AB00:lI114|H10721E070
+10721E070:lI46|H107221560
+107221560:lI98|H107224708
+107224708:lI101|H1072275C0
+1072275C0:lI97|H10722A078
+10722A078:lI109|N
+1071FB5C8:lH1071FE540|N
+1071FE540:lI115|H1072015F8
+1072015F8:lI110|H1072047A0
+1072047A0:lI109|H1072079D0
+1072079D0:lI112|H10720AC48
+10720AC48:lI95|H10720DE38
+10720DE38:lI99|H107210FC8
+107210FC8:lI111|H107214228
+107214228:lI110|H1072175C0
+1072175C0:lI102|H10721AAF0
+10721AAF0:lI105|H10721E060
+10721E060:lI103|H107221550
+107221550:lI46|H1072246F8
+1072246F8:lI98|H1072275B0
+1072275B0:lI101|H10722A068
+10722A068:lI97|H10722C800
+10722C800:lI109|N
+1071F87F8:Mn8:H1071FB538,H1071FB548,H1071FB558,H1071FB568,H1071FB578,H1071FB588,H1071FB598,H1071FB5A8
+1071FB538:lH1071FE4B0|N
+1071FE4B0:lI115|H107201568
+107201568:lI110|H107204710
+107204710:lI109|H107207940
+107207940:lI112|H10720ABB8
+10720ABB8:lI97|H10720DDA8
+10720DDA8:lI95|H107210F38
+107210F38:lI117|H107214198
+107214198:lI115|H107217530
+107217530:lI109|H10721AA60
+10721AA60:lI46|H10721DFD0
+10721DFD0:lI98|H1072214C0
+1072214C0:lI101|H107224668
+107224668:lI97|H107227520
+107227520:lI109|N
+1071FB5A8:lH1071FE520|N
+1071FE520:lI115|H1072015D8
+1072015D8:lI110|H107204780
+107204780:lI109|H1072079B0
+1072079B0:lI112|H10720AC28
+10720AC28:lI97|H10720DE18
+10720DE18:lI95|H107210FA8
+107210FA8:lI101|H107214208
+107214208:lI114|H1072175A0
+1072175A0:lI114|H10721AAD0
+10721AAD0:lI111|H10721E040
+10721E040:lI114|H107221530
+107221530:lI95|H1072246D8
+1072246D8:lI108|H107227590
+107227590:lI111|H10722A058
+10722A058:lI103|H10722C7F0
+10722C7F0:lI103|H10722ED28
+10722ED28:lI101|H107230F70
+107230F70:lI114|H107232EE8
+107232EE8:lI46|H107234B90
+107234B90:lI98|H107236568
+107236568:lI101|H107237D10
+107237D10:lI97|H1072392B8
+1072392B8:lI109|N
+1071FB598:lH1071FE510|N
+1071FE510:lI115|H1072015C8
+1072015C8:lI110|H107204770
+107204770:lI109|H1072079A0
+1072079A0:lI112|H10720AC18
+10720AC18:lI97|H10720DE08
+10720DE08:lI95|H107210F98
+107210F98:lI101|H1072141F8
+1072141F8:lI114|H107217590
+107217590:lI114|H10721AAC0
+10721AAC0:lI111|H10721E030
+10721E030:lI114|H107221520
+107221520:lI95|H1072246C8
+1072246C8:lI105|H107227580
+107227580:lI111|H10722A048
+10722A048:lI46|H10722C7E0
+10722C7E0:lI98|H10722ED18
+10722ED18:lI101|H107230F60
+107230F60:lI97|H107232ED8
+107232ED8:lI109|N
+1071FB588:lH1071FE500|N
+1071FE500:lI115|H1072015B8
+1072015B8:lI110|H107204760
+107204760:lI109|H107207990
+107207990:lI112|H10720AC08
+10720AC08:lI95|H10720DDF8
+10720DDF8:lI99|H107210F88
+107210F88:lI111|H1072141E8
+1072141E8:lI110|H107217580
+107217580:lI102|H10721AAB0
+10721AAB0:lI46|H10721E020
+10721E020:lI98|H107221510
+107221510:lI101|H1072246B8
+1072246B8:lI97|H107227570
+107227570:lI109|N
+1071FB578:lH1071FE4F0|N
+1071FE4F0:lI115|H1072015A8
+1072015A8:lI110|H107204750
+107204750:lI109|H107207980
+107207980:lI112|H10720ABF8
+10720ABF8:lI97|H10720DDE8
+10720DDE8:lI95|H107210F78
+107210F78:lI109|H1072141D8
+1072141D8:lI105|H107217570
+107217570:lI98|H10721AAA0
+10721AAA0:lI95|H10721E010
+10721E010:lI115|H107221500
+107221500:lI116|H1072246A8
+1072246A8:lI111|H107227560
+107227560:lI114|H10722A038
+10722A038:lI97|H10722C7D0
+10722C7D0:lI103|H10722ED08
+10722ED08:lI101|H107230F50
+107230F50:lI95|H107232EC8
+107232EC8:lI100|H107234B80
+107234B80:lI101|H107236558
+107236558:lI116|H107237D00
+107237D00:lI115|H1072392A8
+1072392A8:lI46|H10723A720
+10723A720:lI98|H10723B990
+10723B990:lI101|H10723C9C0
+10723C9C0:lI97|H10723D830
+10723D830:lI109|N
+1071FB568:lH1071FE4E0|N
+1071FE4E0:lI115|H107201598
+107201598:lI110|H107204740
+107204740:lI109|H107207970
+107207970:lI112|H10720ABE8
+10720ABE8:lI97|H10720DDD8
+10720DDD8:lI95|H107210F68
+107210F68:lI109|H1072141C8
+1072141C8:lI105|H107217560
+107217560:lI98|H10721AA90
+10721AA90:lI95|H10721E000
+10721E000:lI108|H1072214F0
+1072214F0:lI105|H107224698
+107224698:lI98|H107227550
+107227550:lI46|H10722A028
+10722A028:lI98|H10722C7C0
+10722C7C0:lI101|H10722ECF8
+10722ECF8:lI97|H107230F40
+107230F40:lI109|N
+1071FB558:lH1071FE4D0|N
+1071FE4D0:lI115|H107201588
+107201588:lI110|H107204730
+107204730:lI109|H107207960
+107207960:lI112|H10720ABD8
+10720ABD8:lI95|H10720DDC8
+10720DDC8:lI109|H107210F58
+107210F58:lI105|H1072141B8
+1072141B8:lI110|H107217550
+107217550:lI105|H10721AA80
+10721AA80:lI95|H10721DFF0
+10721DFF0:lI109|H1072214E0
+1072214E0:lI105|H107224688
+107224688:lI98|H107227540
+107227540:lI46|H10722A018
+10722A018:lI98|H10722C7B0
+10722C7B0:lI101|H10722ECE8
+10722ECE8:lI97|H107230F30
+107230F30:lI109|N
+1071FB548:lH1071FE4C0|N
+1071FE4C0:lI115|H107201578
+107201578:lI110|H107204720
+107204720:lI109|H107207950
+107207950:lI112|H10720ABC8
+10720ABC8:lI97|H10720DDB8
+10720DDB8:lI95|H107210F48
+107210F48:lI97|H1072141A8
+1072141A8:lI117|H107217540
+107217540:lI116|H10721AA70
+10721AA70:lI104|H10721DFE0
+10721DFE0:lI101|H1072214D0
+1072214D0:lI110|H107224678
+107224678:lI116|H107227530
+107227530:lI105|H10722A008
+10722A008:lI99|H10722C7A0
+10722C7A0:lI97|H10722ECD8
+10722ECD8:lI116|H107230F20
+107230F20:lI105|H107232EB8
+107232EB8:lI111|H107234B70
+107234B70:lI110|H107236548
+107236548:lI95|H107237CF0
+107237CF0:lI115|H107239298
+107239298:lI101|H10723A710
+10723A710:lI114|H10723B980
+10723B980:lI118|H10723C9B0
+10723C9B0:lI105|H10723D820
+10723D820:lI99|H10723E540
+10723E540:lI101|H10723F130
+10723F130:lI46|H10723FBF0
+10723FBF0:lI98|H107240530
+107240530:lI101|H107240DB0
+107240DB0:lI97|H107241540
+107241540:lI109|N
+1071F87D8:Mn3:H1071FB500,H1071FB518,H1071FB528
+1071FB500:Mn2:H1071FE470,H1071FE480
+1071FE470:lH107201528|N
+107201528:lI115|H1072046D0
+1072046D0:lI110|H107207900
+107207900:lI109|H10720AB78
+10720AB78:lI112|H10720DD68
+10720DD68:lI99|H107210EF8
+107210EF8:lI95|H107214158
+107214158:lI109|H1072174F0
+1072174F0:lI105|H10721AA20
+10721AA20:lI98|H10721DF90
+10721DF90:lI95|H107221480
+107221480:lI103|H107224628
+107224628:lI114|H1072274E0
+1072274E0:lI97|H107229FD8
+107229FD8:lI109|H10722C770
+10722C770:lI46|H10722ECA8
+10722ECA8:lI98|H107230EF0
+107230EF0:lI101|H107232E88
+107232E88:lI97|H107234B50
+107234B50:lI109|N
+1071FE480:lH107201538|N
+107201538:lI115|H1072046E0
+1072046E0:lI110|H107207910
+107207910:lI109|H10720AB88
+10720AB88:lI112|H10720DD78
+10720DD78:lI97|H107210F08
+107210F08:lI95|H107214168
+107214168:lI110|H107217500
+107217500:lI101|H10721AA30
+10721AA30:lI116|H10721DFA0
+10721DFA0:lI119|H107221490
+107221490:lI111|H107224638
+107224638:lI114|H1072274F0
+1072274F0:lI107|H107229FE8
+107229FE8:lI95|H10722C780
+10722C780:lI105|H10722ECB8
+10722ECB8:lI110|H107230F00
+107230F00:lI116|H107232E98
+107232E98:lI101|H107234B60
+107234B60:lI114|H107236538
+107236538:lI102|H107237CE0
+107237CE0:lI97|H107239288
+107239288:lI99|H10723A700
+10723A700:lI101|H10723B970
+10723B970:lI95|H10723C9A0
+10723C9A0:lI102|H10723D810
+10723D810:lI105|H10723E530
+10723E530:lI108|H10723F120
+10723F120:lI116|H10723FBE0
+10723FBE0:lI101|H107240520
+107240520:lI114|H107240DA0
+107240DA0:lI46|H107241530
+107241530:lI98|H107241C60
+107241C60:lI101|H107242320
+107242320:lI97|H107242990
+107242990:lI109|N
+1071FB528:lH1071FE4A0|N
+1071FE4A0:lI115|H107201558
+107201558:lI110|H107204700
+107204700:lI109|H107207930
+107207930:lI112|H10720ABA8
+10720ABA8:lI109|H10720DD98
+10720DD98:lI95|H107210F28
+107210F28:lI117|H107214188
+107214188:lI115|H107217520
+107217520:lI109|H10721AA50
+10721AA50:lI46|H10721DFC0
+10721DFC0:lI98|H1072214B0
+1072214B0:lI101|H107224658
+107224658:lI97|H107227510
+107227510:lI109|N
+1071FB518:lH1071FE490|N
+1071FE490:lI115|H107201548
+107201548:lI110|H1072046F0
+1072046F0:lI109|H107207920
+107207920:lI112|H10720AB98
+10720AB98:lI97|H10720DD88
+10720DD88:lI95|H107210F18
+107210F18:lI109|H107214178
+107214178:lI105|H107217510
+107217510:lI98|H10721AA40
+10721AA40:lI95|H10721DFB0
+10721DFB0:lI100|H1072214A0
+1072214A0:lI97|H107224648
+107224648:lI116|H107227500
+107227500:lI97|H107229FF8
+107229FF8:lI46|H10722C790
+10722C790:lI98|H10722ECC8
+10722ECC8:lI101|H107230F10
+107230F10:lI97|H107232EA8
+107232EA8:lI109|N
+1071F87B8:Mn3:H1071FB4D0,H1071FB4E0,H1071FB4F0
+1071FB4D0:lH1071FE440|N
+1071FE440:lI115|H1072014F8
+1072014F8:lI110|H1072046A0
+1072046A0:lI109|H1072078D0
+1072078D0:lI112|H10720AB48
+10720AB48:lI97|H10720DD38
+10720DD38:lI95|H107210EC8
+107210EC8:lI109|H107214128
+107214128:lI105|H1072174C0
+1072174C0:lI98|H10721A9F0
+10721A9F0:lI46|H10721DF70
+10721DF70:lI98|H107221460
+107221460:lI101|H107224608
+107224608:lI97|H1072274C0
+1072274C0:lI109|N
+1071FB4F0:lH1071FE460|N
+1071FE460:lI115|H107201518
+107201518:lI110|H1072046C0
+1072046C0:lI109|H1072078F0
+1072078F0:lI112|H10720AB68
+10720AB68:lI46|H10720DD58
+10720DD58:lI97|H107210EE8
+107210EE8:lI112|H107214148
+107214148:lI112|H1072174E0
+1072174E0:lI117|H10721AA10
+10721AA10:lI112|N
+1071FB4E0:lH1071FE450|N
+1071FE450:lI115|H107201508
+107201508:lI110|H1072046B0
+1072046B0:lI109|H1072078E0
+1072078E0:lI112|H10720AB58
+10720AB58:lI109|H10720DD48
+10720DD48:lI95|H107210ED8
+107210ED8:lI99|H107214138
+107214138:lI111|H1072174D0
+1072174D0:lI110|H10721AA00
+10721AA00:lI102|H10721DF80
+10721DF80:lI105|H107221470
+107221470:lI103|H107224618
+107224618:lI46|H1072274D0
+1072274D0:lI98|H107229FC8
+107229FC8:lI101|H10722C760
+10722C760:lI97|H10722EC98
+10722EC98:lI109|N
+1071F8788:Mn5:H1071FB480,H1071FB490,H1071FB4A0,H1071FB4B0,H1071FB4C0
+1071FB480:lH1071FE3F0|N
+1071FE3F0:lI115|H1072014A8
+1072014A8:lI110|H107204650
+107204650:lI109|H107207880
+107207880:lI112|H10720AAF8
+10720AAF8:lI97|H10720DCE8
+10720DCE8:lI95|H107210E78
+107210E78:lI115|H1072140D8
+1072140D8:lI101|H107217470
+107217470:lI116|H10721A9A0
+10721A9A0:lI95|H10721DF20
+10721DF20:lI109|H107221410
+107221410:lI101|H1072245B8
+1072245B8:lI99|H107227470
+107227470:lI104|H107229F98
+107229F98:lI97|H10722C730
+10722C730:lI110|H10722EC68
+10722EC68:lI105|H107230EC0
+107230EC0:lI115|H107232E58
+107232E58:lI109|H107234B20
+107234B20:lI46|H107236508
+107236508:lI98|H107237CB0
+107237CB0:lI101|H107239258
+107239258:lI97|H10723A6D0
+10723A6D0:lI109|N
+1071FB4C0:lH1071FE430|N
+1071FE430:lI115|H1072014E8
+1072014E8:lI110|H107204690
+107204690:lI109|H1072078C0
+1072078C0:lI112|H10720AB38
+10720AB38:lI95|H10720DD28
+10720DD28:lI103|H107210EB8
+107210EB8:lI101|H107214118
+107214118:lI110|H1072174B0
+1072174B0:lI101|H10721A9E0
+10721A9E0:lI114|H10721DF60
+10721DF60:lI105|H107221450
+107221450:lI99|H1072245F8
+1072245F8:lI95|H1072274B0
+1072274B0:lI109|H107229FB8
+107229FB8:lI110|H10722C750
+10722C750:lI101|H10722EC88
+10722EC88:lI115|H107230EE0
+107230EE0:lI105|H107232E78
+107232E78:lI97|H107234B40
+107234B40:lI46|H107236528
+107236528:lI98|H107237CD0
+107237CD0:lI101|H107239278
+107239278:lI97|H10723A6F0
+10723A6F0:lI109|N
+1071FB4B0:lH1071FE420|N
+1071FE420:lI115|H1072014D8
+1072014D8:lI110|H107204680
+107204680:lI109|H1072078B0
+1072078B0:lI112|H10720AB28
+10720AB28:lI97|H10720DD18
+10720DD18:lI95|H107210EA8
+107210EA8:lI97|H107214108
+107214108:lI112|H1072174A0
+1072174A0:lI112|H10721A9D0
+10721A9D0:lI46|H10721DF50
+10721DF50:lI98|H107221440
+107221440:lI101|H1072245E8
+1072245E8:lI97|H1072274A0
+1072274A0:lI109|N
+1071FB4A0:lH1071FE410|N
+1071FE410:lI115|H1072014C8
+1072014C8:lI110|H107204670
+107204670:lI109|H1072078A0
+1072078A0:lI112|H10720AB18
+10720AB18:lI109|H10720DD08
+10720DD08:lI95|H107210E98
+107210E98:lI110|H1072140F8
+1072140F8:lI101|H107217490
+107217490:lI116|H10721A9C0
+10721A9C0:lI95|H10721DF40
+10721DF40:lI105|H107221430
+107221430:lI102|H1072245D8
+1072245D8:lI95|H107227490
+107227490:lI102|H107229FA8
+107229FA8:lI105|H10722C740
+10722C740:lI108|H10722EC78
+10722EC78:lI116|H107230ED0
+107230ED0:lI101|H107232E68
+107232E68:lI114|H107234B30
+107234B30:lI46|H107236518
+107236518:lI98|H107237CC0
+107237CC0:lI101|H107239268
+107239268:lI97|H10723A6E0
+10723A6E0:lI109|N
+1071FB490:lH1071FE400|N
+1071FE400:lI115|H1072014B8
+1072014B8:lI110|H107204660
+107204660:lI109|H107207890
+107207890:lI112|H10720AB08
+10720AB08:lI99|H10720DCF8
+10720DCF8:lI95|H107210E88
+107210E88:lI116|H1072140E8
+1072140E8:lI111|H107217480
+107217480:lI107|H10721A9B0
+10721A9B0:lI46|H10721DF30
+10721DF30:lI98|H107221420
+107221420:lI101|H1072245C8
+1072245C8:lI97|H107227480
+107227480:lI109|N
+1071F8778:lH1071FB470|N
+1071FB470:lI115|H1071FE3E0
+1071FE3E0:lI110|H107201498
+107201498:lI109|H107204640
+107204640:lI112|H107207870
+107207870:lI97|H10720AAE8
+10720AAE8:lI95|H10720DCD8
+10720DCD8:lI103|H107210E68
+107210E68:lI101|H1072140C8
+1072140C8:lI116|H107217460
+107217460:lI46|H10721A990
+10721A990:lI98|H10721DF10
+10721DF10:lI101|H107221400
+107221400:lI97|H1072245A8
+1072245A8:lI109|N
+1071F8740:Mn6:H1071FB408,H1071FB418,H1071FB428,H1071FB438,H1071FB450,H1071FB460
+1071FB408:lH1071FE370|N
+1071FE370:lI115|H107201428
+107201428:lI110|H1072045D0
+1072045D0:lI109|H107207800
+107207800:lI112|H10720AA78
+10720AA78:lI95|H10720DC68
+10720DC68:lI117|H107210DF8
+107210DF8:lI115|H107214058
+107214058:lI101|H1072173F0
+1072173F0:lI114|H10721A920
+10721A920:lI95|H10721DEA0
+10721DEA0:lI98|H107221390
+107221390:lI97|H107224538
+107224538:lI115|H107227410
+107227410:lI101|H107229F48
+107229F48:lI100|H10722C6E0
+10722C6E0:lI95|H10722EC18
+10722EC18:lI115|H107230E70
+107230E70:lI109|H107232E18
+107232E18:lI95|H107234AE0
+107234AE0:lI109|H1072364D8
+1072364D8:lI105|H107237C80
+107237C80:lI98|H107239238
+107239238:lI46|H10723A6C0
+10723A6C0:lI98|H10723B960
+10723B960:lI101|H10723C990
+10723C990:lI97|H10723D800
+10723D800:lI109|N
+1071FB460:lH1071FE3D0|N
+1071FE3D0:lI115|H107201488
+107201488:lI110|H107204630
+107204630:lI109|H107207860
+107207860:lI112|H10720AAD8
+10720AAD8:lI99|H10720DCC8
+10720DCC8:lI95|H107210E58
+107210E58:lI108|H1072140B8
+1072140B8:lI105|H107217450
+107217450:lI98|H10721A980
+10721A980:lI46|H10721DF00
+10721DF00:lI98|H1072213F0
+1072213F0:lI101|H107224598
+107224598:lI97|H107227460
+107227460:lI109|N
+1071FB450:lH1071FE3C0|N
+1071FE3C0:lI115|H107201478
+107201478:lI110|H107204620
+107204620:lI109|H107207850
+107207850:lI112|H10720AAC8
+10720AAC8:lI95|H10720DCB8
+10720DCB8:lI115|H107210E48
+107210E48:lI116|H1072140A8
+1072140A8:lI97|H107217440
+107217440:lI110|H10721A970
+10721A970:lI100|H10721DEF0
+10721DEF0:lI97|H1072213E0
+1072213E0:lI114|H107224588
+107224588:lI100|H107227450
+107227450:lI95|H107229F88
+107229F88:lI109|H10722C720
+10722C720:lI105|H10722EC58
+10722EC58:lI98|H107230EB0
+107230EB0:lI46|H107232E48
+107232E48:lI98|H107234B10
+107234B10:lI101|H1072364F8
+1072364F8:lI97|H107237CA0
+107237CA0:lI109|N
+1071FB438:Mn2:H1071FE3A0,H1071FE3B0
+1071FE3A0:lH107201458|N
+107201458:lI115|H107204600
+107204600:lI110|H107207830
+107207830:lI109|H10720AAA8
+10720AAA8:lI112|H10720DC98
+10720DC98:lI95|H107210E28
+107210E28:lI118|H107214088
+107214088:lI101|H107217420
+107217420:lI114|H10721A950
+10721A950:lI98|H10721DED0
+10721DED0:lI111|H1072213C0
+1072213C0:lI115|H107224568
+107224568:lI105|H107227430
+107227430:lI116|H107229F68
+107229F68:lI121|H10722C700
+10722C700:lI46|H10722EC38
+10722EC38:lI98|H107230E90
+107230E90:lI101|H107232E38
+107232E38:lI97|H107234B00
+107234B00:lI109|N
+1071FE3B0:lH107201468|N
+107201468:lI115|H107204610
+107204610:lI110|H107207840
+107207840:lI109|H10720AAB8
+10720AAB8:lI112|H10720DCA8
+10720DCA8:lI97|H107210E38
+107210E38:lI95|H107214098
+107214098:lI110|H107217430
+107217430:lI101|H10721A960
+10721A960:lI116|H10721DEE0
+10721DEE0:lI95|H1072213D0
+1072213D0:lI105|H107224578
+107224578:lI102|H107227440
+107227440:lI46|H107229F78
+107229F78:lI98|H10722C710
+10722C710:lI101|H10722EC48
+10722EC48:lI97|H107230EA0
+107230EA0:lI109|N
+1071FB428:lH1071FE390|N
+1071FE390:lI115|H107201448
+107201448:lI110|H1072045F0
+1072045F0:lI109|H107207820
+107207820:lI112|H10720AA98
+10720AA98:lI95|H10720DC88
+10720DC88:lI97|H107210E18
+107210E18:lI112|H107214078
+107214078:lI112|H107217410
+107217410:lI46|H10721A940
+10721A940:lI98|H10721DEC0
+10721DEC0:lI101|H1072213B0
+1072213B0:lI97|H107224558
+107224558:lI109|N
+1071FB418:lH1071FE380|N
+1071FE380:lI115|H107201438
+107201438:lI110|H1072045E0
+1072045E0:lI109|H107207810
+107207810:lI112|H10720AA88
+10720AA88:lI97|H10720DC78
+10720DC78:lI95|H107210E08
+107210E08:lI101|H107214068
+107214068:lI114|H107217400
+107217400:lI114|H10721A930
+10721A930:lI111|H10721DEB0
+10721DEB0:lI114|H1072213A0
+1072213A0:lI95|H107224548
+107224548:lI114|H107227420
+107227420:lI101|H107229F58
+107229F58:lI112|H10722C6F0
+10722C6F0:lI111|H10722EC28
+10722EC28:lI114|H107230E80
+107230E80:lI116|H107232E28
+107232E28:lI46|H107234AF0
+107234AF0:lI98|H1072364E8
+1072364E8:lI101|H107237C90
+107237C90:lI97|H107239248
+107239248:lI109|N
+1071F8720:Mn3:H1071FB3C8,H1071FB3D8,H1071FB3E8
+1071FB3C8:lH1071FE320|N
+1071FE320:lI115|H1072013D8
+1072013D8:lI110|H107204580
+107204580:lI109|H1072077B0
+1072077B0:lI112|H10720AA28
+10720AA28:lI109|H10720DC18
+10720DC18:lI95|H107210DA8
+107210DA8:lI110|H107214008
+107214008:lI101|H1072173A0
+1072173A0:lI116|H10721A8D0
+10721A8D0:lI95|H10721DE50
+10721DE50:lI105|H107221350
+107221350:lI102|H1072244F8
+1072244F8:lI95|H1072273D0
+1072273D0:lI109|H107229F08
+107229F08:lI116|H10722C6A0
+10722C6A0:lI46|H10722EBD8
+10722EBD8:lI98|H107230E30
+107230E30:lI101|H107232DF8
+107232DF8:lI97|H107234AC0
+107234AC0:lI109|N
+1071FB3E8:Mn3:H1071FE340,H1071FE350,H1071FE360
+1071FE340:lH1072013F8|N
+1072013F8:lI115|H1072045A0
+1072045A0:lI110|H1072077D0
+1072077D0:lI109|H10720AA48
+10720AA48:lI112|H10720DC38
+10720DC38:lI97|H107210DC8
+107210DC8:lI95|H107214028
+107214028:lI109|H1072173C0
+1072173C0:lI105|H10721A8F0
+10721A8F0:lI98|H10721DE70
+10721DE70:lI95|H107221370
+107221370:lI115|H107224518
+107224518:lI116|H1072273F0
+1072273F0:lI111|H107229F28
+107229F28:lI114|H10722C6C0
+10722C6C0:lI97|H10722EBF8
+10722EBF8:lI103|H107230E50
+107230E50:lI101|H107232E08
+107232E08:lI46|H107234AD0
+107234AD0:lI98|H1072364C8
+1072364C8:lI101|H107237C70
+107237C70:lI97|H107239228
+107239228:lI109|N
+1071FE360:lH107201418|N
+107201418:lI115|H1072045C0
+1072045C0:lI110|H1072077F0
+1072077F0:lI109|H10720AA68
+10720AA68:lI112|H10720DC58
+10720DC58:lI95|H107210DE8
+107210DE8:lI97|H107214048
+107214048:lI112|H1072173E0
+1072173E0:lI112|H10721A910
+10721A910:lI95|H10721DE90
+10721DE90:lI115|H107221380
+107221380:lI117|H107224528
+107224528:lI112|H107227400
+107227400:lI46|H107229F38
+107229F38:lI98|H10722C6D0
+10722C6D0:lI101|H10722EC08
+10722EC08:lI97|H107230E60
+107230E60:lI109|N
+1071FE350:lH107201408|N
+107201408:lI115|H1072045B0
+1072045B0:lI110|H1072077E0
+1072077E0:lI109|H10720AA58
+10720AA58:lI112|H10720DC48
+10720DC48:lI99|H107210DD8
+107210DD8:lI46|H107214038
+107214038:lI98|H1072173D0
+1072173D0:lI101|H10721A900
+10721A900:lI97|H10721DE80
+10721DE80:lI109|N
+1071FB3D8:lH1071FE330|N
+1071FE330:lI115|H1072013E8
+1072013E8:lI110|H107204590
+107204590:lI109|H1072077C0
+1072077C0:lI112|H10720AA38
+10720AA38:lI97|H10720DC28
+10720DC28:lI95|H107210DB8
+107210DB8:lI115|H107214018
+107214018:lI101|H1072173B0
+1072173B0:lI116|H10721A8E0
+10721A8E0:lI95|H10721DE60
+10721DE60:lI108|H107221360
+107221360:lI105|H107224508
+107224508:lI98|H1072273E0
+1072273E0:lI46|H107229F18
+107229F18:lI98|H10722C6B0
+10722C6B0:lI101|H10722EBE8
+10722EBE8:lI97|H107230E40
+107230E40:lI109|N
+1071F8700:Mn3:H1071FB390,H1071FB3A0,H1071FB3B0
+1071FB390:lH1071FE2E0|N
+1071FE2E0:lI115|H107201398
+107201398:lI110|H107204540
+107204540:lI109|H107207770
+107207770:lI112|H10720A9E8
+10720A9E8:lI97|H10720DBD8
+10720DBD8:lI95|H107210D68
+107210D68:lI115|H107213FC8
+107213FC8:lI117|H107217360
+107217360:lI112|H10721A890
+10721A890:lI101|H10721DE10
+10721DE10:lI114|H107221310
+107221310:lI118|H1072244B8
+1072244B8:lI105|H107227390
+107227390:lI115|H107229EC8
+107229EC8:lI111|H10722C680
+10722C680:lI114|H10722EBB8
+10722EBB8:lI46|H107230E10
+107230E10:lI98|H107232DD8
+107232DD8:lI101|H107234AA0
+107234AA0:lI97|H1072364A8
+1072364A8:lI109|N
+1071FB3B0:Mn2:H1071FE300,H1071FE310
+1071FE300:lH1072013B8|N
+1072013B8:lI115|H107204560
+107204560:lI110|H107207790
+107207790:lI109|H10720AA08
+10720AA08:lI112|H10720DBF8
+10720DBF8:lI95|H107210D88
+107210D88:lI110|H107213FE8
+107213FE8:lI111|H107217380
+107217380:lI116|H10721A8B0
+10721A8B0:lI105|H10721DE30
+10721DE30:lI102|H107221330
+107221330:lI105|H1072244D8
+1072244D8:lI99|H1072273B0
+1072273B0:lI97|H107229EE8
+107229EE8:lI116|H10722C690
+10722C690:lI105|H10722EBC8
+10722EBC8:lI111|H107230E20
+107230E20:lI110|H107232DE8
+107232DE8:lI95|H107234AB0
+107234AB0:lI109|H1072364B8
+1072364B8:lI105|H107237C60
+107237C60:lI98|H107239218
+107239218:lI46|H10723A6B0
+10723A6B0:lI98|H10723B950
+10723B950:lI101|H10723C980
+10723C980:lI97|H10723D7F0
+10723D7F0:lI109|N
+1071FE310:lH1072013C8|N
+1072013C8:lI115|H107204570
+107204570:lI110|H1072077A0
+1072077A0:lI109|H10720AA18
+10720AA18:lI112|H10720DC08
+10720DC08:lI109|H107210D98
+107210D98:lI95|H107213FF8
+107213FF8:lI109|H107217390
+107217390:lI112|H10721A8C0
+10721A8C0:lI100|H10721DE40
+10721DE40:lI46|H107221340
+107221340:lI98|H1072244E8
+1072244E8:lI101|H1072273C0
+1072273C0:lI97|H107229EF8
+107229EF8:lI109|N
+1071FB3A0:lH1071FE2F0|N
+1071FE2F0:lI115|H1072013A8
+1072013A8:lI110|H107204550
+107204550:lI109|H107207780
+107207780:lI112|H10720A9F8
+10720A9F8:lI109|H10720DBE8
+10720DBE8:lI95|H107210D78
+107210D78:lI99|H107213FD8
+107213FD8:lI111|H107217370
+107217370:lI110|H10721A8A0
+10721A8A0:lI102|H10721DE20
+10721DE20:lI46|H107221320
+107221320:lI98|H1072244C8
+1072244C8:lI101|H1072273A0
+1072273A0:lI97|H107229ED8
+107229ED8:lI109|N
+1071F5D88:lI47|H1071F86C8
+1071F86C8:lI111|H1071FB330
+1071FB330:lI112|H1071FE270
+1071FE270:lI116|H107201328
+107201328:lI47|H1072044D0
+1072044D0:lI104|H107207700
+107207700:lI111|H10720A978
+10720A978:lI109|H10720DB68
+10720DB68:lI101|H107210CF8
+107210CF8:lI98|H107213F58
+107213F58:lI114|H1072172F0
+1072172F0:lI101|H10721A820
+10721A820:lI119|H10721DDA0
+10721DDA0:lI47|H1072212A0
+1072212A0:lI67|H107224448
+107224448:lI101|H107227320
+107227320:lI108|H107229E58
+107229E58:lI108|H10722C630
+10722C630:lI97|H10722EB68
+10722EB68:lI114|H107230DC0
+107230DC0:lI47|H107232D88
+107232D88:lI101|H107234A50
+107234A50:lI114|H107236468
+107236468:lI108|H107237C20
+107237C20:lI97|H1072391D8
+1072391D8:lI110|H10723A670
+10723A670:lI103|H10723B930
+10723B930:lI47|H10723C960
+10723C960:lI50|H10723D7D0
+10723D7D0:lI54|H10723E510
+10723E510:lI46|H10723F110
+10723F110:lI48|H10723FBD0
+10723FBD0:lI46|H107240510
+107240510:lI50|H107240D90
+107240D90:lI47|H107241520
+107241520:lI108|H107241C50
+107241C50:lI105|H107242310
+107242310:lI98|H107242980
+107242980:lI47|H107242F80
+107242F80:lI101|H1072434F0
+1072434F0:lI114|H107243A30
+107243A30:lI108|H107243F20
+107243F20:lI97|H107244410
+107244410:lI110|H1072448C0
+1072448C0:lI103|H107244D30
+107244D30:lI47|H107245190
+107245190:lI108|H1072455E0
+1072455E0:lI105|H1072459E0
+1072459E0:lI98|H107245DA0
+107245DA0:lI47|H107246130
+107246130:lI115|H1072464C0
+1072464C0:lI110|H107246850
+107246850:lI109|H107246BE0
+107246BE0:lI112|H107246F10
+107246F10:lI45|H107247230
+107247230:lI53|H107247540
+107247540:lI46|H107247840
+107247840:lI49|H107247B40
+107247B40:lI52|H107247E20
+107247E20:lI47|H280052C20
+1071F3680:lH1071F5E28|H1071F5E40
+1071F5E28:t2:H1071F89B8,H1071F89C8
+1071F89C8:Mf13:H1071FB880:N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
+1071FB880:t13:H1071FE838,H1071FE848,H1071FE858,H1071FE868,H1071FE878,H1071FE888,H1071FE898,H1071FE8A8,H1071FE8B8,H1071FE8C8,H1071FE8D8,H1071FE8E8,H1071FE8F8,H1071FE908,H1071FE918,H1071FE928,H1071FE938,H1071FE948,H1071FE958
+1071FE958:lI115|H107201A18
+107201A18:lI121|H107204BC0
+107204BC0:lI115|H107207DF0
+107207DF0:lI116|H10720B068
+10720B068:lI111|H10720E258
+10720E258:lI111|H1072113E8
+1072113E8:lI108|H107214638
+107214638:lI115|H1072179C0
+1072179C0:lI95|H10721AEC0
+10721AEC0:lI114|H10721E410
+10721E410:lI101|H1072218E0
+1072218E0:lI108|H107224A88
+107224A88:lI117|H107227910
+107227910:lI112|H10722A388
+10722A388:lI46|H10722CAE0
+10722CAE0:lI98|H10722EFD8
+10722EFD8:lI101|H1072311E0
+1072311E0:lI97|H1072330F8
+1072330F8:lI109|N
+1071FE948:lI115|H107201A08
+107201A08:lI121|H107204BB0
+107204BB0:lI115|H107207DE0
+107207DE0:lI116|H10720B058
+10720B058:lI111|H10720E248
+10720E248:lI111|H1072113D8
+1072113D8:lI108|H107214628
+107214628:lI115|H1072179B0
+1072179B0:lI95|H10721AEB0
+10721AEB0:lI114|H10721E400
+10721E400:lI99|H1072218D0
+1072218D0:lI46|H107224A78
+107224A78:lI98|H107227900
+107227900:lI101|H10722A378
+10722A378:lI97|H10722CAD0
+10722CAD0:lI109|N
+1071FE938:lI115|H1072019F8
+1072019F8:lI121|H107204BA0
+107204BA0:lI115|H107207DD0
+107207DD0:lI116|H10720B048
+10720B048:lI111|H10720E238
+10720E238:lI111|H1072113C8
+1072113C8:lI108|H107214618
+107214618:lI115|H1072179A0
+1072179A0:lI95|H10721AEA0
+10721AEA0:lI109|H10721E3F0
+10721E3F0:lI97|H1072218C0
+1072218C0:lI107|H107224A68
+107224A68:lI101|H1072278F0
+1072278F0:lI46|H10722A368
+10722A368:lI98|H10722CAC0
+10722CAC0:lI101|H10722EFC8
+10722EFC8:lI97|H1072311D0
+1072311D0:lI109|N
+1071FE928:lI115|H1072019E8
+1072019E8:lI121|H107204B90
+107204B90:lI115|H107207DC0
+107207DC0:lI116|H10720B038
+10720B038:lI111|H10720E228
+10720E228:lI111|H1072113B8
+1072113B8:lI108|H107214608
+107214608:lI115|H107217990
+107217990:lI95|H10721AE90
+10721AE90:lI108|H10721E3E0
+10721E3E0:lI105|H1072218B0
+1072218B0:lI98|H107224A58
+107224A58:lI46|H1072278E0
+1072278E0:lI98|H10722A358
+10722A358:lI101|H10722CAB0
+10722CAB0:lI97|H10722EFB8
+10722EFB8:lI109|N
+1071FE918:lI115|H1072019D8
+1072019D8:lI121|H107204B80
+107204B80:lI115|H107207DB0
+107207DB0:lI116|H10720B028
+10720B028:lI111|H10720E218
+10720E218:lI111|H1072113A8
+1072113A8:lI108|H1072145F8
+1072145F8:lI115|H107217980
+107217980:lI46|H10721AE80
+10721AE80:lI98|H10721E3D0
+10721E3D0:lI101|H1072218A0
+1072218A0:lI97|H107224A48
+107224A48:lI109|N
+1071FE908:lI115|H1072019C8
+1072019C8:lI97|H107204B70
+107204B70:lI115|H107207DA0
+107207DA0:lI108|H10720B018
+10720B018:lI95|H10720E208
+10720E208:lI114|H107211398
+107211398:lI101|H1072145E8
+1072145E8:lI112|H107217970
+107217970:lI111|H10721AE70
+10721AE70:lI114|H10721E3C0
+10721E3C0:lI116|H107221890
+107221890:lI95|H107224A38
+107224A38:lI116|H1072278D0
+1072278D0:lI116|H10722A348
+10722A348:lI121|H10722CAA0
+10722CAA0:lI95|H10722EFA8
+10722EFA8:lI104|H1072311C0
+1072311C0:lI46|H1072330E8
+1072330E8:lI98|H107234D40
+107234D40:lI101|H1072366E8
+1072366E8:lI97|H107237E50
+107237E50:lI109|N
+1071FE8F8:lI115|H1072019B8
+1072019B8:lI97|H107204B60
+107204B60:lI115|H107207D90
+107207D90:lI108|H10720B008
+10720B008:lI95|H10720E1F8
+10720E1F8:lI114|H107211388
+107211388:lI101|H1072145D8
+1072145D8:lI112|H107217960
+107217960:lI111|H10721AE60
+10721AE60:lI114|H10721E3B0
+10721E3B0:lI116|H107221880
+107221880:lI95|H107224A28
+107224A28:lI102|H1072278C0
+1072278C0:lI105|H10722A338
+10722A338:lI108|H10722CA90
+10722CA90:lI101|H10722EF98
+10722EF98:lI95|H1072311B0
+1072311B0:lI104|H1072330D8
+1072330D8:lI46|H107234D30
+107234D30:lI98|H1072366D8
+1072366D8:lI101|H107237E40
+107237E40:lI97|H1072393C8
+1072393C8:lI109|N
+1071FE8E8:lI115|H1072019A8
+1072019A8:lI97|H107204B50
+107204B50:lI115|H107207D80
+107207D80:lI108|H10720AFF8
+10720AFF8:lI95|H10720E1E8
+10720E1E8:lI114|H107211378
+107211378:lI101|H1072145C8
+1072145C8:lI112|H107217950
+107217950:lI111|H10721AE50
+10721AE50:lI114|H10721E3A0
+10721E3A0:lI116|H107221870
+107221870:lI46|H107224A18
+107224A18:lI98|H1072278B0
+1072278B0:lI101|H10722A328
+10722A328:lI97|H10722CA80
+10722CA80:lI109|N
+1071FE8D8:lI115|H107201998
+107201998:lI97|H107204B40
+107204B40:lI115|H107207D70
+107207D70:lI108|H10720AFE8
+10720AFE8:lI46|H10720E1D8
+10720E1D8:lI98|H107211368
+107211368:lI101|H1072145B8
+1072145B8:lI97|H107217940
+107217940:lI109|N
+1071FE8C8:lI115|H107201988
+107201988:lI97|H107204B30
+107204B30:lI115|H107207D60
+107207D60:lI108|H10720AFD8
+10720AFD8:lI46|H10720E1C8
+10720E1C8:lI97|H107211358
+107211358:lI112|H1072145A8
+1072145A8:lI112|H107217930
+107217930:lI117|H10721AE40
+10721AE40:lI112|N
+1071FE8B8:lI115|H107201978
+107201978:lI97|H107204B20
+107204B20:lI115|H107207D50
+107207D50:lI108|H10720AFC8
+10720AFC8:lI46|H10720E1B8
+10720E1B8:lI97|H107211348
+107211348:lI112|H107214598
+107214598:lI112|N
+1071FE8A8:lI114|H107201968
+107201968:lI101|H107204B10
+107204B10:lI108|H107207D40
+107207D40:lI101|H10720AFB8
+10720AFB8:lI97|H10720E1A8
+10720E1A8:lI115|H107211338
+107211338:lI101|H107214588
+107214588:lI95|H107217920
+107217920:lI104|H10721AE30
+10721AE30:lI97|H10721E390
+10721E390:lI110|H107221860
+107221860:lI100|H107224A08
+107224A08:lI108|H1072278A0
+1072278A0:lI101|H10722A318
+10722A318:lI114|H10722CA70
+10722CA70:lI95|H10722EF88
+10722EF88:lI49|H1072311A0
+1072311A0:lI46|H1072330C8
+1072330C8:lI98|H107234D20
+107234D20:lI101|H1072366C8
+1072366C8:lI97|H107237E30
+107237E30:lI109|N
+1071FE898:lI114|H107201958
+107201958:lI101|H107204B00
+107204B00:lI108|H107207D30
+107207D30:lI101|H10720AFA8
+10720AFA8:lI97|H10720E198
+10720E198:lI115|H107211328
+107211328:lI101|H107214578
+107214578:lI95|H107217910
+107217910:lI104|H10721AE20
+10721AE20:lI97|H10721E380
+10721E380:lI110|H107221850
+107221850:lI100|H1072249F8
+1072249F8:lI108|H107227890
+107227890:lI101|H10722A308
+10722A308:lI114|H10722CA60
+10722CA60:lI46|H10722EF78
+10722EF78:lI98|H107231190
+107231190:lI101|H1072330B8
+1072330B8:lI97|H107234D10
+107234D10:lI109|N
+1071FE888:lI114|H107201948
+107201948:lI98|H107204AF0
+107204AF0:lI95|H107207D20
+107207D20:lI102|H10720AF98
+10720AF98:lI111|H10720E188
+10720E188:lI114|H107211318
+107211318:lI109|H107214568
+107214568:lI97|H107217900
+107217900:lI116|H10721AE10
+10721AE10:lI95|H10721E370
+10721E370:lI115|H107221840
+107221840:lI117|H1072249E8
+1072249E8:lI112|H107227880
+107227880:lI112|H10722A2F8
+10722A2F8:lI46|H10722CA50
+10722CA50:lI98|H10722EF68
+10722EF68:lI101|H107231180
+107231180:lI97|H1072330A8
+1072330A8:lI109|N
+1071FE878:lI114|H107201938
+107201938:lI98|H107204AE0
+107204AE0:lI46|H107207D10
+107207D10:lI98|H10720AF88
+10720AF88:lI101|H10720E178
+10720E178:lI97|H107211308
+107211308:lI109|N
+1071FE868:lI109|H107201928
+107201928:lI105|H107204AD0
+107204AD0:lI115|H107207D00
+107207D00:lI99|H10720AF78
+10720AF78:lI95|H10720E168
+10720E168:lI115|H1072112F8
+1072112F8:lI117|H107214558
+107214558:lI112|H1072178F0
+1072178F0:lI112|H10721AE00
+10721AE00:lI46|H10721E360
+10721E360:lI98|H107221830
+107221830:lI101|H1072249D8
+1072249D8:lI97|H107227870
+107227870:lI109|N
+1071FE858:lI102|H107201918
+107201918:lI111|H107204AC0
+107204AC0:lI114|H107207CF0
+107207CF0:lI109|H10720AF68
+10720AF68:lI97|H10720E158
+10720E158:lI116|H1072112E8
+1072112E8:lI95|H107214548
+107214548:lI108|H1072178E0
+1072178E0:lI105|H10721ADF0
+10721ADF0:lI98|H10721E350
+10721E350:lI95|H107221820
+107221820:lI115|H1072249C8
+1072249C8:lI117|H107227860
+107227860:lI112|H10722A2E8
+10722A2E8:lI112|H10722CA40
+10722CA40:lI46|H10722EF58
+10722EF58:lI98|H107231170
+107231170:lI101|H107233098
+107233098:lI97|H107234D00
+107234D00:lI109|N
+1071FE848:lI101|H107201908
+107201908:lI114|H107204AB0
+107204AB0:lI108|H107207CE0
+107207CE0:lI115|H10720AF58
+10720AF58:lI114|H10720E148
+10720E148:lI118|H1072112D8
+1072112D8:lI46|H107214538
+107214538:lI98|H1072178D0
+1072178D0:lI101|H10721ADE0
+10721ADE0:lI97|H10721E340
+10721E340:lI109|N
+1071FE838:lI97|H1072018F8
+1072018F8:lI108|H107204AA0
+107204AA0:lI97|H107207CD0
+107207CD0:lI114|H10720AF48
+10720AF48:lI109|H10720E138
+10720E138:lI95|H1072112C8
+1072112C8:lI104|H107214528
+107214528:lI97|H1072178C0
+1072178C0:lI110|H10721ADD0
+10721ADD0:lI100|H10721E330
+10721E330:lI108|H107221810
+107221810:lI101|H1072249B8
+1072249B8:lI114|H107227850
+107227850:lI46|H10722A2D8
+10722A2D8:lI98|H10722CA30
+10722CA30:lI101|H10722EF48
+10722EF48:lI97|H107231160
+107231160:lI109|N
+1071F89B8:lI47|H1071FB870
+1071FB870:lI111|H1071FE828
+1071FE828:lI112|H1072018E8
+1072018E8:lI116|H107204A90
+107204A90:lI47|H107207CC0
+107207CC0:lI104|H10720AF38
+10720AF38:lI111|H10720E128
+10720E128:lI109|H1072112B8
+1072112B8:lI101|H107214518
+107214518:lI98|H1072178B0
+1072178B0:lI114|H10721ADC0
+10721ADC0:lI101|H10721E320
+10721E320:lI119|H107221800
+107221800:lI47|H1072249A8
+1072249A8:lI67|H107227840
+107227840:lI101|H10722A2C8
+10722A2C8:lI108|H10722CA20
+10722CA20:lI108|H10722EF38
+10722EF38:lI97|H107231150
+107231150:lI114|H107233088
+107233088:lI47|H107234CF0
+107234CF0:lI101|H1072366B8
+1072366B8:lI114|H107237E20
+107237E20:lI108|H1072393B8
+1072393B8:lI97|H10723A810
+10723A810:lI110|H10723BA40
+10723BA40:lI103|H10723CA70
+10723CA70:lI47|H10723D8D0
+10723D8D0:lI50|H10723E5D0
+10723E5D0:lI54|H10723F1B0
+10723F1B0:lI46|H10723FC40
+10723FC40:lI48|H107240580
+107240580:lI46|H107240DF0
+107240DF0:lI50|H107241580
+107241580:lI47|H107241CA0
+107241CA0:lI108|H107242360
+107242360:lI105|H1072429C0
+1072429C0:lI98|H107242FA0
+107242FA0:lI47|H107243510
+107243510:lI101|H107243A50
+107243A50:lI114|H107243F40
+107243F40:lI108|H107244430
+107244430:lI97|H1072448E0
+1072448E0:lI110|H107244D50
+107244D50:lI103|H1072451B0
+1072451B0:lI47|H107245600
+107245600:lI108|H107245A00
+107245A00:lI105|H107245DB0
+107245DB0:lI98|H107246140
+107246140:lI47|H1072464D0
+1072464D0:lI115|H107246860
+107246860:lI97|H107246BF0
+107246BF0:lI115|H107246F20
+107246F20:lI108|H107247240
+107247240:lI45|H107247550
+107247550:lI52|H107247850
+107247850:lI46|H107247B50
+107247B50:lI50|H107247E30
+107247E30:lI46|H1072480F0
+1072480F0:lI49|H1072483B0
+1072483B0:lI47|H280052C20
+1071F5E40:lH1071F8A78|H1071F8A90
+1071F8A78:t2:H1071FB920,H1071FB930
+1071FB930:MfE:H1071FE978:N,N,N,N,N,N,N,N,N,N,N,N,N,N
+1071FE978:tE:H107201A38,H107201A48,H107201A58,H107201A68,H107201A78,H107201A88,H107201A98,H107201AA8,H107201AB8,H107201AC8,H107201AD8,H107201AE8,H107201AF8,H107201B08
+107201B08:lI116|H107204CB0
+107204CB0:lI116|H107207EE0
+107207EE0:lI98|H10720B158
+10720B158:lI95|H10720E348
+10720E348:lI97|H1072114D8
+1072114D8:lI117|H107214728
+107214728:lI116|H107217AB0
+107217AB0:lI111|H10721AFA0
+10721AFA0:lI115|H10721E4F0
+10721E4F0:lI116|H1072219B0
+1072219B0:lI97|H107224B58
+107224B58:lI114|H1072279E0
+1072279E0:lI116|H10722A448
+10722A448:lI46|H10722CB90
+10722CB90:lI98|H10722F078
+10722F078:lI101|H107231270
+107231270:lI97|H107233178
+107233178:lI109|N
+107201AF8:lI115|H107204CA0
+107204CA0:lI121|H107207ED0
+107207ED0:lI115|H10720B148
+10720B148:lI116|H10720E338
+10720E338:lI101|H1072114C8
+1072114C8:lI109|H107214718
+107214718:lI95|H107217AA0
+107217AA0:lI105|H10721AF90
+10721AF90:lI110|H10721E4E0
+10721E4E0:lI102|H1072219A0
+1072219A0:lI111|H107224B48
+107224B48:lI114|H1072279D0
+1072279D0:lI109|H10722A438
+10722A438:lI97|H10722CB80
+10722CB80:lI116|H10722F068
+10722F068:lI105|H107231260
+107231260:lI111|H107233168
+107233168:lI110|H107234DA0
+107234DA0:lI46|H107236738
+107236738:lI98|H107237EA0
+107237EA0:lI101|H107239408
+107239408:lI97|H10723A830
+10723A830:lI109|N
+107201AE8:lI115|H107204C90
+107204C90:lI99|H107207EC0
+107207EC0:lI104|H10720B138
+10720B138:lI101|H10720E328
+10720E328:lI100|H1072114B8
+1072114B8:lI117|H107214708
+107214708:lI108|H107217A90
+107217A90:lI101|H10721AF80
+10721AF80:lI114|H10721E4D0
+10721E4D0:lI46|H107221990
+107221990:lI98|H107224B38
+107224B38:lI101|H1072279C0
+1072279C0:lI97|H10722A428
+10722A428:lI109|N
+107201AD8:lI114|H107204C80
+107204C80:lI117|H107207EB0
+107207EB0:lI110|H10720B128
+10720B128:lI116|H10720E318
+10720E318:lI105|H1072114A8
+1072114A8:lI109|H1072146F8
+1072146F8:lI101|H107217A80
+107217A80:lI95|H10721AF70
+10721AF70:lI116|H10721E4C0
+10721E4C0:lI111|H107221980
+107221980:lI111|H107224B28
+107224B28:lI108|H1072279B0
+1072279B0:lI115|H10722A418
+10722A418:lI95|H10722CB70
+10722CB70:lI115|H10722F058
+10722F058:lI117|H107231250
+107231250:lI112|H107233158
+107233158:lI46|H107234D90
+107234D90:lI98|H107236728
+107236728:lI101|H107237E90
+107237E90:lI97|H1072393F8
+1072393F8:lI109|N
+107201AC8:lI114|H107204C70
+107204C70:lI117|H107207EA0
+107207EA0:lI110|H10720B118
+10720B118:lI116|H10720E308
+10720E308:lI105|H107211498
+107211498:lI109|H1072146E8
+1072146E8:lI101|H107217A70
+107217A70:lI95|H10721AF60
+10721AF60:lI116|H10721E4B0
+10721E4B0:lI111|H107221970
+107221970:lI111|H107224B18
+107224B18:lI108|H1072279A0
+1072279A0:lI115|H10722A408
+10722A408:lI46|H10722CB60
+10722CB60:lI98|H10722F048
+10722F048:lI101|H107231240
+107231240:lI97|H107233148
+107233148:lI109|N
+107201AB8:lI114|H107204C60
+107204C60:lI117|H107207E90
+107207E90:lI110|H10720B108
+10720B108:lI116|H10720E2F8
+10720E2F8:lI105|H107211488
+107211488:lI109|H1072146D8
+1072146D8:lI101|H107217A60
+107217A60:lI95|H10721AF50
+10721AF50:lI116|H10721E4A0
+10721E4A0:lI111|H107221960
+107221960:lI111|H107224B08
+107224B08:lI108|H107227990
+107227990:lI115|H10722A3F8
+10722A3F8:lI46|H10722CB50
+10722CB50:lI97|H10722F038
+10722F038:lI112|H107231230
+107231230:lI112|H107233138
+107233138:lI117|H107234D80
+107234D80:lI112|N
+107201AA8:lI114|H107204C50
+107204C50:lI117|H107207E80
+107207E80:lI110|H10720B0F8
+10720B0F8:lI116|H10720E2E8
+10720E2E8:lI105|H107211478
+107211478:lI109|H1072146C8
+1072146C8:lI101|H107217A50
+107217A50:lI95|H10721AF40
+10721AF40:lI116|H10721E490
+10721E490:lI111|H107221950
+107221950:lI111|H107224AF8
+107224AF8:lI108|H107227980
+107227980:lI115|H10722A3E8
+10722A3E8:lI46|H10722CB40
+10722CB40:lI97|H10722F028
+10722F028:lI112|H107231220
+107231220:lI112|N
+107201A98:lI111|H107204C40
+107204C40:lI98|H107207E70
+107207E70:lI115|H10720B0E8
+10720B0E8:lI101|H10720E2D8
+10720E2D8:lI114|H107211468
+107211468:lI118|H1072146B8
+1072146B8:lI101|H107217A40
+107217A40:lI114|H10721AF30
+10721AF30:lI95|H10721E480
+10721E480:lI98|H107221940
+107221940:lI97|H107224AE8
+107224AE8:lI99|H107227970
+107227970:lI107|H10722A3D8
+10722A3D8:lI101|H10722CB30
+10722CB30:lI110|H10722F018
+10722F018:lI100|H107231210
+107231210:lI46|H107233128
+107233128:lI98|H107234D70
+107234D70:lI101|H107236718
+107236718:lI97|H107237E80
+107237E80:lI109|N
+107201A88:lI109|H107204C30
+107204C30:lI115|H107207E60
+107207E60:lI97|H10720B0D8
+10720B0D8:lI99|H10720E2C8
+10720E2C8:lI99|H107211458
+107211458:lI46|H1072146A8
+1072146A8:lI98|H107217A30
+107217A30:lI101|H10721AF20
+10721AF20:lI97|H10721E470
+10721E470:lI109|N
+107201A78:lI105|H107204C20
+107204C20:lI110|H107207E50
+107207E50:lI115|H10720B0C8
+10720B0C8:lI116|H10720E2B8
+10720E2B8:lI114|H107211448
+107211448:lI117|H107214698
+107214698:lI109|H107217A20
+107217A20:lI101|H10721AF10
+10721AF10:lI110|H10721E460
+10721E460:lI116|H107221930
+107221930:lI46|H107224AD8
+107224AD8:lI98|H107227960
+107227960:lI101|H10722A3C8
+10722A3C8:lI97|H10722CB20
+10722CB20:lI109|N
+107201A68:lI101|H107204C10
+107204C10:lI114|H107207E40
+107207E40:lI116|H10720B0B8
+10720B0B8:lI115|H10720E2A8
+10720E2A8:lI95|H107211438
+107211438:lI97|H107214688
+107214688:lI108|H107217A10
+107217A10:lI108|H10721AF00
+10721AF00:lI111|H10721E450
+10721E450:lI99|H107221920
+107221920:lI95|H107224AC8
+107224AC8:lI99|H107227950
+107227950:lI111|H10722A3B8
+10722A3B8:lI110|H10722CB10
+10722CB10:lI102|H10722F008
+10722F008:lI105|H107231200
+107231200:lI103|H107233118
+107233118:lI46|H107234D60
+107234D60:lI98|H107236708
+107236708:lI101|H107237E70
+107237E70:lI97|H1072393E8
+1072393E8:lI109|N
+107201A58:lI100|H107204C00
+107204C00:lI121|H107207E30
+107207E30:lI110|H10720B0A8
+10720B0A8:lI116|H10720E298
+10720E298:lI114|H107211428
+107211428:lI97|H107214678
+107214678:lI99|H107217A00
+107217A00:lI101|H10721AEF0
+10721AEF0:lI46|H10721E440
+10721E440:lI98|H107221910
+107221910:lI101|H107224AB8
+107224AB8:lI97|H107227940
+107227940:lI109|N
+107201A48:lI100|H107204BF0
+107204BF0:lI98|H107207E20
+107207E20:lI103|H10720B098
+10720B098:lI46|H10720E288
+10720E288:lI98|H107211418
+107211418:lI101|H107214668
+107214668:lI97|H1072179F0
+1072179F0:lI109|N
+107201A38:lI97|H107204BE0
+107204BE0:lI112|H107207E10
+107207E10:lI112|H10720B088
+10720B088:lI109|H10720E278
+10720E278:lI111|H107211408
+107211408:lI110|H107214658
+107214658:lI95|H1072179E0
+1072179E0:lI105|H10721AEE0
+10721AEE0:lI110|H10721E430
+10721E430:lI102|H107221900
+107221900:lI111|H107224AA8
+107224AA8:lI46|H107227930
+107227930:lI98|H10722A3A8
+10722A3A8:lI101|H10722CB00
+10722CB00:lI97|H10722EFF8
+10722EFF8:lI109|N
+1071FB920:lI47|H1071FE968
+1071FE968:lI111|H107201A28
+107201A28:lI112|H107204BD0
+107204BD0:lI116|H107207E00
+107207E00:lI47|H10720B078
+10720B078:lI104|H10720E268
+10720E268:lI111|H1072113F8
+1072113F8:lI109|H107214648
+107214648:lI101|H1072179D0
+1072179D0:lI98|H10721AED0
+10721AED0:lI114|H10721E420
+10721E420:lI101|H1072218F0
+1072218F0:lI119|H107224A98
+107224A98:lI47|H107227920
+107227920:lI67|H10722A398
+10722A398:lI101|H10722CAF0
+10722CAF0:lI108|H10722EFE8
+10722EFE8:lI108|H1072311F0
+1072311F0:lI97|H107233108
+107233108:lI114|H107234D50
+107234D50:lI47|H1072366F8
+1072366F8:lI101|H107237E60
+107237E60:lI114|H1072393D8
+1072393D8:lI108|H10723A820
+10723A820:lI97|H10723BA50
+10723BA50:lI110|H10723CA80
+10723CA80:lI103|H10723D8E0
+10723D8E0:lI47|H10723E5E0
+10723E5E0:lI50|H10723F1C0
+10723F1C0:lI54|H10723FC50
+10723FC50:lI46|H107240590
+107240590:lI48|H107240E00
+107240E00:lI46|H107241590
+107241590:lI50|H107241CB0
+107241CB0:lI47|H107242370
+107242370:lI108|H1072429D0
+1072429D0:lI105|H107242FB0
+107242FB0:lI98|H107243520
+107243520:lI47|H107243A60
+107243A60:lI101|H107243F50
+107243F50:lI114|H107244440
+107244440:lI108|H1072448F0
+1072448F0:lI97|H107244D60
+107244D60:lI110|H1072451C0
+1072451C0:lI103|H107245610
+107245610:lI47|H107245A10
+107245A10:lI108|H107245DC0
+107245DC0:lI105|H107246150
+107246150:lI98|H1072464E0
+1072464E0:lI47|H107246870
+107246870:lI114|H107246C00
+107246C00:lI117|H107246F30
+107246F30:lI110|H107247250
+107247250:lI116|H107247560
+107247560:lI105|H107247860
+107247860:lI109|H107247B60
+107247B60:lI101|H107247E40
+107247E40:lI95|H107248100
+107248100:lI116|H1072483C0
+1072483C0:lI111|H107248670
+107248670:lI111|H107248920
+107248920:lI108|H107248BA0
+107248BA0:lI115|H107248E20
+107248E20:lI45|H107249090
+107249090:lI50|H107249300
+107249300:lI46|H107249560
+107249560:lI48|H1072497C0
+1072497C0:lI47|H280052C20
+1071F8A90:lH1071FB9B8|H1071FB9D0
+1071FB9B8:t2:H1071FE9F0,H1071FEA00
+1071FEA00:MfB:H107201B28:N,N,N,N,N,N,N,N,N,N,N
+107201B28:tB:H107204CD0,H107204CE0,H107204CF0,H107204D00,H107204D10,H107204D20,H107204D30,H107204D40,H107204D50,H107204D60,H107204D70
+107204D70:lI114|H107207FA0
+107207FA0:lI101|H10720B218
+10720B218:lI108|H10720E408
+10720E408:lI116|H107211598
+107211598:lI111|H1072147E8
+1072147E8:lI111|H107217B70
+107217B70:lI108|H10721B060
+10721B060:lI95|H10721E5B0
+10721E5B0:lI117|H107221A70
+107221A70:lI116|H107224C18
+107224C18:lI105|H107227A90
+107227A90:lI108|H10722A4E8
+10722A4E8:lI115|H10722CC20
+10722CC20:lI46|H10722F108
+10722F108:lI98|H107231300
+107231300:lI101|H107233208
+107233208:lI97|H107234E30
+107234E30:lI109|N
+107204D60:lI114|H107207F90
+107207F90:lI101|H10720B208
+10720B208:lI108|H10720E3F8
+10720E3F8:lI116|H107211588
+107211588:lI111|H1072147D8
+1072147D8:lI111|H107217B60
+107217B60:lI108|H10721B050
+10721B050:lI95|H10721E5A0
+10721E5A0:lI116|H107221A60
+107221A60:lI97|H107224C08
+107224C08:lI114|H107227A80
+107227A80:lI103|H10722A4D8
+10722A4D8:lI101|H10722CC10
+10722CC10:lI116|H10722F0F8
+10722F0F8:lI46|H1072312F0
+1072312F0:lI98|H1072331F8
+1072331F8:lI101|H107234E20
+107234E20:lI97|H1072367B8
+1072367B8:lI109|N
+107204D50:lI114|H107207F80
+107207F80:lI101|H10720B1F8
+10720B1F8:lI108|H10720E3E8
+10720E3E8:lI116|H107211578
+107211578:lI111|H1072147C8
+1072147C8:lI111|H107217B50
+107217B50:lI108|H10721B040
+10721B040:lI95|H10721E590
+10721E590:lI115|H107221A50
+107221A50:lI121|H107224BF8
+107224BF8:lI115|H107227A70
+107227A70:lI95|H10722A4C8
+10722A4C8:lI119|H10722CC00
+10722CC00:lI105|H10722F0E8
+10722F0E8:lI110|H1072312E0
+1072312E0:lI46|H1072331E8
+1072331E8:lI98|H107234E10
+107234E10:lI101|H1072367A8
+1072367A8:lI97|H107237EF0
+107237EF0:lI109|N
+107204D40:lI114|H107207F70
+107207F70:lI101|H10720B1E8
+10720B1E8:lI108|H10720E3D8
+10720E3D8:lI116|H107211568
+107211568:lI111|H1072147B8
+1072147B8:lI111|H107217B40
+107217B40:lI108|H10721B030
+10721B030:lI95|H10721E580
+10721E580:lI115|H107221A40
+107221A40:lI101|H107224BE8
+107224BE8:lI114|H107227A60
+107227A60:lI118|H10722A4B8
+10722A4B8:lI101|H10722CBF0
+10722CBF0:lI114|H10722F0D8
+10722F0D8:lI46|H1072312D0
+1072312D0:lI98|H1072331D8
+1072331D8:lI101|H107234E00
+107234E00:lI97|H107236798
+107236798:lI109|N
+107204D30:lI114|H107207F60
+107207F60:lI101|H10720B1D8
+10720B1D8:lI108|H10720E3C8
+10720E3C8:lI116|H107211558
+107211558:lI111|H1072147A8
+1072147A8:lI111|H107217B30
+107217B30:lI108|H10721B020
+10721B020:lI95|H10721E570
+10721E570:lI109|H107221A30
+107221A30:lI111|H107224BD8
+107224BD8:lI100|H107227A50
+107227A50:lI95|H10722A4A8
+10722A4A8:lI119|H10722CBE0
+10722CBE0:lI105|H10722F0C8
+10722F0C8:lI110|H1072312C0
+1072312C0:lI46|H1072331C8
+1072331C8:lI98|H107234DF0
+107234DF0:lI101|H107236788
+107236788:lI97|H107237EE0
+107237EE0:lI109|N
+107204D20:lI114|H107207F50
+107207F50:lI101|H10720B1C8
+10720B1C8:lI108|H10720E3B8
+10720E3B8:lI116|H107211548
+107211548:lI111|H107214798
+107214798:lI111|H107217B20
+107217B20:lI108|H10721B010
+10721B010:lI95|H10721E560
+10721E560:lI102|H107221A20
+107221A20:lI103|H107224BC8
+107224BC8:lI114|H107227A40
+107227A40:lI97|H10722A498
+10722A498:lI112|H10722CBD0
+10722CBD0:lI104|H10722F0B8
+10722F0B8:lI95|H1072312B0
+1072312B0:lI119|H1072331B8
+1072331B8:lI105|H107234DE0
+107234DE0:lI110|H107236778
+107236778:lI46|H107237ED0
+107237ED0:lI98|H107239428
+107239428:lI101|H10723A850
+10723A850:lI97|H10723BA70
+10723BA70:lI109|N
+107204D10:lI114|H107207F40
+107207F40:lI101|H10720B1B8
+10720B1B8:lI108|H10720E3A8
+10720E3A8:lI116|H107211538
+107211538:lI111|H107214788
+107214788:lI111|H107217B10
+107217B10:lI108|H10721B000
+10721B000:lI95|H10721E550
+10721E550:lI102|H107221A10
+107221A10:lI103|H107224BB8
+107224BB8:lI114|H107227A30
+107227A30:lI97|H10722A488
+10722A488:lI112|H10722CBC0
+10722CBC0:lI104|H10722F0A8
+10722F0A8:lI46|H1072312A0
+1072312A0:lI98|H1072331A8
+1072331A8:lI101|H107234DD0
+107234DD0:lI97|H107236768
+107236768:lI109|N
+107204D00:lI114|H107207F30
+107207F30:lI101|H10720B1A8
+10720B1A8:lI108|H10720E398
+10720E398:lI116|H107211528
+107211528:lI111|H107214778
+107214778:lI111|H107217B00
+107217B00:lI108|H10721AFF0
+10721AFF0:lI95|H10721E540
+10721E540:lI97|H107221A00
+107221A00:lI112|H107224BA8
+107224BA8:lI112|H107227A20
+107227A20:lI95|H10722A478
+10722A478:lI119|H10722CBB0
+10722CBB0:lI105|H10722F098
+10722F098:lI110|H107231290
+107231290:lI46|H107233198
+107233198:lI98|H107234DC0
+107234DC0:lI101|H107236758
+107236758:lI97|H107237EC0
+107237EC0:lI109|N
+107204CF0:lI114|H107207F20
+107207F20:lI101|H10720B198
+10720B198:lI108|H10720E388
+10720E388:lI116|H107211518
+107211518:lI111|H107214768
+107214768:lI111|H107217AF0
+107217AF0:lI108|H10721AFE0
+10721AFE0:lI46|H10721E530
+10721E530:lI98|H1072219F0
+1072219F0:lI101|H107224B98
+107224B98:lI97|H107227A10
+107227A10:lI109|N
+107204CE0:lI114|H107207F10
+107207F10:lI101|H10720B188
+10720B188:lI108|H10720E378
+10720E378:lI116|H107211508
+107211508:lI111|H107214758
+107214758:lI111|H107217AE0
+107217AE0:lI108|H10721AFD0
+10721AFD0:lI46|H10721E520
+10721E520:lI97|H1072219E0
+1072219E0:lI112|H107224B88
+107224B88:lI112|H107227A00
+107227A00:lI117|H10722A468
+10722A468:lI112|N
+107204CD0:lI114|H107207F00
+107207F00:lI101|H10720B178
+10720B178:lI108|H10720E368
+10720E368:lI116|H1072114F8
+1072114F8:lI111|H107214748
+107214748:lI111|H107217AD0
+107217AD0:lI108|H10721AFC0
+10721AFC0:lI46|H10721E510
+10721E510:lI97|H1072219D0
+1072219D0:lI112|H107224B78
+107224B78:lI112|N
+1071FE9F0:lI47|H107201B18
+107201B18:lI111|H107204CC0
+107204CC0:lI112|H107207EF0
+107207EF0:lI116|H10720B168
+10720B168:lI47|H10720E358
+10720E358:lI104|H1072114E8
+1072114E8:lI111|H107214738
+107214738:lI109|H107217AC0
+107217AC0:lI101|H10721AFB0
+10721AFB0:lI98|H10721E500
+10721E500:lI114|H1072219C0
+1072219C0:lI101|H107224B68
+107224B68:lI119|H1072279F0
+1072279F0:lI47|H10722A458
+10722A458:lI67|H10722CBA0
+10722CBA0:lI101|H10722F088
+10722F088:lI108|H107231280
+107231280:lI108|H107233188
+107233188:lI97|H107234DB0
+107234DB0:lI114|H107236748
+107236748:lI47|H107237EB0
+107237EB0:lI101|H107239418
+107239418:lI114|H10723A840
+10723A840:lI108|H10723BA60
+10723BA60:lI97|H10723CA90
+10723CA90:lI110|H10723D8F0
+10723D8F0:lI103|H10723E5F0
+10723E5F0:lI47|H10723F1D0
+10723F1D0:lI50|H10723FC60
+10723FC60:lI54|H1072405A0
+1072405A0:lI46|H107240E10
+107240E10:lI48|H1072415A0
+1072415A0:lI46|H107241CC0
+107241CC0:lI50|H107242380
+107242380:lI47|H1072429E0
+1072429E0:lI108|H107242FC0
+107242FC0:lI105|H107243530
+107243530:lI98|H107243A70
+107243A70:lI47|H107243F60
+107243F60:lI101|H107244450
+107244450:lI114|H107244900
+107244900:lI108|H107244D70
+107244D70:lI97|H1072451D0
+1072451D0:lI110|H107245620
+107245620:lI103|H107245A20
+107245A20:lI47|H107245DD0
+107245DD0:lI108|H107246160
+107246160:lI105|H1072464F0
+1072464F0:lI98|H107246880
+107246880:lI47|H107246C10
+107246C10:lI114|H107246F40
+107246F40:lI101|H107247260
+107247260:lI108|H107247570
+107247570:lI116|H107247870
+107247870:lI111|H107247B70
+107247B70:lI111|H107247E50
+107247E50:lI108|H107248110
+107248110:lI45|H1072483D0
+1072483D0:lI49|H107248680
+107248680:lI46|H107248930
+107248930:lI48|H107248BB0
+107248BB0:lI47|H280052C20
+1071FB9D0:lH1071FEA70|H1071FEA88
+1071FEA70:t2:H107201B88,H107201B98
+107201B98:MfD:H107204D90:N,N,N,N,N,N,N,N,N,N,N,N,N
+107204D90:tD:H107207FC0,H107207FD0,H107207FE0,H107207FF0,H107208000,H107208010,H107208020,H107208030,H107208040,H107208050,H107208060,H107208070,H107208080
+107208080:lI112|H10720B2F8
+10720B2F8:lI117|H10720E4E8
+10720E4E8:lI98|H107211678
+107211678:lI108|H1072148C8
+1072148C8:lI105|H107217C50
+107217C50:lI99|H10721B140
+10721B140:lI95|H10721E690
+10721E690:lI107|H107221B50
+107221B50:lI101|H107224CF8
+107224CF8:lI121|H107227B70
+107227B70:lI46|H10722A5C8
+10722A5C8:lI98|H10722CD00
+10722CD00:lI101|H10722F1E8
+10722F1E8:lI97|H1072313D0
+1072313D0:lI109|N
+107208070:lI112|H10720B2E8
+10720B2E8:lI117|H10720E4D8
+10720E4D8:lI98|H107211668
+107211668:lI108|H1072148B8
+1072148B8:lI105|H107217C40
+107217C40:lI99|H10721B130
+10721B130:lI95|H10721E680
+10721E680:lI107|H107221B40
+107221B40:lI101|H107224CE8
+107224CE8:lI121|H107227B60
+107227B60:lI46|H10722A5B8
+10722A5B8:lI97|H10722CCF0
+10722CCF0:lI112|H10722F1D8
+10722F1D8:lI112|H1072313C0
+1072313C0:lI117|H107233278
+107233278:lI112|N
+107208060:lI112|H10720B2D8
+10720B2D8:lI117|H10720E4C8
+10720E4C8:lI98|H107211658
+107211658:lI108|H1072148A8
+1072148A8:lI105|H107217C30
+107217C30:lI99|H10721B120
+10721B120:lI95|H10721E670
+10721E670:lI107|H107221B30
+107221B30:lI101|H107224CD8
+107224CD8:lI121|H107227B50
+107227B50:lI46|H10722A5A8
+10722A5A8:lI97|H10722CCE0
+10722CCE0:lI112|H10722F1C8
+10722F1C8:lI112|N
+107208050:lI112|H10720B2C8
+10720B2C8:lI117|H10720E4B8
+10720E4B8:lI98|H107211648
+107211648:lI107|H107214898
+107214898:lI101|H107217C20
+107217C20:lI121|H10721B110
+10721B110:lI95|H10721E660
+10721E660:lI115|H107221B20
+107221B20:lI115|H107224CC8
+107224CC8:lI104|H107227B40
+107227B40:lI46|H10722A598
+10722A598:lI98|H10722CCD0
+10722CCD0:lI101|H10722F1B8
+10722F1B8:lI97|H1072313B0
+1072313B0:lI109|N
+107208040:lI112|H10720B2B8
+10720B2B8:lI117|H10720E4A8
+10720E4A8:lI98|H107211638
+107211638:lI107|H107214888
+107214888:lI101|H107217C10
+107217C10:lI121|H10721B100
+10721B100:lI95|H10721E650
+10721E650:lI112|H107221B10
+107221B10:lI101|H107224CB8
+107224CB8:lI109|H107227B30
+107227B30:lI46|H10722A588
+10722A588:lI98|H10722CCC0
+10722CCC0:lI101|H10722F1A8
+10722F1A8:lI97|H1072313A0
+1072313A0:lI109|N
+107208030:lI112|H10720B2A8
+10720B2A8:lI117|H10720E498
+10720E498:lI98|H107211628
+107211628:lI107|H107214878
+107214878:lI101|H107217C00
+107217C00:lI121|H10721B0F0
+10721B0F0:lI95|H10721E640
+10721E640:lI112|H107221B00
+107221B00:lI98|H107224CA8
+107224CA8:lI101|H107227B20
+107227B20:lI46|H10722A578
+10722A578:lI98|H10722CCB0
+10722CCB0:lI101|H10722F198
+10722F198:lI97|H107231390
+107231390:lI109|N
+107208020:lI112|H10720B298
+10720B298:lI117|H10720E488
+10720E488:lI98|H107211618
+107211618:lI107|H107214868
+107214868:lI101|H107217BF0
+107217BF0:lI121|H10721B0E0
+10721B0E0:lI95|H10721E630
+10721E630:lI111|H107221AF0
+107221AF0:lI115|H107224C98
+107224C98:lI95|H107227B10
+107227B10:lI99|H10722A568
+10722A568:lI97|H10722CCA0
+10722CCA0:lI99|H10722F188
+10722F188:lI101|H107231380
+107231380:lI114|H107233268
+107233268:lI116|H107234E60
+107234E60:lI115|H1072367E8
+1072367E8:lI46|H107237F20
+107237F20:lI98|H107239458
+107239458:lI101|H10723A880
+10723A880:lI97|H10723BAA0
+10723BAA0:lI109|N
+107208010:lI112|H10720B288
+10720B288:lI117|H10720E478
+10720E478:lI98|H107211608
+107211608:lI107|H107214858
+107214858:lI101|H107217BE0
+107217BE0:lI121|H10721B0D0
+10721B0D0:lI95|H10721E620
+10721E620:lI111|H107221AE0
+107221AE0:lI99|H107224C88
+107224C88:lI115|H107227B00
+107227B00:lI112|H10722A558
+10722A558:lI46|H10722CC90
+10722CC90:lI98|H10722F178
+10722F178:lI101|H107231370
+107231370:lI97|H107233258
+107233258:lI109|N
+107208000:lI112|H10720B278
+10720B278:lI117|H10720E468
+10720E468:lI98|H1072115F8
+1072115F8:lI107|H107214848
+107214848:lI101|H107217BD0
+107217BD0:lI121|H10721B0C0
+10721B0C0:lI95|H10721E610
+10721E610:lI99|H107221AD0
+107221AD0:lI114|H107224C78
+107224C78:lI108|H107227AF0
+107227AF0:lI46|H10722A548
+10722A548:lI98|H10722CC80
+10722CC80:lI101|H10722F168
+10722F168:lI97|H107231360
+107231360:lI109|N
+107207FF0:lI112|H10720B268
+10720B268:lI117|H10720E458
+10720E458:lI98|H1072115E8
+1072115E8:lI107|H107214838
+107214838:lI101|H107217BC0
+107217BC0:lI121|H10721B0B0
+10721B0B0:lI95|H10721E600
+10721E600:lI99|H107221AC0
+107221AC0:lI101|H107224C68
+107224C68:lI114|H107227AE0
+107227AE0:lI116|H10722A538
+10722A538:lI95|H10722CC70
+10722CC70:lI114|H10722F158
+10722F158:lI101|H107231350
+107231350:lI99|H107233248
+107233248:lI111|H107234E50
+107234E50:lI114|H1072367D8
+1072367D8:lI100|H107237F10
+107237F10:lI115|H107239448
+107239448:lI46|H10723A870
+10723A870:lI98|H10723BA90
+10723BA90:lI101|H10723CAB0
+10723CAB0:lI97|H10723D910
+10723D910:lI109|N
+107207FE0:lI112|H10720B258
+10720B258:lI117|H10720E448
+10720E448:lI98|H1072115D8
+1072115D8:lI107|H107214828
+107214828:lI101|H107217BB0
+107217BB0:lI121|H10721B0A0
+10721B0A0:lI95|H10721E5F0
+10721E5F0:lI99|H107221AB0
+107221AB0:lI101|H107224C58
+107224C58:lI114|H107227AD0
+107227AD0:lI116|H10722A528
+10722A528:lI46|H10722CC60
+10722CC60:lI98|H10722F148
+10722F148:lI101|H107231340
+107231340:lI97|H107233238
+107233238:lI109|N
+107207FD0:lI80|H10720B248
+10720B248:lI75|H10720E438
+10720E438:lI67|H1072115C8
+1072115C8:lI83|H107214818
+107214818:lI45|H107217BA0
+107217BA0:lI70|H10721B090
+10721B090:lI82|H10721E5E0
+10721E5E0:lI65|H107221AA0
+107221AA0:lI77|H107224C48
+107224C48:lI69|H107227AC0
+107227AC0:lI46|H10722A518
+10722A518:lI98|H10722CC50
+10722CC50:lI101|H10722F138
+10722F138:lI97|H107231330
+107231330:lI109|N
+107207FC0:lI79|H10720B238
+10720B238:lI84|H10720E428
+10720E428:lI80|H1072115B8
+1072115B8:lI45|H107214808
+107214808:lI80|H107217B90
+107217B90:lI85|H10721B080
+10721B080:lI66|H10721E5D0
+10721E5D0:lI45|H107221A90
+107221A90:lI75|H107224C38
+107224C38:lI69|H107227AB0
+107227AB0:lI89|H10722A508
+10722A508:lI46|H10722CC40
+10722CC40:lI98|H10722F128
+10722F128:lI101|H107231320
+107231320:lI97|H107233228
+107233228:lI109|N
+107201B88:lI47|H107204D80
+107204D80:lI111|H107207FB0
+107207FB0:lI112|H10720B228
+10720B228:lI116|H10720E418
+10720E418:lI47|H1072115A8
+1072115A8:lI104|H1072147F8
+1072147F8:lI111|H107217B80
+107217B80:lI109|H10721B070
+10721B070:lI101|H10721E5C0
+10721E5C0:lI98|H107221A80
+107221A80:lI114|H107224C28
+107224C28:lI101|H107227AA0
+107227AA0:lI119|H10722A4F8
+10722A4F8:lI47|H10722CC30
+10722CC30:lI67|H10722F118
+10722F118:lI101|H107231310
+107231310:lI108|H107233218
+107233218:lI108|H107234E40
+107234E40:lI97|H1072367C8
+1072367C8:lI114|H107237F00
+107237F00:lI47|H107239438
+107239438:lI101|H10723A860
+10723A860:lI114|H10723BA80
+10723BA80:lI108|H10723CAA0
+10723CAA0:lI97|H10723D900
+10723D900:lI110|H10723E600
+10723E600:lI103|H10723F1E0
+10723F1E0:lI47|H10723FC70
+10723FC70:lI50|H1072405B0
+1072405B0:lI54|H107240E20
+107240E20:lI46|H1072415B0
+1072415B0:lI48|H107241CD0
+107241CD0:lI46|H107242390
+107242390:lI50|H1072429F0
+1072429F0:lI47|H107242FD0
+107242FD0:lI108|H107243540
+107243540:lI105|H107243A80
+107243A80:lI98|H107243F70
+107243F70:lI47|H107244460
+107244460:lI101|H107244910
+107244910:lI114|H107244D80
+107244D80:lI108|H1072451E0
+1072451E0:lI97|H107245630
+107245630:lI110|H107245A30
+107245A30:lI103|H107245DE0
+107245DE0:lI47|H107246170
+107246170:lI108|H107246500
+107246500:lI105|H107246890
+107246890:lI98|H107246C20
+107246C20:lI47|H107246F50
+107246F50:lI112|H107247270
+107247270:lI117|H107247580
+107247580:lI98|H107247880
+107247880:lI108|H107247B80
+107247B80:lI105|H107247E60
+107247E60:lI99|H107248120
+107248120:lI95|H1072483E0
+1072483E0:lI107|H107248690
+107248690:lI101|H107248940
+107248940:lI121|H107248BC0
+107248BC0:lI45|H107248E30
+107248E30:lI49|H1072490A0
+1072490A0:lI46|H107249310
+107249310:lI49|H107249570
+107249570:lI52|H1072497D0
+1072497D0:lI47|H280052C20
+1071FEA88:lH107201C18|H107201C30
+107201C18:t2:H107204E00,H107204E10
+107204E10:Mf6:H1072080A0:N,N,N,N,N,N
+1072080A0:t6:H10720B318,H10720B328,H10720B338,H10720B348,H10720B358,H10720B368
+10720B368:lI121|H10720E558
+10720E558:lI101|H1072116E8
+1072116E8:lI99|H107214938
+107214938:lI99|H107217CC0
+107217CC0:lI115|H10721B1B0
+10721B1B0:lI99|H10721E700
+10721E700:lI97|H107221BC0
+107221BC0:lI110|H107224D68
+107224D68:lI46|H107227BC0
+107227BC0:lI98|H10722A618
+10722A618:lI101|H10722CD50
+10722CD50:lI97|H10722F238
+10722F238:lI109|N
+10720B358:lI121|H10720E548
+10720E548:lI101|H1072116D8
+1072116D8:lI99|H107214928
+107214928:lI99|H107217CB0
+107217CB0:lI112|H10721B1A0
+10721B1A0:lI97|H10721E6F0
+10721E6F0:lI114|H107221BB0
+107221BB0:lI115|H107224D58
+107224D58:lI101|H107227BB0
+107227BB0:lI114|H10722A608
+10722A608:lI46|H10722CD40
+10722CD40:lI98|H10722F228
+10722F228:lI101|H107231410
+107231410:lI97|H1072332A8
+1072332A8:lI109|N
+10720B348:lI121|H10720E538
+10720E538:lI101|H1072116C8
+1072116C8:lI99|H107214918
+107214918:lI99|H107217CA0
+107217CA0:lI46|H10721B190
+10721B190:lI98|H10721E6E0
+10721E6E0:lI101|H107221BA0
+107221BA0:lI97|H107224D48
+107224D48:lI109|N
+10720B338:lI112|H10720E528
+10720E528:lI97|H1072116B8
+1072116B8:lI114|H107214908
+107214908:lI115|H107217C90
+107217C90:lI101|H10721B180
+10721B180:lI116|H10721E6D0
+10721E6D0:lI111|H107221B90
+107221B90:lI111|H107224D38
+107224D38:lI108|H107227BA0
+107227BA0:lI115|H10722A5F8
+10722A5F8:lI46|H10722CD30
+10722CD30:lI97|H10722F218
+10722F218:lI112|H107231400
+107231400:lI112|H107233298
+107233298:lI117|H107234E80
+107234E80:lI112|N
+10720B328:lI112|H10720E518
+10720E518:lI97|H1072116A8
+1072116A8:lI114|H1072148F8
+1072148F8:lI115|H107217C80
+107217C80:lI101|H10721B170
+10721B170:lI116|H10721E6C0
+10721E6C0:lI111|H107221B80
+107221B80:lI111|H107224D28
+107224D28:lI108|H107227B90
+107227B90:lI115|H10722A5E8
+10722A5E8:lI46|H10722CD20
+10722CD20:lI97|H10722F208
+10722F208:lI112|H1072313F0
+1072313F0:lI112|N
+10720B318:lI108|H10720E508
+10720E508:lI101|H107211698
+107211698:lI101|H1072148E8
+1072148E8:lI120|H107217C70
+107217C70:lI46|H10721B160
+10721B160:lI98|H10721E6B0
+10721E6B0:lI101|H107221B70
+107221B70:lI97|H107224D18
+107224D18:lI109|N
+107204E00:lI47|H107208090
+107208090:lI111|H10720B308
+10720B308:lI112|H10720E4F8
+10720E4F8:lI116|H107211688
+107211688:lI47|H1072148D8
+1072148D8:lI104|H107217C60
+107217C60:lI111|H10721B150
+10721B150:lI109|H10721E6A0
+10721E6A0:lI101|H107221B60
+107221B60:lI98|H107224D08
+107224D08:lI114|H107227B80
+107227B80:lI101|H10722A5D8
+10722A5D8:lI119|H10722CD10
+10722CD10:lI47|H10722F1F8
+10722F1F8:lI67|H1072313E0
+1072313E0:lI101|H107233288
+107233288:lI108|H107234E70
+107234E70:lI108|H1072367F8
+1072367F8:lI97|H107237F30
+107237F30:lI114|H107239468
+107239468:lI47|H10723A890
+10723A890:lI101|H10723BAB0
+10723BAB0:lI114|H10723CAC0
+10723CAC0:lI108|H10723D920
+10723D920:lI97|H10723E610
+10723E610:lI110|H10723F1F0
+10723F1F0:lI103|H10723FC80
+10723FC80:lI47|H1072405C0
+1072405C0:lI50|H107240E30
+107240E30:lI54|H1072415C0
+1072415C0:lI46|H107241CE0
+107241CE0:lI48|H1072423A0
+1072423A0:lI46|H107242A00
+107242A00:lI50|H107242FE0
+107242FE0:lI47|H107243550
+107243550:lI108|H107243A90
+107243A90:lI105|H107243F80
+107243F80:lI98|H107244470
+107244470:lI47|H107244920
+107244920:lI101|H107244D90
+107244D90:lI114|H1072451F0
+1072451F0:lI108|H107245640
+107245640:lI97|H107245A40
+107245A40:lI110|H107245DF0
+107245DF0:lI103|H107246180
+107246180:lI47|H107246510
+107246510:lI108|H1072468A0
+1072468A0:lI105|H107246C30
+107246C30:lI98|H107246F60
+107246F60:lI47|H107247280
+107247280:lI112|H107247590
+107247590:lI97|H107247890
+107247890:lI114|H107247B90
+107247B90:lI115|H107247E70
+107247E70:lI101|H107248130
+107248130:lI116|H1072483F0
+1072483F0:lI111|H1072486A0
+1072486A0:lI111|H107248950
+107248950:lI108|H107248BD0
+107248BD0:lI115|H107248E40
+107248E40:lI45|H1072490B0
+1072490B0:lI50|H107249320
+107249320:lI46|H107249580
+107249580:lI53|H1072497E0
+1072497E0:lI47|H280052C20
+107201C30:lH107204E58|H107204E70
+107204E58:t2:H1072080D8,H1072080E8
+1072080E8:MfA:H10720B388:N,N,N,N,N,N,N,N,N,N
+10720B388:tA:H10720E578,H10720E588,H10720E598,H10720E5A8,H10720E5B8,H10720E5C8,H10720E5D8,H10720E5E8,H10720E5F8,H10720E608
+10720E608:lI111|H107211798
+107211798:lI115|H1072149E8
+1072149E8:lI95|H107217D70
+107217D70:lI115|H10721B260
+10721B260:lI117|H10721E7B0
+10721E7B0:lI112|H107221C70
+107221C70:lI46|H107224E18
+107224E18:lI98|H107227C70
+107227C70:lI101|H10722A6C8
+10722A6C8:lI97|H10722CDF0
+10722CDF0:lI109|N
+10720E5F8:lI111|H107211788
+107211788:lI115|H1072149D8
+1072149D8:lI95|H107217D60
+107217D60:lI109|H10721B250
+10721B250:lI111|H10721E7A0
+10721E7A0:lI110|H107221C60
+107221C60:lI95|H107224E08
+107224E08:lI115|H107227C60
+107227C60:lI121|H10722A6B8
+10722A6B8:lI115|H10722CDE0
+10722CDE0:lI105|H10722F2A8
+10722F2A8:lI110|H107231450
+107231450:lI102|H1072332E8
+1072332E8:lI111|H107234EC0
+107234EC0:lI46|H107236818
+107236818:lI98|H107237F50
+107237F50:lI101|H107239488
+107239488:lI97|H10723A8B0
+10723A8B0:lI109|N
+10720E5E8:lI111|H107211778
+107211778:lI115|H1072149C8
+1072149C8:lI95|H107217D50
+107217D50:lI109|H10721B240
+10721B240:lI111|H10721E790
+10721E790:lI110|H107221C50
+107221C50:lI95|H107224DF8
+107224DF8:lI109|H107227C50
+107227C50:lI105|H10722A6A8
+10722A6A8:lI98|H10722CDD0
+10722CDD0:lI46|H10722F298
+10722F298:lI98|H107231440
+107231440:lI101|H1072332D8
+1072332D8:lI97|H107234EB0
+107234EB0:lI109|N
+10720E5D8:lI111|H107211768
+107211768:lI115|H1072149B8
+1072149B8:lI95|H107217D40
+107217D40:lI109|H10721B230
+10721B230:lI111|H10721E780
+10721E780:lI110|H107221C40
+107221C40:lI46|H107224DE8
+107224DE8:lI98|H107227C40
+107227C40:lI101|H10722A698
+10722A698:lI97|H10722CDC0
+10722CDC0:lI109|N
+10720E5C8:lI111|H107211758
+107211758:lI115|H1072149A8
+1072149A8:lI95|H107217D30
+107217D30:lI109|H10721B220
+10721B220:lI111|H10721E770
+10721E770:lI110|H107221C30
+107221C30:lI46|H107224DD8
+107224DD8:lI97|H107227C30
+107227C30:lI112|H10722A688
+10722A688:lI112|H10722CDB0
+10722CDB0:lI117|H10722F288
+10722F288:lI112|N
+10720E5B8:lI111|H107211748
+107211748:lI115|H107214998
+107214998:lI95|H107217D20
+107217D20:lI109|H10721B210
+10721B210:lI111|H10721E760
+10721E760:lI110|H107221C20
+107221C20:lI46|H107224DC8
+107224DC8:lI97|H107227C20
+107227C20:lI112|H10722A678
+10722A678:lI112|N
+10720E5A8:lI110|H107211738
+107211738:lI116|H107214988
+107214988:lI101|H107217D10
+107217D10:lI118|H10721B200
+10721B200:lI101|H10721E750
+10721E750:lI110|H107221C10
+107221C10:lI116|H107224DB8
+107224DB8:lI108|H107227C10
+107227C10:lI111|H10722A668
+10722A668:lI103|H10722CDA0
+10722CDA0:lI46|H10722F278
+10722F278:lI98|H107231430
+107231430:lI101|H1072332C8
+1072332C8:lI97|H107234EA0
+107234EA0:lI109|N
+10720E598:lI109|H107211728
+107211728:lI101|H107214978
+107214978:lI109|H107217D00
+107217D00:lI115|H10721B1F0
+10721B1F0:lI117|H10721E740
+10721E740:lI112|H107221C00
+107221C00:lI46|H107224DA8
+107224DA8:lI98|H107227C00
+107227C00:lI101|H10722A658
+10722A658:lI97|H10722CD90
+10722CD90:lI109|N
+10720E588:lI100|H107211718
+107211718:lI105|H107214968
+107214968:lI115|H107217CF0
+107217CF0:lI107|H10721B1E0
+10721B1E0:lI115|H10721E730
+10721E730:lI117|H107221BF0
+107221BF0:lI112|H107224D98
+107224D98:lI46|H107227BF0
+107227BF0:lI98|H10722A648
+10722A648:lI101|H10722CD80
+10722CD80:lI97|H10722F268
+10722F268:lI109|N
+10720E578:lI99|H107211708
+107211708:lI112|H107214958
+107214958:lI117|H107217CE0
+107217CE0:lI95|H10721B1D0
+10721B1D0:lI115|H10721E720
+10721E720:lI117|H107221BE0
+107221BE0:lI112|H107224D88
+107224D88:lI46|H107227BE0
+107227BE0:lI98|H10722A638
+10722A638:lI101|H10722CD70
+10722CD70:lI97|H10722F258
+10722F258:lI109|N
+1072080D8:lI47|H10720B378
+10720B378:lI111|H10720E568
+10720E568:lI112|H1072116F8
+1072116F8:lI116|H107214948
+107214948:lI47|H107217CD0
+107217CD0:lI104|H10721B1C0
+10721B1C0:lI111|H10721E710
+10721E710:lI109|H107221BD0
+107221BD0:lI101|H107224D78
+107224D78:lI98|H107227BD0
+107227BD0:lI114|H10722A628
+10722A628:lI101|H10722CD60
+10722CD60:lI119|H10722F248
+10722F248:lI47|H107231420
+107231420:lI67|H1072332B8
+1072332B8:lI101|H107234E90
+107234E90:lI108|H107236808
+107236808:lI108|H107237F40
+107237F40:lI97|H107239478
+107239478:lI114|H10723A8A0
+10723A8A0:lI47|H10723BAC0
+10723BAC0:lI101|H10723CAD0
+10723CAD0:lI114|H10723D930
+10723D930:lI108|H10723E620
+10723E620:lI97|H10723F200
+10723F200:lI110|H10723FC90
+10723FC90:lI103|H1072405D0
+1072405D0:lI47|H107240E40
+107240E40:lI50|H1072415D0
+1072415D0:lI54|H107241CF0
+107241CF0:lI46|H1072423B0
+1072423B0:lI48|H107242A10
+107242A10:lI46|H107242FF0
+107242FF0:lI50|H107243560
+107243560:lI47|H107243AA0
+107243AA0:lI108|H107243F90
+107243F90:lI105|H107244480
+107244480:lI98|H107244930
+107244930:lI47|H107244DA0
+107244DA0:lI101|H107245200
+107245200:lI114|H107245650
+107245650:lI108|H107245A50
+107245A50:lI97|H107245E00
+107245E00:lI110|H107246190
+107246190:lI103|H107246520
+107246520:lI47|H1072468B0
+1072468B0:lI108|H107246C40
+107246C40:lI105|H107246F70
+107246F70:lI98|H107247290
+107247290:lI47|H1072475A0
+1072475A0:lI111|H1072478A0
+1072478A0:lI115|H107247BA0
+107247BA0:lI95|H107247E80
+107247E80:lI109|H107248140
+107248140:lI111|H107248400
+107248400:lI110|H1072486B0
+1072486B0:lI45|H107248960
+107248960:lI50|H107248BE0
+107248BE0:lI46|H107248E50
+107248E50:lI57|H1072490C0
+1072490C0:lI47|H280052C20
+107204E70:lH107208150|H107208168
+107208150:t2:H10720B3E0,H10720B3F0
+10720B3F0:Mf5:H10720E628:N,N,N,N,N
+10720E628:t5:H1072117B8,H1072117C8,H1072117D8,H1072117E8,H1072117F8
+1072117F8:lI111|H107214A48
+107214A48:lI100|H107217DD0
+107217DD0:lI98|H10721B2C0
+10721B2C0:lI99|H10721E810
+10721E810:lI95|H107221CD0
+107221CD0:lI115|H107224E78
+107224E78:lI117|H107227CD0
+107227CD0:lI112|H10722A718
+10722A718:lI46|H10722CE30
+10722CE30:lI98|H10722F2D8
+10722F2D8:lI101|H107231480
+107231480:lI97|H107233318
+107233318:lI109|N
+1072117E8:lI111|H107214A38
+107214A38:lI100|H107217DC0
+107217DC0:lI98|H10721B2B0
+10721B2B0:lI99|H10721E800
+10721E800:lI95|H107221CC0
+107221CC0:lI97|H107224E68
+107224E68:lI112|H107227CC0
+107227CC0:lI112|H10722A708
+10722A708:lI46|H10722CE20
+10722CE20:lI98|H10722F2C8
+10722F2C8:lI101|H107231470
+107231470:lI97|H107233308
+107233308:lI109|N
+1072117D8:lI111|H107214A28
+107214A28:lI100|H107217DB0
+107217DB0:lI98|H10721B2A0
+10721B2A0:lI99|H10721E7F0
+10721E7F0:lI46|H107221CB0
+107221CB0:lI98|H107224E58
+107224E58:lI101|H107227CB0
+107227CB0:lI97|H10722A6F8
+10722A6F8:lI109|N
+1072117C8:lI111|H107214A18
+107214A18:lI100|H107217DA0
+107217DA0:lI98|H10721B290
+10721B290:lI99|H10721E7E0
+10721E7E0:lI46|H107221CA0
+107221CA0:lI97|H107224E48
+107224E48:lI112|H107227CA0
+107227CA0:lI112|H10722A6E8
+10722A6E8:lI117|H10722CE10
+10722CE10:lI112|N
+1072117B8:lI111|H107214A08
+107214A08:lI100|H107217D90
+107217D90:lI98|H10721B280
+10721B280:lI99|H10721E7D0
+10721E7D0:lI46|H107221C90
+107221C90:lI97|H107224E38
+107224E38:lI112|H107227C90
+107227C90:lI112|N
+10720B3E0:lI47|H10720E618
+10720E618:lI111|H1072117A8
+1072117A8:lI112|H1072149F8
+1072149F8:lI116|H107217D80
+107217D80:lI47|H10721B270
+10721B270:lI104|H10721E7C0
+10721E7C0:lI111|H107221C80
+107221C80:lI109|H107224E28
+107224E28:lI101|H107227C80
+107227C80:lI98|H10722A6D8
+10722A6D8:lI114|H10722CE00
+10722CE00:lI101|H10722F2B8
+10722F2B8:lI119|H107231460
+107231460:lI47|H1072332F8
+1072332F8:lI67|H107234ED0
+107234ED0:lI101|H107236828
+107236828:lI108|H107237F60
+107237F60:lI108|H107239498
+107239498:lI97|H10723A8C0
+10723A8C0:lI114|H10723BAD0
+10723BAD0:lI47|H10723CAE0
+10723CAE0:lI101|H10723D940
+10723D940:lI114|H10723E630
+10723E630:lI108|H10723F210
+10723F210:lI97|H10723FCA0
+10723FCA0:lI110|H1072405E0
+1072405E0:lI103|H107240E50
+107240E50:lI47|H1072415E0
+1072415E0:lI50|H107241D00
+107241D00:lI54|H1072423C0
+1072423C0:lI46|H107242A20
+107242A20:lI48|H107243000
+107243000:lI46|H107243570
+107243570:lI50|H107243AB0
+107243AB0:lI47|H107243FA0
+107243FA0:lI108|H107244490
+107244490:lI105|H107244940
+107244940:lI98|H107244DB0
+107244DB0:lI47|H107245210
+107245210:lI101|H107245660
+107245660:lI114|H107245A60
+107245A60:lI108|H107245E10
+107245E10:lI97|H1072461A0
+1072461A0:lI110|H107246530
+107246530:lI103|H1072468C0
+1072468C0:lI47|H107246C50
+107246C50:lI108|H107246F80
+107246F80:lI105|H1072472A0
+1072472A0:lI98|H1072475B0
+1072475B0:lI47|H1072478B0
+1072478B0:lI111|H107247BB0
+107247BB0:lI100|H107247E90
+107247E90:lI98|H107248150
+107248150:lI99|H107248410
+107248410:lI45|H1072486C0
+1072486C0:lI50|H107248970
+107248970:lI46|H107248BF0
+107248BF0:lI49|H107248E60
+107248E60:lI52|H1072490D0
+1072490D0:lI46|H107249330
+107249330:lI49|H107249590
+107249590:lI47|H280052C20
+107208168:lH10720B430|H10720B448
+10720B430:t2:H10720E658,H10720E668
+10720E668:Mh2E:F:H107211818,H107211830,H107211848,H107211878,H107211890,H1072118B0,H1072118C0,H107211900,H107211918,H107211930,H107211940,H107211958,H107211988,H1072119A8,H1072119C0
+107211818:Mn2:H107214A68,H107214A78
+107214A68:lH107217DF0|N
+107217DF0:lI99|H10721B2E0
+10721B2E0:lI100|H10721E830
+10721E830:lI118|H107221CF0
+107221CF0:lI95|H107224E98
+107224E98:lI112|H107227CF0
+107227CF0:lI111|H10722A738
+10722A738:lI114|H10722CE50
+10722CE50:lI116|H10722F2F8
+10722F2F8:lI95|H1072314A0
+1072314A0:lI99|H107233338
+107233338:lI98|H107234EF0
+107234EF0:lI46|H107236848
+107236848:lI98|H107237F80
+107237F80:lI101|H1072394B8
+1072394B8:lI97|H10723A8E0
+10723A8E0:lI109|N
+107214A78:lH107217E00|N
+107217E00:lI99|H10721B2F0
+10721B2F0:lI100|H10721E840
+10721E840:lI118|H107221D00
+107221D00:lI95|H107224EA8
+107224EA8:lI109|H107227D00
+107227D00:lI111|H10722A748
+10722A748:lI100|H10722CE60
+10722CE60:lI95|H10722F308
+10722F308:lI99|H1072314B0
+1072314B0:lI98|H107233348
+107233348:lI46|H107234F00
+107234F00:lI98|H107236858
+107236858:lI101|H107237F90
+107237F90:lI97|H1072394C8
+1072394C8:lI109|N
+1072119C0:Mn2:H107214CF0,H107214D10
+107214CF0:Mn3:H107218090,H1072180A0,H1072180B0
+107218090:lH10721B580|N
+10721B580:lI99|H10721EAD0
+10721EAD0:lI100|H107221F90
+107221F90:lI118|H107225138
+107225138:lI95|H107227F90
+107227F90:lI112|H10722A9D8
+10722A9D8:lI101|H10722D0F0
+10722D0F0:lI114|H10722F588
+10722F588:lI115|H107231720
+107231720:lI105|H1072335B8
+1072335B8:lI115|H107235150
+107235150:lI116|H107236A98
+107236A98:lI101|H1072381A0
+1072381A0:lI110|H1072396B8
+1072396B8:lI116|H10723AA90
+10723AA90:lI95|H10723BC30
+10723BC30:lI99|H10723CC00
+10723CC00:lI98|H10723DA40
+10723DA40:lI46|H10723E720
+10723E720:lI98|H10723F2D0
+10723F2D0:lI101|H10723FD30
+10723FD30:lI97|H107240630
+107240630:lI109|N
+1072180B0:lH10721B5A0|N
+10721B5A0:lI111|H10721EAF0
+10721EAF0:lI98|H107221FB0
+107221FB0:lI115|H107225158
+107225158:lI101|H107227FB0
+107227FB0:lI114|H10722A9F8
+10722A9F8:lI118|H10722D110
+10722D110:lI101|H10722F5A8
+10722F5A8:lI114|H107231740
+107231740:lI95|H1072335D8
+1072335D8:lI97|H107235170
+107235170:lI108|H107236AB8
+107236AB8:lI108|H1072381C0
+1072381C0:lI111|H1072396D8
+1072396D8:lI99|H10723AAB0
+10723AAB0:lI95|H10723BC50
+10723BC50:lI119|H10723CC20
+10723CC20:lI120|H10723DA50
+10723DA50:lI46|H10723E730
+10723E730:lI98|H10723F2E0
+10723F2E0:lI101|H10723FD40
+10723FD40:lI97|H107240640
+107240640:lI109|N
+1072180A0:lH10721B590|N
+10721B590:lI99|H10721EAE0
+10721EAE0:lI100|H107221FA0
+107221FA0:lI118|H107225148
+107225148:lI95|H107227FA0
+107227FA0:lI109|H10722A9E8
+10722A9E8:lI117|H10722D100
+10722D100:lI108|H10722F598
+10722F598:lI116|H107231730
+107231730:lI105|H1072335C8
+1072335C8:lI95|H107235160
+107235160:lI119|H107236AA8
+107236AA8:lI120|H1072381B0
+1072381B0:lI46|H1072396C8
+1072396C8:lI98|H10723AAA0
+10723AAA0:lI101|H10723BC40
+10723BC40:lI97|H10723CC10
+10723CC10:lI109|N
+107214D10:lH1072180C0|N
+1072180C0:lI111|H10721B5B0
+10721B5B0:lI98|H10721EB00
+10721EB00:lI115|H107221FC0
+107221FC0:lI101|H107225168
+107225168:lI114|H107227FC0
+107227FC0:lI118|H10722AA08
+10722AA08:lI101|H10722D120
+10722D120:lI114|H10722F5B8
+10722F5B8:lI95|H107231750
+107231750:lI116|H1072335E8
+1072335E8:lI118|H107235180
+107235180:lI95|H107236AC8
+107236AC8:lI119|H1072381D0
+1072381D0:lI120|H1072396E8
+1072396E8:lI46|H10723AAC0
+10723AAC0:lI98|H10723BC60
+10723BC60:lI101|H10723CC30
+10723CC30:lI97|H10723DA60
+10723DA60:lI109|N
+1072119A8:Mn2:H107214CD0,H107214CE0
+107214CD0:lH107218070|N
+107218070:lI111|H10721B560
+10721B560:lI98|H10721EAB0
+10721EAB0:lI115|H107221F70
+107221F70:lI101|H107225118
+107225118:lI114|H107227F70
+107227F70:lI118|H10722A9B8
+10722A9B8:lI101|H10722D0D0
+10722D0D0:lI114|H10722F568
+10722F568:lI95|H107231700
+107231700:lI104|H107233598
+107233598:lI116|H107235130
+107235130:lI109|H107236A78
+107236A78:lI108|H107238180
+107238180:lI95|H107239698
+107239698:lI108|H10723AA80
+10723AA80:lI105|H10723BC20
+10723BC20:lI98|H10723CBF0
+10723CBF0:lI46|H10723DA30
+10723DA30:lI98|H10723E710
+10723E710:lI101|H10723F2C0
+10723F2C0:lI97|H10723FD20
+10723FD20:lI109|N
+107214CE0:lH107218080|N
+107218080:lI99|H10721B570
+10721B570:lI100|H10721EAC0
+10721EAC0:lI118|H107221F80
+107221F80:lI95|H107225128
+107225128:lI103|H107227F80
+107227F80:lI101|H10722A9C8
+10722A9C8:lI110|H10722D0E0
+10722D0E0:lI95|H10722F578
+10722F578:lI99|H107231710
+107231710:lI98|H1072335A8
+1072335A8:lI46|H107235140
+107235140:lI98|H107236A88
+107236A88:lI101|H107238190
+107238190:lI97|H1072396A8
+1072396A8:lI109|N
+107211988:Mn3:H107214C98,H107214CA8,H107214CB8
+107214C98:lH107218030|N
+107218030:lI111|H10721B520
+10721B520:lI98|H10721EA70
+10721EA70:lI115|H107221F30
+107221F30:lI101|H1072250D8
+1072250D8:lI114|H107227F30
+107227F30:lI118|H10722A978
+10722A978:lI101|H10722D090
+10722D090:lI114|H10722F528
+10722F528:lI46|H1072316C0
+1072316C0:lI98|H107233558
+107233558:lI101|H1072350F0
+1072350F0:lI97|H107236A38
+107236A38:lI109|N
+107214CB8:Mn2:H107218050,H107218060
+107218050:lH10721B540|N
+10721B540:lI111|H10721EA90
+10721EA90:lI98|H107221F50
+107221F50:lI115|H1072250F8
+1072250F8:lI101|H107227F50
+107227F50:lI114|H10722A998
+10722A998:lI118|H10722D0B0
+10722D0B0:lI101|H10722F548
+10722F548:lI114|H1072316E0
+1072316E0:lI95|H107233578
+107233578:lI116|H107235110
+107235110:lI114|H107236A58
+107236A58:lI97|H107238170
+107238170:lI99|H107239688
+107239688:lI101|H10723AA70
+10723AA70:lI111|H10723BC10
+10723BC10:lI112|H10723CBE0
+10723CBE0:lI116|H10723DA20
+10723DA20:lI105|H10723E700
+10723E700:lI111|H10723F2B0
+10723F2B0:lI110|H10723FD10
+10723FD10:lI115|H107240620
+107240620:lI95|H107240E80
+107240E80:lI119|H107241600
+107241600:lI120|H107241D20
+107241D20:lI46|H1072423E0
+1072423E0:lI98|H107242A40
+107242A40:lI101|H107243020
+107243020:lI97|H107243590
+107243590:lI109|N
+107218060:lH10721B550|N
+10721B550:lI111|H10721EAA0
+10721EAA0:lI98|H107221F60
+107221F60:lI115|H107225108
+107225108:lI101|H107227F60
+107227F60:lI114|H10722A9A8
+10722A9A8:lI118|H10722D0C0
+10722D0C0:lI101|H10722F558
+10722F558:lI114|H1072316F0
+1072316F0:lI46|H107233588
+107233588:lI97|H107235120
+107235120:lI112|H107236A68
+107236A68:lI112|N
+107214CA8:lH107218040|N
+107218040:lI101|H10721B530
+10721B530:lI116|H10721EA80
+10721EA80:lI111|H107221F40
+107221F40:lI112|H1072250E8
+1072250E8:lI95|H107227F40
+107227F40:lI116|H10722A988
+10722A988:lI120|H10722D0A0
+10722D0A0:lI116|H10722F538
+10722F538:lI46|H1072316D0
+1072316D0:lI98|H107233568
+107233568:lI101|H107235100
+107235100:lI97|H107236A48
+107236A48:lI109|N
+107211958:Mn5:H107214C48,H107214C58,H107214C68,H107214C78,H107214C88
+107214C48:lH107217FE0|N
+107217FE0:lI99|H10721B4D0
+10721B4D0:lI100|H10721EA20
+10721EA20:lI118|H107221EE0
+107221EE0:lI95|H107225088
+107225088:lI112|H107227EE0
+107227EE0:lI114|H10722A928
+10722A928:lI111|H10722D040
+10722D040:lI99|H10722F4D8
+10722F4D8:lI95|H107231680
+107231680:lI99|H107233518
+107233518:lI98|H1072350B0
+1072350B0:lI46|H1072369F8
+1072369F8:lI98|H107238130
+107238130:lI101|H107239648
+107239648:lI97|H10723AA30
+10723AA30:lI109|N
+107214C88:lH107218020|N
+107218020:lI111|H10721B510
+10721B510:lI98|H10721EA60
+10721EA60:lI115|H107221F20
+107221F20:lI101|H1072250C8
+1072250C8:lI114|H107227F20
+107227F20:lI118|H10722A968
+10722A968:lI101|H10722D080
+10722D080:lI114|H10722F518
+10722F518:lI95|H1072316B0
+1072316B0:lI116|H107233548
+107233548:lI118|H1072350E0
+1072350E0:lI95|H107236A28
+107236A28:lI116|H107238160
+107238160:lI97|H107239678
+107239678:lI98|H10723AA60
+10723AA60:lI108|H10723BC00
+10723BC00:lI101|H10723CBD0
+10723CBD0:lI46|H10723DA10
+10723DA10:lI98|H10723E6F0
+10723E6F0:lI101|H10723F2A0
+10723F2A0:lI97|H10723FD00
+10723FD00:lI109|N
+107214C78:lH107218010|N
+107218010:lI111|H10721B500
+10721B500:lI98|H10721EA50
+10721EA50:lI115|H107221F10
+107221F10:lI101|H1072250B8
+1072250B8:lI114|H107227F10
+107227F10:lI118|H10722A958
+10722A958:lI101|H10722D070
+10722D070:lI114|H10722F508
+10722F508:lI95|H1072316A0
+1072316A0:lI115|H107233538
+107233538:lI121|H1072350D0
+1072350D0:lI115|H107236A18
+107236A18:lI95|H107238150
+107238150:lI119|H107239668
+107239668:lI120|H10723AA50
+10723AA50:lI46|H10723BBF0
+10723BBF0:lI98|H10723CBC0
+10723CBC0:lI101|H10723DA00
+10723DA00:lI97|H10723E6E0
+10723E6E0:lI109|N
+107214C68:lH107218000|N
+107218000:lI99|H10721B4F0
+10721B4F0:lI100|H10721EA40
+10721EA40:lI118|H107221F00
+107221F00:lI95|H1072250A8
+1072250A8:lI118|H107227F00
+107227F00:lI105|H10722A948
+10722A948:lI114|H10722D060
+10722D060:lI116|H10722F4F8
+10722F4F8:lI117|H107231690
+107231690:lI97|H107233528
+107233528:lI108|H1072350C0
+1072350C0:lI95|H107236A08
+107236A08:lI108|H107238140
+107238140:lI105|H107239658
+107239658:lI115|H10723AA40
+10723AA40:lI116|H10723BBE0
+10723BBE0:lI95|H10723CBB0
+10723CBB0:lI119|H10723D9F0
+10723D9F0:lI120|H10723E6D0
+10723E6D0:lI46|H10723F290
+10723F290:lI98|H10723FCF0
+10723FCF0:lI101|H107240610
+107240610:lI97|H107240E70
+107240E70:lI109|N
+107214C58:lH107217FF0|N
+107217FF0:lI101|H10721B4E0
+10721B4E0:lI116|H10721EA30
+10721EA30:lI111|H107221EF0
+107221EF0:lI112|H107225098
+107225098:lI46|H107227EF0
+107227EF0:lI98|H10722A938
+10722A938:lI101|H10722D050
+10722D050:lI97|H10722F4E8
+10722F4E8:lI109|N
+107211940:Mn2:H107214C20,H107214C38
+107214C20:Mn2:H107217FB0,H107217FC0
+107217FB0:lH10721B4A0|N
+10721B4A0:lI111|H10721E9F0
+10721E9F0:lI98|H107221EB0
+107221EB0:lI115|H107225058
+107225058:lI101|H107227EB0
+107227EB0:lI114|H10722A8F8
+10722A8F8:lI118|H10722D010
+10722D010:lI101|H10722F4A8
+10722F4A8:lI114|H107231650
+107231650:lI95|H1072334E8
+1072334E8:lI119|H107235080
+107235080:lI120|H1072369C8
+1072369C8:lI46|H107238100
+107238100:lI98|H107239618
+107239618:lI101|H10723AA00
+10723AA00:lI97|H10723BBB0
+10723BBB0:lI109|N
+107217FC0:lH10721B4B0|N
+10721B4B0:lI99|H10721EA00
+10721EA00:lI100|H107221EC0
+107221EC0:lI118|H107225068
+107225068:lI95|H107227EC0
+107227EC0:lI116|H10722A908
+10722A908:lI97|H10722D020
+10722D020:lI98|H10722F4B8
+10722F4B8:lI108|H107231660
+107231660:lI101|H1072334F8
+1072334F8:lI95|H107235090
+107235090:lI119|H1072369D8
+1072369D8:lI120|H107238110
+107238110:lI46|H107239628
+107239628:lI98|H10723AA10
+10723AA10:lI101|H10723BBC0
+10723BBC0:lI97|H10723CB90
+10723CB90:lI109|N
+107214C38:lH107217FD0|N
+107217FD0:lI111|H10721B4C0
+10721B4C0:lI98|H10721EA10
+10721EA10:lI115|H107221ED0
+107221ED0:lI101|H107225078
+107225078:lI114|H107227ED0
+107227ED0:lI118|H10722A918
+10722A918:lI101|H10722D030
+10722D030:lI114|H10722F4C8
+10722F4C8:lI95|H107231670
+107231670:lI116|H107233508
+107233508:lI114|H1072350A0
+1072350A0:lI97|H1072369E8
+1072369E8:lI99|H107238120
+107238120:lI101|H107239638
+107239638:lI95|H10723AA20
+10723AA20:lI119|H10723BBD0
+10723BBD0:lI120|H10723CBA0
+10723CBA0:lI46|H10723D9E0
+10723D9E0:lI98|H10723E6C0
+10723E6C0:lI101|H10723F280
+10723F280:lI97|H10723FCE0
+10723FCE0:lI109|N
+107211930:Mn1:H107214C08
+107214C08:Mn2:H107217F90,H107217FA0
+107217F90:lH10721B480|N
+10721B480:lI111|H10721E9D0
+10721E9D0:lI98|H107221E90
+107221E90:lI115|H107225038
+107225038:lI101|H107227E90
+107227E90:lI114|H10722A8D8
+10722A8D8:lI118|H10722CFF0
+10722CFF0:lI101|H10722F488
+10722F488:lI114|H107231630
+107231630:lI95|H1072334C8
+1072334C8:lI112|H107235060
+107235060:lI114|H1072369A8
+1072369A8:lI111|H1072380E0
+1072380E0:lI99|H1072395F8
+1072395F8:lI105|H10723A9E0
+10723A9E0:lI110|H10723BB90
+10723BB90:lI102|H10723CB70
+10723CB70:lI111|H10723D9C0
+10723D9C0:lI46|H10723E6A0
+10723E6A0:lI98|H10723F260
+10723F260:lI101|H10723FCC0
+10723FCC0:lI97|H107240600
+107240600:lI109|N
+107217FA0:lH10721B490|N
+10721B490:lI111|H10721E9E0
+10721E9E0:lI98|H107221EA0
+107221EA0:lI115|H107225048
+107225048:lI101|H107227EA0
+107227EA0:lI114|H10722A8E8
+10722A8E8:lI118|H10722D000
+10722D000:lI101|H10722F498
+10722F498:lI114|H107231640
+107231640:lI95|H1072334D8
+1072334D8:lI112|H107235070
+107235070:lI101|H1072369B8
+1072369B8:lI114|H1072380F0
+1072380F0:lI102|H107239608
+107239608:lI95|H10723A9F0
+10723A9F0:lI119|H10723BBA0
+10723BBA0:lI120|H10723CB80
+10723CB80:lI46|H10723D9D0
+10723D9D0:lI98|H10723E6B0
+10723E6B0:lI101|H10723F270
+10723F270:lI97|H10723FCD0
+10723FCD0:lI109|N
+107211918:Mn2:H107214BE8,H107214BF8
+107214BE8:lH107217F70|N
+107217F70:lI111|H10721B460
+10721B460:lI98|H10721E9B0
+10721E9B0:lI115|H107221E70
+107221E70:lI101|H107225018
+107225018:lI114|H107227E70
+107227E70:lI118|H10722A8B8
+10722A8B8:lI101|H10722CFD0
+10722CFD0:lI114|H10722F468
+10722F468:lI95|H107231610
+107231610:lI112|H1072334A8
+1072334A8:lI114|H107235040
+107235040:lI111|H107236988
+107236988:lI95|H1072380C0
+1072380C0:lI119|H1072395D8
+1072395D8:lI120|H10723A9C0
+10723A9C0:lI46|H10723BB80
+10723BB80:lI98|H10723CB60
+10723CB60:lI101|H10723D9B0
+10723D9B0:lI97|H10723E690
+10723E690:lI109|N
+107214BF8:lH107217F80|N
+107217F80:lI99|H10721B470
+10721B470:lI100|H10721E9C0
+10721E9C0:lI118|H107221E80
+107221E80:lI95|H107225028
+107225028:lI100|H107227E80
+107227E80:lI105|H10722A8C8
+10722A8C8:lI115|H10722CFE0
+10722CFE0:lI116|H10722F478
+10722F478:lI95|H107231620
+107231620:lI99|H1072334B8
+1072334B8:lI98|H107235050
+107235050:lI46|H107236998
+107236998:lI98|H1072380D0
+1072380D0:lI101|H1072395E8
+1072395E8:lI97|H10723A9D0
+10723A9D0:lI109|N
+107211900:Mn2:H107214BC8,H107214BD8
+107214BC8:lH107217F50|N
+107217F50:lI116|H10721B440
+10721B440:lI116|H10721E990
+10721E990:lI98|H107221E50
+107221E50:lI46|H107224FF8
+107224FF8:lI98|H107227E50
+107227E50:lI101|H10722A898
+10722A898:lI97|H10722CFB0
+10722CFB0:lI109|N
+107214BD8:lH107217F60|N
+107217F60:lI111|H10721B450
+10721B450:lI98|H10721E9A0
+10721E9A0:lI115|H107221E60
+107221E60:lI101|H107225008
+107225008:lI114|H107227E60
+107227E60:lI118|H10722A8A8
+10722A8A8:lI101|H10722CFC0
+10722CFC0:lI114|H10722F458
+10722F458:lI95|H107231600
+107231600:lI115|H107233498
+107233498:lI111|H107235030
+107235030:lI99|H107236978
+107236978:lI107|H1072380B0
+1072380B0:lI95|H1072395C8
+1072395C8:lI119|H10723A9B0
+10723A9B0:lI120|H10723BB70
+10723BB70:lI46|H10723CB50
+10723CB50:lI98|H10723D9A0
+10723D9A0:lI101|H10723E680
+10723E680:lI97|H10723F250
+10723F250:lI109|N
+1072118C0:Mn7:H107214B58,H107214B68,H107214B78,H107214B88,H107214B98,H107214BA8,H107214BB8
+107214B58:lH107217EE0|N
+107217EE0:lI99|H10721B3D0
+10721B3D0:lI100|H10721E920
+10721E920:lI118|H107221DE0
+107221DE0:lI95|H107224F88
+107224F88:lI119|H107227DE0
+107227DE0:lI120|H10722A828
+10722A828:lI46|H10722CF40
+10722CF40:lI98|H10722F3E8
+10722F3E8:lI101|H107231590
+107231590:lI97|H107233428
+107233428:lI109|N
+107214BB8:lH107217F40|N
+107217F40:lI99|H10721B430
+10721B430:lI100|H10721E980
+10721E980:lI118|H107221E40
+107221E40:lI95|H107224FE8
+107224FE8:lI105|H107227E40
+107227E40:lI110|H10722A888
+10722A888:lI102|H10722CFA0
+10722CFA0:lI111|H10722F448
+10722F448:lI95|H1072315F0
+1072315F0:lI119|H107233488
+107233488:lI120|H107235020
+107235020:lI46|H107236968
+107236968:lI98|H1072380A0
+1072380A0:lI101|H1072395B8
+1072395B8:lI97|H10723A9A0
+10723A9A0:lI109|N
+107214BA8:lH107217F30|N
+107217F30:lI111|H10721B420
+10721B420:lI98|H10721E970
+10721E970:lI115|H107221E30
+107221E30:lI101|H107224FD8
+107224FD8:lI114|H107227E30
+107227E30:lI118|H10722A878
+10722A878:lI101|H10722CF90
+10722CF90:lI114|H10722F438
+10722F438:lI46|H1072315E0
+1072315E0:lI97|H107233478
+107233478:lI112|H107235010
+107235010:lI112|H107236958
+107236958:lI117|H107238090
+107238090:lI112|N
+107214B98:lH107217F20|N
+107217F20:lI99|H10721B410
+10721B410:lI100|H10721E960
+10721E960:lI118|H107221E20
+107221E20:lI95|H107224FC8
+107224FC8:lI105|H107227E20
+107227E20:lI110|H10722A868
+10722A868:lI116|H10722CF80
+10722CF80:lI95|H10722F428
+10722F428:lI116|H1072315D0
+1072315D0:lI97|H107233468
+107233468:lI98|H107235000
+107235000:lI95|H107236948
+107236948:lI99|H107238080
+107238080:lI98|H1072395A8
+1072395A8:lI46|H10723A990
+10723A990:lI98|H10723BB60
+10723BB60:lI101|H10723CB40
+10723CB40:lI97|H10723D990
+10723D990:lI109|N
+107214B88:lH107217F10|N
+107217F10:lI99|H10721B400
+10721B400:lI100|H10721E950
+10721E950:lI118|H107221E10
+107221E10:lI95|H107224FB8
+107224FB8:lI116|H107227E10
+107227E10:lI105|H10722A858
+10722A858:lI109|H10722CF70
+10722CF70:lI101|H10722F418
+10722F418:lI114|H1072315C0
+1072315C0:lI95|H107233458
+107233458:lI99|H107234FF0
+107234FF0:lI98|H107236938
+107236938:lI46|H107238070
+107238070:lI98|H107239598
+107239598:lI101|H10723A980
+10723A980:lI97|H10723BB50
+10723BB50:lI109|N
+107214B78:lH107217F00|N
+107217F00:lI99|H10721B3F0
+10721B3F0:lI114|H10721E940
+10721E940:lI97|H107221E00
+107221E00:lI115|H107224FA8
+107224FA8:lI104|H107227E00
+107227E00:lI100|H10722A848
+10722A848:lI117|H10722CF60
+10722CF60:lI109|H10722F408
+10722F408:lI112|H1072315B0
+1072315B0:lI95|H107233448
+107233448:lI118|H107234FE0
+107234FE0:lI105|H107236928
+107236928:lI101|H107238060
+107238060:lI119|H107239588
+107239588:lI101|H10723A970
+10723A970:lI114|H10723BB40
+10723BB40:lI46|H10723CB30
+10723CB30:lI98|H10723D980
+10723D980:lI101|H10723E670
+10723E670:lI97|H10723F240
+10723F240:lI109|N
+107214B68:lH107217EF0|N
+107217EF0:lI99|H10721B3E0
+10721B3E0:lI100|H10721E930
+10721E930:lI118|H107221DF0
+107221DF0:lI95|H107224F98
+107224F98:lI115|H107227DF0
+107227DF0:lI99|H10722A838
+10722A838:lI104|H10722CF50
+10722CF50:lI101|H10722F3F8
+10722F3F8:lI100|H1072315A0
+1072315A0:lI95|H107233438
+107233438:lI99|H107234FD0
+107234FD0:lI98|H107236918
+107236918:lI46|H107238050
+107238050:lI98|H107239578
+107239578:lI101|H10723A960
+10723A960:lI97|H10723BB30
+10723BB30:lI109|N
+1072118B0:lH107214B48|N
+107214B48:lI99|H107217ED0
+107217ED0:lI100|H10721B3C0
+10721B3C0:lI118|H10721E910
+10721E910:lI95|H107221DD0
+107221DD0:lI109|H107224F78
+107224F78:lI101|H107227DD0
+107227DD0:lI109|H10722A818
+10722A818:lI95|H10722CF30
+10722CF30:lI99|H10722F3D8
+10722F3D8:lI98|H107231580
+107231580:lI46|H107233418
+107233418:lI98|H107234FC0
+107234FC0:lI101|H107236908
+107236908:lI97|H107238040
+107238040:lI109|N
+107211890:Mn3:H107214B18,H107214B28,H107214B38
+107214B18:lH107217EA0|N
+107217EA0:lI111|H10721B390
+10721B390:lI98|H10721E8E0
+10721E8E0:lI115|H107221DA0
+107221DA0:lI101|H107224F48
+107224F48:lI114|H107227DA0
+107227DA0:lI118|H10722A7E8
+10722A7E8:lI101|H10722CF00
+10722CF00:lI114|H10722F3A8
+10722F3A8:lI95|H107231550
+107231550:lI112|H1072333E8
+1072333E8:lI111|H107234FA0
+107234FA0:lI114|H1072368E8
+1072368E8:lI116|H107238020
+107238020:lI95|H107239558
+107239558:lI119|H10723A940
+10723A940:lI120|H10723BB20
+10723BB20:lI46|H10723CB20
+10723CB20:lI98|H10723D970
+10723D970:lI101|H10723E660
+10723E660:lI97|H10723F230
+10723F230:lI109|N
+107214B38:lH107217EC0|N
+107217EC0:lI116|H10721B3B0
+10721B3B0:lI116|H10721E900
+10721E900:lI98|H107221DC0
+107221DC0:lI95|H107224F68
+107224F68:lI101|H107227DC0
+107227DC0:lI116|H10722A808
+10722A808:lI46|H10722CF20
+10722CF20:lI98|H10722F3C8
+10722F3C8:lI101|H107231570
+107231570:lI97|H107233408
+107233408:lI109|N
+107214B28:lH107217EB0|N
+107217EB0:lI99|H10721B3A0
+10721B3A0:lI100|H10721E8F0
+10721E8F0:lI118|H107221DB0
+107221DB0:lI95|H107224F58
+107224F58:lI97|H107227DB0
+107227DB0:lI116|H10722A7F8
+10722A7F8:lI111|H10722CF10
+10722CF10:lI109|H10722F3B8
+10722F3B8:lI95|H107231560
+107231560:lI99|H1072333F8
+1072333F8:lI98|H107234FB0
+107234FB0:lI46|H1072368F8
+1072368F8:lI98|H107238030
+107238030:lI101|H107239568
+107239568:lI97|H10723A950
+10723A950:lI109|N
+107211878:Mn2:H107214AF8,H107214B08
+107214AF8:lH107217E80|N
+107217E80:lI99|H10721B370
+10721B370:lI100|H10721E8C0
+10721E8C0:lI118|H107221D80
+107221D80:lI95|H107224F28
+107224F28:lI100|H107227D80
+107227D80:lI101|H10722A7C8
+10722A7C8:lI116|H10722CEE0
+10722CEE0:lI97|H10722F388
+10722F388:lI105|H107231530
+107231530:lI108|H1072333C8
+1072333C8:lI95|H107234F80
+107234F80:lI119|H1072368C8
+1072368C8:lI120|H107238000
+107238000:lI46|H107239538
+107239538:lI98|H10723A930
+10723A930:lI101|H10723BB10
+10723BB10:lI97|H10723CB10
+10723CB10:lI109|N
+107214B08:lH107217E90|N
+107217E90:lI99|H10721B380
+10721B380:lI100|H10721E8D0
+10721E8D0:lI118|H107221D90
+107221D90:lI95|H107224F38
+107224F38:lI102|H107227D90
+107227D90:lI117|H10722A7D8
+10722A7D8:lI110|H10722CEF0
+10722CEF0:lI95|H10722F398
+10722F398:lI99|H107231540
+107231540:lI98|H1072333D8
+1072333D8:lI46|H107234F90
+107234F90:lI98|H1072368D8
+1072368D8:lI101|H107238010
+107238010:lI97|H107239548
+107239548:lI109|N
+107211848:Mn5:H107214AA8,H107214AB8,H107214AC8,H107214AD8,H107214AE8
+107214AA8:lH107217E30|N
+107217E30:lI99|H10721B320
+10721B320:lI100|H10721E870
+10721E870:lI118|H107221D30
+107221D30:lI95|H107224ED8
+107224ED8:lI104|H107227D30
+107227D30:lI116|H10722A778
+10722A778:lI109|H10722CE90
+10722CE90:lI108|H10722F338
+10722F338:lI95|H1072314E0
+1072314E0:lI119|H107233378
+107233378:lI120|H107234F30
+107234F30:lI46|H107236888
+107236888:lI98|H107237FC0
+107237FC0:lI101|H1072394F8
+1072394F8:lI97|H10723A910
+10723A910:lI109|N
+107214AE8:lH107217E70|N
+107217E70:lI101|H10721B360
+10721B360:lI116|H10721E8B0
+10721E8B0:lI111|H107221D70
+107221D70:lI112|H107224F18
+107224F18:lI95|H107227D70
+107227D70:lI116|H10722A7B8
+10722A7B8:lI114|H10722CED0
+10722CED0:lI46|H10722F378
+10722F378:lI98|H107231520
+107231520:lI101|H1072333B8
+1072333B8:lI97|H107234F70
+107234F70:lI109|N
+107214AD8:lH107217E60|N
+107217E60:lI99|H10721B350
+10721B350:lI100|H10721E8A0
+10721E8A0:lI118|H107221D60
+107221D60:lI95|H107224F08
+107224F08:lI98|H107227D60
+107227D60:lI105|H10722A7A8
+10722A7A8:lI110|H10722CEC0
+10722CEC0:lI95|H10722F368
+10722F368:lI99|H107231510
+107231510:lI98|H1072333A8
+1072333A8:lI46|H107234F60
+107234F60:lI98|H1072368B8
+1072368B8:lI101|H107237FF0
+107237FF0:lI97|H107239528
+107239528:lI109|N
+107214AC8:lH107217E50|N
+107217E50:lI99|H10721B340
+10721B340:lI100|H10721E890
+10721E890:lI118|H107221D50
+107221D50:lI95|H107224EF8
+107224EF8:lI101|H107227D50
+107227D50:lI116|H10722A798
+10722A798:lI115|H10722CEB0
+10722CEB0:lI95|H10722F358
+10722F358:lI99|H107231500
+107231500:lI98|H107233398
+107233398:lI46|H107234F50
+107234F50:lI98|H1072368A8
+1072368A8:lI101|H107237FE0
+107237FE0:lI97|H107239518
+107239518:lI109|N
+107214AB8:lH107217E40|N
+107217E40:lI99|H10721B330
+10721B330:lI100|H10721E880
+10721E880:lI118|H107221D40
+107221D40:lI95|H107224EE8
+107224EE8:lI116|H107227D40
+107227D40:lI101|H10722A788
+10722A788:lI114|H10722CEA0
+10722CEA0:lI109|H10722F348
+10722F348:lI95|H1072314F0
+1072314F0:lI99|H107233388
+107233388:lI98|H107234F40
+107234F40:lI46|H107236898
+107236898:lI98|H107237FD0
+107237FD0:lI101|H107239508
+107239508:lI97|H10723A920
+10723A920:lI109|N
+107211830:Mn2:H107214A88,H107214A98
+107214A88:lH107217E10|N
+107217E10:lI111|H10721B300
+10721B300:lI98|H10721E850
+10721E850:lI115|H107221D10
+107221D10:lI101|H107224EB8
+107224EB8:lI114|H107227D10
+107227D10:lI118|H10722A758
+10722A758:lI101|H10722CE70
+10722CE70:lI114|H10722F318
+10722F318:lI95|H1072314C0
+1072314C0:lI108|H107233358
+107233358:lI105|H107234F10
+107234F10:lI98|H107236868
+107236868:lI46|H107237FA0
+107237FA0:lI98|H1072394D8
+1072394D8:lI101|H10723A8F0
+10723A8F0:lI97|H10723BAF0
+10723BAF0:lI109|N
+107214A98:lH107217E20|N
+107217E20:lI111|H10721B310
+10721B310:lI98|H10721E860
+10721E860:lI115|H107221D20
+107221D20:lI101|H107224EC8
+107224EC8:lI114|H107227D20
+107227D20:lI118|H10722A768
+10722A768:lI101|H10722CE80
+10722CE80:lI114|H10722F328
+10722F328:lI95|H1072314D0
+1072314D0:lI97|H107233368
+107233368:lI112|H107234F20
+107234F20:lI112|H107236878
+107236878:lI95|H107237FB0
+107237FB0:lI119|H1072394E8
+1072394E8:lI120|H10723A900
+10723A900:lI46|H10723BB00
+10723BB00:lI98|H10723CB00
+10723CB00:lI101|H10723D960
+10723D960:lI97|H10723E650
+10723E650:lI109|N
+10720E658:lI47|H107211808
+107211808:lI111|H107214A58
+107214A58:lI112|H107217DE0
+107217DE0:lI116|H10721B2D0
+10721B2D0:lI47|H10721E820
+10721E820:lI104|H107221CE0
+107221CE0:lI111|H107224E88
+107224E88:lI109|H107227CE0
+107227CE0:lI101|H10722A728
+10722A728:lI98|H10722CE40
+10722CE40:lI114|H10722F2E8
+10722F2E8:lI101|H107231490
+107231490:lI119|H107233328
+107233328:lI47|H107234EE0
+107234EE0:lI67|H107236838
+107236838:lI101|H107237F70
+107237F70:lI108|H1072394A8
+1072394A8:lI108|H10723A8D0
+10723A8D0:lI97|H10723BAE0
+10723BAE0:lI114|H10723CAF0
+10723CAF0:lI47|H10723D950
+10723D950:lI101|H10723E640
+10723E640:lI114|H10723F220
+10723F220:lI108|H10723FCB0
+10723FCB0:lI97|H1072405F0
+1072405F0:lI110|H107240E60
+107240E60:lI103|H1072415F0
+1072415F0:lI47|H107241D10
+107241D10:lI50|H1072423D0
+1072423D0:lI54|H107242A30
+107242A30:lI46|H107243010
+107243010:lI48|H107243580
+107243580:lI46|H107243AC0
+107243AC0:lI50|H107243FB0
+107243FB0:lI47|H1072444A0
+1072444A0:lI108|H107244950
+107244950:lI105|H107244DC0
+107244DC0:lI98|H107245220
+107245220:lI47|H107245670
+107245670:lI101|H107245A70
+107245A70:lI114|H107245E20
+107245E20:lI108|H1072461B0
+1072461B0:lI97|H107246540
+107246540:lI110|H1072468D0
+1072468D0:lI103|H107246C60
+107246C60:lI47|H107246F90
+107246F90:lI108|H1072472B0
+1072472B0:lI105|H1072475C0
+1072475C0:lI98|H1072478C0
+1072478C0:lI47|H107247BC0
+107247BC0:lI111|H107247EA0
+107247EA0:lI98|H107248160
+107248160:lI115|H107248420
+107248420:lI101|H1072486D0
+1072486D0:lI114|H107248980
+107248980:lI118|H107248C00
+107248C00:lI101|H107248E70
+107248E70:lI114|H1072490E0
+1072490E0:lI45|H107249340
+107249340:lI50|H1072495A0
+1072495A0:lI46|H1072497F0
+1072497F0:lI49|H107249A10
+107249A10:lI53|H107249C20
+107249C20:lI47|H280052C20
+10720B448:lH10720E6F0|H10720E708
+10720E6F0:t2:H1072119D8,H1072119E8
+1072119E8:Mh21:F:H107214D30,H107214D50,H107214D88,H107214DA0,H107214DB8,H107214DD8,H107214DE8,H107214DF8,H107214E20,H107214E30,H107214E48,H107214E58,H107214E68,H107214E78,H107214E98
+107214D30:Mn3:H1072180E0,H1072180F0,H107218100
+1072180E0:lH10721B5D0|N
+10721B5D0:lI109|H10721EB20
+10721EB20:lI110|H107221FE0
+107221FE0:lI101|H107225188
+107225188:lI115|H107227FE0
+107227FE0:lI105|H10722AA28
+10722AA28:lI97|H10722D140
+10722D140:lI95|H10722F5D8
+10722F5D8:lI114|H107231770
+107231770:lI101|H107233608
+107233608:lI103|H1072351A0
+1072351A0:lI105|H107236AE8
+107236AE8:lI115|H1072381F0
+1072381F0:lI116|H107239708
+107239708:lI114|H10723AAE0
+10723AAE0:lI121|H10723BC80
+10723BC80:lI46|H10723CC50
+10723CC50:lI98|H10723DA80
+10723DA80:lI101|H10723E750
+10723E750:lI97|H10723F300
+10723F300:lI109|N
+107218100:lH10721B5F0|N
+10721B5F0:lI109|H10721EB40
+10721EB40:lI110|H107222000
+107222000:lI101|H1072251A8
+1072251A8:lI115|H107228000
+107228000:lI105|H10722AA48
+10722AA48:lI97|H10722D160
+10722D160:lI95|H10722F5F8
+10722F5F8:lI98|H107231790
+107231790:lI117|H107233628
+107233628:lI112|H1072351C0
+1072351C0:lI46|H107236B08
+107236B08:lI98|H107238210
+107238210:lI101|H107239728
+107239728:lI97|H10723AB00
+10723AB00:lI109|N
+1072180F0:lH10721B5E0|N
+10721B5E0:lI109|H10721EB30
+10721EB30:lI110|H107221FF0
+107221FF0:lI101|H107225198
+107225198:lI115|H107227FF0
+107227FF0:lI105|H10722AA38
+10722AA38:lI97|H10722D150
+10722D150:lI95|H10722F5E8
+10722F5E8:lI99|H107231780
+107231780:lI104|H107233618
+107233618:lI101|H1072351B0
+1072351B0:lI99|H107236AF8
+107236AF8:lI107|H107238200
+107238200:lI112|H107239718
+107239718:lI111|H10723AAF0
+10723AAF0:lI105|H10723BC90
+10723BC90:lI110|H10723CC60
+10723CC60:lI116|H10723DA90
+10723DA90:lI46|H10723E760
+10723E760:lI98|H10723F310
+10723F310:lI101|H10723FD60
+10723FD60:lI97|H107240660
+107240660:lI109|N
+107214E98:Mn2:H1072182D0,H1072182E0
+1072182D0:lH10721B7C0|N
+10721B7C0:lI109|H10721ED10
+10721ED10:lI110|H1072221D0
+1072221D0:lI101|H107225378
+107225378:lI115|H1072281D0
+1072281D0:lI105|H10722AC18
+10722AC18:lI97|H10722D330
+10722D330:lI95|H10722F7C8
+10722F7C8:lI108|H107231960
+107231960:lI97|H1072337E8
+1072337E8:lI116|H107235380
+107235380:lI101|H107236CB8
+107236CB8:lI95|H1072383B0
+1072383B0:lI108|H1072398C8
+1072398C8:lI111|H10723AC80
+10723AC80:lI97|H10723BDB0
+10723BDB0:lI100|H10723CD70
+10723CD70:lI101|H10723DB70
+10723DB70:lI114|H10723E7F0
+10723E7F0:lI46|H10723F370
+10723F370:lI98|H10723FDA0
+10723FDA0:lI101|H107240690
+107240690:lI97|H107240EB0
+107240EB0:lI109|N
+1072182E0:lH10721B7D0|N
+10721B7D0:lI109|H10721ED20
+10721ED20:lI110|H1072221E0
+1072221E0:lI101|H107225388
+107225388:lI115|H1072281E0
+1072281E0:lI105|H10722AC28
+10722AC28:lI97|H10722D340
+10722D340:lI95|H10722F7D8
+10722F7D8:lI98|H107231970
+107231970:lI97|H1072337F8
+1072337F8:lI99|H107235390
+107235390:lI107|H107236CC8
+107236CC8:lI101|H1072383C0
+1072383C0:lI110|H1072398D8
+1072398D8:lI100|H10723AC90
+10723AC90:lI95|H10723BDC0
+10723BDC0:lI116|H10723CD80
+10723CD80:lI121|H10723DB80
+10723DB80:lI112|H10723E800
+10723E800:lI101|H10723F380
+10723F380:lI46|H10723FDB0
+10723FDB0:lI98|H1072406A0
+1072406A0:lI101|H107240EC0
+107240EC0:lI97|H107241630
+107241630:lI109|N
+107214E78:Mn3:H1072182A0,H1072182B0,H1072182C0
+1072182A0:lH10721B790|N
+10721B790:lI109|H10721ECE0
+10721ECE0:lI110|H1072221A0
+1072221A0:lI101|H107225348
+107225348:lI115|H1072281A0
+1072281A0:lI105|H10722ABE8
+10722ABE8:lI97|H10722D300
+10722D300:lI95|H10722F798
+10722F798:lI99|H107231930
+107231930:lI104|H1072337B8
+1072337B8:lI101|H107235350
+107235350:lI99|H107236C88
+107236C88:lI107|H107238380
+107238380:lI112|H107239898
+107239898:lI111|H10723AC60
+10723AC60:lI105|H10723BD90
+10723BD90:lI110|H10723CD50
+10723CD50:lI116|H10723DB50
+10723DB50:lI95|H10723E7E0
+10723E7E0:lI115|H10723F360
+10723F360:lI117|H10723FD90
+10723FD90:lI112|H107240680
+107240680:lI46|H107240EA0
+107240EA0:lI98|H107241620
+107241620:lI101|H107241D40
+107241D40:lI97|H107242400
+107242400:lI109|N
+1072182C0:lH10721B7B0|N
+10721B7B0:lI109|H10721ED00
+10721ED00:lI110|H1072221C0
+1072221C0:lI101|H107225368
+107225368:lI115|H1072281C0
+1072281C0:lI105|H10722AC08
+10722AC08:lI97|H10722D320
+10722D320:lI95|H10722F7B8
+10722F7B8:lI115|H107231950
+107231950:lI112|H1072337D8
+1072337D8:lI46|H107235370
+107235370:lI98|H107236CA8
+107236CA8:lI101|H1072383A0
+1072383A0:lI97|H1072398B8
+1072398B8:lI109|N
+1072182B0:lH10721B7A0|N
+10721B7A0:lI109|H10721ECF0
+10721ECF0:lI110|H1072221B0
+1072221B0:lI101|H107225358
+107225358:lI115|H1072281B0
+1072281B0:lI105|H10722ABF8
+10722ABF8:lI97|H10722D310
+10722D310:lI95|H10722F7A8
+10722F7A8:lI115|H107231940
+107231940:lI99|H1072337C8
+1072337C8:lI104|H107235360
+107235360:lI101|H107236C98
+107236C98:lI109|H107238390
+107238390:lI97|H1072398A8
+1072398A8:lI46|H10723AC70
+10723AC70:lI98|H10723BDA0
+10723BDA0:lI101|H10723CD60
+10723CD60:lI97|H10723DB60
+10723DB60:lI109|N
+107214E68:lH107218290|N
+107218290:lI109|H10721B780
+10721B780:lI110|H10721ECD0
+10721ECD0:lI101|H107222190
+107222190:lI115|H107225338
+107225338:lI105|H107228190
+107228190:lI97|H10722ABD8
+10722ABD8:lI95|H10722D2F0
+10722D2F0:lI116|H10722F788
+10722F788:lI101|H107231920
+107231920:lI120|H1072337A8
+1072337A8:lI116|H107235340
+107235340:lI46|H107236C78
+107236C78:lI98|H107238370
+107238370:lI101|H107239888
+107239888:lI97|H10723AC50
+10723AC50:lI109|N
+107214E58:lH107218280|N
+107218280:lI109|H10721B770
+10721B770:lI110|H10721ECC0
+10721ECC0:lI101|H107222180
+107222180:lI115|H107225328
+107225328:lI105|H107228180
+107228180:lI97|H10722ABC8
+10722ABC8:lI95|H10722D2E0
+10722D2E0:lI99|H10722F778
+10722F778:lI111|H107231910
+107231910:lI110|H107233798
+107233798:lI116|H107235330
+107235330:lI114|H107236C68
+107236C68:lI111|H107238360
+107238360:lI108|H107239878
+107239878:lI108|H10723AC40
+10723AC40:lI101|H10723BD80
+10723BD80:lI114|H10723CD40
+10723CD40:lI46|H10723DB40
+10723DB40:lI98|H10723E7D0
+10723E7D0:lI101|H10723F350
+10723F350:lI97|H10723FD80
+10723FD80:lI109|N
+107214E48:lH107218270|N
+107218270:lI109|H10721B760
+10721B760:lI110|H10721ECB0
+10721ECB0:lI101|H107222170
+107222170:lI115|H107225318
+107225318:lI105|H107228170
+107228170:lI97|H10722ABB8
+10722ABB8:lI95|H10722D2D0
+10722D2D0:lI108|H10722F768
+10722F768:lI111|H107231900
+107231900:lI99|H107233788
+107233788:lI107|H107235320
+107235320:lI101|H107236C58
+107236C58:lI114|H107238350
+107238350:lI46|H107239868
+107239868:lI98|H10723AC30
+10723AC30:lI101|H10723BD70
+10723BD70:lI97|H10723CD30
+10723CD30:lI109|N
+107214E30:Mn2:H107218250,H107218260
+107218250:lH10721B740|N
+10721B740:lI109|H10721EC90
+10721EC90:lI110|H107222150
+107222150:lI101|H1072252F8
+1072252F8:lI115|H107228150
+107228150:lI105|H10722AB98
+10722AB98:lI97|H10722D2B0
+10722D2B0:lI95|H10722F748
+10722F748:lI107|H1072318E0
+1072318E0:lI101|H107233768
+107233768:lI114|H107235300
+107235300:lI110|H107236C38
+107236C38:lI101|H107238330
+107238330:lI108|H107239848
+107239848:lI95|H10723AC10
+10723AC10:lI115|H10723BD50
+10723BD50:lI117|H10723CD20
+10723CD20:lI112|H10723DB30
+10723DB30:lI46|H10723E7C0
+10723E7C0:lI98|H10723F340
+10723F340:lI101|H10723FD70
+10723FD70:lI97|H107240670
+107240670:lI109|N
+107218260:lH10721B750|N
+10721B750:lI109|H10721ECA0
+10721ECA0:lI110|H107222160
+107222160:lI101|H107225308
+107225308:lI115|H107228160
+107228160:lI105|H10722ABA8
+10722ABA8:lI97|H10722D2C0
+10722D2C0:lI95|H10722F758
+10722F758:lI102|H1072318F0
+1072318F0:lI114|H107233778
+107233778:lI97|H107235310
+107235310:lI103|H107236C48
+107236C48:lI46|H107238340
+107238340:lI98|H107239858
+107239858:lI101|H10723AC20
+10723AC20:lI97|H10723BD60
+10723BD60:lI109|N
+107214E20:lH107218240|N
+107218240:lI109|H10721B730
+10721B730:lI110|H10721EC80
+10721EC80:lI101|H107222140
+107222140:lI115|H1072252E8
+1072252E8:lI105|H107228140
+107228140:lI97|H10722AB88
+10722AB88:lI95|H10722D2A0
+10722D2A0:lI102|H10722F738
+10722F738:lI114|H1072318D0
+1072318D0:lI97|H107233758
+107233758:lI103|H1072352F0
+1072352F0:lI95|H107236C28
+107236C28:lI104|H107238320
+107238320:lI97|H107239838
+107239838:lI115|H10723AC00
+10723AC00:lI104|H10723BD40
+10723BD40:lI46|H10723CD10
+10723CD10:lI98|H10723DB20
+10723DB20:lI101|H10723E7B0
+10723E7B0:lI97|H10723F330
+10723F330:lI109|N
+107214DF8:Mn4:H107218200,H107218210,H107218220,H107218230
+107218200:lH10721B6F0|N
+10721B6F0:lI109|H10721EC40
+10721EC40:lI110|H107222100
+107222100:lI101|H1072252A8
+1072252A8:lI115|H107228100
+107228100:lI105|H10722AB48
+10722AB48:lI97|H10722D260
+10722D260:lI95|H10722F6F8
+10722F6F8:lI116|H107231890
+107231890:lI109|H107233718
+107233718:lI46|H1072352B0
+1072352B0:lI98|H107236BE8
+107236BE8:lI101|H1072382E0
+1072382E0:lI97|H1072397F8
+1072397F8:lI109|N
+107218230:lH10721B720|N
+10721B720:lI109|H10721EC70
+10721EC70:lI110|H107222130
+107222130:lI101|H1072252D8
+1072252D8:lI115|H107228130
+107228130:lI105|H10722AB78
+10722AB78:lI97|H10722D290
+10722D290:lI95|H10722F728
+10722F728:lI100|H1072318C0
+1072318C0:lI117|H107233748
+107233748:lI109|H1072352E0
+1072352E0:lI112|H107236C18
+107236C18:lI101|H107238310
+107238310:lI114|H107239828
+107239828:lI46|H10723ABF0
+10723ABF0:lI98|H10723BD30
+10723BD30:lI101|H10723CD00
+10723CD00:lI97|H10723DB10
+10723DB10:lI109|N
+107218220:lH10721B710|N
+10721B710:lI109|H10721EC60
+10721EC60:lI110|H107222120
+107222120:lI101|H1072252C8
+1072252C8:lI115|H107228120
+107228120:lI105|H10722AB68
+10722AB68:lI97|H10722D280
+10722D280:lI95|H10722F718
+10722F718:lI101|H1072318B0
+1072318B0:lI118|H107233738
+107233738:lI101|H1072352D0
+1072352D0:lI110|H107236C08
+107236C08:lI116|H107238300
+107238300:lI46|H107239818
+107239818:lI98|H10723ABE0
+10723ABE0:lI101|H10723BD20
+10723BD20:lI97|H10723CCF0
+10723CCF0:lI109|N
+107218210:lH10721B700|N
+10721B700:lI109|H10721EC50
+10721EC50:lI110|H107222110
+107222110:lI101|H1072252B8
+1072252B8:lI115|H107228110
+107228110:lI105|H10722AB58
+10722AB58:lI97|H10722D270
+10722D270:lI95|H10722F708
+10722F708:lI98|H1072318A0
+1072318A0:lI97|H107233728
+107233728:lI99|H1072352C0
+1072352C0:lI107|H107236BF8
+107236BF8:lI117|H1072382F0
+1072382F0:lI112|H107239808
+107239808:lI46|H10723ABD0
+10723ABD0:lI98|H10723BD10
+10723BD10:lI101|H10723CCE0
+10723CCE0:lI97|H10723DB00
+10723DB00:lI109|N
+107214DE8:lH1072181F0|N
+1072181F0:lI109|H10721B6E0
+10721B6E0:lI110|H10721EC30
+10721EC30:lI101|H1072220F0
+1072220F0:lI115|H107225298
+107225298:lI105|H1072280F0
+1072280F0:lI97|H10722AB38
+10722AB38:lI46|H10722D250
+10722D250:lI97|H10722F6E8
+10722F6E8:lI112|H107231880
+107231880:lI112|N
+107214DD8:lH1072181E0|N
+1072181E0:lI109|H10721B6D0
+10721B6D0:lI110|H10721EC20
+10721EC20:lI101|H1072220E0
+1072220E0:lI115|H107225288
+107225288:lI105|H1072280E0
+1072280E0:lI97|H10722AB28
+10722AB28:lI95|H10722D240
+10722D240:lI115|H10722F6D8
+10722F6D8:lI110|H107231870
+107231870:lI109|H107233708
+107233708:lI112|H1072352A0
+1072352A0:lI95|H107236BD8
+107236BD8:lI104|H1072382D0
+1072382D0:lI111|H1072397E8
+1072397E8:lI111|H10723ABC0
+10723ABC0:lI107|H10723BD00
+10723BD00:lI46|H10723CCD0
+10723CCD0:lI98|H10723DAF0
+10723DAF0:lI101|H10723E7A0
+10723E7A0:lI97|H10723F320
+10723F320:lI109|N
+107214DB8:Mn3:H1072181B0,H1072181C0,H1072181D0
+1072181B0:lH10721B6A0|N
+10721B6A0:lI109|H10721EBF0
+10721EBF0:lI110|H1072220B0
+1072220B0:lI101|H107225258
+107225258:lI115|H1072280B0
+1072280B0:lI105|H10722AAF8
+10722AAF8:lI97|H10722D210
+10722D210:lI95|H10722F6A8
+10722F6A8:lI115|H107231840
+107231840:lI117|H1072336D8
+1072336D8:lI112|H107235270
+107235270:lI46|H107236BA8
+107236BA8:lI98|H1072382B0
+1072382B0:lI101|H1072397C8
+1072397C8:lI97|H10723ABA0
+10723ABA0:lI109|N
+1072181D0:lH10721B6C0|N
+10721B6C0:lI109|H10721EC10
+10721EC10:lI110|H1072220D0
+1072220D0:lI101|H107225278
+107225278:lI115|H1072280D0
+1072280D0:lI105|H10722AB18
+10722AB18:lI97|H10722D230
+10722D230:lI95|H10722F6C8
+10722F6C8:lI108|H107231860
+107231860:lI105|H1072336F8
+1072336F8:lI98|H107235290
+107235290:lI46|H107236BC8
+107236BC8:lI98|H1072382C0
+1072382C0:lI101|H1072397D8
+1072397D8:lI97|H10723ABB0
+10723ABB0:lI109|N
+1072181C0:lH10721B6B0|N
+10721B6B0:lI109|H10721EC00
+10721EC00:lI110|H1072220C0
+1072220C0:lI101|H107225268
+107225268:lI115|H1072280C0
+1072280C0:lI105|H10722AB08
+10722AB08:lI97|H10722D220
+10722D220:lI46|H10722F6B8
+10722F6B8:lI97|H107231850
+107231850:lI112|H1072336E8
+1072336E8:lI112|H107235280
+107235280:lI117|H107236BB8
+107236BB8:lI112|N
+107214DA0:Mn2:H107218190,H1072181A0
+107218190:lH10721B680|N
+10721B680:lI109|H10721EBD0
+10721EBD0:lI110|H107222090
+107222090:lI101|H107225238
+107225238:lI115|H107228090
+107228090:lI105|H10722AAD8
+10722AAD8:lI97|H10722D1F0
+10722D1F0:lI95|H10722F688
+10722F688:lI97|H107231820
+107231820:lI112|H1072336B8
+1072336B8:lI112|H107235250
+107235250:lI46|H107236B88
+107236B88:lI98|H107238290
+107238290:lI101|H1072397A8
+1072397A8:lI97|H10723AB80
+10723AB80:lI109|N
+1072181A0:lH10721B690|N
+10721B690:lI109|H10721EBE0
+10721EBE0:lI110|H1072220A0
+1072220A0:lI101|H107225248
+107225248:lI115|H1072280A0
+1072280A0:lI105|H10722AAE8
+10722AAE8:lI97|H10722D200
+10722D200:lI95|H10722F698
+10722F698:lI108|H107231830
+107231830:lI111|H1072336C8
+1072336C8:lI103|H107235260
+107235260:lI46|H107236B98
+107236B98:lI98|H1072382A0
+1072382A0:lI101|H1072397B8
+1072397B8:lI97|H10723AB90
+10723AB90:lI109|N
+107214D88:Mn2:H107218170,H107218180
+107218170:lH10721B660|N
+10721B660:lI109|H10721EBB0
+10721EBB0:lI110|H107222070
+107222070:lI101|H107225218
+107225218:lI115|H107228070
+107228070:lI105|H10722AAB8
+10722AAB8:lI97|H10722D1D0
+10722D1D0:lI95|H10722F668
+10722F668:lI115|H107231800
+107231800:lI117|H107233698
+107233698:lI98|H107235230
+107235230:lI115|H107236B68
+107236B68:lI99|H107238270
+107238270:lI114|H107239788
+107239788:lI46|H10723AB60
+10723AB60:lI98|H10723BCF0
+10723BCF0:lI101|H10723CCC0
+10723CCC0:lI97|H10723DAE0
+10723DAE0:lI109|N
+107218180:lH10721B670|N
+10721B670:lI109|H10721EBC0
+10721EBC0:lI110|H107222080
+107222080:lI101|H107225228
+107225228:lI115|H107228080
+107228080:lI105|H10722AAC8
+10722AAC8:lI97|H10722D1E0
+10722D1E0:lI95|H10722F678
+10722F678:lI114|H107231810
+107231810:lI112|H1072336A8
+1072336A8:lI99|H107235240
+107235240:lI46|H107236B78
+107236B78:lI98|H107238280
+107238280:lI101|H107239798
+107239798:lI97|H10723AB70
+10723AB70:lI109|N
+107214D50:Mn6:H107218110,H107218120,H107218130,H107218140,H107218150,H107218160
+107218110:lH10721B600|N
+10721B600:lI109|H10721EB50
+10721EB50:lI110|H107222010
+107222010:lI101|H1072251B8
+1072251B8:lI115|H107228010
+107228010:lI105|H10722AA58
+10722AA58:lI97|H10722D170
+10722D170:lI46|H10722F608
+10722F608:lI98|H1072317A0
+1072317A0:lI101|H107233638
+107233638:lI97|H1072351D0
+1072351D0:lI109|N
+107218160:lH10721B650|N
+10721B650:lI109|H10721EBA0
+10721EBA0:lI110|H107222060
+107222060:lI101|H107225208
+107225208:lI115|H107228060
+107228060:lI105|H10722AAA8
+10722AAA8:lI97|H10722D1C0
+10722D1C0:lI95|H10722F658
+10722F658:lI109|H1072317F0
+1072317F0:lI111|H107233688
+107233688:lI110|H107235220
+107235220:lI105|H107236B58
+107236B58:lI116|H107238260
+107238260:lI111|H107239778
+107239778:lI114|H10723AB50
+10723AB50:lI46|H10723BCE0
+10723BCE0:lI98|H10723CCB0
+10723CCB0:lI101|H10723DAD0
+10723DAD0:lI97|H10723E790
+10723E790:lI109|N
+107218150:lH10721B640|N
+10721B640:lI109|H10721EB90
+10721EB90:lI110|H107222050
+107222050:lI101|H1072251F8
+1072251F8:lI115|H107228050
+107228050:lI105|H10722AA98
+10722AA98:lI97|H10722D1B0
+10722D1B0:lI95|H10722F648
+10722F648:lI105|H1072317E0
+1072317E0:lI110|H107233678
+107233678:lI100|H107235210
+107235210:lI101|H107236B48
+107236B48:lI120|H107238250
+107238250:lI46|H107239768
+107239768:lI98|H10723AB40
+10723AB40:lI101|H10723BCD0
+10723BCD0:lI97|H10723CCA0
+10723CCA0:lI109|N
+107218140:lH10721B630|N
+10721B630:lI109|H10721EB80
+10721EB80:lI110|H107222040
+107222040:lI101|H1072251E8
+1072251E8:lI115|H107228040
+107228040:lI105|H10722AA88
+10722AA88:lI97|H10722D1A0
+10722D1A0:lI95|H10722F638
+10722F638:lI114|H1072317D0
+1072317D0:lI101|H107233668
+107233668:lI99|H107235200
+107235200:lI111|H107236B38
+107236B38:lI118|H107238240
+107238240:lI101|H107239758
+107239758:lI114|H10723AB30
+10723AB30:lI46|H10723BCC0
+10723BCC0:lI98|H10723CC90
+10723CC90:lI101|H10723DAC0
+10723DAC0:lI97|H10723E780
+10723E780:lI109|N
+107218130:lH10721B620|N
+10721B620:lI109|H10721EB70
+10721EB70:lI110|H107222030
+107222030:lI101|H1072251D8
+1072251D8:lI115|H107228030
+107228030:lI105|H10722AA78
+10722AA78:lI97|H10722D190
+10722D190:lI95|H10722F628
+10722F628:lI108|H1072317C0
+1072317C0:lI111|H107233658
+107233658:lI97|H1072351F0
+1072351F0:lI100|H107236B28
+107236B28:lI101|H107238230
+107238230:lI114|H107239748
+107239748:lI46|H10723AB20
+10723AB20:lI98|H10723BCB0
+10723BCB0:lI101|H10723CC80
+10723CC80:lI97|H10723DAB0
+10723DAB0:lI109|N
+107218120:lH10721B610|N
+10721B610:lI109|H10721EB60
+10721EB60:lI110|H107222020
+107222020:lI101|H1072251C8
+1072251C8:lI115|H107228020
+107228020:lI105|H10722AA68
+10722AA68:lI97|H10722D180
+10722D180:lI95|H10722F618
+10722F618:lI101|H1072317B0
+1072317B0:lI120|H107233648
+107233648:lI116|H1072351E0
+1072351E0:lI95|H107236B18
+107236B18:lI115|H107238220
+107238220:lI117|H107239738
+107239738:lI112|H10723AB10
+10723AB10:lI46|H10723BCA0
+10723BCA0:lI98|H10723CC70
+10723CC70:lI101|H10723DAA0
+10723DAA0:lI97|H10723E770
+10723E770:lI109|N
+1072119D8:lI47|H107214D20
+107214D20:lI111|H1072180D0
+1072180D0:lI112|H10721B5C0
+10721B5C0:lI116|H10721EB10
+10721EB10:lI47|H107221FD0
+107221FD0:lI104|H107225178
+107225178:lI111|H107227FD0
+107227FD0:lI109|H10722AA18
+10722AA18:lI101|H10722D130
+10722D130:lI98|H10722F5C8
+10722F5C8:lI114|H107231760
+107231760:lI101|H1072335F8
+1072335F8:lI119|H107235190
+107235190:lI47|H107236AD8
+107236AD8:lI67|H1072381E0
+1072381E0:lI101|H1072396F8
+1072396F8:lI108|H10723AAD0
+10723AAD0:lI108|H10723BC70
+10723BC70:lI97|H10723CC40
+10723CC40:lI114|H10723DA70
+10723DA70:lI47|H10723E740
+10723E740:lI101|H10723F2F0
+10723F2F0:lI114|H10723FD50
+10723FD50:lI108|H107240650
+107240650:lI97|H107240E90
+107240E90:lI110|H107241610
+107241610:lI103|H107241D30
+107241D30:lI47|H1072423F0
+1072423F0:lI50|H107242A50
+107242A50:lI54|H107243030
+107243030:lI46|H1072435A0
+1072435A0:lI48|H107243AD0
+107243AD0:lI46|H107243FC0
+107243FC0:lI50|H1072444B0
+1072444B0:lI47|H107244960
+107244960:lI108|H107244DD0
+107244DD0:lI105|H107245230
+107245230:lI98|H107245680
+107245680:lI47|H107245A80
+107245A80:lI101|H107245E30
+107245E30:lI114|H1072461C0
+1072461C0:lI108|H107246550
+107246550:lI97|H1072468E0
+1072468E0:lI110|H107246C70
+107246C70:lI103|H107246FA0
+107246FA0:lI47|H1072472C0
+1072472C0:lI108|H1072475D0
+1072475D0:lI105|H1072478D0
+1072478D0:lI98|H107247BD0
+107247BD0:lI47|H107247EB0
+107247EB0:lI109|H107248170
+107248170:lI110|H107248430
+107248430:lI101|H1072486E0
+1072486E0:lI115|H107248990
+107248990:lI105|H107248C10
+107248C10:lI97|H107248E80
+107248E80:lI45|H1072490F0
+1072490F0:lI52|H107249350
+107249350:lI46|H1072495B0
+1072495B0:lI50|H107249800
+107249800:lI50|H107249A20
+107249A20:lI47|H280052C20
+10720E708:lH107211A70|H107211A88
+107211A70:t2:H107214EB0,H107214EC0
+107214EC0:Mh43:F:H107218300,H107218320,H107218350,H107218378,H107218398,H1072183D0,H1072183E8,H107218420,H107218450,H107218470,H107218490,H1072184B8,H1072184C8,H1072184E8,H107218518
+107218300:Mn3:H10721B7F0,H10721B800,H10721B810
+10721B7F0:lH10721ED40|N
+10721ED40:lI109|H107222200
+107222200:lI101|H1072253A8
+1072253A8:lI103|H107228200
+107228200:lI97|H10722AC48
+10722AC48:lI99|H10722D360
+10722D360:lI111|H10722F7F8
+10722F7F8:lI95|H107231990
+107231990:lI116|H107233818
+107233818:lI101|H1072353B0
+1072353B0:lI120|H107236CE8
+107236CE8:lI116|H1072383E0
+1072383E0:lI95|H1072398F8
+1072398F8:lI112|H10723ACB0
+10723ACB0:lI97|H10723BDE0
+10723BDE0:lI114|H10723CDA0
+10723CDA0:lI115|H10723DBA0
+10723DBA0:lI101|H10723E820
+10723E820:lI114|H10723F3A0
+10723F3A0:lI95|H10723FDD0
+10723FDD0:lI118|H1072406C0
+1072406C0:lI51|H107240EE0
+107240EE0:lI46|H107241650
+107241650:lI98|H107241D60
+107241D60:lI101|H107242420
+107242420:lI97|H107242A70
+107242A70:lI109|N
+10721B810:lH10721ED60|N
+10721ED60:lI109|H107222220
+107222220:lI101|H1072253C8
+1072253C8:lI103|H107228220
+107228220:lI97|H10722AC68
+10722AC68:lI99|H10722D380
+10722D380:lI111|H10722F818
+10722F818:lI95|H1072319B0
+1072319B0:lI112|H107233838
+107233838:lI101|H1072353D0
+1072353D0:lI114|H107236D08
+107236D08:lI95|H107238400
+107238400:lI109|H107239918
+107239918:lI101|H10723ACD0
+10723ACD0:lI100|H10723BE00
+10723BE00:lI105|H10723CDC0
+10723CDC0:lI97|H10723DBC0
+10723DBC0:lI95|H10723E830
+10723E830:lI103|H10723F3B0
+10723F3B0:lI97|H10723FDE0
+10723FDE0:lI116|H1072406D0
+1072406D0:lI101|H107240EF0
+107240EF0:lI119|H107241660
+107241660:lI97|H107241D70
+107241D70:lI121|H107242430
+107242430:lI95|H107242A80
+107242A80:lI99|H107243050
+107243050:lI111|H1072435C0
+1072435C0:lI110|H107243AF0
+107243AF0:lI116|H107243FE0
+107243FE0:lI114|H1072444D0
+1072444D0:lI111|H107244980
+107244980:lI108|H107244DF0
+107244DF0:lI95|H107245250
+107245250:lI118|H1072456A0
+1072456A0:lI49|H107245AA0
+107245AA0:lI46|H107245E50
+107245E50:lI98|H1072461E0
+1072461E0:lI101|H107246570
+107246570:lI97|H107246900
+107246900:lI109|N
+10721B800:lH10721ED50|N
+10721ED50:lI109|H107222210
+107222210:lI101|H1072253B8
+1072253B8:lI103|H107228210
+107228210:lI97|H10722AC58
+10722AC58:lI99|H10722D370
+10722D370:lI111|H10722F808
+10722F808:lI95|H1072319A0
+1072319A0:lI116|H107233828
+107233828:lI105|H1072353C0
+1072353C0:lI109|H107236CF8
+107236CF8:lI101|H1072383F0
+1072383F0:lI114|H107239908
+107239908:lI46|H10723ACC0
+10723ACC0:lI98|H10723BDF0
+10723BDF0:lI101|H10723CDB0
+10723CDB0:lI97|H10723DBB0
+10723DBB0:lI109|N
+107218518:Mn5:H10721BB78,H10721BB88,H10721BB98,H10721BBA8,H10721BBB8
+10721BB78:lH10721F110|N
+10721F110:lI109|H1072225E0
+1072225E0:lI101|H107225788
+107225788:lI103|H1072285E0
+1072285E0:lI97|H10722B028
+10722B028:lI99|H10722D740
+10722D740:lI111|H10722FBD8
+10722FBD8:lI95|H107231D70
+107231D70:lI98|H107233BF8
+107233BF8:lI105|H107235790
+107235790:lI110|H1072370B8
+1072370B8:lI97|H1072387B0
+1072387B0:lI114|H107239CA8
+107239CA8:lI121|H10723B060
+10723B060:lI95|H10723C190
+10723C190:lI110|H10723D110
+10723D110:lI97|H10723DF10
+10723DF10:lI109|H10723EB70
+10723EB70:lI101|H10723F6D0
+10723F6D0:lI95|H1072400D0
+1072400D0:lI114|H1072409B0
+1072409B0:lI101|H107241190
+107241190:lI115|H1072418E0
+1072418E0:lI111|H107241FD0
+107241FD0:lI108|H107242640
+107242640:lI118|H107242C80
+107242C80:lI101|H107243210
+107243210:lI114|H107243760
+107243760:lI95|H107243C80
+107243C80:lI118|H107244170
+107244170:lI50|H107244620
+107244620:lI46|H107244A90
+107244A90:lI98|H107244F00
+107244F00:lI101|H107245350
+107245350:lI97|H107245750
+107245750:lI109|N
+10721BBB8:lH10721F150|N
+10721F150:lI109|H107222620
+107222620:lI101|H1072257C8
+1072257C8:lI103|H107228620
+107228620:lI97|H10722B068
+10722B068:lI99|H10722D780
+10722D780:lI111|H10722FC18
+10722FC18:lI95|H107231DB0
+107231DB0:lI101|H107233C38
+107233C38:lI114|H1072357D0
+1072357D0:lI108|H1072370F8
+1072370F8:lI95|H1072387F0
+1072387F0:lI100|H107239CE8
+107239CE8:lI105|H10723B0A0
+10723B0A0:lI115|H10723C1D0
+10723C1D0:lI116|H10723D150
+10723D150:lI95|H10723DF40
+10723DF40:lI101|H10723EBA0
+10723EBA0:lI110|H10723F700
+10723F700:lI99|H107240100
+107240100:lI111|H1072409E0
+1072409E0:lI100|H1072411C0
+1072411C0:lI101|H107241910
+107241910:lI114|H107242000
+107242000:lI46|H107242670
+107242670:lI98|H107242CB0
+107242CB0:lI101|H107243230
+107243230:lI97|H107243780
+107243780:lI109|N
+10721BBA8:lH10721F140|N
+10721F140:lI109|H107222610
+107222610:lI101|H1072257B8
+1072257B8:lI103|H107228610
+107228610:lI97|H10722B058
+10722B058:lI99|H10722D770
+10722D770:lI111|H10722FC08
+10722FC08:lI95|H107231DA0
+107231DA0:lI99|H107233C28
+107233C28:lI111|H1072357C0
+1072357C0:lI109|H1072370E8
+1072370E8:lI112|H1072387E0
+1072387E0:lI97|H107239CD8
+107239CD8:lI99|H10723B090
+10723B090:lI116|H10723C1C0
+10723C1C0:lI95|H10723D140
+10723D140:lI116|H10723DF30
+10723DF30:lI101|H10723EB90
+10723EB90:lI120|H10723F6F0
+10723F6F0:lI116|H1072400F0
+1072400F0:lI95|H1072409D0
+1072409D0:lI101|H1072411B0
+1072411B0:lI110|H107241900
+107241900:lI99|H107241FF0
+107241FF0:lI111|H107242660
+107242660:lI100|H107242CA0
+107242CA0:lI101|H107243220
+107243220:lI114|H107243770
+107243770:lI46|H107243C90
+107243C90:lI98|H107244180
+107244180:lI101|H107244630
+107244630:lI97|H107244AA0
+107244AA0:lI109|N
+10721BB98:lH10721F130|N
+10721F130:lI109|H107222600
+107222600:lI101|H1072257A8
+1072257A8:lI103|H107228600
+107228600:lI97|H10722B048
+10722B048:lI99|H10722D760
+10722D760:lI111|H10722FBF8
+10722FBF8:lI95|H107231D90
+107231D90:lI117|H107233C18
+107233C18:lI115|H1072357B0
+1072357B0:lI101|H1072370D8
+1072370D8:lI114|H1072387D0
+1072387D0:lI46|H107239CC8
+107239CC8:lI98|H10723B080
+10723B080:lI101|H10723C1B0
+10723C1B0:lI97|H10723D130
+10723D130:lI109|N
+10721BB88:lH10721F120|N
+10721F120:lI109|H1072225F0
+1072225F0:lI101|H107225798
+107225798:lI103|H1072285F0
+1072285F0:lI97|H10722B038
+10722B038:lI99|H10722D750
+10722D750:lI111|H10722FBE8
+10722FBE8:lI95|H107231D80
+107231D80:lI101|H107233C08
+107233C08:lI100|H1072357A0
+1072357A0:lI105|H1072370C8
+1072370C8:lI115|H1072387C0
+1072387C0:lI116|H107239CB8
+107239CB8:lI95|H10723B070
+10723B070:lI99|H10723C1A0
+10723C1A0:lI111|H10723D120
+10723D120:lI109|H10723DF20
+10723DF20:lI112|H10723EB80
+10723EB80:lI114|H10723F6E0
+10723F6E0:lI101|H1072400E0
+1072400E0:lI115|H1072409C0
+1072409C0:lI115|H1072411A0
+1072411A0:lI46|H1072418F0
+1072418F0:lI98|H107241FE0
+107241FE0:lI101|H107242650
+107242650:lI97|H107242C90
+107242C90:lI109|N
+1072184E8:Mn5:H10721BB20,H10721BB30,H10721BB40,H10721BB58,H10721BB68
+10721BB20:lH10721F0B0|N
+10721F0B0:lI109|H107222580
+107222580:lI101|H107225728
+107225728:lI103|H107228580
+107228580:lI97|H10722AFC8
+10722AFC8:lI99|H10722D6E0
+10722D6E0:lI111|H10722FB78
+10722FB78:lI95|H107231D10
+107231D10:lI116|H107233B98
+107233B98:lI99|H107235730
+107235730:lI112|H107237068
+107237068:lI46|H107238760
+107238760:lI98|H107239C58
+107239C58:lI101|H10723B010
+10723B010:lI97|H10723C140
+10723C140:lI109|N
+10721BB68:lH10721F100|N
+10721F100:lI109|H1072225D0
+1072225D0:lI101|H107225778
+107225778:lI103|H1072285D0
+1072285D0:lI97|H10722B018
+10722B018:lI99|H10722D730
+10722D730:lI111|H10722FBC8
+10722FBC8:lI95|H107231D60
+107231D60:lI102|H107233BE8
+107233BE8:lI105|H107235780
+107235780:lI108|H1072370A8
+1072370A8:lI116|H1072387A0
+1072387A0:lI101|H107239C98
+107239C98:lI114|H10723B050
+10723B050:lI46|H10723C180
+10723C180:lI98|H10723D100
+10723D100:lI101|H10723DF00
+10723DF00:lI97|H10723EB60
+10723EB60:lI109|N
+10721BB58:lH10721F0F0|N
+10721F0F0:lI109|H1072225C0
+1072225C0:lI101|H107225768
+107225768:lI103|H1072285C0
+1072285C0:lI97|H10722B008
+10722B008:lI99|H10722D720
+10722D720:lI111|H10722FBB8
+10722FBB8:lI95|H107231D50
+107231D50:lI116|H107233BD8
+107233BD8:lI114|H107235770
+107235770:lI97|H107237098
+107237098:lI110|H107238790
+107238790:lI115|H107239C88
+107239C88:lI95|H10723B040
+10723B040:lI115|H10723C170
+10723C170:lI101|H10723D0F0
+10723D0F0:lI110|H10723DEF0
+10723DEF0:lI100|H10723EB50
+10723EB50:lI101|H10723F6C0
+10723F6C0:lI114|H1072400C0
+1072400C0:lI46|H1072409A0
+1072409A0:lI98|H107241180
+107241180:lI101|H1072418D0
+1072418D0:lI97|H107241FC0
+107241FC0:lI109|N
+10721BB40:Mn2:H10721F0D0,H10721F0E0
+10721F0D0:lH1072225A0|N
+1072225A0:lI109|H107225748
+107225748:lI101|H1072285A0
+1072285A0:lI103|H10722AFE8
+10722AFE8:lI97|H10722D700
+10722D700:lI99|H10722FB98
+10722FB98:lI111|H107231D30
+107231D30:lI95|H107233BB8
+107233BB8:lI98|H107235750
+107235750:lI105|H107237078
+107237078:lI110|H107238770
+107238770:lI97|H107239C68
+107239C68:lI114|H10723B020
+10723B020:lI121|H10723C150
+10723C150:lI95|H10723D0D0
+10723D0D0:lI116|H10723DED0
+10723DED0:lI114|H10723EB30
+10723EB30:lI97|H10723F6A0
+10723F6A0:lI110|H1072400A0
+1072400A0:lI115|H107240980
+107240980:lI102|H107241160
+107241160:lI111|H1072418B0
+1072418B0:lI114|H107241FA0
+107241FA0:lI109|H107242620
+107242620:lI101|H107242C60
+107242C60:lI114|H1072431F0
+1072431F0:lI95|H107243740
+107243740:lI118|H107243C60
+107243C60:lI51|H107244150
+107244150:lI46|H107244600
+107244600:lI98|H107244A70
+107244A70:lI101|H107244EE0
+107244EE0:lI97|H107245330
+107245330:lI109|N
+10721F0E0:lH1072225B0|N
+1072225B0:lI109|H107225758
+107225758:lI101|H1072285B0
+1072285B0:lI103|H10722AFF8
+10722AFF8:lI97|H10722D710
+10722D710:lI99|H10722FBA8
+10722FBA8:lI111|H107231D40
+107231D40:lI95|H107233BC8
+107233BC8:lI99|H107235760
+107235760:lI111|H107237088
+107237088:lI109|H107238780
+107238780:lI112|H107239C78
+107239C78:lI97|H10723B030
+10723B030:lI99|H10723C160
+10723C160:lI116|H10723D0E0
+10723D0E0:lI95|H10723DEE0
+10723DEE0:lI116|H10723EB40
+10723EB40:lI101|H10723F6B0
+10723F6B0:lI120|H1072400B0
+1072400B0:lI116|H107240990
+107240990:lI95|H107241170
+107241170:lI101|H1072418C0
+1072418C0:lI110|H107241FB0
+107241FB0:lI99|H107242630
+107242630:lI111|H107242C70
+107242C70:lI100|H107243200
+107243200:lI101|H107243750
+107243750:lI114|H107243C70
+107243C70:lI95|H107244160
+107244160:lI118|H107244610
+107244610:lI49|H107244A80
+107244A80:lI46|H107244EF0
+107244EF0:lI98|H107245340
+107245340:lI101|H107245740
+107245740:lI97|H107245B10
+107245B10:lI109|N
+10721BB30:lH10721F0C0|N
+10721F0C0:lI109|H107222590
+107222590:lI101|H107225738
+107225738:lI103|H107228590
+107228590:lI97|H10722AFD8
+10722AFD8:lI99|H10722D6F0
+10722D6F0:lI111|H10722FB88
+10722FB88:lI46|H107231D20
+107231D20:lI97|H107233BA8
+107233BA8:lI112|H107235740
+107235740:lI112|N
+1072184C8:Mn3:H10721BAF0,H10721BB00,H10721BB10
+10721BAF0:lH10721F080|N
+10721F080:lI109|H107222550
+107222550:lI101|H1072256F8
+1072256F8:lI103|H107228550
+107228550:lI97|H10722AF98
+10722AF98:lI99|H10722D6B0
+10722D6B0:lI111|H10722FB48
+10722FB48:lI95|H107231CE0
+107231CE0:lI109|H107233B68
+107233B68:lI105|H107235700
+107235700:lI115|H107237038
+107237038:lI99|H107238730
+107238730:lI95|H107239C28
+107239C28:lI115|H10723AFE0
+10723AFE0:lI117|H10723C110
+10723C110:lI112|H10723D0A0
+10723D0A0:lI46|H10723DEA0
+10723DEA0:lI98|H10723EB00
+10723EB00:lI101|H10723F670
+10723F670:lI97|H107240070
+107240070:lI109|N
+10721BB10:lH10721F0A0|N
+10721F0A0:lI109|H107222570
+107222570:lI101|H107225718
+107225718:lI103|H107228570
+107228570:lI97|H10722AFB8
+10722AFB8:lI99|H10722D6D0
+10722D6D0:lI111|H10722FB68
+10722FB68:lI95|H107231D00
+107231D00:lI109|H107233B88
+107233B88:lI101|H107235720
+107235720:lI115|H107237058
+107237058:lI115|H107238750
+107238750:lI101|H107239C48
+107239C48:lI110|H10723B000
+10723B000:lI103|H10723C130
+10723C130:lI101|H10723D0C0
+10723D0C0:lI114|H10723DEC0
+10723DEC0:lI95|H10723EB20
+10723EB20:lI109|H10723F690
+10723F690:lI105|H107240090
+107240090:lI115|H107240970
+107240970:lI99|H107241150
+107241150:lI46|H1072418A0
+1072418A0:lI98|H107241F90
+107241F90:lI101|H107242610
+107242610:lI97|H107242C50
+107242C50:lI109|N
+10721BB00:lH10721F090|N
+10721F090:lI109|H107222560
+107222560:lI101|H107225708
+107225708:lI103|H107228560
+107228560:lI97|H10722AFA8
+10722AFA8:lI99|H10722D6C0
+10722D6C0:lI111|H10722FB58
+10722FB58:lI95|H107231CF0
+107231CF0:lI112|H107233B78
+107233B78:lI114|H107235710
+107235710:lI101|H107237048
+107237048:lI116|H107238740
+107238740:lI116|H107239C38
+107239C38:lI121|H10723AFF0
+10723AFF0:lI95|H10723C120
+10723C120:lI116|H10723D0B0
+10723D0B0:lI101|H10723DEB0
+10723DEB0:lI120|H10723EB10
+10723EB10:lI116|H10723F680
+10723F680:lI95|H107240080
+107240080:lI101|H107240960
+107240960:lI110|H107241140
+107241140:lI99|H107241890
+107241890:lI111|H107241F80
+107241F80:lI100|H107242600
+107242600:lI101|H107242C40
+107242C40:lI114|H1072431E0
+1072431E0:lI95|H107243730
+107243730:lI118|H107243C50
+107243C50:lI50|H107244140
+107244140:lI46|H1072445F0
+1072445F0:lI98|H107244A60
+107244A60:lI101|H107244ED0
+107244ED0:lI97|H107245320
+107245320:lI109|N
+1072184B8:lH10721BAE0|N
+10721BAE0:lI109|H10721F070
+10721F070:lI101|H107222540
+107222540:lI103|H1072256E8
+1072256E8:lI97|H107228540
+107228540:lI99|H10722AF88
+10722AF88:lI111|H10722D6A0
+10722D6A0:lI95|H10722FB38
+10722FB38:lI102|H107231CD0
+107231CD0:lI108|H107233B58
+107233B58:lI101|H1072356F0
+1072356F0:lI120|H107237028
+107237028:lI95|H107238720
+107238720:lI115|H107239C18
+107239C18:lI99|H10723AFD0
+10723AFD0:lI97|H10723C100
+10723C100:lI110|H10723D090
+10723D090:lI110|H10723DE90
+10723DE90:lI101|H10723EAF0
+10723EAF0:lI114|H10723F660
+10723F660:lI95|H107240060
+107240060:lI104|H107240950
+107240950:lI97|H107241130
+107241130:lI110|H107241880
+107241880:lI100|H107241F70
+107241F70:lI108|H1072425F0
+1072425F0:lI101|H107242C30
+107242C30:lI114|H1072431D0
+1072431D0:lI46|H107243720
+107243720:lI98|H107243C40
+107243C40:lI101|H107244130
+107244130:lI97|H1072445E0
+1072445E0:lI109|N
+107218490:Mn4:H10721BAA0,H10721BAB0,H10721BAC0,H10721BAD0
+10721BAA0:lH10721F030|N
+10721F030:lI109|H107222500
+107222500:lI101|H1072256A8
+1072256A8:lI103|H107228500
+107228500:lI97|H10722AF48
+10722AF48:lI99|H10722D660
+10722D660:lI111|H10722FAF8
+10722FAF8:lI95|H107231C90
+107231C90:lI116|H107233B18
+107233B18:lI99|H1072356B0
+1072356B0:lI112|H107236FE8
+107236FE8:lI95|H1072386E0
+1072386E0:lI99|H107239BD8
+107239BD8:lI111|H10723AF90
+10723AF90:lI110|H10723C0C0
+10723C0C0:lI110|H10723D050
+10723D050:lI101|H10723DE50
+10723DE50:lI99|H10723EAB0
+10723EAB0:lI116|H10723F620
+10723F620:lI105|H107240040
+107240040:lI111|H107240930
+107240930:lI110|H107241110
+107241110:lI95|H107241860
+107241860:lI115|H107241F50
+107241F50:lI117|H1072425D0
+1072425D0:lI112|H107242C10
+107242C10:lI46|H1072431B0
+1072431B0:lI98|H107243700
+107243700:lI101|H107243C20
+107243C20:lI97|H107244110
+107244110:lI109|N
+10721BAD0:lH10721F060|N
+10721F060:lI109|H107222530
+107222530:lI101|H1072256D8
+1072256D8:lI103|H107228530
+107228530:lI97|H10722AF78
+10722AF78:lI99|H10722D690
+10722D690:lI111|H10722FB28
+10722FB28:lI95|H107231CC0
+107231CC0:lI98|H107233B48
+107233B48:lI105|H1072356E0
+1072356E0:lI110|H107237018
+107237018:lI97|H107238710
+107238710:lI114|H107239C08
+107239C08:lI121|H10723AFC0
+10723AFC0:lI95|H10723C0F0
+10723C0F0:lI101|H10723D080
+10723D080:lI110|H10723DE80
+10723DE80:lI99|H10723EAE0
+10723EAE0:lI111|H10723F650
+10723F650:lI100|H107240050
+107240050:lI101|H107240940
+107240940:lI114|H107241120
+107241120:lI95|H107241870
+107241870:lI108|H107241F60
+107241F60:lI105|H1072425E0
+1072425E0:lI98|H107242C20
+107242C20:lI46|H1072431C0
+1072431C0:lI98|H107243710
+107243710:lI101|H107243C30
+107243C30:lI97|H107244120
+107244120:lI109|N
+10721BAC0:lH10721F050|N
+10721F050:lI109|H107222520
+107222520:lI101|H1072256C8
+1072256C8:lI103|H107228520
+107228520:lI97|H10722AF68
+10722AF68:lI99|H10722D680
+10722D680:lI111|H10722FB18
+10722FB18:lI95|H107231CB0
+107231CB0:lI117|H107233B38
+107233B38:lI100|H1072356D0
+1072356D0:lI112|H107237008
+107237008:lI95|H107238700
+107238700:lI115|H107239BF8
+107239BF8:lI117|H10723AFB0
+10723AFB0:lI112|H10723C0E0
+10723C0E0:lI46|H10723D070
+10723D070:lI98|H10723DE70
+10723DE70:lI101|H10723EAD0
+10723EAD0:lI97|H10723F640
+10723F640:lI109|N
+10721BAB0:lH10721F040|N
+10721F040:lI109|H107222510
+107222510:lI101|H1072256B8
+1072256B8:lI103|H107228510
+107228510:lI97|H10722AF58
+10722AF58:lI99|H10722D670
+10722D670:lI111|H10722FB08
+10722FB08:lI95|H107231CA0
+107231CA0:lI109|H107233B28
+107233B28:lI111|H1072356C0
+1072356C0:lI110|H107236FF8
+107236FF8:lI105|H1072386F0
+1072386F0:lI116|H107239BE8
+107239BE8:lI111|H10723AFA0
+10723AFA0:lI114|H10723C0D0
+10723C0D0:lI46|H10723D060
+10723D060:lI98|H10723DE60
+10723DE60:lI101|H10723EAC0
+10723EAC0:lI97|H10723F630
+10723F630:lI109|N
+107218470:Mn3:H10721BA70,H10721BA80,H10721BA90
+10721BA70:lH10721F000|N
+10721F000:lI109|H1072224D0
+1072224D0:lI101|H107225678
+107225678:lI103|H1072284D0
+1072284D0:lI97|H10722AF18
+10722AF18:lI99|H10722D630
+10722D630:lI111|H10722FAC8
+10722FAC8:lI95|H107231C60
+107231C60:lI116|H107233AE8
+107233AE8:lI114|H107235680
+107235680:lI97|H107236FB8
+107236FB8:lI110|H1072386B0
+1072386B0:lI115|H107239BA8
+107239BA8:lI112|H10723AF60
+10723AF60:lI111|H10723C090
+10723C090:lI114|H10723D020
+10723D020:lI116|H10723DE20
+10723DE20:lI46|H10723EA80
+10723EA80:lI98|H10723F5F0
+10723F5F0:lI101|H107240010
+107240010:lI97|H107240900
+107240900:lI109|N
+10721BA90:lH10721F020|N
+10721F020:lI109|H1072224F0
+1072224F0:lI101|H107225698
+107225698:lI103|H1072284F0
+1072284F0:lI97|H10722AF38
+10722AF38:lI99|H10722D650
+10722D650:lI111|H10722FAE8
+10722FAE8:lI95|H107231C80
+107231C80:lI98|H107233B08
+107233B08:lI101|H1072356A0
+1072356A0:lI114|H107236FD8
+107236FD8:lI95|H1072386D0
+1072386D0:lI109|H107239BC8
+107239BC8:lI101|H10723AF80
+10723AF80:lI100|H10723C0B0
+10723C0B0:lI105|H10723D040
+10723D040:lI97|H10723DE40
+10723DE40:lI95|H10723EAA0
+10723EAA0:lI103|H10723F610
+10723F610:lI97|H107240030
+107240030:lI116|H107240920
+107240920:lI101|H107241100
+107241100:lI119|H107241850
+107241850:lI97|H107241F40
+107241F40:lI121|H1072425C0
+1072425C0:lI95|H107242C00
+107242C00:lI99|H1072431A0
+1072431A0:lI111|H1072436F0
+1072436F0:lI110|H107243C10
+107243C10:lI116|H107244100
+107244100:lI114|H1072445D0
+1072445D0:lI111|H107244A50
+107244A50:lI108|H107244EC0
+107244EC0:lI95|H107245310
+107245310:lI118|H107245730
+107245730:lI50|H107245B00
+107245B00:lI46|H107245EA0
+107245EA0:lI98|H107246230
+107246230:lI101|H1072465C0
+1072465C0:lI97|H107246950
+107246950:lI109|N
+10721BA80:lH10721F010|N
+10721F010:lI109|H1072224E0
+1072224E0:lI101|H107225688
+107225688:lI103|H1072284E0
+1072284E0:lI97|H10722AF28
+10722AF28:lI99|H10722D640
+10722D640:lI111|H10722FAD8
+10722FAD8:lI95|H107231C70
+107231C70:lI116|H107233AF8
+107233AF8:lI101|H107235690
+107235690:lI120|H107236FC8
+107236FC8:lI116|H1072386C0
+1072386C0:lI95|H107239BB8
+107239BB8:lI112|H10723AF70
+10723AF70:lI97|H10723C0A0
+10723C0A0:lI114|H10723D030
+10723D030:lI115|H10723DE30
+10723DE30:lI101|H10723EA90
+10723EA90:lI114|H10723F600
+10723F600:lI95|H107240020
+107240020:lI118|H107240910
+107240910:lI49|H1072410F0
+1072410F0:lI46|H107241840
+107241840:lI98|H107241F30
+107241F30:lI101|H1072425B0
+1072425B0:lI97|H107242BF0
+107242BF0:lI109|N
+107218450:Mn3:H10721BA40,H10721BA50,H10721BA60
+10721BA40:lH10721EFD0|N
+10721EFD0:lI109|H1072224A0
+1072224A0:lI101|H107225648
+107225648:lI103|H1072284A0
+1072284A0:lI97|H10722AEE8
+10722AEE8:lI99|H10722D600
+10722D600:lI111|H10722FA98
+10722FA98:lI95|H107231C30
+107231C30:lI115|H107233AB8
+107233AB8:lI117|H107235650
+107235650:lI112|H107236F88
+107236F88:lI46|H107238680
+107238680:lI98|H107239B78
+107239B78:lI101|H10723AF30
+10723AF30:lI97|H10723C060
+10723C060:lI109|N
+10721BA60:lH10721EFF0|N
+10721EFF0:lI109|H1072224C0
+1072224C0:lI101|H107225668
+107225668:lI103|H1072284C0
+1072284C0:lI97|H10722AF08
+10722AF08:lI99|H10722D620
+10722D620:lI111|H10722FAB8
+10722FAB8:lI95|H107231C50
+107231C50:lI98|H107233AD8
+107233AD8:lI101|H107235670
+107235670:lI114|H107236FA8
+107236FA8:lI95|H1072386A0
+1072386A0:lI101|H107239B98
+107239B98:lI110|H10723AF50
+10723AF50:lI99|H10723C080
+10723C080:lI111|H10723D010
+10723D010:lI100|H10723DE10
+10723DE10:lI101|H10723EA70
+10723EA70:lI114|H10723F5E0
+10723F5E0:lI46|H107240000
+107240000:lI98|H1072408F0
+1072408F0:lI101|H1072410E0
+1072410E0:lI97|H107241830
+107241830:lI109|N
+10721BA50:lH10721EFE0|N
+10721EFE0:lI109|H1072224B0
+1072224B0:lI101|H107225658
+107225658:lI103|H1072284B0
+1072284B0:lI97|H10722AEF8
+10722AEF8:lI99|H10722D610
+10722D610:lI111|H10722FAA8
+10722FAA8:lI95|H107231C40
+107231C40:lI100|H107233AC8
+107233AC8:lI105|H107235660
+107235660:lI103|H107236F98
+107236F98:lI105|H107238690
+107238690:lI116|H107239B88
+107239B88:lI95|H10723AF40
+10723AF40:lI109|H10723C070
+10723C070:lI97|H10723D000
+10723D000:lI112|H10723DE00
+10723DE00:lI46|H10723EA60
+10723EA60:lI98|H10723F5D0
+10723F5D0:lI101|H10723FFF0
+10723FFF0:lI97|H1072408E0
+1072408E0:lI109|N
+107218420:Mn5:H10721B9F0,H10721BA00,H10721BA10,H10721BA20,H10721BA30
+10721B9F0:lH10721EF80|N
+10721EF80:lI109|H107222450
+107222450:lI101|H1072255F8
+1072255F8:lI103|H107228450
+107228450:lI97|H10722AE98
+10722AE98:lI99|H10722D5B0
+10722D5B0:lI111|H10722FA48
+10722FA48:lI95|H107231BE0
+107231BE0:lI112|H107233A68
+107233A68:lI101|H107235600
+107235600:lI114|H107236F38
+107236F38:lI95|H107238630
+107238630:lI109|H107239B38
+107239B38:lI101|H10723AEF0
+10723AEF0:lI100|H10723C020
+10723C020:lI105|H10723CFC0
+10723CFC0:lI97|H10723DDC0
+10723DDC0:lI95|H10723EA20
+10723EA20:lI103|H10723F590
+10723F590:lI97|H10723FFB0
+10723FFB0:lI116|H1072408A0
+1072408A0:lI101|H1072410A0
+1072410A0:lI119|H1072417F0
+1072417F0:lI97|H107241EF0
+107241EF0:lI121|H107242570
+107242570:lI95|H107242BB0
+107242BB0:lI99|H107243160
+107243160:lI111|H1072436B0
+1072436B0:lI110|H107243BD0
+107243BD0:lI116|H1072440C0
+1072440C0:lI114|H107244590
+107244590:lI111|H107244A10
+107244A10:lI108|H107244E80
+107244E80:lI95|H1072452D0
+1072452D0:lI118|H107245700
+107245700:lI50|H107245AE0
+107245AE0:lI46|H107245E80
+107245E80:lI98|H107246210
+107246210:lI101|H1072465A0
+1072465A0:lI97|H107246930
+107246930:lI109|N
+10721BA30:lH10721EFC0|N
+10721EFC0:lI109|H107222490
+107222490:lI101|H107225638
+107225638:lI103|H107228490
+107228490:lI97|H10722AED8
+10722AED8:lI99|H10722D5F0
+10722D5F0:lI111|H10722FA88
+10722FA88:lI46|H107231C20
+107231C20:lI97|H107233AA8
+107233AA8:lI112|H107235640
+107235640:lI112|H107236F78
+107236F78:lI117|H107238670
+107238670:lI112|N
+10721BA20:lH10721EFB0|N
+10721EFB0:lI109|H107222480
+107222480:lI101|H107225628
+107225628:lI103|H107228480
+107228480:lI97|H10722AEC8
+10722AEC8:lI99|H10722D5E0
+10722D5E0:lI111|H10722FA78
+10722FA78:lI95|H107231C10
+107231C10:lI112|H107233A98
+107233A98:lI101|H107235630
+107235630:lI114|H107236F68
+107236F68:lI95|H107238660
+107238660:lI109|H107239B68
+107239B68:lI101|H10723AF20
+10723AF20:lI100|H10723C050
+10723C050:lI105|H10723CFF0
+10723CFF0:lI97|H10723DDF0
+10723DDF0:lI95|H10723EA50
+10723EA50:lI103|H10723F5C0
+10723F5C0:lI97|H10723FFE0
+10723FFE0:lI116|H1072408D0
+1072408D0:lI101|H1072410D0
+1072410D0:lI119|H107241820
+107241820:lI97|H107241F20
+107241F20:lI121|H1072425A0
+1072425A0:lI95|H107242BE0
+107242BE0:lI99|H107243190
+107243190:lI111|H1072436E0
+1072436E0:lI110|H107243C00
+107243C00:lI116|H1072440F0
+1072440F0:lI114|H1072445C0
+1072445C0:lI111|H107244A40
+107244A40:lI108|H107244EB0
+107244EB0:lI95|H107245300
+107245300:lI118|H107245720
+107245720:lI51|H107245AF0
+107245AF0:lI46|H107245E90
+107245E90:lI98|H107246220
+107246220:lI101|H1072465B0
+1072465B0:lI97|H107246940
+107246940:lI109|N
+10721BA10:lH10721EFA0|N
+10721EFA0:lI109|H107222470
+107222470:lI101|H107225618
+107225618:lI103|H107228470
+107228470:lI97|H10722AEB8
+10722AEB8:lI99|H10722D5D0
+10722D5D0:lI111|H10722FA68
+10722FA68:lI95|H107231C00
+107231C00:lI112|H107233A88
+107233A88:lI114|H107235620
+107235620:lI101|H107236F58
+107236F58:lI116|H107238650
+107238650:lI116|H107239B58
+107239B58:lI121|H10723AF10
+10723AF10:lI95|H10723C040
+10723C040:lI116|H10723CFE0
+10723CFE0:lI101|H10723DDE0
+10723DDE0:lI120|H10723EA40
+10723EA40:lI116|H10723F5B0
+10723F5B0:lI95|H10723FFD0
+10723FFD0:lI101|H1072408C0
+1072408C0:lI110|H1072410C0
+1072410C0:lI99|H107241810
+107241810:lI111|H107241F10
+107241F10:lI100|H107242590
+107242590:lI101|H107242BD0
+107242BD0:lI114|H107243180
+107243180:lI95|H1072436D0
+1072436D0:lI118|H107243BF0
+107243BF0:lI51|H1072440E0
+1072440E0:lI46|H1072445B0
+1072445B0:lI98|H107244A30
+107244A30:lI101|H107244EA0
+107244EA0:lI97|H1072452F0
+1072452F0:lI109|N
+10721BA00:lH10721EF90|N
+10721EF90:lI109|H107222460
+107222460:lI101|H107225608
+107225608:lI103|H107228460
+107228460:lI97|H10722AEA8
+10722AEA8:lI99|H10722D5C0
+10722D5C0:lI111|H10722FA58
+10722FA58:lI95|H107231BF0
+107231BF0:lI98|H107233A78
+107233A78:lI105|H107235610
+107235610:lI110|H107236F48
+107236F48:lI97|H107238640
+107238640:lI114|H107239B48
+107239B48:lI121|H10723AF00
+10723AF00:lI95|H10723C030
+10723C030:lI110|H10723CFD0
+10723CFD0:lI97|H10723DDD0
+10723DDD0:lI109|H10723EA30
+10723EA30:lI101|H10723F5A0
+10723F5A0:lI95|H10723FFC0
+10723FFC0:lI114|H1072408B0
+1072408B0:lI101|H1072410B0
+1072410B0:lI115|H107241800
+107241800:lI111|H107241F00
+107241F00:lI108|H107242580
+107242580:lI118|H107242BC0
+107242BC0:lI101|H107243170
+107243170:lI114|H1072436C0
+1072436C0:lI95|H107243BE0
+107243BE0:lI118|H1072440D0
+1072440D0:lI49|H1072445A0
+1072445A0:lI46|H107244A20
+107244A20:lI98|H107244E90
+107244E90:lI101|H1072452E0
+1072452E0:lI97|H107245710
+107245710:lI109|N
+1072183E8:Mn6:H10721B980,H10721B990,H10721B9A0,H10721B9B0,H10721B9D0,H10721B9E0
+10721B980:lH10721EF00|N
+10721EF00:lI109|H1072223D0
+1072223D0:lI101|H107225578
+107225578:lI103|H1072283D0
+1072283D0:lI97|H10722AE18
+10722AE18:lI99|H10722D530
+10722D530:lI111|H10722F9C8
+10722F9C8:lI95|H107231B60
+107231B60:lI98|H1072339E8
+1072339E8:lI105|H107235580
+107235580:lI110|H107236EB8
+107236EB8:lI97|H1072385B0
+1072385B0:lI114|H107239AC8
+107239AC8:lI121|H10723AE80
+10723AE80:lI95|H10723BFB0
+10723BFB0:lI116|H10723CF60
+10723CF60:lI114|H10723DD60
+10723DD60:lI97|H10723E9C0
+10723E9C0:lI110|H10723F530
+10723F530:lI115|H10723FF50
+10723FF50:lI102|H107240840
+107240840:lI111|H107241040
+107241040:lI114|H107241790
+107241790:lI109|H107241E90
+107241E90:lI101|H107242520
+107242520:lI114|H107242B60
+107242B60:lI95|H107243110
+107243110:lI118|H107243670
+107243670:lI49|H107243B90
+107243B90:lI46|H107244080
+107244080:lI98|H107244560
+107244560:lI101|H1072449F0
+1072449F0:lI97|H107244E60
+107244E60:lI109|N
+10721B9E0:lH10721EF70|N
+10721EF70:lI109|H107222440
+107222440:lI101|H1072255E8
+1072255E8:lI103|H107228440
+107228440:lI97|H10722AE88
+10722AE88:lI99|H10722D5A0
+10722D5A0:lI111|H10722FA38
+10722FA38:lI95|H107231BD0
+107231BD0:lI102|H107233A58
+107233A58:lI108|H1072355F0
+1072355F0:lI101|H107236F28
+107236F28:lI120|H107238620
+107238620:lI95|H107239B28
+107239B28:lI115|H10723AEE0
+10723AEE0:lI99|H10723C010
+10723C010:lI97|H10723CFB0
+10723CFB0:lI110|H10723DDB0
+10723DDB0:lI110|H10723EA10
+10723EA10:lI101|H10723F580
+10723F580:lI114|H10723FFA0
+10723FFA0:lI46|H107240890
+107240890:lI98|H107241090
+107241090:lI101|H1072417E0
+1072417E0:lI97|H107241EE0
+107241EE0:lI109|N
+10721B9D0:lH10721EF60|N
+10721EF60:lI109|H107222430
+107222430:lI101|H1072255D8
+1072255D8:lI103|H107228430
+107228430:lI97|H10722AE78
+10722AE78:lI99|H10722D590
+10722D590:lI111|H10722FA28
+10722FA28:lI95|H107231BC0
+107231BC0:lI115|H107233A48
+107233A48:lI100|H1072355E0
+1072355E0:lI112|H107236F18
+107236F18:lI46|H107238610
+107238610:lI98|H107239B18
+107239B18:lI101|H10723AED0
+10723AED0:lI97|H10723C000
+10723C000:lI109|N
+10721B9B0:Mn3:H10721EF30,H10721EF40,H10721EF50
+10721EF30:lH107222400|N
+107222400:lI109|H1072255A8
+1072255A8:lI101|H107228400
+107228400:lI103|H10722AE48
+10722AE48:lI97|H10722D560
+10722D560:lI99|H10722F9F8
+10722F9F8:lI111|H107231B90
+107231B90:lI46|H107233A18
+107233A18:lI98|H1072355B0
+1072355B0:lI101|H107236EE8
+107236EE8:lI97|H1072385E0
+1072385E0:lI109|N
+10721EF50:lH107222420|N
+107222420:lI109|H1072255C8
+1072255C8:lI101|H107228420
+107228420:lI103|H10722AE68
+10722AE68:lI97|H10722D580
+10722D580:lI99|H10722FA18
+10722FA18:lI111|H107231BB0
+107231BB0:lI95|H107233A38
+107233A38:lI116|H1072355D0
+1072355D0:lI101|H107236F08
+107236F08:lI120|H107238600
+107238600:lI116|H107239B08
+107239B08:lI95|H10723AEC0
+10723AEC0:lI109|H10723BFF0
+10723BFF0:lI105|H10723CFA0
+10723CFA0:lI110|H10723DDA0
+10723DDA0:lI105|H10723EA00
+10723EA00:lI95|H10723F570
+10723F570:lI100|H10723FF90
+10723FF90:lI101|H107240880
+107240880:lI99|H107241080
+107241080:lI111|H1072417D0
+1072417D0:lI100|H107241ED0
+107241ED0:lI101|H107242560
+107242560:lI114|H107242BA0
+107242BA0:lI46|H107243150
+107243150:lI98|H1072436A0
+1072436A0:lI101|H107243BC0
+107243BC0:lI97|H1072440B0
+1072440B0:lI109|N
+10721EF40:lH107222410|N
+107222410:lI109|H1072255B8
+1072255B8:lI101|H107228410
+107228410:lI103|H10722AE58
+10722AE58:lI97|H10722D570
+10722D570:lI99|H10722FA08
+10722FA08:lI111|H107231BA0
+107231BA0:lI95|H107233A28
+107233A28:lI116|H1072355C0
+1072355C0:lI99|H107236EF8
+107236EF8:lI112|H1072385F0
+1072385F0:lI95|H107239AF8
+107239AF8:lI97|H10723AEB0
+10723AEB0:lI99|H10723BFE0
+10723BFE0:lI99|H10723CF90
+10723CF90:lI101|H10723DD90
+10723DD90:lI112|H10723E9F0
+10723E9F0:lI116|H10723F560
+10723F560:lI95|H10723FF80
+10723FF80:lI115|H107240870
+107240870:lI117|H107241070
+107241070:lI112|H1072417C0
+1072417C0:lI46|H107241EC0
+107241EC0:lI98|H107242550
+107242550:lI101|H107242B90
+107242B90:lI97|H107243140
+107243140:lI109|N
+10721B9A0:lH10721EF20|N
+10721EF20:lI109|H1072223F0
+1072223F0:lI101|H107225598
+107225598:lI103|H1072283F0
+1072283F0:lI97|H10722AE38
+10722AE38:lI99|H10722D550
+10722D550:lI111|H10722F9E8
+10722F9E8:lI95|H107231B80
+107231B80:lI98|H107233A08
+107233A08:lI105|H1072355A0
+1072355A0:lI110|H107236ED8
+107236ED8:lI97|H1072385D0
+1072385D0:lI114|H107239AE8
+107239AE8:lI121|H10723AEA0
+10723AEA0:lI95|H10723BFD0
+10723BFD0:lI110|H10723CF80
+10723CF80:lI97|H10723DD80
+10723DD80:lI109|H10723E9E0
+10723E9E0:lI101|H10723F550
+10723F550:lI95|H10723FF70
+10723FF70:lI114|H107240860
+107240860:lI101|H107241060
+107241060:lI115|H1072417B0
+1072417B0:lI111|H107241EB0
+107241EB0:lI108|H107242540
+107242540:lI118|H107242B80
+107242B80:lI101|H107243130
+107243130:lI114|H107243690
+107243690:lI95|H107243BB0
+107243BB0:lI118|H1072440A0
+1072440A0:lI51|H107244580
+107244580:lI46|H107244A00
+107244A00:lI98|H107244E70
+107244E70:lI101|H1072452C0
+1072452C0:lI97|H1072456F0
+1072456F0:lI109|N
+10721B990:lH10721EF10|N
+10721EF10:lI109|H1072223E0
+1072223E0:lI101|H107225588
+107225588:lI103|H1072283E0
+1072283E0:lI97|H10722AE28
+10722AE28:lI99|H10722D540
+10722D540:lI111|H10722F9D8
+10722F9D8:lI95|H107231B70
+107231B70:lI101|H1072339F8
+1072339F8:lI114|H107235590
+107235590:lI108|H107236EC8
+107236EC8:lI95|H1072385C0
+1072385C0:lI100|H107239AD8
+107239AD8:lI105|H10723AE90
+10723AE90:lI115|H10723BFC0
+10723BFC0:lI116|H10723CF70
+10723CF70:lI95|H10723DD70
+10723DD70:lI101|H10723E9D0
+10723E9D0:lI110|H10723F540
+10723F540:lI99|H10723FF60
+10723FF60:lI111|H107240850
+107240850:lI100|H107241050
+107241050:lI101|H1072417A0
+1072417A0:lI114|H107241EA0
+107241EA0:lI95|H107242530
+107242530:lI109|H107242B70
+107242B70:lI99|H107243120
+107243120:lI46|H107243680
+107243680:lI98|H107243BA0
+107243BA0:lI101|H107244090
+107244090:lI97|H107244570
+107244570:lI109|N
+1072183D0:Mn2:H10721B958,H10721B970
+10721B958:Mn2:H10721EED0,H10721EEE0
+10721EED0:lH1072223A0|N
+1072223A0:lI109|H107225548
+107225548:lI101|H1072283A0
+1072283A0:lI103|H10722ADE8
+10722ADE8:lI97|H10722D500
+10722D500:lI99|H10722F998
+10722F998:lI111|H107231B30
+107231B30:lI95|H1072339B8
+1072339B8:lI99|H107235550
+107235550:lI111|H107236E88
+107236E88:lI109|H107238580
+107238580:lI112|H107239A98
+107239A98:lI97|H10723AE50
+10723AE50:lI99|H10723BF80
+10723BF80:lI116|H10723CF30
+10723CF30:lI95|H10723DD30
+10723DD30:lI116|H10723E990
+10723E990:lI101|H10723F500
+10723F500:lI120|H10723FF20
+10723FF20:lI116|H107240810
+107240810:lI95|H107241010
+107241010:lI101|H107241760
+107241760:lI110|H107241E60
+107241E60:lI99|H107242510
+107242510:lI111|H107242B50
+107242B50:lI100|H107243100
+107243100:lI101|H107243660
+107243660:lI114|H107243B80
+107243B80:lI95|H107244070
+107244070:lI118|H107244550
+107244550:lI50|H1072449E0
+1072449E0:lI46|H107244E50
+107244E50:lI98|H1072452B0
+1072452B0:lI101|H1072456E0
+1072456E0:lI97|H107245AD0
+107245AD0:lI109|N
+10721EEE0:lH1072223B0|N
+1072223B0:lI109|H107225558
+107225558:lI101|H1072283B0
+1072283B0:lI103|H10722ADF8
+10722ADF8:lI97|H10722D510
+10722D510:lI99|H10722F9A8
+10722F9A8:lI111|H107231B40
+107231B40:lI95|H1072339C8
+1072339C8:lI112|H107235560
+107235560:lI101|H107236E98
+107236E98:lI114|H107238590
+107238590:lI95|H107239AA8
+107239AA8:lI101|H10723AE60
+10723AE60:lI110|H10723BF90
+10723BF90:lI99|H10723CF40
+10723CF40:lI111|H10723DD40
+10723DD40:lI100|H10723E9A0
+10723E9A0:lI101|H10723F510
+10723F510:lI114|H10723FF30
+10723FF30:lI46|H107240820
+107240820:lI98|H107241020
+107241020:lI101|H107241770
+107241770:lI97|H107241E70
+107241E70:lI109|N
+10721B970:lH10721EEF0|N
+10721EEF0:lI109|H1072223C0
+1072223C0:lI101|H107225568
+107225568:lI103|H1072283C0
+1072283C0:lI97|H10722AE08
+10722AE08:lI99|H10722D520
+10722D520:lI111|H10722F9B8
+10722F9B8:lI95|H107231B50
+107231B50:lI117|H1072339D8
+1072339D8:lI115|H107235570
+107235570:lI101|H107236EA8
+107236EA8:lI114|H1072385A0
+1072385A0:lI95|H107239AB8
+107239AB8:lI100|H10723AE70
+10723AE70:lI101|H10723BFA0
+10723BFA0:lI102|H10723CF50
+10723CF50:lI97|H10723DD50
+10723DD50:lI117|H10723E9B0
+10723E9B0:lI108|H10723F520
+10723F520:lI116|H10723FF40
+10723FF40:lI46|H107240830
+107240830:lI98|H107241030
+107241030:lI101|H107241780
+107241780:lI97|H107241E80
+107241E80:lI109|N
+107218398:Mn6:H10721B8E8,H10721B8F8,H10721B910,H10721B928,H10721B938,H10721B948
+10721B8E8:lH10721EE50|N
+10721EE50:lI109|H107222320
+107222320:lI101|H1072254C8
+1072254C8:lI103|H107228320
+107228320:lI97|H10722AD68
+10722AD68:lI99|H10722D480
+10722D480:lI111|H10722F918
+10722F918:lI95|H107231AB0
+107231AB0:lI112|H107233938
+107233938:lI114|H1072354D0
+1072354D0:lI101|H107236E08
+107236E08:lI116|H107238500
+107238500:lI116|H107239A18
+107239A18:lI121|H10723ADD0
+10723ADD0:lI95|H10723BF00
+10723BF00:lI116|H10723CEB0
+10723CEB0:lI101|H10723DCB0
+10723DCB0:lI120|H10723E920
+10723E920:lI116|H10723F490
+10723F490:lI95|H10723FEB0
+10723FEB0:lI101|H1072407A0
+1072407A0:lI110|H107240FA0
+107240FA0:lI99|H1072416F0
+1072416F0:lI111|H107241E00
+107241E00:lI100|H1072424B0
+1072424B0:lI101|H107242AF0
+107242AF0:lI114|H1072430B0
+1072430B0:lI95|H107243620
+107243620:lI118|H107243B40
+107243B40:lI49|H107244030
+107244030:lI46|H107244510
+107244510:lI98|H1072449B0
+1072449B0:lI101|H107244E20
+107244E20:lI97|H107245280
+107245280:lI109|N
+10721B948:lH10721EEC0|N
+10721EEC0:lI109|H107222390
+107222390:lI101|H107225538
+107225538:lI103|H107228390
+107228390:lI97|H10722ADD8
+10722ADD8:lI99|H10722D4F0
+10722D4F0:lI111|H10722F988
+10722F988:lI95|H107231B20
+107231B20:lI98|H1072339A8
+1072339A8:lI105|H107235540
+107235540:lI110|H107236E78
+107236E78:lI97|H107238570
+107238570:lI114|H107239A88
+107239A88:lI121|H10723AE40
+10723AE40:lI95|H10723BF70
+10723BF70:lI116|H10723CF20
+10723CF20:lI101|H10723DD20
+10723DD20:lI114|H10723E980
+10723E980:lI109|H10723F4F0
+10723F4F0:lI95|H10723FF10
+10723FF10:lI105|H107240800
+107240800:lI100|H107241000
+107241000:lI46|H107241750
+107241750:lI98|H107241E50
+107241E50:lI101|H107242500
+107242500:lI97|H107242B40
+107242B40:lI109|N
+10721B938:lH10721EEB0|N
+10721EEB0:lI109|H107222380
+107222380:lI101|H107225528
+107225528:lI103|H107228380
+107228380:lI97|H10722ADC8
+10722ADC8:lI99|H10722D4E0
+10722D4E0:lI111|H10722F978
+10722F978:lI95|H107231B10
+107231B10:lI115|H107233998
+107233998:lI116|H107235530
+107235530:lI97|H107236E68
+107236E68:lI116|H107238560
+107238560:lI115|H107239A78
+107239A78:lI46|H10723AE30
+10723AE30:lI98|H10723BF60
+10723BF60:lI101|H10723CF10
+10723CF10:lI97|H10723DD10
+10723DD10:lI109|N
+10721B928:lH10721EEA0|N
+10721EEA0:lI109|H107222370
+107222370:lI101|H107225518
+107225518:lI103|H107228370
+107228370:lI97|H10722ADB8
+10722ADB8:lI99|H10722D4D0
+10722D4D0:lI111|H10722F968
+10722F968:lI95|H107231B00
+107231B00:lI99|H107233988
+107233988:lI111|H107235520
+107235520:lI109|H107236E58
+107236E58:lI112|H107238550
+107238550:lI97|H107239A68
+107239A68:lI99|H10723AE20
+10723AE20:lI116|H10723BF50
+10723BF50:lI95|H10723CF00
+10723CF00:lI116|H10723DD00
+10723DD00:lI101|H10723E970
+10723E970:lI120|H10723F4E0
+10723F4E0:lI116|H10723FF00
+10723FF00:lI95|H1072407F0
+1072407F0:lI101|H107240FF0
+107240FF0:lI110|H107241740
+107241740:lI99|H107241E40
+107241E40:lI111|H1072424F0
+1072424F0:lI100|H107242B30
+107242B30:lI101|H1072430F0
+1072430F0:lI114|H107243650
+107243650:lI95|H107243B70
+107243B70:lI118|H107244060
+107244060:lI51|H107244540
+107244540:lI46|H1072449D0
+1072449D0:lI98|H107244E40
+107244E40:lI101|H1072452A0
+1072452A0:lI97|H1072456D0
+1072456D0:lI109|N
+10721B910:Mn2:H10721EE80,H10721EE90
+10721EE80:lH107222350|N
+107222350:lI109|H1072254F8
+1072254F8:lI101|H107228350
+107228350:lI103|H10722AD98
+10722AD98:lI97|H10722D4B0
+10722D4B0:lI99|H10722F948
+10722F948:lI111|H107231AE0
+107231AE0:lI95|H107233968
+107233968:lI98|H107235500
+107235500:lI101|H107236E38
+107236E38:lI114|H107238530
+107238530:lI95|H107239A48
+107239A48:lI109|H10723AE00
+10723AE00:lI101|H10723BF30
+10723BF30:lI100|H10723CEE0
+10723CEE0:lI105|H10723DCE0
+10723DCE0:lI97|H10723E950
+10723E950:lI95|H10723F4C0
+10723F4C0:lI103|H10723FEE0
+10723FEE0:lI97|H1072407D0
+1072407D0:lI116|H107240FD0
+107240FD0:lI101|H107241720
+107241720:lI119|H107241E30
+107241E30:lI97|H1072424E0
+1072424E0:lI121|H107242B20
+107242B20:lI95|H1072430E0
+1072430E0:lI99|H107243640
+107243640:lI111|H107243B60
+107243B60:lI110|H107244050
+107244050:lI116|H107244530
+107244530:lI114|H1072449C0
+1072449C0:lI111|H107244E30
+107244E30:lI108|H107245290
+107245290:lI95|H1072456C0
+1072456C0:lI118|H107245AC0
+107245AC0:lI51|H107245E70
+107245E70:lI46|H107246200
+107246200:lI98|H107246590
+107246590:lI101|H107246920
+107246920:lI97|H107246C90
+107246C90:lI109|N
+10721EE90:lH107222360|N
+107222360:lI109|H107225508
+107225508:lI101|H107228360
+107228360:lI103|H10722ADA8
+10722ADA8:lI97|H10722D4C0
+10722D4C0:lI99|H10722F958
+10722F958:lI111|H107231AF0
+107231AF0:lI95|H107233978
+107233978:lI116|H107235510
+107235510:lI99|H107236E48
+107236E48:lI112|H107238540
+107238540:lI95|H107239A58
+107239A58:lI97|H10723AE10
+10723AE10:lI99|H10723BF40
+10723BF40:lI99|H10723CEF0
+10723CEF0:lI101|H10723DCF0
+10723DCF0:lI112|H10723E960
+10723E960:lI116|H10723F4D0
+10723F4D0:lI46|H10723FEF0
+10723FEF0:lI98|H1072407E0
+1072407E0:lI101|H107240FE0
+107240FE0:lI97|H107241730
+107241730:lI109|N
+10721B8F8:Mn2:H10721EE60,H10721EE70
+10721EE60:lH107222330|N
+107222330:lI109|H1072254D8
+1072254D8:lI101|H107228330
+107228330:lI103|H10722AD78
+10722AD78:lI97|H10722D490
+10722D490:lI99|H10722F928
+10722F928:lI111|H107231AC0
+107231AC0:lI95|H107233948
+107233948:lI116|H1072354E0
+1072354E0:lI101|H107236E18
+107236E18:lI120|H107238510
+107238510:lI116|H107239A28
+107239A28:lI95|H10723ADE0
+10723ADE0:lI112|H10723BF10
+10723BF10:lI97|H10723CEC0
+10723CEC0:lI114|H10723DCC0
+10723DCC0:lI115|H10723E930
+10723E930:lI101|H10723F4A0
+10723F4A0:lI114|H10723FEC0
+10723FEC0:lI95|H1072407B0
+1072407B0:lI118|H107240FB0
+107240FB0:lI50|H107241700
+107241700:lI46|H107241E10
+107241E10:lI98|H1072424C0
+1072424C0:lI101|H107242B00
+107242B00:lI97|H1072430C0
+1072430C0:lI109|N
+10721EE70:lH107222340|N
+107222340:lI109|H1072254E8
+1072254E8:lI101|H107228340
+107228340:lI103|H10722AD88
+10722AD88:lI97|H10722D4A0
+10722D4A0:lI99|H10722F938
+10722F938:lI111|H107231AD0
+107231AD0:lI95|H107233958
+107233958:lI98|H1072354F0
+1072354F0:lI105|H107236E28
+107236E28:lI110|H107238520
+107238520:lI97|H107239A38
+107239A38:lI114|H10723ADF0
+10723ADF0:lI121|H10723BF20
+10723BF20:lI95|H10723CED0
+10723CED0:lI116|H10723DCD0
+10723DCD0:lI101|H10723E940
+10723E940:lI114|H10723F4B0
+10723F4B0:lI109|H10723FED0
+10723FED0:lI95|H1072407C0
+1072407C0:lI105|H107240FC0
+107240FC0:lI100|H107241710
+107241710:lI95|H107241E20
+107241E20:lI103|H1072424D0
+1072424D0:lI101|H107242B10
+107242B10:lI110|H1072430D0
+1072430D0:lI46|H107243630
+107243630:lI98|H107243B50
+107243B50:lI101|H107244040
+107244040:lI97|H107244520
+107244520:lI109|N
+107218378:Mn3:H10721B8B8,H10721B8C8,H10721B8D8
+10721B8B8:lH10721EE18|N
+10721EE18:lI109|H1072222E0
+1072222E0:lI101|H107225488
+107225488:lI103|H1072282E0
+1072282E0:lI97|H10722AD28
+10722AD28:lI99|H10722D440
+10722D440:lI111|H10722F8D8
+10722F8D8:lI95|H107231A70
+107231A70:lI101|H1072338F8
+1072338F8:lI110|H107235490
+107235490:lI99|H107236DC8
+107236DC8:lI111|H1072384C0
+1072384C0:lI100|H1072399D8
+1072399D8:lI101|H10723AD90
+10723AD90:lI114|H10723BEC0
+10723BEC0:lI46|H10723CE70
+10723CE70:lI98|H10723DC70
+10723DC70:lI101|H10723E8E0
+10723E8E0:lI97|H10723F460
+10723F460:lI109|N
+10721B8D8:Mn1:H10721EE38
+10721EE38:Mn2:H107222300,H107222310
+107222300:lH1072254A8|N
+1072254A8:lI109|H107228300
+107228300:lI101|H10722AD48
+10722AD48:lI103|H10722D460
+10722D460:lI97|H10722F8F8
+10722F8F8:lI99|H107231A90
+107231A90:lI111|H107233918
+107233918:lI95|H1072354B0
+1072354B0:lI116|H107236DE8
+107236DE8:lI99|H1072384E0
+1072384E0:lI112|H1072399F8
+1072399F8:lI95|H10723ADB0
+10723ADB0:lI115|H10723BEE0
+10723BEE0:lI117|H10723CE90
+10723CE90:lI112|H10723DC90
+10723DC90:lI46|H10723E900
+10723E900:lI98|H10723F470
+10723F470:lI101|H10723FE90
+10723FE90:lI97|H107240780
+107240780:lI109|N
+107222310:lH1072254B8|N
+1072254B8:lI109|H107228310
+107228310:lI101|H10722AD58
+10722AD58:lI103|H10722D470
+10722D470:lI97|H10722F908
+10722F908:lI99|H107231AA0
+107231AA0:lI111|H107233928
+107233928:lI95|H1072354C0
+1072354C0:lI116|H107236DF8
+107236DF8:lI101|H1072384F0
+1072384F0:lI120|H107239A08
+107239A08:lI116|H10723ADC0
+10723ADC0:lI95|H10723BEF0
+10723BEF0:lI109|H10723CEA0
+10723CEA0:lI105|H10723DCA0
+10723DCA0:lI110|H10723E910
+10723E910:lI105|H10723F480
+10723F480:lI95|H10723FEA0
+10723FEA0:lI112|H107240790
+107240790:lI97|H107240F90
+107240F90:lI114|H1072416E0
+1072416E0:lI115|H107241DF0
+107241DF0:lI101|H1072424A0
+1072424A0:lI114|H107242AE0
+107242AE0:lI46|H1072430A0
+1072430A0:lI98|H107243610
+107243610:lI101|H107243B30
+107243B30:lI97|H107244020
+107244020:lI109|N
+10721B8C8:lH10721EE28|N
+10721EE28:lI109|H1072222F0
+1072222F0:lI101|H107225498
+107225498:lI103|H1072282F0
+1072282F0:lI97|H10722AD38
+10722AD38:lI99|H10722D450
+10722D450:lI111|H10722F8E8
+10722F8E8:lI95|H107231A80
+107231A80:lI99|H107233908
+107233908:lI111|H1072354A0
+1072354A0:lI110|H107236DD8
+107236DD8:lI102|H1072384D0
+1072384D0:lI105|H1072399E8
+1072399E8:lI103|H10723ADA0
+10723ADA0:lI46|H10723BED0
+10723BED0:lI98|H10723CE80
+10723CE80:lI101|H10723DC80
+10723DC80:lI97|H10723E8F0
+10723E8F0:lI109|N
+107218350:Mn4:H10721B870,H10721B888,H10721B898,H10721B8A8
+10721B870:Mn2:H10721EDC0,H10721EDD0
+10721EDC0:lH107222280|N
+107222280:lI109|H107225428
+107225428:lI101|H107228280
+107228280:lI103|H10722ACC8
+10722ACC8:lI97|H10722D3E0
+10722D3E0:lI99|H10722F878
+10722F878:lI111|H107231A10
+107231A10:lI95|H107233898
+107233898:lI109|H107235430
+107235430:lI101|H107236D68
+107236D68:lI115|H107238460
+107238460:lI115|H107239978
+107239978:lI101|H10723AD30
+10723AD30:lI110|H10723BE60
+10723BE60:lI103|H10723CE10
+10723CE10:lI101|H10723DC10
+10723DC10:lI114|H10723E880
+10723E880:lI46|H10723F400
+10723F400:lI98|H10723FE30
+10723FE30:lI101|H107240720
+107240720:lI97|H107240F40
+107240F40:lI109|N
+10721EDD0:lH107222290|N
+107222290:lI109|H107225438
+107225438:lI101|H107228290
+107228290:lI103|H10722ACD8
+10722ACD8:lI97|H10722D3F0
+10722D3F0:lI99|H10722F888
+10722F888:lI111|H107231A20
+107231A20:lI95|H1072338A8
+1072338A8:lI98|H107235440
+107235440:lI105|H107236D78
+107236D78:lI110|H107238470
+107238470:lI97|H107239988
+107239988:lI114|H10723AD40
+10723AD40:lI121|H10723BE70
+10723BE70:lI95|H10723CE20
+10723CE20:lI116|H10723DC20
+10723DC20:lI114|H10723E890
+10723E890:lI97|H10723F410
+10723F410:lI110|H10723FE40
+10723FE40:lI115|H107240730
+107240730:lI102|H107240F50
+107240F50:lI111|H1072416A0
+1072416A0:lI114|H107241DB0
+107241DB0:lI109|H107242460
+107242460:lI101|H107242AB0
+107242AB0:lI114|H107243070
+107243070:lI95|H1072435E0
+1072435E0:lI118|H107243B10
+107243B10:lI50|H107244000
+107244000:lI46|H1072444F0
+1072444F0:lI98|H1072449A0
+1072449A0:lI101|H107244E10
+107244E10:lI97|H107245270
+107245270:lI109|N
+10721B8A8:Mn1:H10721EE00
+10721EE00:Mn2:H1072222C0,H1072222D0
+1072222C0:lH107225468|N
+107225468:lI109|H1072282C0
+1072282C0:lI101|H10722AD08
+10722AD08:lI103|H10722D420
+10722D420:lI97|H10722F8B8
+10722F8B8:lI99|H107231A50
+107231A50:lI111|H1072338D8
+1072338D8:lI95|H107235470
+107235470:lI98|H107236DA8
+107236DA8:lI105|H1072384A0
+1072384A0:lI110|H1072399B8
+1072399B8:lI97|H10723AD70
+10723AD70:lI114|H10723BEA0
+10723BEA0:lI121|H10723CE50
+10723CE50:lI95|H10723DC50
+10723DC50:lI101|H10723E8C0
+10723E8C0:lI110|H10723F440
+10723F440:lI99|H10723FE70
+10723FE70:lI111|H107240760
+107240760:lI100|H107240F70
+107240F70:lI101|H1072416C0
+1072416C0:lI114|H107241DD0
+107241DD0:lI46|H107242480
+107242480:lI98|H107242AD0
+107242AD0:lI101|H107243090
+107243090:lI97|H107243600
+107243600:lI109|N
+1072222D0:lH107225478|N
+107225478:lI109|H1072282D0
+1072282D0:lI101|H10722AD18
+10722AD18:lI103|H10722D430
+10722D430:lI97|H10722F8C8
+10722F8C8:lI99|H107231A60
+107231A60:lI111|H1072338E8
+1072338E8:lI95|H107235480
+107235480:lI99|H107236DB8
+107236DB8:lI111|H1072384B0
+1072384B0:lI110|H1072399C8
+1072399C8:lI102|H10723AD80
+10723AD80:lI105|H10723BEB0
+10723BEB0:lI103|H10723CE60
+10723CE60:lI95|H10723DC60
+10723DC60:lI109|H10723E8D0
+10723E8D0:lI105|H10723F450
+10723F450:lI115|H10723FE80
+10723FE80:lI99|H107240770
+107240770:lI46|H107240F80
+107240F80:lI98|H1072416D0
+1072416D0:lI101|H107241DE0
+107241DE0:lI97|H107242490
+107242490:lI109|N
+10721B898:lH10721EDF0|N
+10721EDF0:lI109|H1072222B0
+1072222B0:lI101|H107225458
+107225458:lI103|H1072282B0
+1072282B0:lI97|H10722ACF8
+10722ACF8:lI99|H10722D410
+10722D410:lI111|H10722F8A8
+10722F8A8:lI95|H107231A40
+107231A40:lI112|H1072338C8
+1072338C8:lI114|H107235460
+107235460:lI101|H107236D98
+107236D98:lI116|H107238490
+107238490:lI116|H1072399A8
+1072399A8:lI121|H10723AD60
+10723AD60:lI95|H10723BE90
+10723BE90:lI116|H10723CE40
+10723CE40:lI101|H10723DC40
+10723DC40:lI120|H10723E8B0
+10723E8B0:lI116|H10723F430
+10723F430:lI95|H10723FE60
+10723FE60:lI101|H107240750
+107240750:lI110|H107240F60
+107240F60:lI99|H1072416B0
+1072416B0:lI111|H107241DC0
+107241DC0:lI100|H107242470
+107242470:lI101|H107242AC0
+107242AC0:lI114|H107243080
+107243080:lI46|H1072435F0
+1072435F0:lI98|H107243B20
+107243B20:lI101|H107244010
+107244010:lI97|H107244500
+107244500:lI109|N
+10721B888:lH10721EDE0|N
+10721EDE0:lI109|H1072222A0
+1072222A0:lI101|H107225448
+107225448:lI103|H1072282A0
+1072282A0:lI97|H10722ACE8
+10722ACE8:lI99|H10722D400
+10722D400:lI111|H10722F898
+10722F898:lI95|H107231A30
+107231A30:lI116|H1072338B8
+1072338B8:lI114|H107235450
+107235450:lI97|H107236D88
+107236D88:lI110|H107238480
+107238480:lI115|H107239998
+107239998:lI95|H10723AD50
+10723AD50:lI115|H10723BE80
+10723BE80:lI117|H10723CE30
+10723CE30:lI112|H10723DC30
+10723DC30:lI46|H10723E8A0
+10723E8A0:lI98|H10723F420
+10723F420:lI101|H10723FE50
+10723FE50:lI97|H107240740
+107240740:lI109|N
+107218320:Mn5:H10721B820,H10721B830,H10721B840,H10721B850,H10721B860
+10721B820:lH10721ED70|N
+10721ED70:lI109|H107222230
+107222230:lI101|H1072253D8
+1072253D8:lI103|H107228230
+107228230:lI97|H10722AC78
+10722AC78:lI99|H10722D390
+10722D390:lI111|H10722F828
+10722F828:lI95|H1072319C0
+1072319C0:lI117|H107233848
+107233848:lI100|H1072353E0
+1072353E0:lI112|H107236D18
+107236D18:lI46|H107238410
+107238410:lI98|H107239928
+107239928:lI101|H10723ACE0
+10723ACE0:lI97|H10723BE10
+10723BE10:lI109|N
+10721B860:lH10721EDB0|N
+10721EDB0:lI109|H107222270
+107222270:lI101|H107225418
+107225418:lI103|H107228270
+107228270:lI97|H10722ACB8
+10722ACB8:lI99|H10722D3D0
+10722D3D0:lI111|H10722F868
+10722F868:lI95|H107231A00
+107231A00:lI98|H107233888
+107233888:lI101|H107235420
+107235420:lI114|H107236D58
+107236D58:lI95|H107238450
+107238450:lI109|H107239968
+107239968:lI101|H10723AD20
+10723AD20:lI100|H10723BE50
+10723BE50:lI105|H10723CE00
+10723CE00:lI97|H10723DC00
+10723DC00:lI95|H10723E870
+10723E870:lI103|H10723F3F0
+10723F3F0:lI97|H10723FE20
+10723FE20:lI116|H107240710
+107240710:lI101|H107240F30
+107240F30:lI119|H107241690
+107241690:lI97|H107241DA0
+107241DA0:lI121|H107242450
+107242450:lI95|H107242AA0
+107242AA0:lI99|H107243060
+107243060:lI111|H1072435D0
+1072435D0:lI110|H107243B00
+107243B00:lI116|H107243FF0
+107243FF0:lI114|H1072444E0
+1072444E0:lI111|H107244990
+107244990:lI108|H107244E00
+107244E00:lI95|H107245260
+107245260:lI118|H1072456B0
+1072456B0:lI49|H107245AB0
+107245AB0:lI46|H107245E60
+107245E60:lI98|H1072461F0
+1072461F0:lI101|H107246580
+107246580:lI97|H107246910
+107246910:lI109|N
+10721B850:lH10721EDA0|N
+10721EDA0:lI109|H107222260
+107222260:lI101|H107225408
+107225408:lI103|H107228260
+107228260:lI97|H10722ACA8
+10722ACA8:lI99|H10722D3C0
+10722D3C0:lI111|H10722F858
+10722F858:lI95|H1072319F0
+1072319F0:lI116|H107233878
+107233878:lI99|H107235410
+107235410:lI112|H107236D48
+107236D48:lI95|H107238440
+107238440:lI99|H107239958
+107239958:lI111|H10723AD10
+10723AD10:lI110|H10723BE40
+10723BE40:lI110|H10723CDF0
+10723CDF0:lI101|H10723DBF0
+10723DBF0:lI99|H10723E860
+10723E860:lI116|H10723F3E0
+10723F3E0:lI105|H10723FE10
+10723FE10:lI111|H107240700
+107240700:lI110|H107240F20
+107240F20:lI46|H107241680
+107241680:lI98|H107241D90
+107241D90:lI101|H107242440
+107242440:lI97|H107242A90
+107242A90:lI109|N
+10721B840:lH10721ED90|N
+10721ED90:lI109|H107222250
+107222250:lI101|H1072253F8
+1072253F8:lI103|H107228250
+107228250:lI97|H10722AC98
+10722AC98:lI99|H10722D3B0
+10722D3B0:lI111|H10722F848
+10722F848:lI95|H1072319E0
+1072319E0:lI116|H107233868
+107233868:lI101|H107235400
+107235400:lI120|H107236D38
+107236D38:lI116|H107238430
+107238430:lI95|H107239948
+107239948:lI115|H10723AD00
+10723AD00:lI99|H10723BE30
+10723BE30:lI97|H10723CDE0
+10723CDE0:lI110|H10723DBE0
+10723DBE0:lI110|H10723E850
+10723E850:lI101|H10723F3D0
+10723F3D0:lI114|H10723FE00
+10723FE00:lI46|H1072406F0
+1072406F0:lI98|H107240F10
+107240F10:lI101|H107241670
+107241670:lI97|H107241D80
+107241D80:lI109|N
+10721B830:lH10721ED80|N
+10721ED80:lI109|H107222240
+107222240:lI101|H1072253E8
+1072253E8:lI103|H107228240
+107228240:lI97|H10722AC88
+10722AC88:lI99|H10722D3A0
+10722D3A0:lI111|H10722F838
+10722F838:lI95|H1072319D0
+1072319D0:lI117|H107233858
+107233858:lI100|H1072353F0
+1072353F0:lI112|H107236D28
+107236D28:lI95|H107238420
+107238420:lI115|H107239938
+107239938:lI101|H10723ACF0
+10723ACF0:lI114|H10723BE20
+10723BE20:lI118|H10723CDD0
+10723CDD0:lI101|H10723DBD0
+10723DBD0:lI114|H10723E840
+10723E840:lI46|H10723F3C0
+10723F3C0:lI98|H10723FDF0
+10723FDF0:lI101|H1072406E0
+1072406E0:lI97|H107240F00
+107240F00:lI109|N
+107214EB0:lI47|H1072182F0
+1072182F0:lI111|H10721B7E0
+10721B7E0:lI112|H10721ED30
+10721ED30:lI116|H1072221F0
+1072221F0:lI47|H107225398
+107225398:lI104|H1072281F0
+1072281F0:lI111|H10722AC38
+10722AC38:lI109|H10722D350
+10722D350:lI101|H10722F7E8
+10722F7E8:lI98|H107231980
+107231980:lI114|H107233808
+107233808:lI101|H1072353A0
+1072353A0:lI119|H107236CD8
+107236CD8:lI47|H1072383D0
+1072383D0:lI67|H1072398E8
+1072398E8:lI101|H10723ACA0
+10723ACA0:lI108|H10723BDD0
+10723BDD0:lI108|H10723CD90
+10723CD90:lI97|H10723DB90
+10723DB90:lI114|H10723E810
+10723E810:lI47|H10723F390
+10723F390:lI101|H10723FDC0
+10723FDC0:lI114|H1072406B0
+1072406B0:lI108|H107240ED0
+107240ED0:lI97|H107241640
+107241640:lI110|H107241D50
+107241D50:lI103|H107242410
+107242410:lI47|H107242A60
+107242A60:lI50|H107243040
+107243040:lI54|H1072435B0
+1072435B0:lI46|H107243AE0
+107243AE0:lI48|H107243FD0
+107243FD0:lI46|H1072444C0
+1072444C0:lI50|H107244970
+107244970:lI47|H107244DE0
+107244DE0:lI108|H107245240
+107245240:lI105|H107245690
+107245690:lI98|H107245A90
+107245A90:lI47|H107245E40
+107245E40:lI101|H1072461D0
+1072461D0:lI114|H107246560
+107246560:lI108|H1072468F0
+1072468F0:lI97|H107246C80
+107246C80:lI110|H107246FB0
+107246FB0:lI103|H1072472D0
+1072472D0:lI47|H1072475E0
+1072475E0:lI108|H1072478E0
+1072478E0:lI105|H107247BE0
+107247BE0:lI98|H107247EC0
+107247EC0:lI47|H107248180
+107248180:lI109|H107248440
+107248440:lI101|H1072486F0
+1072486F0:lI103|H1072489A0
+1072489A0:lI97|H107248C20
+107248C20:lI99|H107248E90
+107248E90:lI111|H107249100
+107249100:lI45|H107249360
+107249360:lI52|H1072495C0
+1072495C0:lI46|H107249810
+107249810:lI52|H107249A30
+107249A30:lI46|H107249C30
+107249C30:lI52|H107249E10
+107249E10:lI47|H280052C20
+107211A88:lH107214F48|H107214F60
+107214F48:t2:H107218548,H107218558
+107218558:Mh41:10:H10721BBD8,H10721BBF8,H10721BC20,H10721BC50,H10721BC68,H10721BC78,H10721BCA8,H10721BCD8,H10721BCF8,H10721BD18,H10721BD48,H10721BD88,H10721BDA0,H10721BDC8,H10721BDF8,H10721BE10
+10721BBD8:Mn3:H10721F170,H10721F188,H10721F198
+10721F170:Mn2:H107222640,H107222650
+107222640:lH1072257E8|N
+1072257E8:lI105|H107228640
+107228640:lI110|H10722B088
+10722B088:lI101|H10722D7A0
+10722D7A0:lI116|H10722FC38
+10722FC38:lI115|H107231DD0
+107231DD0:lI95|H107233C58
+107233C58:lI115|H1072357F0
+1072357F0:lI101|H107237118
+107237118:lI114|H107238810
+107238810:lI118|H107239D08
+107239D08:lI105|H10723B0C0
+10723B0C0:lI99|H10723C1F0
+10723C1F0:lI101|H10723D170
+10723D170:lI46|H10723DF60
+10723DF60:lI98|H10723EBC0
+10723EBC0:lI101|H10723F720
+10723F720:lI97|H107240120
+107240120:lI109|N
+107222650:lH1072257F8|N
+1072257F8:lI104|H107228650
+107228650:lI116|H10722B098
+10722B098:lI116|H10722D7B0
+10722D7B0:lI112|H10722FC48
+10722FC48:lI99|H107231DE0
+107231DE0:lI95|H107233C68
+107233C68:lI114|H107235800
+107235800:lI101|H107237128
+107237128:lI115|H107238820
+107238820:lI112|H107239D18
+107239D18:lI111|H10723B0D0
+10723B0D0:lI110|H10723C200
+10723C200:lI115|H10723D180
+10723D180:lI101|H10723DF70
+10723DF70:lI46|H10723EBD0
+10723EBD0:lI98|H10723F730
+10723F730:lI101|H107240130
+107240130:lI97|H107240A00
+107240A00:lI109|N
+10721F198:lH107222670|N
+107222670:lI104|H107225818
+107225818:lI116|H107228670
+107228670:lI116|H10722B0B8
+10722B0B8:lI112|H10722D7D0
+10722D7D0:lI100|H10722FC68
+10722FC68:lI95|H107231E00
+107231E00:lI114|H107233C88
+107233C88:lI101|H107235820
+107235820:lI115|H107237148
+107237148:lI112|H107238840
+107238840:lI111|H107239D38
+107239D38:lI110|H10723B0F0
+10723B0F0:lI115|H10723C220
+10723C220:lI101|H10723D1A0
+10723D1A0:lI46|H10723DF90
+10723DF90:lI98|H10723EBF0
+10723EBF0:lI101|H10723F750
+10723F750:lI97|H107240150
+107240150:lI109|N
+10721F188:lH107222660|N
+107222660:lI109|H107225808
+107225808:lI111|H107228660
+107228660:lI100|H10722B0A8
+10722B0A8:lI95|H10722D7C0
+10722D7C0:lI97|H10722FC58
+10722FC58:lI117|H107231DF0
+107231DF0:lI116|H107233C78
+107233C78:lI104|H107235810
+107235810:lI95|H107237138
+107237138:lI115|H107238830
+107238830:lI101|H107239D28
+107239D28:lI114|H10723B0E0
+10723B0E0:lI118|H10723C210
+10723C210:lI101|H10723D190
+10723D190:lI114|H10723DF80
+10723DF80:lI46|H10723EBE0
+10723EBE0:lI98|H10723F740
+10723F740:lI101|H107240140
+107240140:lI97|H107240A10
+107240A10:lI109|N
+10721BE10:Mn4:H10721F518,H10721F528,H10721F538,H10721F548
+10721F518:lH107222A10|N
+107222A10:lI109|H107225BB8
+107225BB8:lI111|H107228A10
+107228A10:lI100|H10722B458
+10722B458:lI95|H10722DB70
+10722DB70:lI115|H107230008
+107230008:lI101|H1072321A0
+1072321A0:lI99|H107234028
+107234028:lI117|H107235BC0
+107235BC0:lI114|H1072374E8
+1072374E8:lI105|H107238BA0
+107238BA0:lI116|H10723A088
+10723A088:lI121|H10723B400
+10723B400:lI95|H10723C520
+10723C520:lI115|H10723D3F0
+10723D3F0:lI101|H10723E190
+10723E190:lI114|H10723EDD0
+10723EDD0:lI118|H10723F8B0
+10723F8B0:lI101|H107240220
+107240220:lI114|H107240AB0
+107240AB0:lI46|H107241270
+107241270:lI98|H1072419A0
+1072419A0:lI101|H107242070
+107242070:lI97|H1072426E0
+1072426E0:lI109|N
+10721F548:lH107222A40|N
+107222A40:lI109|H107225BE8
+107225BE8:lI111|H107228A40
+107228A40:lI100|H10722B488
+10722B488:lI95|H10722DBA0
+10722DBA0:lI104|H107230038
+107230038:lI101|H1072321D0
+1072321D0:lI97|H107234058
+107234058:lI100|H107235BF0
+107235BF0:lI46|H107237518
+107237518:lI98|H107238BD0
+107238BD0:lI101|H10723A0B8
+10723A0B8:lI97|H10723B420
+10723B420:lI109|N
+10721F538:lH107222A30|N
+107222A30:lI109|H107225BD8
+107225BD8:lI111|H107228A30
+107228A30:lI100|H10722B478
+10722B478:lI95|H10722DB90
+10722DB90:lI108|H107230028
+107230028:lI111|H1072321C0
+1072321C0:lI103|H107234048
+107234048:lI46|H107235BE0
+107235BE0:lI98|H107237508
+107237508:lI101|H107238BC0
+107238BC0:lI97|H10723A0A8
+10723A0A8:lI109|N
+10721F528:lH107222A20|N
+107222A20:lI109|H107225BC8
+107225BC8:lI111|H107228A20
+107228A20:lI100|H10722B468
+10722B468:lI95|H10722DB80
+10722DB80:lI97|H107230018
+107230018:lI117|H1072321B0
+1072321B0:lI116|H107234038
+107234038:lI104|H107235BD0
+107235BD0:lI95|H1072374F8
+1072374F8:lI109|H107238BB0
+107238BB0:lI110|H10723A098
+10723A098:lI101|H10723B410
+10723B410:lI115|H10723C530
+10723C530:lI105|H10723D400
+10723D400:lI97|H10723E1A0
+10723E1A0:lI46|H10723EDE0
+10723EDE0:lI98|H10723F8C0
+10723F8C0:lI101|H107240230
+107240230:lI97|H107240AC0
+107240AC0:lI109|N
+10721BDF8:Mn2:H10721F4F0,H10721F508
+10721F4F0:Mn2:H1072229E0,H1072229F0
+1072229E0:lH107225B88|N
+107225B88:lI109|H1072289E0
+1072289E0:lI111|H10722B428
+10722B428:lI100|H10722DB40
+10722DB40:lI95|H10722FFD8
+10722FFD8:lI97|H107232170
+107232170:lI99|H107233FF8
+107233FF8:lI116|H107235B90
+107235B90:lI105|H1072374B8
+1072374B8:lI111|H107238B80
+107238B80:lI110|H10723A068
+10723A068:lI115|H10723B3E0
+10723B3E0:lI46|H10723C500
+10723C500:lI98|H10723D3E0
+10723D3E0:lI101|H10723E180
+10723E180:lI97|H10723EDC0
+10723EDC0:lI109|N
+1072229F0:lH107225B98|N
+107225B98:lI109|H1072289F0
+1072289F0:lI111|H10722B438
+10722B438:lI100|H10722DB50
+10722DB50:lI95|H10722FFE8
+10722FFE8:lI97|H107232180
+107232180:lI117|H107234008
+107234008:lI116|H107235BA0
+107235BA0:lI104|H1072374C8
+1072374C8:lI46|H107238B90
+107238B90:lI98|H10723A078
+10723A078:lI101|H10723B3F0
+10723B3F0:lI97|H10723C510
+10723C510:lI109|N
+10721F508:lH107222A00|N
+107222A00:lI104|H107225BA8
+107225BA8:lI116|H107228A00
+107228A00:lI116|H10722B448
+10722B448:lI112|H10722DB60
+10722DB60:lI99|H10722FFF8
+10722FFF8:lI46|H107232190
+107232190:lI98|H107234018
+107234018:lI101|H107235BB0
+107235BB0:lI97|H1072374D8
+1072374D8:lI109|N
+10721BDC8:Mn5:H10721F4A0,H10721F4B0,H10721F4C0,H10721F4D0,H10721F4E0
+10721F4A0:lH107222990|N
+107222990:lI104|H107225B38
+107225B38:lI116|H107228990
+107228990:lI116|H10722B3D8
+10722B3D8:lI112|H10722DAF0
+10722DAF0:lI99|H10722FF88
+10722FF88:lI95|H107232120
+107232120:lI104|H107233FA8
+107233FA8:lI97|H107235B40
+107235B40:lI110|H107237468
+107237468:lI100|H107238B50
+107238B50:lI108|H10723A038
+10723A038:lI101|H10723B3B0
+10723B3B0:lI114|H10723C4D0
+10723C4D0:lI95|H10723D3B0
+10723D3B0:lI115|H10723E150
+10723E150:lI117|H10723ED90
+10723ED90:lI112|H10723F880
+10723F880:lI46|H107240200
+107240200:lI98|H107240AA0
+107240AA0:lI101|H107241260
+107241260:lI97|H107241990
+107241990:lI109|N
+10721F4E0:lH1072229D0|N
+1072229D0:lI105|H107225B78
+107225B78:lI110|H1072289D0
+1072289D0:lI101|H10722B418
+10722B418:lI116|H10722DB30
+10722DB30:lI115|H10722FFC8
+10722FFC8:lI46|H107232160
+107232160:lI98|H107233FE8
+107233FE8:lI101|H107235B80
+107235B80:lI97|H1072374A8
+1072374A8:lI109|N
+10721F4D0:lH1072229C0|N
+1072229C0:lI104|H107225B68
+107225B68:lI116|H1072289C0
+1072289C0:lI116|H10722B408
+10722B408:lI112|H10722DB20
+10722DB20:lI100|H10722FFB8
+10722FFB8:lI95|H107232150
+107232150:lI109|H107233FD8
+107233FD8:lI105|H107235B70
+107235B70:lI115|H107237498
+107237498:lI99|H107238B70
+107238B70:lI95|H10723A058
+10723A058:lI115|H10723B3D0
+10723B3D0:lI117|H10723C4F0
+10723C4F0:lI112|H10723D3D0
+10723D3D0:lI46|H10723E170
+10723E170:lI98|H10723EDB0
+10723EDB0:lI101|H10723F8A0
+10723F8A0:lI97|H107240210
+107240210:lI109|N
+10721F4C0:lH1072229B0|N
+1072229B0:lI104|H107225B58
+107225B58:lI116|H1072289B0
+1072289B0:lI116|H10722B3F8
+10722B3F8:lI112|H10722DB10
+10722DB10:lI100|H10722FFA8
+10722FFA8:lI46|H107232140
+107232140:lI98|H107233FC8
+107233FC8:lI101|H107235B60
+107235B60:lI97|H107237488
+107237488:lI109|N
+10721F4B0:lH1072229A0|N
+1072229A0:lI104|H107225B48
+107225B48:lI116|H1072289A0
+1072289A0:lI116|H10722B3E8
+10722B3E8:lI112|H10722DB00
+10722DB00:lI100|H10722FF98
+10722FF98:lI95|H107232130
+107232130:lI109|H107233FB8
+107233FB8:lI97|H107235B50
+107235B50:lI110|H107237478
+107237478:lI97|H107238B60
+107238B60:lI103|H10723A048
+10723A048:lI101|H10723B3C0
+10723B3C0:lI114|H10723C4E0
+10723C4E0:lI46|H10723D3C0
+10723D3C0:lI98|H10723E160
+10723E160:lI101|H10723EDA0
+10723EDA0:lI97|H10723F890
+10723F890:lI109|N
+10721BDA0:Mn4:H10721F460,H10721F470,H10721F480,H10721F490
+10721F460:lH107222950|N
+107222950:lI104|H107225AF8
+107225AF8:lI116|H107228950
+107228950:lI116|H10722B398
+10722B398:lI112|H10722DAB0
+10722DAB0:lI100|H10722FF48
+10722FF48:lI95|H1072320E0
+1072320E0:lI115|H107233F68
+107233F68:lI117|H107235B00
+107235B00:lI112|H107237428
+107237428:lI46|H107238B10
+107238B10:lI98|H107239FF8
+107239FF8:lI101|H10723B380
+10723B380:lI97|H10723C4A0
+10723C4A0:lI109|N
+10721F490:lH107222980|N
+107222980:lI109|H107225B28
+107225B28:lI111|H107228980
+107228980:lI100|H10722B3C8
+10722B3C8:lI95|H10722DAE0
+10722DAE0:lI103|H10722FF78
+10722FF78:lI101|H107232110
+107232110:lI116|H107233F98
+107233F98:lI46|H107235B30
+107235B30:lI98|H107237458
+107237458:lI101|H107238B40
+107238B40:lI97|H10723A028
+10723A028:lI109|N
+10721F480:lH107222970|N
+107222970:lI104|H107225B18
+107225B18:lI116|H107228970
+107228970:lI116|H10722B3B8
+10722B3B8:lI112|H10722DAD0
+10722DAD0:lI95|H10722FF68
+10722FF68:lI114|H107232100
+107232100:lI101|H107233F88
+107233F88:lI115|H107235B20
+107235B20:lI112|H107237448
+107237448:lI111|H107238B30
+107238B30:lI110|H10723A018
+10723A018:lI115|H10723B3A0
+10723B3A0:lI101|H10723C4C0
+10723C4C0:lI46|H10723D3A0
+10723D3A0:lI98|H10723E140
+10723E140:lI101|H10723ED80
+10723ED80:lI97|H10723F870
+10723F870:lI109|N
+10721F470:lH107222960|N
+107222960:lI104|H107225B08
+107225B08:lI116|H107228960
+107228960:lI116|H10722B3A8
+10722B3A8:lI112|H10722DAC0
+10722DAC0:lI100|H10722FF58
+10722FF58:lI95|H1072320F0
+1072320F0:lI108|H107233F78
+107233F78:lI111|H107235B10
+107235B10:lI103|H107237438
+107237438:lI103|H107238B20
+107238B20:lI101|H10723A008
+10723A008:lI114|H10723B390
+10723B390:lI46|H10723C4B0
+10723C4B0:lI98|H10723D390
+10723D390:lI101|H10723E130
+10723E130:lI97|H10723ED70
+10723ED70:lI109|N
+10721BD88:Mn2:H10721F440,H10721F450
+10721F440:lH107222930|N
+107222930:lI109|H107225AD8
+107225AD8:lI111|H107228930
+107228930:lI100|H10722B378
+10722B378:lI95|H10722DA90
+10722DA90:lI100|H10722FF28
+10722FF28:lI105|H1072320C0
+1072320C0:lI114|H107233F48
+107233F48:lI46|H107235AE0
+107235AE0:lI98|H107237408
+107237408:lI101|H107238AF0
+107238AF0:lI97|H107239FD8
+107239FD8:lI109|N
+10721F450:lH107222940|N
+107222940:lI104|H107225AE8
+107225AE8:lI116|H107228940
+107228940:lI116|H10722B388
+10722B388:lI112|H10722DAA0
+10722DAA0:lI95|H10722FF38
+10722FF38:lI117|H1072320D0
+1072320D0:lI116|H107233F58
+107233F58:lI105|H107235AF0
+107235AF0:lI108|H107237418
+107237418:lI46|H107238B00
+107238B00:lI98|H107239FE8
+107239FE8:lI101|H10723B370
+10723B370:lI97|H10723C490
+10723C490:lI109|N
+10721BD48:Mn7:H10721F3C8,H10721F3D8,H10721F3E8,H10721F3F8,H10721F410,H10721F420,H10721F430
+10721F3C8:lH1072228B0|N
+1072228B0:lI104|H107225A58
+107225A58:lI116|H1072288B0
+1072288B0:lI116|H10722B2F8
+10722B2F8:lI112|H10722DA10
+10722DA10:lI100|H10722FEA8
+10722FEA8:lI95|H107232040
+107232040:lI101|H107233EC8
+107233EC8:lI120|H107235A60
+107235A60:lI97|H107237388
+107237388:lI109|H107238A70
+107238A70:lI112|H107239F58
+107239F58:lI108|H10723B2F0
+10723B2F0:lI101|H10723C410
+10723C410:lI46|H10723D330
+10723D330:lI98|H10723E100
+10723E100:lI101|H10723ED40
+10723ED40:lI97|H10723F850
+10723F850:lI109|N
+10721F430:lH107222920|N
+107222920:lI104|H107225AC8
+107225AC8:lI116|H107228920
+107228920:lI116|H10722B368
+10722B368:lI112|H10722DA80
+10722DA80:lI100|H10722FF18
+10722FF18:lI95|H1072320B0
+1072320B0:lI102|H107233F38
+107233F38:lI105|H107235AD0
+107235AD0:lI108|H1072373F8
+1072373F8:lI101|H107238AE0
+107238AE0:lI46|H107239FC8
+107239FC8:lI98|H10723B360
+10723B360:lI101|H10723C480
+10723C480:lI97|H10723D380
+10723D380:lI109|N
+10721F420:lH107222910|N
+107222910:lI104|H107225AB8
+107225AB8:lI116|H107228910
+107228910:lI116|H10722B358
+10722B358:lI112|H10722DA70
+10722DA70:lI99|H10722FF08
+10722FF08:lI95|H1072320A0
+1072320A0:lI99|H107233F28
+107233F28:lI111|H107235AC0
+107235AC0:lI111|H1072373E8
+1072373E8:lI107|H107238AD0
+107238AD0:lI105|H107239FB8
+107239FB8:lI101|H10723B350
+10723B350:lI46|H10723C470
+10723C470:lI98|H10723D370
+10723D370:lI101|H10723E120
+10723E120:lI97|H10723ED60
+10723ED60:lI109|N
+10721F410:lH107222900|N
+107222900:lI104|H107225AA8
+107225AA8:lI116|H107228900
+107228900:lI116|H10722B348
+10722B348:lI112|H10722DA60
+10722DA60:lI99|H10722FEF8
+10722FEF8:lI95|H107232090
+107232090:lI114|H107233F18
+107233F18:lI101|H107235AB0
+107235AB0:lI113|H1072373D8
+1072373D8:lI117|H107238AC0
+107238AC0:lI101|H107239FA8
+107239FA8:lI115|H10723B340
+10723B340:lI116|H10723C460
+10723C460:lI46|H10723D360
+10723D360:lI98|H10723E110
+10723E110:lI101|H10723ED50
+10723ED50:lI97|H10723F860
+10723F860:lI109|N
+10721F3F8:Mn2:H1072228E0,H1072228F0
+1072228E0:lH107225A88|N
+107225A88:lI104|H1072288E0
+1072288E0:lI116|H10722B328
+10722B328:lI116|H10722DA40
+10722DA40:lI112|H10722FED8
+10722FED8:lI100|H107232070
+107232070:lI95|H107233EF8
+107233EF8:lI99|H107235A90
+107235A90:lI103|H1072373B8
+1072373B8:lI105|H107238AA0
+107238AA0:lI46|H107239F88
+107239F88:lI98|H10723B320
+10723B320:lI101|H10723C440
+10723C440:lI97|H10723D340
+10723D340:lI109|N
+1072228F0:lH107225A98|N
+107225A98:lI109|H1072288F0
+1072288F0:lI111|H10722B338
+10722B338:lI100|H10722DA50
+10722DA50:lI95|H10722FEE8
+10722FEE8:lI97|H107232080
+107232080:lI108|H107233F08
+107233F08:lI105|H107235AA0
+107235AA0:lI97|H1072373C8
+1072373C8:lI115|H107238AB0
+107238AB0:lI46|H107239F98
+107239F98:lI98|H10723B330
+10723B330:lI101|H10723C450
+10723C450:lI97|H10723D350
+10723D350:lI109|N
+10721F3E8:lH1072228D0|N
+1072228D0:lI105|H107225A78
+107225A78:lI110|H1072288D0
+1072288D0:lI101|H10722B318
+10722B318:lI116|H10722DA30
+10722DA30:lI115|H10722FEC8
+10722FEC8:lI95|H107232060
+107232060:lI97|H107233EE8
+107233EE8:lI112|H107235A80
+107235A80:lI112|H1072373A8
+1072373A8:lI46|H107238A90
+107238A90:lI98|H107239F78
+107239F78:lI101|H10723B310
+10723B310:lI97|H10723C430
+10723C430:lI109|N
+10721F3D8:lH1072228C0|N
+1072228C0:lI109|H107225A68
+107225A68:lI111|H1072288C0
+1072288C0:lI100|H10722B308
+10722B308:lI95|H10722DA20
+10722DA20:lI114|H10722FEB8
+10722FEB8:lI97|H107232050
+107232050:lI110|H107233ED8
+107233ED8:lI103|H107235A70
+107235A70:lI101|H107237398
+107237398:lI46|H107238A80
+107238A80:lI98|H107239F68
+107239F68:lI101|H10723B300
+10723B300:lI97|H10723C420
+10723C420:lI109|N
+10721BD18:Mn5:H10721F378,H10721F388,H10721F398,H10721F3A8,H10721F3B8
+10721F378:lH107222860|N
+107222860:lI104|H107225A08
+107225A08:lI116|H107228860
+107228860:lI116|H10722B2A8
+10722B2A8:lI112|H10722D9C0
+10722D9C0:lI99|H10722FE58
+10722FE58:lI95|H107231FF0
+107231FF0:lI109|H107233E78
+107233E78:lI97|H107235A10
+107235A10:lI110|H107237338
+107237338:lI97|H107238A20
+107238A20:lI103|H107239F08
+107239F08:lI101|H10723B2A0
+10723B2A0:lI114|H10723C3C0
+10723C3C0:lI46|H10723D2E0
+10723D2E0:lI98|H10723E0C0
+10723E0C0:lI101|H10723ED00
+10723ED00:lI97|H10723F820
+10723F820:lI109|N
+10721F3B8:lH1072228A0|N
+1072228A0:lI109|H107225A48
+107225A48:lI111|H1072288A0
+1072288A0:lI100|H10722B2E8
+10722B2E8:lI95|H10722DA00
+10722DA00:lI115|H10722FE98
+10722FE98:lI101|H107232030
+107232030:lI99|H107233EB8
+107233EB8:lI117|H107235A50
+107235A50:lI114|H107237378
+107237378:lI105|H107238A60
+107238A60:lI116|H107239F48
+107239F48:lI121|H10723B2E0
+10723B2E0:lI46|H10723C400
+10723C400:lI98|H10723D320
+10723D320:lI101|H10723E0F0
+10723E0F0:lI97|H10723ED30
+10723ED30:lI109|N
+10721F3A8:lH107222890|N
+107222890:lI104|H107225A38
+107225A38:lI116|H107228890
+107228890:lI116|H10722B2D8
+10722B2D8:lI112|H10722D9F0
+10722D9F0:lI100|H10722FE88
+10722FE88:lI95|H107232020
+107232020:lI99|H107233EA8
+107233EA8:lI111|H107235A40
+107235A40:lI110|H107237368
+107237368:lI102|H107238A50
+107238A50:lI46|H107239F38
+107239F38:lI98|H10723B2D0
+10723B2D0:lI101|H10723C3F0
+10723C3F0:lI97|H10723D310
+10723D310:lI109|N
+10721F398:lH107222880|N
+107222880:lI104|H107225A28
+107225A28:lI116|H107228880
+107228880:lI116|H10722B2C8
+10722B2C8:lI112|H10722D9E0
+10722D9E0:lI95|H10722FE78
+10722FE78:lI116|H107232010
+107232010:lI114|H107233E98
+107233E98:lI97|H107235A30
+107235A30:lI110|H107237358
+107237358:lI115|H107238A40
+107238A40:lI112|H107239F28
+107239F28:lI111|H10723B2C0
+10723B2C0:lI114|H10723C3E0
+10723C3E0:lI116|H10723D300
+10723D300:lI46|H10723E0E0
+10723E0E0:lI98|H10723ED20
+10723ED20:lI101|H10723F840
+10723F840:lI97|H1072401F0
+1072401F0:lI109|N
+10721F388:lH107222870|N
+107222870:lI104|H107225A18
+107225A18:lI116|H107228870
+107228870:lI116|H10722B2B8
+10722B2B8:lI112|H10722D9D0
+10722D9D0:lI100|H10722FE68
+10722FE68:lI95|H107232000
+107232000:lI114|H107233E88
+107233E88:lI101|H107235A20
+107235A20:lI113|H107237348
+107237348:lI117|H107238A30
+107238A30:lI101|H107239F18
+107239F18:lI115|H10723B2B0
+10723B2B0:lI116|H10723C3D0
+10723C3D0:lI95|H10723D2F0
+10723D2F0:lI104|H10723E0D0
+10723E0D0:lI97|H10723ED10
+10723ED10:lI110|H10723F830
+10723F830:lI100|H1072401E0
+1072401E0:lI108|H107240A90
+107240A90:lI101|H107241250
+107241250:lI114|H107241980
+107241980:lI46|H107242060
+107242060:lI98|H1072426D0
+1072426D0:lI101|H107242CE0
+107242CE0:lI97|H107243250
+107243250:lI109|N
+10721BCF8:Mn3:H10721F348,H10721F358,H10721F368
+10721F348:lH107222830|N
+107222830:lI104|H1072259D8
+1072259D8:lI116|H107228830
+107228830:lI116|H10722B278
+10722B278:lI112|H10722D990
+10722D990:lI95|H10722FE28
+10722FE28:lI117|H107231FC0
+107231FC0:lI114|H107233E48
+107233E48:lI105|H1072359E0
+1072359E0:lI46|H107237308
+107237308:lI98|H1072389F0
+1072389F0:lI101|H107239ED8
+107239ED8:lI97|H10723B270
+10723B270:lI109|N
+10721F368:lH107222850|N
+107222850:lI104|H1072259F8
+1072259F8:lI116|H107228850
+107228850:lI116|H10722B298
+10722B298:lI112|H10722D9B0
+10722D9B0:lI99|H10722FE48
+10722FE48:lI95|H107231FE0
+107231FE0:lI112|H107233E68
+107233E68:lI114|H107235A00
+107235A00:lI111|H107237328
+107237328:lI102|H107238A10
+107238A10:lI105|H107239EF8
+107239EF8:lI108|H10723B290
+10723B290:lI101|H10723C3B0
+10723C3B0:lI95|H10723D2D0
+10723D2D0:lI115|H10723E0B0
+10723E0B0:lI117|H10723ECF0
+10723ECF0:lI112|H10723F810
+10723F810:lI46|H1072401D0
+1072401D0:lI98|H107240A80
+107240A80:lI101|H107241240
+107241240:lI97|H107241970
+107241970:lI109|N
+10721F358:lH107222840|N
+107222840:lI104|H1072259E8
+1072259E8:lI116|H107228840
+107228840:lI116|H10722B288
+10722B288:lI112|H10722D9A0
+10722D9A0:lI100|H10722FE38
+10722FE38:lI95|H107231FD0
+107231FD0:lI115|H107233E58
+107233E58:lI99|H1072359F0
+1072359F0:lI114|H107237318
+107237318:lI105|H107238A00
+107238A00:lI112|H107239EE8
+107239EE8:lI116|H10723B280
+10723B280:lI95|H10723C3A0
+10723C3A0:lI101|H10723D2C0
+10723D2C0:lI110|H10723E0A0
+10723E0A0:lI118|H10723ECE0
+10723ECE0:lI46|H10723F800
+10723F800:lI98|H1072401C0
+1072401C0:lI101|H107240A70
+107240A70:lI97|H107241230
+107241230:lI109|N
+10721BCD8:Mn3:H10721F318,H10721F328,H10721F338
+10721F318:lH107222800|N
+107222800:lI105|H1072259A8
+1072259A8:lI110|H107228800
+107228800:lI101|H10722B248
+10722B248:lI116|H10722D960
+10722D960:lI115|H10722FDF8
+10722FDF8:lI46|H107231F90
+107231F90:lI97|H107233E18
+107233E18:lI112|H1072359B0
+1072359B0:lI112|H1072372D8
+1072372D8:lI117|H1072389C0
+1072389C0:lI112|N
+10721F338:lH107222820|N
+107222820:lI104|H1072259C8
+1072259C8:lI116|H107228820
+107228820:lI116|H10722B268
+10722B268:lI112|H10722D980
+10722D980:lI100|H10722FE18
+10722FE18:lI95|H107231FB0
+107231FB0:lI117|H107233E38
+107233E38:lI116|H1072359D0
+1072359D0:lI105|H1072372F8
+1072372F8:lI108|H1072389E0
+1072389E0:lI46|H107239EC8
+107239EC8:lI98|H10723B260
+10723B260:lI101|H10723C390
+10723C390:lI97|H10723D2B0
+10723D2B0:lI109|N
+10721F328:lH107222810|N
+107222810:lI104|H1072259B8
+1072259B8:lI116|H107228810
+107228810:lI116|H10722B258
+10722B258:lI112|H10722D970
+10722D970:lI99|H10722FE08
+10722FE08:lI95|H107231FA0
+107231FA0:lI104|H107233E28
+107233E28:lI97|H1072359C0
+1072359C0:lI110|H1072372E8
+1072372E8:lI100|H1072389D0
+1072389D0:lI108|H107239EB8
+107239EB8:lI101|H10723B250
+10723B250:lI114|H10723C380
+10723C380:lI46|H10723D2A0
+10723D2A0:lI98|H10723E090
+10723E090:lI101|H10723ECD0
+10723ECD0:lI97|H10723F7F0
+10723F7F0:lI109|N
+10721BCA8:Mn5:H10721F2C0,H10721F2D0,H10721F2E8,H10721F2F8,H10721F308
+10721F2C0:lH1072227A0|N
+1072227A0:lI104|H107225948
+107225948:lI116|H1072287A0
+1072287A0:lI116|H10722B1E8
+10722B1E8:lI112|H10722D900
+10722D900:lI100|H10722FD98
+10722FD98:lI95|H107231F30
+107231F30:lI108|H107233DB8
+107233DB8:lI111|H107235950
+107235950:lI103|H107237278
+107237278:lI46|H107238970
+107238970:lI98|H107239E68
+107239E68:lI101|H10723B220
+10723B220:lI97|H10723C350
+10723C350:lI109|N
+10721F308:lH1072227F0|N
+1072227F0:lI109|H107225998
+107225998:lI111|H1072287F0
+1072287F0:lI100|H10722B238
+10722B238:lI95|H10722D950
+10722D950:lI99|H10722FDE8
+10722FDE8:lI103|H107231F80
+107231F80:lI105|H107233E08
+107233E08:lI46|H1072359A0
+1072359A0:lI98|H1072372C8
+1072372C8:lI101|H1072389B0
+1072389B0:lI97|H107239EA8
+107239EA8:lI109|N
+10721F2F8:lH1072227E0|N
+1072227E0:lI109|H107225988
+107225988:lI111|H1072287E0
+1072287E0:lI100|H10722B228
+10722B228:lI95|H10722D940
+10722D940:lI101|H10722FDD8
+10722FDD8:lI115|H107231F70
+107231F70:lI105|H107233DF8
+107233DF8:lI46|H107235990
+107235990:lI98|H1072372B8
+1072372B8:lI101|H1072389A0
+1072389A0:lI97|H107239E98
+107239E98:lI109|N
+10721F2E8:lH1072227D0|N
+1072227D0:lI105|H107225978
+107225978:lI110|H1072287D0
+1072287D0:lI101|H10722B218
+10722B218:lI116|H10722D930
+10722D930:lI115|H10722FDC8
+10722FDC8:lI95|H107231F60
+107231F60:lI116|H107233DE8
+107233DE8:lI114|H107235980
+107235980:lI97|H1072372A8
+1072372A8:lI99|H107238990
+107238990:lI101|H107239E88
+107239E88:lI46|H10723B240
+10723B240:lI98|H10723C370
+10723C370:lI101|H10723D290
+10723D290:lI97|H10723E080
+10723E080:lI109|N
+10721F2D0:Mn2:H1072227B0,H1072227C0
+1072227B0:lH107225958|N
+107225958:lI105|H1072287B0
+1072287B0:lI110|H10722B1F8
+10722B1F8:lI101|H10722D910
+10722D910:lI116|H10722FDA8
+10722FDA8:lI115|H107231F40
+107231F40:lI46|H107233DC8
+107233DC8:lI97|H107235960
+107235960:lI112|H107237288
+107237288:lI112|N
+1072227C0:lH107225968|N
+107225968:lI104|H1072287C0
+1072287C0:lI116|H10722B208
+10722B208:lI116|H10722D920
+10722D920:lI112|H10722FDB8
+10722FDB8:lI100|H107231F50
+107231F50:lI95|H107233DD8
+107233DD8:lI97|H107235970
+107235970:lI99|H107237298
+107237298:lI99|H107238980
+107238980:lI101|H107239E78
+107239E78:lI112|H10723B230
+10723B230:lI116|H10723C360
+10723C360:lI111|H10723D280
+10723D280:lI114|H10723E070
+10723E070:lI95|H10723ECC0
+10723ECC0:lI115|H10723F7E0
+10723F7E0:lI117|H1072401B0
+1072401B0:lI112|H107240A60
+107240A60:lI46|H107241220
+107241220:lI98|H107241960
+107241960:lI101|H107242050
+107242050:lI97|H1072426C0
+1072426C0:lI109|N
+10721BC78:Mn5:H10721F270,H10721F280,H10721F290,H10721F2A0,H10721F2B0
+10721F270:lH107222750|N
+107222750:lI109|H1072258F8
+1072258F8:lI111|H107228750
+107228750:lI100|H10722B198
+10722B198:lI95|H10722D8B0
+10722D8B0:lI114|H10722FD48
+10722FD48:lI101|H107231EE0
+107231EE0:lI115|H107233D68
+107233D68:lI112|H107235900
+107235900:lI111|H107237228
+107237228:lI110|H107238920
+107238920:lI115|H107239E18
+107239E18:lI101|H10723B1D0
+10723B1D0:lI99|H10723C300
+10723C300:lI111|H10723D240
+10723D240:lI110|H10723E030
+10723E030:lI116|H10723EC80
+10723EC80:lI114|H10723F7C0
+10723F7C0:lI111|H1072401A0
+1072401A0:lI108|H107240A50
+107240A50:lI46|H107241210
+107241210:lI98|H107241950
+107241950:lI101|H107242040
+107242040:lI97|H1072426B0
+1072426B0:lI109|N
+10721F2B0:lH107222790|N
+107222790:lI104|H107225938
+107225938:lI116|H107228790
+107228790:lI116|H10722B1D8
+10722B1D8:lI112|H10722D8F0
+10722D8F0:lI100|H10722FD88
+10722FD88:lI95|H107231F20
+107231F20:lI99|H107233DA8
+107233DA8:lI117|H107235940
+107235940:lI115|H107237268
+107237268:lI116|H107238960
+107238960:lI111|H107239E58
+107239E58:lI109|H10723B210
+10723B210:lI46|H10723C340
+10723C340:lI98|H10723D270
+10723D270:lI101|H10723E060
+10723E060:lI97|H10723ECB0
+10723ECB0:lI109|N
+10721F2A0:lH107222780|N
+107222780:lI104|H107225928
+107225928:lI116|H107228780
+107228780:lI116|H10722B1C8
+10722B1C8:lI112|H10722D8E0
+10722D8E0:lI100|H10722FD78
+10722FD78:lI95|H107231F10
+107231F10:lI114|H107233D98
+107233D98:lI101|H107235930
+107235930:lI113|H107237258
+107237258:lI117|H107238950
+107238950:lI101|H107239E48
+107239E48:lI115|H10723B200
+10723B200:lI116|H10723C330
+10723C330:lI46|H10723D260
+10723D260:lI98|H10723E050
+10723E050:lI101|H10723ECA0
+10723ECA0:lI97|H10723F7D0
+10723F7D0:lI109|N
+10721F290:lH107222770|N
+107222770:lI104|H107225918
+107225918:lI116|H107228770
+107228770:lI116|H10722B1B8
+10722B1B8:lI112|H10722D8D0
+10722D8D0:lI100|H10722FD68
+10722FD68:lI95|H107231F00
+107231F00:lI101|H107233D88
+107233D88:lI115|H107235920
+107235920:lI105|H107237248
+107237248:lI46|H107238940
+107238940:lI98|H107239E38
+107239E38:lI101|H10723B1F0
+10723B1F0:lI97|H10723C320
+10723C320:lI109|N
+10721F280:lH107222760|N
+107222760:lI109|H107225908
+107225908:lI111|H107228760
+107228760:lI100|H10722B1A8
+10722B1A8:lI95|H10722D8C0
+10722D8C0:lI100|H10722FD58
+10722FD58:lI105|H107231EF0
+107231EF0:lI115|H107233D78
+107233D78:lI107|H107235910
+107235910:lI95|H107237238
+107237238:lI108|H107238930
+107238930:lI111|H107239E28
+107239E28:lI103|H10723B1E0
+10723B1E0:lI46|H10723C310
+10723C310:lI98|H10723D250
+10723D250:lI101|H10723E040
+10723E040:lI97|H10723EC90
+10723EC90:lI109|N
+10721BC68:lH10721F260|N
+10721F260:lI109|H107222740
+107222740:lI111|H1072258E8
+1072258E8:lI100|H107228740
+107228740:lI95|H10722B188
+10722B188:lI97|H10722D8A0
+10722D8A0:lI117|H10722FD38
+10722FD38:lI116|H107231ED0
+107231ED0:lI104|H107233D58
+107233D58:lI95|H1072358F0
+1072358F0:lI112|H107237218
+107237218:lI108|H107238910
+107238910:lI97|H107239E08
+107239E08:lI105|H10723B1C0
+10723B1C0:lI110|H10723C2F0
+10723C2F0:lI46|H10723D230
+10723D230:lI98|H10723E020
+10723E020:lI101|H10723EC70
+10723EC70:lI97|H10723F7B0
+10723F7B0:lI109|N
+10721BC50:Mn2:H10721F240,H10721F250
+10721F240:lH107222720|N
+107222720:lI109|H1072258C8
+1072258C8:lI111|H107228720
+107228720:lI100|H10722B168
+10722B168:lI95|H10722D880
+10722D880:lI97|H10722FD18
+10722FD18:lI117|H107231EB0
+107231EB0:lI116|H107233D38
+107233D38:lI104|H1072358D0
+1072358D0:lI95|H1072371F8
+1072371F8:lI100|H1072388F0
+1072388F0:lI101|H107239DE8
+107239DE8:lI116|H10723B1A0
+10723B1A0:lI115|H10723C2D0
+10723C2D0:lI46|H10723D220
+10723D220:lI98|H10723E010
+10723E010:lI101|H10723EC60
+10723EC60:lI97|H10723F7A0
+10723F7A0:lI109|N
+10721F250:lH107222730|N
+107222730:lI109|H1072258D8
+1072258D8:lI111|H107228730
+107228730:lI100|H10722B178
+10722B178:lI95|H10722D890
+10722D890:lI116|H10722FD28
+10722FD28:lI114|H107231EC0
+107231EC0:lI97|H107233D48
+107233D48:lI99|H1072358E0
+1072358E0:lI101|H107237208
+107237208:lI46|H107238900
+107238900:lI98|H107239DF8
+107239DF8:lI101|H10723B1B0
+10723B1B0:lI97|H10723C2E0
+10723C2E0:lI109|N
+10721BC20:Mn5:H10721F1E8,H10721F1F8,H10721F208,H10721F218,H10721F230
+10721F1E8:lH1072226C0|N
+1072226C0:lI104|H107225868
+107225868:lI116|H1072286C0
+1072286C0:lI116|H10722B108
+10722B108:lI112|H10722D820
+10722D820:lI100|H10722FCB8
+10722FCB8:lI95|H107231E50
+107231E50:lI99|H107233CD8
+107233CD8:lI117|H107235870
+107235870:lI115|H107237198
+107237198:lI116|H107238890
+107238890:lI111|H107239D88
+107239D88:lI109|H10723B140
+10723B140:lI95|H10723C270
+10723C270:lI97|H10723D1D0
+10723D1D0:lI112|H10723DFC0
+10723DFC0:lI105|H10723EC20
+10723EC20:lI46|H10723F770
+10723F770:lI98|H107240170
+107240170:lI101|H107240A20
+107240A20:lI97|H1072411E0
+1072411E0:lI109|N
+10721F230:lH107222710|N
+107222710:lI104|H1072258B8
+1072258B8:lI116|H107228710
+107228710:lI116|H10722B158
+10722B158:lI112|H10722D870
+10722D870:lI95|H10722FD08
+10722FD08:lI114|H107231EA0
+107231EA0:lI101|H107233D28
+107233D28:lI113|H1072358C0
+1072358C0:lI117|H1072371E8
+1072371E8:lI101|H1072388E0
+1072388E0:lI115|H107239DD8
+107239DD8:lI116|H10723B190
+10723B190:lI46|H10723C2C0
+10723C2C0:lI98|H10723D210
+10723D210:lI101|H10723E000
+10723E000:lI97|H10723EC50
+10723EC50:lI109|N
+10721F218:Mn2:H1072226F0,H107222700
+1072226F0:lH107225898|N
+107225898:lI104|H1072286F0
+1072286F0:lI116|H10722B138
+10722B138:lI116|H10722D850
+10722D850:lI112|H10722FCE8
+10722FCE8:lI100|H107231E80
+107231E80:lI95|H107233D08
+107233D08:lI105|H1072358A0
+1072358A0:lI110|H1072371C8
+1072371C8:lI115|H1072388C0
+1072388C0:lI116|H107239DB8
+107239DB8:lI97|H10723B170
+10723B170:lI110|H10723C2A0
+10723C2A0:lI99|H10723D1F0
+10723D1F0:lI101|H10723DFE0
+10723DFE0:lI95|H10723EC40
+10723EC40:lI115|H10723F790
+10723F790:lI117|H107240190
+107240190:lI112|H107240A40
+107240A40:lI46|H107241200
+107241200:lI98|H107241940
+107241940:lI101|H107242030
+107242030:lI97|H1072426A0
+1072426A0:lI109|N
+107222700:lH1072258A8|N
+1072258A8:lI104|H107228700
+107228700:lI116|H10722B148
+10722B148:lI116|H10722D860
+10722D860:lI112|H10722FCF8
+10722FCF8:lI95|H107231E90
+107231E90:lI99|H107233D18
+107233D18:lI104|H1072358B0
+1072358B0:lI117|H1072371D8
+1072371D8:lI110|H1072388D0
+1072388D0:lI107|H107239DC8
+107239DC8:lI46|H10723B180
+10723B180:lI98|H10723C2B0
+10723C2B0:lI101|H10723D200
+10723D200:lI97|H10723DFF0
+10723DFF0:lI109|N
+10721F208:lH1072226E0|N
+1072226E0:lI105|H107225888
+107225888:lI110|H1072286E0
+1072286E0:lI101|H10722B128
+10722B128:lI116|H10722D840
+10722D840:lI115|H10722FCD8
+10722FCD8:lI95|H107231E70
+107231E70:lI115|H107233CF8
+107233CF8:lI117|H107235890
+107235890:lI112|H1072371B8
+1072371B8:lI46|H1072388B0
+1072388B0:lI98|H107239DA8
+107239DA8:lI101|H10723B160
+10723B160:lI97|H10723C290
+10723C290:lI109|N
+10721F1F8:lH1072226D0|N
+1072226D0:lI104|H107225878
+107225878:lI116|H1072286D0
+1072286D0:lI116|H10722B118
+10722B118:lI112|H10722D830
+10722D830:lI100|H10722FCC8
+10722FCC8:lI95|H107231E60
+107231E60:lI99|H107233CE8
+107233CE8:lI111|H107235880
+107235880:lI110|H1072371A8
+1072371A8:lI110|H1072388A0
+1072388A0:lI101|H107239D98
+107239D98:lI99|H10723B150
+10723B150:lI116|H10723C280
+10723C280:lI105|H10723D1E0
+10723D1E0:lI111|H10723DFD0
+10723DFD0:lI110|H10723EC30
+10723EC30:lI95|H10723F780
+10723F780:lI115|H107240180
+107240180:lI117|H107240A30
+107240A30:lI112|H1072411F0
+1072411F0:lI46|H107241930
+107241930:lI98|H107242020
+107242020:lI101|H107242690
+107242690:lI97|H107242CD0
+107242CD0:lI109|N
+10721BBF8:Mn4:H10721F1A8,H10721F1B8,H10721F1C8,H10721F1D8
+10721F1A8:lH107222680|N
+107222680:lI104|H107225828
+107225828:lI116|H107228680
+107228680:lI116|H10722B0C8
+10722B0C8:lI112|H10722D7E0
+10722D7E0:lI100|H10722FC78
+10722FC78:lI95|H107231E10
+107231E10:lI97|H107233C98
+107233C98:lI99|H107235830
+107235830:lI99|H107237158
+107237158:lI101|H107238850
+107238850:lI112|H107239D48
+107239D48:lI116|H10723B100
+10723B100:lI111|H10723C230
+10723C230:lI114|H10723D1B0
+10723D1B0:lI46|H10723DFA0
+10723DFA0:lI98|H10723EC00
+10723EC00:lI101|H10723F760
+10723F760:lI97|H107240160
+107240160:lI109|N
+10721F1D8:lH1072226B0|N
+1072226B0:lI105|H107225858
+107225858:lI110|H1072286B0
+1072286B0:lI101|H10722B0F8
+10722B0F8:lI116|H10722D810
+10722D810:lI115|H10722FCA8
+10722FCA8:lI95|H107231E40
+107231E40:lI108|H107233CC8
+107233CC8:lI105|H107235860
+107235860:lI98|H107237188
+107237188:lI46|H107238880
+107238880:lI98|H107239D78
+107239D78:lI101|H10723B130
+10723B130:lI97|H10723C260
+10723C260:lI109|N
+10721F1C8:lH1072226A0|N
+1072226A0:lI104|H107225848
+107225848:lI116|H1072286A0
+1072286A0:lI116|H10722B0E8
+10722B0E8:lI112|H10722D800
+10722D800:lI100|H10722FC98
+10722FC98:lI95|H107231E30
+107231E30:lI115|H107233CB8
+107233CB8:lI111|H107235850
+107235850:lI99|H107237178
+107237178:lI107|H107238870
+107238870:lI101|H107239D68
+107239D68:lI116|H10723B120
+10723B120:lI46|H10723C250
+10723C250:lI98|H10723D1C0
+10723D1C0:lI101|H10723DFB0
+10723DFB0:lI97|H10723EC10
+10723EC10:lI109|N
+10721F1B8:lH107222690|N
+107222690:lI104|H107225838
+107225838:lI116|H107228690
+107228690:lI116|H10722B0D8
+10722B0D8:lI112|H10722D7F0
+10722D7F0:lI99|H10722FC88
+10722FC88:lI95|H107231E20
+107231E20:lI115|H107233CA8
+107233CA8:lI117|H107235840
+107235840:lI112|H107237168
+107237168:lI46|H107238860
+107238860:lI98|H107239D58
+107239D58:lI101|H10723B110
+10723B110:lI97|H10723C240
+10723C240:lI109|N
+107218548:lI47|H10721BBC8
+10721BBC8:lI111|H10721F160
+10721F160:lI112|H107222630
+107222630:lI116|H1072257D8
+1072257D8:lI47|H107228630
+107228630:lI104|H10722B078
+10722B078:lI111|H10722D790
+10722D790:lI109|H10722FC28
+10722FC28:lI101|H107231DC0
+107231DC0:lI98|H107233C48
+107233C48:lI114|H1072357E0
+1072357E0:lI101|H107237108
+107237108:lI119|H107238800
+107238800:lI47|H107239CF8
+107239CF8:lI67|H10723B0B0
+10723B0B0:lI101|H10723C1E0
+10723C1E0:lI108|H10723D160
+10723D160:lI108|H10723DF50
+10723DF50:lI97|H10723EBB0
+10723EBB0:lI114|H10723F710
+10723F710:lI47|H107240110
+107240110:lI101|H1072409F0
+1072409F0:lI114|H1072411D0
+1072411D0:lI108|H107241920
+107241920:lI97|H107242010
+107242010:lI110|H107242680
+107242680:lI103|H107242CC0
+107242CC0:lI47|H107243240
+107243240:lI50|H107243790
+107243790:lI54|H107243CA0
+107243CA0:lI46|H107244190
+107244190:lI48|H107244640
+107244640:lI46|H107244AB0
+107244AB0:lI50|H107244F10
+107244F10:lI47|H107245360
+107245360:lI108|H107245760
+107245760:lI105|H107245B20
+107245B20:lI98|H107245EB0
+107245EB0:lI47|H107246240
+107246240:lI101|H1072465D0
+1072465D0:lI114|H107246960
+107246960:lI108|H107246CA0
+107246CA0:lI97|H107246FC0
+107246FC0:lI110|H1072472E0
+1072472E0:lI103|H1072475F0
+1072475F0:lI47|H1072478F0
+1072478F0:lI108|H107247BF0
+107247BF0:lI105|H107247ED0
+107247ED0:lI98|H107248190
+107248190:lI47|H107248450
+107248450:lI105|H107248700
+107248700:lI110|H1072489B0
+1072489B0:lI101|H107248C30
+107248C30:lI116|H107248EA0
+107248EA0:lI115|H107249110
+107249110:lI45|H107249370
+107249370:lI57|H1072495D0
+1072495D0:lI46|H107249820
+107249820:lI48|H107249A40
+107249A40:lI46|H107249C40
+107249C40:lI49|H107249E20
+107249E20:lI47|H280052C20
+107214F60:lH1072185E8|H107218600
+1072185E8:t2:H10721BE38,A5:cache
+10721BE38:lI47|H10721F558
+10721F558:lI111|H107222A50
+107222A50:lI112|H107225BF8
+107225BF8:lI116|H107228A50
+107228A50:lI47|H10722B498
+10722B498:lI104|H10722DBB0
+10722DBB0:lI111|H107230048
+107230048:lI109|H1072321E0
+1072321E0:lI101|H107234068
+107234068:lI98|H107235C00
+107235C00:lI114|H107237528
+107237528:lI101|H107238BE0
+107238BE0:lI119|H10723A0C8
+10723A0C8:lI47|H10723B430
+10723B430:lI67|H10723C540
+10723C540:lI101|H10723D410
+10723D410:lI108|H10723E1B0
+10723E1B0:lI108|H10723EDF0
+10723EDF0:lI97|H10723F8D0
+10723F8D0:lI114|H107240240
+107240240:lI47|H107240AD0
+107240AD0:lI101|H107241280
+107241280:lI114|H1072419B0
+1072419B0:lI108|H107242080
+107242080:lI97|H1072426F0
+1072426F0:lI110|H107242CF0
+107242CF0:lI103|H107243260
+107243260:lI47|H1072437A0
+1072437A0:lI50|H107243CB0
+107243CB0:lI54|H1072441A0
+1072441A0:lI46|H107244650
+107244650:lI48|H107244AC0
+107244AC0:lI46|H107244F20
+107244F20:lI50|H107245370
+107245370:lI47|H107245770
+107245770:lI108|H107245B30
+107245B30:lI105|H107245EC0
+107245EC0:lI98|H107246250
+107246250:lI47|H1072465E0
+1072465E0:lI101|H107246970
+107246970:lI114|H107246CB0
+107246CB0:lI108|H107246FD0
+107246FD0:lI97|H1072472F0
+1072472F0:lI110|H107247600
+107247600:lI103|H107247900
+107247900:lI47|H107247C00
+107247C00:lI108|H107247EE0
+107247EE0:lI105|H1072481A0
+1072481A0:lI98|H107248460
+107248460:lI47|H107248710
+107248710:lI102|H1072489C0
+1072489C0:lI116|H107248C40
+107248C40:lI112|H107248EB0
+107248EB0:lI45|H107249120
+107249120:lI49|H107249380
+107249380:lI46|H1072495E0
+1072495E0:lI50|H107249830
+107249830:lI47|H280052C20
+107218600:lH10721BE48|H10721BE60
+10721BE48:t2:H10721F568,A5:cache
+10721F568:lI47|H107222A60
+107222A60:lI111|H107225C08
+107225C08:lI112|H107228A60
+107228A60:lI116|H10722B4A8
+10722B4A8:lI47|H10722DBC0
+10722DBC0:lI104|H107230058
+107230058:lI111|H1072321F0
+1072321F0:lI109|H107234078
+107234078:lI101|H107235C10
+107235C10:lI98|H107237538
+107237538:lI114|H107238BF0
+107238BF0:lI101|H10723A0D8
+10723A0D8:lI119|H10723B440
+10723B440:lI47|H10723C550
+10723C550:lI67|H10723D420
+10723D420:lI101|H10723E1C0
+10723E1C0:lI108|H10723EE00
+10723EE00:lI108|H10723F8E0
+10723F8E0:lI97|H107240250
+107240250:lI114|H107240AE0
+107240AE0:lI47|H107241290
+107241290:lI101|H1072419C0
+1072419C0:lI114|H107242090
+107242090:lI108|H107242700
+107242700:lI97|H107242D00
+107242D00:lI110|H107243270
+107243270:lI103|H1072437B0
+1072437B0:lI47|H107243CC0
+107243CC0:lI50|H1072441B0
+1072441B0:lI54|H107244660
+107244660:lI46|H107244AD0
+107244AD0:lI48|H107244F30
+107244F30:lI46|H107245380
+107245380:lI50|H107245780
+107245780:lI47|H107245B40
+107245B40:lI108|H107245ED0
+107245ED0:lI105|H107246260
+107246260:lI98|H1072465F0
+1072465F0:lI47|H107246980
+107246980:lI101|H107246CC0
+107246CC0:lI114|H107246FE0
+107246FE0:lI108|H107247300
+107247300:lI97|H107247610
+107247610:lI110|H107247910
+107247910:lI103|H107247C10
+107247C10:lI47|H107247EF0
+107247EF0:lI108|H1072481B0
+1072481B0:lI105|H107248470
+107248470:lI98|H107248720
+107248720:lI47|H1072489D0
+1072489D0:lI101|H107248C50
+107248C50:lI117|H107248EC0
+107248EC0:lI110|H107249130
+107249130:lI105|H107249390
+107249390:lI116|H1072495F0
+1072495F0:lI45|H107249840
+107249840:lI50|H107249A50
+107249A50:lI46|H107249C50
+107249C50:lI56|H107249E30
+107249E30:lI46|H107249FF0
+107249FF0:lI50|H10724A190
+10724A190:lI47|H280052C20
+10721BE60:lH10721F578|H10721F590
+10721F578:t2:H107222A70,A5:cache
+107222A70:lI47|H107225C18
+107225C18:lI111|H107228A70
+107228A70:lI112|H10722B4B8
+10722B4B8:lI116|H10722DBD0
+10722DBD0:lI47|H107230068
+107230068:lI104|H107232200
+107232200:lI111|H107234088
+107234088:lI109|H107235C20
+107235C20:lI101|H107237548
+107237548:lI98|H107238C00
+107238C00:lI114|H10723A0E8
+10723A0E8:lI101|H10723B450
+10723B450:lI119|H10723C560
+10723C560:lI47|H10723D430
+10723D430:lI67|H10723E1D0
+10723E1D0:lI101|H10723EE10
+10723EE10:lI108|H10723F8F0
+10723F8F0:lI108|H107240260
+107240260:lI97|H107240AF0
+107240AF0:lI114|H1072412A0
+1072412A0:lI47|H1072419D0
+1072419D0:lI101|H1072420A0
+1072420A0:lI114|H107242710
+107242710:lI108|H107242D10
+107242D10:lI97|H107243280
+107243280:lI110|H1072437C0
+1072437C0:lI103|H107243CD0
+107243CD0:lI47|H1072441C0
+1072441C0:lI50|H107244670
+107244670:lI54|H107244AE0
+107244AE0:lI46|H107244F40
+107244F40:lI48|H107245390
+107245390:lI46|H107245790
+107245790:lI50|H107245B50
+107245B50:lI47|H107245EE0
+107245EE0:lI108|H107246270
+107246270:lI105|H107246600
+107246600:lI98|H107246990
+107246990:lI47|H107246CD0
+107246CD0:lI101|H107246FF0
+107246FF0:lI114|H107247310
+107247310:lI108|H107247620
+107247620:lI97|H107247920
+107247920:lI110|H107247C20
+107247C20:lI103|H107247F00
+107247F00:lI47|H1072481C0
+1072481C0:lI108|H107248480
+107248480:lI105|H107248730
+107248730:lI98|H1072489E0
+1072489E0:lI47|H107248C60
+107248C60:lI101|H107248ED0
+107248ED0:lI116|H107249140
+107249140:lI45|H1072493A0
+1072493A0:lI49|H107249600
+107249600:lI46|H107249850
+107249850:lI55|H107249A60
+107249A60:lI47|H280052C20
+10721F590:lH107222A80|H107222A98
+107222A80:t2:H107225C28,A5:cache
+107225C28:lI47|H107228A80
+107228A80:lI111|H10722B4C8
+10722B4C8:lI112|H10722DBE0
+10722DBE0:lI116|H107230078
+107230078:lI47|H107232210
+107232210:lI104|H107234098
+107234098:lI111|H107235C30
+107235C30:lI109|H107237558
+107237558:lI101|H107238C10
+107238C10:lI98|H10723A0F8
+10723A0F8:lI114|H10723B460
+10723B460:lI101|H10723C570
+10723C570:lI119|H10723D440
+10723D440:lI47|H10723E1E0
+10723E1E0:lI67|H10723EE20
+10723EE20:lI101|H10723F900
+10723F900:lI108|H107240270
+107240270:lI108|H107240B00
+107240B00:lI97|H1072412B0
+1072412B0:lI114|H1072419E0
+1072419E0:lI47|H1072420B0
+1072420B0:lI101|H107242720
+107242720:lI114|H107242D20
+107242D20:lI108|H107243290
+107243290:lI97|H1072437D0
+1072437D0:lI110|H107243CE0
+107243CE0:lI103|H1072441D0
+1072441D0:lI47|H107244680
+107244680:lI50|H107244AF0
+107244AF0:lI54|H107244F50
+107244F50:lI46|H1072453A0
+1072453A0:lI48|H1072457A0
+1072457A0:lI46|H107245B60
+107245B60:lI50|H107245EF0
+107245EF0:lI47|H107246280
+107246280:lI108|H107246610
+107246610:lI105|H1072469A0
+1072469A0:lI98|H107246CE0
+107246CE0:lI47|H107247000
+107247000:lI101|H107247320
+107247320:lI114|H107247630
+107247630:lI108|H107247930
+107247930:lI97|H107247C30
+107247C30:lI110|H107247F10
+107247F10:lI103|H1072481D0
+1072481D0:lI47|H107248490
+107248490:lI108|H107248740
+107248740:lI105|H1072489F0
+1072489F0:lI98|H107248C70
+107248C70:lI47|H107248EE0
+107248EE0:lI101|H107249150
+107249150:lI114|H1072493B0
+1072493B0:lI116|H107249610
+107249610:lI115|H107249860
+107249860:lI45|H107249A70
+107249A70:lI49|H107249C60
+107249C60:lI52|H107249E40
+107249E40:lI46|H10724A000
+10724A000:lI48|H10724A1A0
+10724A1A0:lI46|H10724A320
+10724A320:lI50|H10724A490
+10724A490:lI47|H280052C20
+107222A98:lH107225C38|H107225C50
+107225C38:t2:H107228A90,A5:cache
+107228A90:lI47|H10722B4D8
+10722B4D8:lI111|H10722DBF0
+10722DBF0:lI112|H107230088
+107230088:lI116|H107232220
+107232220:lI47|H1072340A8
+1072340A8:lI104|H107235C40
+107235C40:lI111|H107237568
+107237568:lI109|H107238C20
+107238C20:lI101|H10723A108
+10723A108:lI98|H10723B470
+10723B470:lI114|H10723C580
+10723C580:lI101|H10723D450
+10723D450:lI119|H10723E1F0
+10723E1F0:lI47|H10723EE30
+10723EE30:lI67|H10723F910
+10723F910:lI101|H107240280
+107240280:lI108|H107240B10
+107240B10:lI108|H1072412C0
+1072412C0:lI97|H1072419F0
+1072419F0:lI114|H1072420C0
+1072420C0:lI47|H107242730
+107242730:lI101|H107242D30
+107242D30:lI114|H1072432A0
+1072432A0:lI108|H1072437E0
+1072437E0:lI97|H107243CF0
+107243CF0:lI110|H1072441E0
+1072441E0:lI103|H107244690
+107244690:lI47|H107244B00
+107244B00:lI50|H107244F60
+107244F60:lI54|H1072453B0
+1072453B0:lI46|H1072457B0
+1072457B0:lI48|H107245B70
+107245B70:lI46|H107245F00
+107245F00:lI50|H107246290
+107246290:lI47|H107246620
+107246620:lI108|H1072469B0
+1072469B0:lI105|H107246CF0
+107246CF0:lI98|H107247010
+107247010:lI47|H107247330
+107247330:lI101|H107247640
+107247640:lI114|H107247940
+107247940:lI108|H107247C40
+107247C40:lI97|H107247F20
+107247F20:lI110|H1072481E0
+1072481E0:lI103|H1072484A0
+1072484A0:lI47|H107248750
+107248750:lI108|H107248A00
+107248A00:lI105|H107248C80
+107248C80:lI98|H107248EF0
+107248EF0:lI47|H107249160
+107249160:lI101|H1072493C0
+1072493C0:lI114|H107249620
+107249620:lI108|H107249870
+107249870:lI95|H107249A80
+107249A80:lI105|H107249C70
+107249C70:lI110|H107249E50
+107249E50:lI116|H10724A010
+10724A010:lI101|H10724A1B0
+10724A1B0:lI114|H10724A330
+10724A330:lI102|H10724A4A0
+10724A4A0:lI97|H10724A600
+10724A600:lI99|H10724A740
+10724A740:lI101|H10724A860
+10724A860:lI45|H10724A970
+10724A970:lI53|H10724AA60
+10724AA60:lI46|H10724AB30
+10724AB30:lI52|H10724ABD0
+10724ABD0:lI47|H280052C20
+107225C50:lH107228AA0|H107228AB8
+107228AA0:t2:H10722B4E8,A5:cache
+10722B4E8:lI47|H10722DC00
+10722DC00:lI111|H107230098
+107230098:lI112|H107232230
+107232230:lI116|H1072340B8
+1072340B8:lI47|H107235C50
+107235C50:lI104|H107237578
+107237578:lI111|H107238C30
+107238C30:lI109|H10723A118
+10723A118:lI101|H10723B480
+10723B480:lI98|H10723C590
+10723C590:lI114|H10723D460
+10723D460:lI101|H10723E200
+10723E200:lI119|H10723EE40
+10723EE40:lI47|H10723F920
+10723F920:lI67|H107240290
+107240290:lI101|H107240B20
+107240B20:lI108|H1072412D0
+1072412D0:lI108|H107241A00
+107241A00:lI97|H1072420D0
+1072420D0:lI114|H107242740
+107242740:lI47|H107242D40
+107242D40:lI101|H1072432B0
+1072432B0:lI114|H1072437F0
+1072437F0:lI108|H107243D00
+107243D00:lI97|H1072441F0
+1072441F0:lI110|H1072446A0
+1072446A0:lI103|H107244B10
+107244B10:lI47|H107244F70
+107244F70:lI50|H1072453C0
+1072453C0:lI54|H1072457C0
+1072457C0:lI46|H107245B80
+107245B80:lI48|H107245F10
+107245F10:lI46|H1072462A0
+1072462A0:lI50|H107246630
+107246630:lI47|H1072469C0
+1072469C0:lI108|H107246D00
+107246D00:lI105|H107247020
+107247020:lI98|H107247340
+107247340:lI47|H107247650
+107247650:lI101|H107247950
+107247950:lI114|H107247C50
+107247C50:lI108|H107247F30
+107247F30:lI97|H1072481F0
+1072481F0:lI110|H1072484B0
+1072484B0:lI103|H107248760
+107248760:lI47|H107248A10
+107248A10:lI108|H107248C90
+107248C90:lI105|H107248F00
+107248F00:lI98|H107249170
+107249170:lI47|H1072493D0
+1072493D0:lI101|H107249630
+107249630:lI114|H107249880
+107249880:lI108|H107249A90
+107249A90:lI95|H107249C80
+107249C80:lI100|H107249E60
+107249E60:lI111|H10724A020
+10724A020:lI99|H10724A1C0
+10724A1C0:lI103|H10724A340
+10724A340:lI101|H10724A4B0
+10724A4B0:lI110|H10724A610
+10724A610:lI45|H10724A750
+10724A750:lI49|H10724A870
+10724A870:lI46|H10724A980
+10724A980:lI53|H10724AA70
+10724AA70:lI47|H280052C20
+107228AB8:lH10722B4F8|H10722B510
+10722B4F8:t2:H10722DC10,A5:cache
+10722DC10:lI47|H1072300A8
+1072300A8:lI111|H107232240
+107232240:lI112|H1072340C8
+1072340C8:lI116|H107235C60
+107235C60:lI47|H107237588
+107237588:lI104|H107238C40
+107238C40:lI111|H10723A128
+10723A128:lI109|H10723B490
+10723B490:lI101|H10723C5A0
+10723C5A0:lI98|H10723D470
+10723D470:lI114|H10723E210
+10723E210:lI101|H10723EE50
+10723EE50:lI119|H10723F930
+10723F930:lI47|H1072402A0
+1072402A0:lI67|H107240B30
+107240B30:lI101|H1072412E0
+1072412E0:lI108|H107241A10
+107241A10:lI108|H1072420E0
+1072420E0:lI97|H107242750
+107242750:lI114|H107242D50
+107242D50:lI47|H1072432C0
+1072432C0:lI101|H107243800
+107243800:lI114|H107243D10
+107243D10:lI108|H107244200
+107244200:lI97|H1072446B0
+1072446B0:lI110|H107244B20
+107244B20:lI103|H107244F80
+107244F80:lI47|H1072453D0
+1072453D0:lI50|H1072457D0
+1072457D0:lI54|H107245B90
+107245B90:lI46|H107245F20
+107245F20:lI48|H1072462B0
+1072462B0:lI46|H107246640
+107246640:lI50|H1072469D0
+1072469D0:lI47|H107246D10
+107246D10:lI108|H107247030
+107247030:lI105|H107247350
+107247350:lI98|H107247660
+107247660:lI47|H107247960
+107247960:lI101|H107247C60
+107247C60:lI114|H107247F40
+107247F40:lI108|H107248200
+107248200:lI97|H1072484C0
+1072484C0:lI110|H107248770
+107248770:lI103|H107248A20
+107248A20:lI47|H107248CA0
+107248CA0:lI108|H107248F10
+107248F10:lI105|H107249180
+107249180:lI98|H1072493E0
+1072493E0:lI47|H107249640
+107249640:lI101|H107249890
+107249890:lI108|H107249AA0
+107249AA0:lI100|H107249C90
+107249C90:lI97|H107249E70
+107249E70:lI112|H10724A030
+10724A030:lI45|H10724A1D0
+10724A1D0:lI49|H10724A350
+10724A350:lI46|H10724A4C0
+10724A4C0:lI50|H10724A620
+10724A620:lI46|H10724A760
+10724A760:lI49|H10724A880
+10724A880:lI49|H10724A990
+10724A990:lI47|H280052C20
+10722B510:lH10722DC20|H10722DC38
+10722DC20:t2:H1072300B8,A5:cache
+1072300B8:lI47|H107232250
+107232250:lI111|H1072340D8
+1072340D8:lI112|H107235C70
+107235C70:lI116|H107237598
+107237598:lI47|H107238C50
+107238C50:lI104|H10723A138
+10723A138:lI111|H10723B4A0
+10723B4A0:lI109|H10723C5B0
+10723C5B0:lI101|H10723D480
+10723D480:lI98|H10723E220
+10723E220:lI114|H10723EE60
+10723EE60:lI101|H10723F940
+10723F940:lI119|H1072402B0
+1072402B0:lI47|H107240B40
+107240B40:lI67|H1072412F0
+1072412F0:lI101|H107241A20
+107241A20:lI108|H1072420F0
+1072420F0:lI108|H107242760
+107242760:lI97|H107242D60
+107242D60:lI114|H1072432D0
+1072432D0:lI47|H107243810
+107243810:lI101|H107243D20
+107243D20:lI114|H107244210
+107244210:lI108|H1072446C0
+1072446C0:lI97|H107244B30
+107244B30:lI110|H107244F90
+107244F90:lI103|H1072453E0
+1072453E0:lI47|H1072457E0
+1072457E0:lI50|H107245BA0
+107245BA0:lI54|H107245F30
+107245F30:lI46|H1072462C0
+1072462C0:lI48|H107246650
+107246650:lI46|H1072469E0
+1072469E0:lI50|H107246D20
+107246D20:lI47|H107247040
+107247040:lI108|H107247360
+107247360:lI105|H107247670
+107247670:lI98|H107247970
+107247970:lI47|H107247C70
+107247C70:lI101|H107247F50
+107247F50:lI114|H107248210
+107248210:lI108|H1072484D0
+1072484D0:lI97|H107248780
+107248780:lI110|H107248A30
+107248A30:lI103|H107248CB0
+107248CB0:lI47|H107248F20
+107248F20:lI108|H107249190
+107249190:lI105|H1072493F0
+1072493F0:lI98|H107249650
+107249650:lI47|H1072498A0
+1072498A0:lI101|H107249AB0
+107249AB0:lI100|H107249CA0
+107249CA0:lI111|H107249E80
+107249E80:lI99|H10724A040
+10724A040:lI45|H10724A1E0
+10724A1E0:lI49|H10724A360
+10724A360:lI46|H10724A4D0
+10724A4D0:lI50|H10724A630
+10724A630:lI47|H280052C20
+10722DC38:lH1072300C8|H1072300E0
+1072300C8:t2:H107232260,A5:cache
+107232260:lI47|H1072340E8
+1072340E8:lI111|H107235C80
+107235C80:lI112|H1072375A8
+1072375A8:lI116|H107238C60
+107238C60:lI47|H10723A148
+10723A148:lI104|H10723B4B0
+10723B4B0:lI111|H10723C5C0
+10723C5C0:lI109|H10723D490
+10723D490:lI101|H10723E230
+10723E230:lI98|H10723EE70
+10723EE70:lI114|H10723F950
+10723F950:lI101|H1072402C0
+1072402C0:lI119|H107240B50
+107240B50:lI47|H107241300
+107241300:lI67|H107241A30
+107241A30:lI101|H107242100
+107242100:lI108|H107242770
+107242770:lI108|H107242D70
+107242D70:lI97|H1072432E0
+1072432E0:lI114|H107243820
+107243820:lI47|H107243D30
+107243D30:lI101|H107244220
+107244220:lI114|H1072446D0
+1072446D0:lI108|H107244B40
+107244B40:lI97|H107244FA0
+107244FA0:lI110|H1072453F0
+1072453F0:lI103|H1072457F0
+1072457F0:lI47|H107245BB0
+107245BB0:lI50|H107245F40
+107245F40:lI54|H1072462D0
+1072462D0:lI46|H107246660
+107246660:lI48|H1072469F0
+1072469F0:lI46|H107246D30
+107246D30:lI50|H107247050
+107247050:lI47|H107247370
+107247370:lI108|H107247680
+107247680:lI105|H107247980
+107247980:lI98|H107247C80
+107247C80:lI47|H107247F60
+107247F60:lI101|H107248220
+107248220:lI114|H1072484E0
+1072484E0:lI108|H107248790
+107248790:lI97|H107248A40
+107248A40:lI110|H107248CC0
+107248CC0:lI103|H107248F30
+107248F30:lI47|H1072491A0
+1072491A0:lI108|H107249400
+107249400:lI105|H107249660
+107249660:lI98|H1072498B0
+1072498B0:lI47|H107249AC0
+107249AC0:lI100|H107249CB0
+107249CB0:lI105|H107249E90
+107249E90:lI97|H10724A050
+10724A050:lI109|H10724A1F0
+10724A1F0:lI101|H10724A370
+10724A370:lI116|H10724A4E0
+10724A4E0:lI101|H10724A640
+10724A640:lI114|H10724A770
+10724A770:lI45|H10724A890
+10724A890:lI50|H10724A9A0
+10724A9A0:lI46|H10724AA80
+10724AA80:lI51|H10724AB40
+10724AB40:lI47|H280052C20
+1072300E0:lH107232270|H107232288
+107232270:t2:H1072340F8,A5:cache
+1072340F8:lI47|H107235C90
+107235C90:lI111|H1072375B8
+1072375B8:lI112|H107238C70
+107238C70:lI116|H10723A158
+10723A158:lI47|H10723B4C0
+10723B4C0:lI104|H10723C5D0
+10723C5D0:lI111|H10723D4A0
+10723D4A0:lI109|H10723E240
+10723E240:lI101|H10723EE80
+10723EE80:lI98|H10723F960
+10723F960:lI114|H1072402D0
+1072402D0:lI101|H107240B60
+107240B60:lI119|H107241310
+107241310:lI47|H107241A40
+107241A40:lI67|H107242110
+107242110:lI101|H107242780
+107242780:lI108|H107242D80
+107242D80:lI108|H1072432F0
+1072432F0:lI97|H107243830
+107243830:lI114|H107243D40
+107243D40:lI47|H107244230
+107244230:lI101|H1072446E0
+1072446E0:lI114|H107244B50
+107244B50:lI108|H107244FB0
+107244FB0:lI97|H107245400
+107245400:lI110|H107245800
+107245800:lI103|H107245BC0
+107245BC0:lI47|H107245F50
+107245F50:lI50|H1072462E0
+1072462E0:lI54|H107246670
+107246670:lI46|H107246A00
+107246A00:lI48|H107246D40
+107246D40:lI46|H107247060
+107247060:lI50|H107247380
+107247380:lI47|H107247690
+107247690:lI108|H107247990
+107247990:lI105|H107247C90
+107247C90:lI98|H107247F70
+107247F70:lI47|H107248230
+107248230:lI101|H1072484F0
+1072484F0:lI114|H1072487A0
+1072487A0:lI108|H107248A50
+107248A50:lI97|H107248CD0
+107248CD0:lI110|H107248F40
+107248F40:lI103|H1072491B0
+1072491B0:lI47|H107249410
+107249410:lI108|H107249670
+107249670:lI105|H1072498C0
+1072498C0:lI98|H107249AD0
+107249AD0:lI47|H107249CC0
+107249CC0:lI100|H107249EA0
+107249EA0:lI105|H10724A060
+10724A060:lI97|H10724A200
+10724A200:lI108|H10724A380
+10724A380:lI121|H10724A4F0
+10724A4F0:lI122|H10724A650
+10724A650:lI101|H10724A780
+10724A780:lI114|H10724A8A0
+10724A8A0:lI45|H10724A9B0
+10724A9B0:lI53|H10724AA90
+10724AA90:lI46|H10724AB50
+10724AB50:lI49|H10724ABE0
+10724ABE0:lI47|H280052C20
+107232288:lH107234108|H107234120
+107234108:t2:H107235CA0,A5:cache
+107235CA0:lI47|H1072375C8
+1072375C8:lI111|H107238C80
+107238C80:lI112|H10723A168
+10723A168:lI116|H10723B4D0
+10723B4D0:lI47|H10723C5E0
+10723C5E0:lI104|H10723D4B0
+10723D4B0:lI111|H10723E250
+10723E250:lI109|H10723EE90
+10723EE90:lI101|H10723F970
+10723F970:lI98|H1072402E0
+1072402E0:lI114|H107240B70
+107240B70:lI101|H107241320
+107241320:lI119|H107241A50
+107241A50:lI47|H107242120
+107242120:lI67|H107242790
+107242790:lI101|H107242D90
+107242D90:lI108|H107243300
+107243300:lI108|H107243840
+107243840:lI97|H107243D50
+107243D50:lI114|H107244240
+107244240:lI47|H1072446F0
+1072446F0:lI101|H107244B60
+107244B60:lI114|H107244FC0
+107244FC0:lI108|H107245410
+107245410:lI97|H107245810
+107245810:lI110|H107245BD0
+107245BD0:lI103|H107245F60
+107245F60:lI47|H1072462F0
+1072462F0:lI50|H107246680
+107246680:lI54|H107246A10
+107246A10:lI46|H107246D50
+107246D50:lI48|H107247070
+107247070:lI46|H107247390
+107247390:lI50|H1072476A0
+1072476A0:lI47|H1072479A0
+1072479A0:lI108|H107247CA0
+107247CA0:lI105|H107247F80
+107247F80:lI98|H107248240
+107248240:lI47|H107248500
+107248500:lI101|H1072487B0
+1072487B0:lI114|H107248A60
+107248A60:lI108|H107248CE0
+107248CE0:lI97|H107248F50
+107248F50:lI110|H1072491C0
+1072491C0:lI103|H107249420
+107249420:lI47|H107249680
+107249680:lI108|H1072498D0
+1072498D0:lI105|H107249AE0
+107249AE0:lI98|H107249CD0
+107249CD0:lI47|H107249EB0
+107249EB0:lI100|H10724A070
+10724A070:lI101|H10724A210
+10724A210:lI98|H10724A390
+10724A390:lI117|H10724A500
+10724A500:lI103|H10724A660
+10724A660:lI103|H10724A790
+10724A790:lI101|H10724A8B0
+10724A8B0:lI114|H10724A9C0
+10724A9C0:lI45|H10724AAA0
+10724AAA0:lI53|H10724AB60
+10724AB60:lI46|H10724ABF0
+10724ABF0:lI51|H10724AC60
+10724AC60:lI46|H10724ACC0
+10724ACC0:lI49|H10724AD10
+10724AD10:lI47|H280052C20
+107234120:lH107235CB0|H107235CC8
+107235CB0:t2:H1072375D8,A5:cache
+1072375D8:lI47|H107238C90
+107238C90:lI111|H10723A178
+10723A178:lI112|H10723B4E0
+10723B4E0:lI116|H10723C5F0
+10723C5F0:lI47|H10723D4C0
+10723D4C0:lI104|H10723E260
+10723E260:lI111|H10723EEA0
+10723EEA0:lI109|H10723F980
+10723F980:lI101|H1072402F0
+1072402F0:lI98|H107240B80
+107240B80:lI114|H107241330
+107241330:lI101|H107241A60
+107241A60:lI119|H107242130
+107242130:lI47|H1072427A0
+1072427A0:lI67|H107242DA0
+107242DA0:lI101|H107243310
+107243310:lI108|H107243850
+107243850:lI108|H107243D60
+107243D60:lI97|H107244250
+107244250:lI114|H107244700
+107244700:lI47|H107244B70
+107244B70:lI101|H107244FD0
+107244FD0:lI114|H107245420
+107245420:lI108|H107245820
+107245820:lI97|H107245BE0
+107245BE0:lI110|H107245F70
+107245F70:lI103|H107246300
+107246300:lI47|H107246690
+107246690:lI50|H107246A20
+107246A20:lI54|H107246D60
+107246D60:lI46|H107247080
+107247080:lI48|H1072473A0
+1072473A0:lI46|H1072476B0
+1072476B0:lI50|H1072479B0
+1072479B0:lI47|H107247CB0
+107247CB0:lI108|H107247F90
+107247F90:lI105|H107248250
+107248250:lI98|H107248510
+107248510:lI47|H1072487C0
+1072487C0:lI101|H107248A70
+107248A70:lI114|H107248CF0
+107248CF0:lI108|H107248F60
+107248F60:lI97|H1072491D0
+1072491D0:lI110|H107249430
+107249430:lI103|H107249690
+107249690:lI47|H1072498E0
+1072498E0:lI108|H107249AF0
+107249AF0:lI105|H107249CE0
+107249CE0:lI98|H107249EC0
+107249EC0:lI47|H10724A080
+10724A080:lI99|H10724A220
+10724A220:lI114|H10724A3A0
+10724A3A0:lI121|H10724A510
+10724A510:lI112|H10724A670
+10724A670:lI116|H10724A7A0
+10724A7A0:lI111|H10724A8C0
+10724A8C0:lI45|H10724A9D0
+10724A9D0:lI53|H10724AAB0
+10724AAB0:lI46|H10724AB70
+10724AB70:lI50|H10724AC00
+10724AC00:lI47|H280052C20
+107235CC8:lH1072375E8|H107237600
+1072375E8:t2:H107238CA0,A5:cache
+107238CA0:lI47|H10723A188
+10723A188:lI111|H10723B4F0
+10723B4F0:lI112|H10723C600
+10723C600:lI116|H10723D4D0
+10723D4D0:lI47|H10723E270
+10723E270:lI104|H10723EEB0
+10723EEB0:lI111|H10723F990
+10723F990:lI109|H107240300
+107240300:lI101|H107240B90
+107240B90:lI98|H107241340
+107241340:lI114|H107241A70
+107241A70:lI101|H107242140
+107242140:lI119|H1072427B0
+1072427B0:lI47|H107242DB0
+107242DB0:lI67|H107243320
+107243320:lI101|H107243860
+107243860:lI108|H107243D70
+107243D70:lI108|H107244260
+107244260:lI97|H107244710
+107244710:lI114|H107244B80
+107244B80:lI47|H107244FE0
+107244FE0:lI101|H107245430
+107245430:lI114|H107245830
+107245830:lI108|H107245BF0
+107245BF0:lI97|H107245F80
+107245F80:lI110|H107246310
+107246310:lI103|H1072466A0
+1072466A0:lI47|H107246A30
+107246A30:lI50|H107246D70
+107246D70:lI54|H107247090
+107247090:lI46|H1072473B0
+1072473B0:lI48|H1072476C0
+1072476C0:lI46|H1072479C0
+1072479C0:lI50|H107247CC0
+107247CC0:lI47|H107247FA0
+107247FA0:lI108|H107248260
+107248260:lI105|H107248520
+107248520:lI98|H1072487D0
+1072487D0:lI47|H107248A80
+107248A80:lI101|H107248D00
+107248D00:lI114|H107248F70
+107248F70:lI108|H1072491E0
+1072491E0:lI97|H107249440
+107249440:lI110|H1072496A0
+1072496A0:lI103|H1072498F0
+1072498F0:lI47|H107249B00
+107249B00:lI108|H107249CF0
+107249CF0:lI105|H107249ED0
+107249ED0:lI98|H10724A090
+10724A090:lI47|H10724A230
+10724A230:lI99|H10724A3B0
+10724A3B0:lI111|H10724A520
+10724A520:lI109|H10724A680
+10724A680:lI112|H10724A7B0
+10724A7B0:lI105|H10724A8D0
+10724A8D0:lI108|H10724A9E0
+10724A9E0:lI101|H10724AAC0
+10724AAC0:lI114|H10724AB80
+10724AB80:lI45|H10724AC10
+10724AC10:lI56|H10724AC70
+10724AC70:lI46|H10724ACD0
+10724ACD0:lI51|H10724AD20
+10724AD20:lI46|H10724AD60
+10724AD60:lI50|H10724ADA0
+10724ADA0:lI47|H280052C20
+107237600:lH107238CB0|H107238CC8
+107238CB0:t2:H10723A198,A5:cache
+10723A198:lI47|H10723B500
+10723B500:lI111|H10723C610
+10723C610:lI112|H10723D4E0
+10723D4E0:lI116|H10723E280
+10723E280:lI47|H10723EEC0
+10723EEC0:lI104|H10723F9A0
+10723F9A0:lI111|H107240310
+107240310:lI109|H107240BA0
+107240BA0:lI101|H107241350
+107241350:lI98|H107241A80
+107241A80:lI114|H107242150
+107242150:lI101|H1072427C0
+1072427C0:lI119|H107242DC0
+107242DC0:lI47|H107243330
+107243330:lI67|H107243870
+107243870:lI101|H107243D80
+107243D80:lI108|H107244270
+107244270:lI108|H107244720
+107244720:lI97|H107244B90
+107244B90:lI114|H107244FF0
+107244FF0:lI47|H107245440
+107245440:lI101|H107245840
+107245840:lI114|H107245C00
+107245C00:lI108|H107245F90
+107245F90:lI97|H107246320
+107246320:lI110|H1072466B0
+1072466B0:lI103|H107246A40
+107246A40:lI47|H107246D80
+107246D80:lI50|H1072470A0
+1072470A0:lI54|H1072473C0
+1072473C0:lI46|H1072476D0
+1072476D0:lI48|H1072479D0
+1072479D0:lI46|H107247CD0
+107247CD0:lI50|H107247FB0
+107247FB0:lI47|H107248270
+107248270:lI108|H107248530
+107248530:lI105|H1072487E0
+1072487E0:lI98|H107248A90
+107248A90:lI47|H107248D10
+107248D10:lI101|H107248F80
+107248F80:lI114|H1072491F0
+1072491F0:lI108|H107249450
+107249450:lI97|H1072496B0
+1072496B0:lI110|H107249900
+107249900:lI103|H107249B10
+107249B10:lI47|H107249D00
+107249D00:lI108|H107249EE0
+107249EE0:lI105|H10724A0A0
+10724A0A0:lI98|H10724A240
+10724A240:lI47|H10724A3C0
+10724A3C0:lI99|H10724A530
+10724A530:lI111|H10724A690
+10724A690:lI109|H10724A7C0
+10724A7C0:lI109|H10724A8E0
+10724A8E0:lI111|H10724A9F0
+10724A9F0:lI110|H10724AAD0
+10724AAD0:lI95|H10724AB90
+10724AB90:lI116|H10724AC20
+10724AC20:lI101|H10724AC80
+10724AC80:lI115|H10724ACE0
+10724ACE0:lI116|H10724AD30
+10724AD30:lI45|H10724AD70
+10724AD70:lI49|H10724ADB0
+10724ADB0:lI46|H10724ADE0
+10724ADE0:lI50|H10724AE10
+10724AE10:lI53|H10724AE30
+10724AE30:lI47|H280052C20
+107238CC8:lH10723A1A8|N
+10723A1A8:t2:H10723B510,A5:cache
+10723B510:lI47|H10723C620
+10723C620:lI111|H10723D4F0
+10723D4F0:lI112|H10723E290
+10723E290:lI116|H10723EED0
+10723EED0:lI47|H10723F9B0
+10723F9B0:lI104|H107240320
+107240320:lI111|H107240BB0
+107240BB0:lI109|H107241360
+107241360:lI101|H107241A90
+107241A90:lI98|H107242160
+107242160:lI114|H1072427D0
+1072427D0:lI101|H107242DD0
+107242DD0:lI119|H107243340
+107243340:lI47|H107243880
+107243880:lI67|H107243D90
+107243D90:lI101|H107244280
+107244280:lI108|H107244730
+107244730:lI108|H107244BA0
+107244BA0:lI97|H107245000
+107245000:lI114|H107245450
+107245450:lI47|H107245850
+107245850:lI101|H107245C10
+107245C10:lI114|H107245FA0
+107245FA0:lI108|H107246330
+107246330:lI97|H1072466C0
+1072466C0:lI110|H107246A50
+107246A50:lI103|H107246D90
+107246D90:lI47|H1072470B0
+1072470B0:lI50|H1072473D0
+1072473D0:lI54|H1072476E0
+1072476E0:lI46|H1072479E0
+1072479E0:lI48|H107247CE0
+107247CE0:lI46|H107247FC0
+107247FC0:lI50|H107248280
+107248280:lI47|H107248540
+107248540:lI108|H1072487F0
+1072487F0:lI105|H107248AA0
+107248AA0:lI98|H107248D20
+107248D20:lI47|H107248F90
+107248F90:lI101|H107249200
+107249200:lI114|H107249460
+107249460:lI108|H1072496C0
+1072496C0:lI97|H107249910
+107249910:lI110|H107249B20
+107249B20:lI103|H107249D10
+107249D10:lI47|H107249EF0
+107249EF0:lI108|H10724A0B0
+10724A0B0:lI105|H10724A250
+10724A250:lI98|H10724A3D0
+10724A3D0:lI47|H10724A540
+10724A540:lI97|H10724A6A0
+10724A6A0:lI115|H10724A7D0
+10724A7D0:lI110|H10724A8F0
+10724A8F0:lI49|H10724AA00
+10724AA00:lI45|H10724AAE0
+10724AAE0:lI53|H10724ABA0
+10724ABA0:lI46|H10724AC30
+10724AC30:lI49|H10724AC90
+10724AC90:lI47|H280052C20
+1071F0038:lI47|H1071F05F8
+1071F05F8:lI111|H1071F1880
+1071F1880:lI112|H1071F3AF8
+1071F3AF8:lI116|H1071F6310
+1071F6310:lI47|H1071F8F60
+1071F8F60:lI104|H1071FBEA0
+1071FBEA0:lI111|H1071FEF58
+1071FEF58:lI109|H107202100
+107202100:lI101|H107205340
+107205340:lI98|H107208638
+107208638:lI114|H10720B908
+10720B908:lI101|H10720EBC8
+10720EBC8:lI119|H107211F28
+107211F28:lI47|H107215400
+107215400:lI67|H107218A90
+107218A90:lI101|H10721C2C0
+10721C2C0:lI108|H10721F9C0
+10721F9C0:lI108|H107222EB8
+107222EB8:lI97|H107226020
+107226020:lI114|H107228E08
+107228E08:lI47|H10722B840
+10722B840:lI101|H10722DF18
+10722DF18:lI114|H107230340
+107230340:lI108|H1072324B8
+1072324B8:lI97|H107234320
+107234320:lI110|H107235E88
+107235E88:lI103|H107237780
+107237780:lI47|H107238E08
+107238E08:lI50|H10723A2E0
+10723A2E0:lI54|H10723B640
+10723B640:lI46|H10723C720
+10723C720:lI48|H10723D5E0
+10723D5E0:lI46|H10723E360
+10723E360:lI50|H10723EF70
+10723EF70:lI47|H10723FA40
+10723FA40:lI108|H107240390
+107240390:lI105|H107240C10
+107240C10:lI98|H1072413A0
+1072413A0:lI47|H107241AD0
+107241AD0:lI101|H1072421A0
+1072421A0:lI114|H107242810
+107242810:lI108|H107242E10
+107242E10:lI97|H107243380
+107243380:lI110|H1072438C0
+1072438C0:lI103|N
+=proc_dictionary:<0.51.0>
+H105D8DDC8
+H105D8DE00
+=proc_stack:<0.51.0>
+y0:N
+y1:A8:infinity
+y2:H105D8DE90
+y3:H105D8DF68
+y4:A12:standard_error_sup
+y5:P<0.49.0>
+0x0000000105d8e3d8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d8e3f8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.51.0>
+105D8DE90:t5:AE:callback_cache,A11:supervisor_bridge,H105D8DE18,H105D8DE40,H105D8DE68
+105D8DE68:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfaW5mb2EC
+105D8DE40:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FzdGEC
+105D8DE18:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FsbGED
+105D8DF68:t5:A5:state,AE:standard_error,P<0.52.0>,P<0.52.0>,H280068C20
+105D8DDC8:t2:AA:$ancestors,H105D8DDB8
+105D8DDB8:lAA:kernel_sup|H105D8DD78
+105D8DD78:lP<0.47.0>|N
+105D8DE00:t2:AD:$initial_call,H105D8DDE0
+105D8DDE0:t3:A11:supervisor_bridge,AE:standard_error,I1
+=proc_dictionary:<0.52.0>
+H105D972F8
+H105D972E0
+=proc_stack:<0.52.0>
+y0:p<0.1>
+0x0000000105d979e0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.52.0>
+105D972F8:t2:A5:onlcr,A5:false
+105D972E0:t2:A8:encoding,A7:unicode
+=proc_dictionary:<0.53.0>
+H105D801F0
+H105D80208
+=proc_stack:<0.53.0>
+y0:N
+y1:A8:infinity
+y2:H105D801C0
+y3:A9:undefined
+y4:AD:file_server_2
+y5:P<0.49.0>
+0x0000000105ddf9b8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105ddf9d8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.53.0>
+105D801C0:t5:AE:callback_cache,AB:file_server,H105D80220,H105D80248,H105D80270
+105D80270:E1E:g3F3C2ZpbGVfc2VydmVydwtoYW5kbGVfaW5mb2EC
+105D80248:E1E:g3F3C2ZpbGVfc2VydmVydwtoYW5kbGVfY2FzdGEC
+105D80220:E1E:g3F3C2ZpbGVfc2VydmVydwtoYW5kbGVfY2FsbGED
+105D801F0:t2:AA:$ancestors,H105D80298
+105D80298:lAA:kernel_sup|H105D802C8
+105D802C8:lP<0.47.0>|N
+105D80208:t2:AD:$initial_call,H105D802A8
+105D802A8:t3:AB:file_server,A4:init,I1
+=proc_dictionary:<0.55.0>
+H105D90368
+H105D90380
+=proc_stack:<0.55.0>
+y0:N
+y1:A8:infinity
+y2:H105D902E8
+y3:H105D90318
+y4:A7:inet_db
+y5:P<0.49.0>
+0x0000000105d92198:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d921b8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.55.0>
+105D902E8:t5:AE:callback_cache,A7:inet_db,H105D90398,H105D903C0,H105D903E8
+105D903E8:E1A:g3F3B2luZXRfZGJ3C2hhbmRsZV9pbmZvYQI=
+105D903C0:E1A:g3F3B2luZXRfZGJ3C2hhbmRsZV9jYXN0YQI=
+105D90398:E1A:g3F3B2luZXRfZGJ3C2hhbmRsZV9jYWxsYQM=
+105D90318:t9:A5:state,A7:inet_db,AA:inet_cache,A11:inet_hosts_byname,A11:inet_hosts_byaddr,A16:inet_hosts_file_byname,A16:inet_hosts_file_byaddr,AC:inet_sockets,H105D90410
+105D90410:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAAK/o+vQAAd/g02c=
+105D90368:t2:AA:$ancestors,H105D90428
+105D90428:lAA:kernel_sup|H105D90458
+105D90458:lP<0.47.0>|N
+105D90380:t2:AD:$initial_call,H105D90438
+105D90438:t3:A7:inet_db,A4:init,I1
+=proc_dictionary:<0.56.0>
+H105D98DE8
+H105D98E20
+=proc_stack:<0.56.0>
+y0:N
+y1:A8:infinity
+y2:H105D98EB0
+y3:H105D98F20
+y4:A3:rex
+y5:P<0.49.0>
+0x0000000105d99428:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d99448:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.56.0>
+105D98EB0:t5:AE:callback_cache,A3:rpc,H105D98E38,H105D98E60,H105D98E88
+105D98E88:E16:g3F3A3JwY3cLaGFuZGxlX2luZm9hAg==
+105D98E60:E16:g3F3A3JwY3cLaGFuZGxlX2Nhc3RhAg==
+105D98E38:E16:g3F3A3JwY3cLaGFuZGxlX2NhbGxhAw==
+105D98F20:Mf1:H280071110:H105D98F08
+105D98F08:t2:P<0.57.0>,H105D98EF0
+105D98EF0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALAD+vQAAd/g02c=
+105D98DE8:t2:AA:$ancestors,H105D98DD8
+105D98DD8:lAA:kernel_sup|H105D98D98
+105D98D98:lP<0.47.0>|N
+105D98E20:t2:AD:$initial_call,H105D98E00
+105D98E00:t3:A3:rpc,A4:init,I1
+=proc_stack:<0.57.0>
+y0:N
+y1:H105D99468
+y2:N
+0x0000000105d99b98:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.57.0>
+105D99468:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALAE+vYAAd/g02c=
+=proc_dictionary:<0.58.0>
+H105D84510
+H105DA9070
+H105DA9088
+H105D84428
+=proc_stack:<0.58.0>
+y0:N
+y1:A8:infinity
+y2:H105DA9040
+y3:H105DA9158
+y4:A12:global_name_server
+y5:P<0.49.0>
+0x0000000105d856e8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d85708:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.58.0>
+105DA9040:t5:AE:callback_cache,A6:global,H105DA90A0,H105DA90C8,H105DA90F0
+105DA90F0:E19:g3F3Bmdsb2JhbHcLaGFuZGxlX2luZm9hAg==
+105DA90C8:E19:g3F3Bmdsb2JhbHcLaGFuZGxlX2Nhc3RhAg==
+105DA90A0:E19:g3F3Bmdsb2JhbHcLaGFuZGxlX2NhbGxhAw==
+105DA9158:tB:A5:state,H105DA91B8,H2800715B0,N,N,N,AD:nonode@nohost,P<0.59.0>,P<0.60.0>,A8:no_trace,A5:false
+105DA91B8:t3:A4:conf,A4:true,A4:true
+105D84510:t2:A12:creation_extension,H105D833F0
+105D833F0:B889410000978444288
+105DA9070:t2:AA:$ancestors,H105DA9118
+105DA9118:lAA:kernel_sup|H105DA9148
+105DA9148:lP<0.47.0>|N
+105DA9088:t2:AD:$initial_call,H105DA9128
+105DA9128:t3:A6:global,A4:init,I1
+105D84428:t2:A9:rand_seed,H105D84400
+105D84400:t2:H105D84478,H105D844C0
+105D844C0:lI236283493786687394|I177509139475053309
+105D84478:Mf6:H28007DE10:A5:exsss,H28007DD70,I58,H28007DD98,H28007DDC0,H28007DDE8
+=proc_stack:<0.59.0>
+y0:A8:infinity
+y1:H105DAE560
+0x0000000105daeb20:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.59.0>
+105DAE560:t7:A5:multi,N,N,N,AD:nonode@nohost,A5:false,A5:false
+=proc_stack:<0.60.0>
+y0:N
+0x0000000105dafe38:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.60.0>
+=proc_dictionary:<0.61.0>
+H105DAA4F0
+H105DAA580
+H105DAA418
+H105DAA430
+H105DAA518
+H105DAA598
+=proc_stack:<0.61.0>
+y0:N
+y1:A8:infinity
+y2:H105DAA3D8
+y3:H105DAAB68
+y4:AC:global_group
+y5:P<0.49.0>
+0x0000000105daaef0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105daaf10:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.61.0>
+105DAA3D8:t5:AE:callback_cache,AC:global_group,H105DAA478,H105DAA4A0,H105DAA4C8
+105DAA4C8:E1F:g3F3DGdsb2JhbF9ncm91cHcLaGFuZGxlX2luZm9hAg==
+105DAA4A0:E1F:g3F3DGdsb2JhbF9ncm91cHcLaGFuZGxlX2Nhc3RhAg==
+105DAA478:E1F:g3F3DGdsb2JhbF9ncm91cHcLaGFuZGxlX2NhbGxhAw==
+105DAAB68:tA:A5:state,A7:no_conf,N,H28007F1E8,N,N,A6:normal,H28007F1E8,H28007FCE8,A9:undefined
+105DAA4F0:t2:A4:send,H28007F1D8
+105DAA580:t2:AA:$ancestors,H105DAA5C0
+105DAA5C0:lAA:kernel_sup|H105DAA600
+105DAA600:lP<0.47.0>|N
+105DAA418:t2:A12:global_group_check,P<0.62.0>
+105DAA430:t2:A10:registered_names,H28007F1D8
+105DAA518:t2:AC:whereis_name,H28007F1D8
+105DAA598:t2:AD:$initial_call,H105DAA5D0
+105DAA5D0:t3:AC:global_group,A4:init,I1
+=proc_stack:<0.62.0>
+0x0000000105daf270:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.62.0>
+=proc_dictionary:<0.63.0>
+H105DAFF28
+H105DAFF40
+=proc_stack:<0.63.0>
+y0:A5:false
+y1:N
+y2:A8:infinity
+y3:H105DB0060
+y4:A11:erl_signal_server
+y5:P<0.49.0>
+0x0000000105db0568:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105db0588:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.63.0>
+105DB0060:lH105DB0030|N
+105DB0030:t5:A7:handler,A12:erl_signal_handler,A5:false,H28008FBD0,A5:false
+105DAFF28:t2:AA:$ancestors,H105DAFF18
+105DAFF18:lAA:kernel_sup|H105DAFED8
+105DAFED8:lP<0.47.0>|N
+105DAFF40:t2:AD:$initial_call,H280042BE0
+=proc_dictionary:<0.64.0>
+H105DF31D8
+H105DF31F0
+=proc_stack:<0.64.0>
+y0:N
+y1:A8:infinity
+y2:H105DF31A8
+y3:H105DFA798
+y4:P<0.64.0>
+y5:P<0.49.0>
+0x0000000105dfb420:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105dfb440:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.64.0>
+105DF31A8:t5:AE:callback_cache,A11:supervisor_bridge,H105DF3230,H105DF3258,H105DF3280
+105DF3280:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfaW5mb2EC
+105DF3258:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FzdGEC
+105DF3230:E24:g3F3EXN1cGVydmlzb3JfYnJpZGdldwtoYW5kbGVfY2FsbGED
+105DFA798:t5:A5:state,A8:user_sup,P<0.69.0>,P<0.69.0>,H105DF3190
+105DF3190:t2:P<0.64.0>,A8:user_sup
+105DF31D8:t2:AA:$ancestors,H105DF32A8
+105DF32A8:lAA:kernel_sup|H105DF3310
+105DF3310:lP<0.47.0>|N
+105DF31F0:t2:AD:$initial_call,H105DF32B8
+105DF32B8:t3:A11:supervisor_bridge,A8:user_sup,I1
+=proc_dictionary:<0.65.0>
+H105DAC538
+H105D87E18
+H105DAC250
+=proc_stack:<0.65.0>
+y0:N
+y1:A8:infinity
+y2:H105D889A8
+y3:N
+y4:H105DAC4F8
+0x0000000105d89030:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d89050:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.65.0>
+105D889A8:t5:A5:state,H105D88990,N,H280082770,A5:false
+105D88990:t2:A6:server,H105D88920
+105D88920:tA:A5:state,H105DAC3B0,H105DAC350,H105DAC398,A5:false,A9:undefined,P<0.69.0>,P<0.69.0>,H105D87DE8,H105D888F0
+105D888F0:t2:A5:false,H28005B2F8
+105D87DE8:t5:A2:gr,I1,I0,P<0.69.0>,H105D87E40
+105D87E40:lH105D87E50|N
+105D87E50:t4:A5:group,I0,P<0.69.0>,H280010188
+105DAC398:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBC+vQAAd/g02c=
+105DAC350:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBA+vQAAd/g02c=
+105DAC3B0:t1A:A5:state,H105DAC2B8,H105DAC488,H105DAC2D0,H105DAC2E8,A4:true,N,N,N,N,A9:undefined,I125,I12,A5:false,H280086838,H280086850,H280086868,H280086880,H280086898,H2800868B0,H2800868C8,A5:false,A5:false,H2800868E0,H2800868F8,H105DAC320
+105DAC320:t5:AA:re_pattern,I0,I1,I0,H105DAC368
+105DAC368:Yc130931BD0:0:15E
+105DAC2E8:Mf4:H280086920:A4:true,A5:false,A5:false,A5:false
+105DAC2D0:t2:P<0.67.0>,H105DAC350
+105DAC488:t2:P<0.68.0>,H105DAC398
+105DAC2B8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALA++vYAAd/g02c=
+105DAC4F8:t7:A6:params,AF:state_functions,A5:false,P<0.65.0>,H105DAC598,A8:user_drv,A8:infinity
+105DAC598:lA8:user_drv|N
+105DAC538:t2:AA:$ancestors,H105DAC5A8
+105DAC5A8:lP<0.69.0>|H105DAC268
+105DAC268:lP<0.64.0>|H105DAC298
+105DAC298:lAA:kernel_sup|H105DAC2A8
+105DAC2A8:lP<0.47.0>|N
+105D87E18:t2:AD:current_group,P<0.69.0>
+105DAC250:t2:AD:$initial_call,H105DAC278
+105DAC278:t3:A8:user_drv,A4:init,I1
+=proc_dictionary:<0.67.0>
+H105DAAFD8
+H105DAB010
+=proc_stack:<0.67.0>
+y0:N
+y1:H105DAB028
+y2:H105DAAF50
+0x0000000105dab640:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105dab660:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.67.0>
+105DAB028:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBA+vQAAd/g02c=
+105DAAF50:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALA++vYAAd/g02c=
+105DAAFD8:t2:AA:$ancestors,H105DAAFC8
+105DAAFC8:lA8:user_drv|H105DAAF88
+105DAAF88:lP<0.64.0>|H105DAAF78
+105DAAF78:lAA:kernel_sup|H105DAAF68
+105DAAF68:lP<0.47.0>|N
+105DAB010:t2:AD:$initial_call,H105DAAFF0
+105DAAFF0:t3:A8:prim_tty,A6:writer,I1
+=proc_dictionary:<0.68.0>
+H105DAB758
+H105DAB790
+=proc_stack:<0.68.0>
+y0:N
+y1:N
+y2:H280086C10
+y3:A4:utf8
+y4:H105DAB7A8
+y5:H105DAB7C0
+y6:P<0.65.0>
+y7:H105DAB6B0
+0x0000000105dabd90:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105dabdb0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.68.0>
+105DAB7A8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBC+vQAAd/g02c=
+105DAB7C0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALBD+vQAAd/g02c=
+105DAB6B0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALA++vYAAd/g02c=
+105DAB758:t2:AA:$ancestors,H105DAB748
+105DAB748:lA8:user_drv|H105DAB708
+105DAB708:lP<0.64.0>|H105DAB6F8
+105DAB6F8:lAA:kernel_sup|H105DAB6E8
+105DAB6E8:lP<0.47.0>|N
+105DAB790:t2:AD:$initial_call,H105DAB770
+105DAB770:t3:A8:prim_tty,A6:reader,I1
+=proc_dictionary:<0.69.0>
+H105D89778
+H105D898F8
+H105D897E8
+H105D85E78
+H105D89810
+H105D89730
+H105D89748
+H105D89760
+=proc_stack:<0.69.0>
+y0:N
+y1:A2:ok
+y2:P<0.65.0>
+0x0000000105d89c18:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.69.0>
+105D89778:t2:AD:unicode_state,A4:true
+105D898F8:t2:AA:expand_fun,H2800870F0
+105D897E8:t2:A4:echo,A5:false
+105D85E78:t2:AB:kill_buffer,N
+105D89810:t2:AC:expand_below,A4:true
+105D89730:t2:AB:line_buffer,N
+105D89748:t2:A9:read_mode,A6:binary
+105D89760:t2:A8:user_drv,P<0.65.0>
+=proc_dictionary:<0.70.0>
+H105D86A30
+H105D86A48
+=proc_stack:<0.70.0>
+y0:N
+y1:A8:infinity
+y2:H105D86C90
+y3:H105D81B48
+y4:AA:logger_sup
+y5:P<0.49.0>
+0x0000000105d82070:SReturn addr 0x3E951BC (proc_lib:wake_up/3 + 220)
+y0:N
+y1:N
+y2:SCatch 0x3E951E4 (proc_lib:wake_up/3 + 260)
+0x0000000105d82090:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.70.0>
+105D86C90:t5:AE:callback_cache,AA:supervisor,H105D86CC0,H105D86CE8,H105D86D10
+105D86D10:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105D86CE8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105D86CC0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105D81B48:tC:A5:state,H280088258,AB:one_for_one,H105D81B30,A9:undefined,I1,I5,N,I0,A5:never,AA:logger_sup,N
+105D81B30:t2:H105D81B20,H105D81AC0
+105D81AC0:Mf4:H105D81AF8:H105D81718,H105D86BE0,H105D86C30,H105D81A70
+105D81AF8:t4:A7:default,A16:logger_handler_watcher,AC:logger_proxy,AB:ssl_handler
+105D81A70:t9:A5:child,P<0.105.0>,AB:ssl_handler,H105D81A50,A9:temporary,A5:false,I2000,A6:worker,H280091F30
+105D81A50:t3:AA:logger_olp,AA:start_link,A9:undefined
+105D86C30:t9:A5:child,P<0.72.0>,AC:logger_proxy,H28005A150,A9:temporary,A5:false,I2000,A6:worker,H28005A140
+105D86BE0:t9:A5:child,P<0.71.0>,A16:logger_handler_watcher,H2800882C0,A9:permanent,A5:false,AB:brutal_kill,A6:worker,H105D86C80
+105D86C80:lA16:logger_handler_watcher|N
+105D81718:t9:A5:child,P<0.77.0>,A7:default,H105D817D8,A9:temporary,A5:false,I2000,A6:worker,H280091F30
+105D817D8:t3:AA:logger_olp,AA:start_link,A9:undefined
+105D81B20:lAB:ssl_handler|H105D81698
+105D81698:lA7:default|H105D86B70
+105D86B70:lAC:logger_proxy|H105D86BB8
+105D86BB8:lA16:logger_handler_watcher|N
+105D86A30:t2:AA:$ancestors,H105D86A70
+105D86A70:lAA:kernel_sup|H105D86AB0
+105D86AB0:lP<0.47.0>|N
+105D86A48:t2:AD:$initial_call,H105D86A80
+105D86A80:t3:AA:supervisor,AA:logger_sup,I1
+=proc_dictionary:<0.71.0>
+H105D85808
+H105D85840
+=proc_stack:<0.71.0>
+y0:N
+y1:A8:infinity
+y2:H105D858D0
+y3:H105D85B58
+y4:A16:logger_handler_watcher
+y5:P<0.70.0>
+0x0000000105d85e38:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d85e58:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.71.0>
+105D858D0:t5:AE:callback_cache,A16:logger_handler_watcher,H105D85858,H105D85880,H105D858A8
+105D858A8:E29:g3F3FmxvZ2dlcl9oYW5kbGVyX3dhdGNoZXJ3C2hhbmRsZV9pbmZvYQI=
+105D85880:E29:g3F3FmxvZ2dlcl9oYW5kbGVyX3dhdGNoZXJ3C2hhbmRsZV9jYXN0YQI=
+105D85858:E29:g3F3FmxvZ2dlcl9oYW5kbGVyX3dhdGNoZXJ3C2hhbmRsZV9jYWxsYQM=
+105D85B58:t2:A5:state,H105D85B48
+105D85B48:lH105D859F0|H105D85B38
+105D859F0:t2:A7:default,H105D859D8
+105D859D8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALCJ+vQAAd/g02c=
+105D85B38:lH105D85B20|N
+105D85B20:t2:AB:ssl_handler,H105D85B08
+105D85B08:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALFo+vQAAd/g02c=
+105D85808:t2:AA:$ancestors,H105D857F8
+105D857F8:lAA:logger_sup|H105D857B8
+105D857B8:lAA:kernel_sup|H105D857A8
+105D857A8:lP<0.47.0>|N
+105D85840:t2:AD:$initial_call,H105D85820
+105D85820:t3:A16:logger_handler_watcher,A4:init,I1
+=proc_dictionary:<0.72.0>
+H105D89DB0
+H105D89DC8
+H105D89DE0
+=proc_stack:<0.72.0>
+0x0000000105d8a748:SReturn addr 0x3F1CC18 (gen_server:try_handle_info/3 + 240)
+y0:N
+y1:N
+y2:N
+y3:AA:logger_olp
+y4:H105D89CF8
+y5:H105DE8808
+y6:SCatch 0x3F1CC6C (gen_server:try_handle_info/3 + 324)
+0x0000000105d8a788:SReturn addr 0x3F1D994 (gen_server:handle_msg/6 + 1028)
+y0:A8:infinity
+y1:H105D8A120
+y2:H105D89CF8
+y3:P<0.72.0>
+y4:P<0.70.0>
+y5:H105DE8808
+0x0000000105d8a7c0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d8a7e0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.72.0>
+105D89CF8:Mf14:H105D89E18:AC:logger_proxy,AC:logger_proxy,A5:async,A4:true,A5:false,I1000,I5000,I500,I0,I-576460751881273,A8:no_state,I-576460751881273,I0,H105D89EC0,I5000,I500,I1000,A5:false,I3000000,I20000
+105D89E18:t14:A2:id,A6:module,A4:mode,A4:idle,A12:burst_limit_enable,AE:drop_mode_qlen,AA:flush_qlen,AE:sync_mode_qlen,AF:burst_msg_count,AC:burst_win_ts,A8:cb_state,AC:last_load_ts,A9:last_qlen,A8:mode_ref,A1B:overload_kill_restart_after,A15:burst_limit_max_count,A17:burst_limit_window_time,A14:overload_kill_enable,A16:overload_kill_mem_size,A12:overload_kill_qlen
+105D89EC0:t2:AA:logger_olp,AC:logger_proxy
+105DE8808:t5:A3:log,A5:error,H105DE5C18,H105DE8758,H105DE87D0
+105DE87D0:Mf4:H105DE87A8:H105DE8768,P<0.134.0>,I1701928823965135,P<0.69.0>
+105DE87A8:t4:AC:error_logger,A3:pid,A4:time,A2:gl
+105DE8768:Mf2:H105DE8790:A4:true,A5:error
+105DE8790:t2:A8:emulator,A3:tag
+105DE8758:lP<0.134.0>|H105DE5C28
+105DE5C28:lH105DE5C38|N
+105DE5C38:t2:H105DE5C50,H105DE5C90
+105DE5C90:lH105DE5D10|H105DE5CA0
+105DE5D10:t4:A23:showtime@internal@reports@formatter,A1C:-create_test_report/1-fun-4-,I1,H105DE5DD8
+105DE5DD8:lH105DE5E78|H105DE5DE8
+105DE5E78:t2:A4:file,H105DE86B8
+105DE86B8:lI47|H105DE86A8
+105DE86A8:lI85|H105DE8698
+105DE8698:lI115|H105DE8688
+105DE8688:lI101|H105DE8678
+105DE8678:lI114|H105DE8668
+105DE8668:lI115|H105DE8658
+105DE8658:lI47|H105DE8648
+105DE8648:lI110|H105DE8638
+105DE8638:lI105|H105DE8628
+105DE8628:lI99|H105DE8618
+105DE8618:lI104|H105DE8608
+105DE8608:lI111|H105DE85F8
+105DE85F8:lI108|H105DE85E8
+105DE85E8:lI97|H105DE85D8
+105DE85D8:lI115|H105DE85C8
+105DE85C8:lI99|H105DE85B8
+105DE85B8:lI97|H105DE85A8
+105DE85A8:lI114|H105DE8598
+105DE8598:lI108|H105DE8588
+105DE8588:lI115|H105DE8578
+105DE8578:lI111|H105DE8568
+105DE8568:lI110|H105DE8558
+105DE8558:lI47|H105DE8548
+105DE8548:lI86|H105DE8538
+105DE8538:lI83|H105DE8528
+105DE8528:lI32|H105DE8518
+105DE8518:lI67|H105DE8508
+105DE8508:lI111|H105DE84F8
+105DE84F8:lI100|H105DE84E8
+105DE84E8:lI101|H105DE84D8
+105DE84D8:lI47|H105DE84C8
+105DE84C8:lI65|H105DE84B8
+105DE84B8:lI100|H105DE84A8
+105DE84A8:lI118|H105DE8498
+105DE8498:lI101|H105DE8488
+105DE8488:lI110|H105DE8478
+105DE8478:lI116|H105DE8468
+105DE8468:lI79|H105DE8458
+105DE8458:lI102|H105DE8448
+105DE8448:lI67|H105DE8438
+105DE8438:lI111|H105DE8428
+105DE8428:lI100|H105DE8418
+105DE8418:lI101|H105DE8408
+105DE8408:lI47|H105DE83F8
+105DE83F8:lI97|H105DE83E8
+105DE83E8:lI111|H105DE83D8
+105DE83D8:lI99|H105DE83C8
+105DE83C8:lI50|H105DE83B8
+105DE83B8:lI48|H105DE83A8
+105DE83A8:lI50|H105DE8398
+105DE8398:lI51|H105DE8388
+105DE8388:lI47|H105DE8378
+105DE8378:lI98|H105DE8368
+105DE8368:lI117|H105DE8358
+105DE8358:lI105|H105DE8348
+105DE8348:lI108|H105DE8338
+105DE8338:lI100|H105DE8328
+105DE8328:lI47|H105DE8318
+105DE8318:lI100|H105DE8308
+105DE8308:lI101|H105DE82F8
+105DE82F8:lI118|H105DE82E8
+105DE82E8:lI47|H105DE82D8
+105DE82D8:lI101|H105DE82C8
+105DE82C8:lI114|H105DE82B8
+105DE82B8:lI108|H105DE82A8
+105DE82A8:lI97|H105DE8298
+105DE8298:lI110|H105DE8288
+105DE8288:lI103|H105DE8278
+105DE8278:lI47|H105DE8268
+105DE8268:lI97|H105DE8258
+105DE8258:lI100|H105DE8248
+105DE8248:lI103|H105DE8238
+105DE8238:lI108|H105DE8228
+105DE8228:lI101|H105DE8218
+105DE8218:lI110|H105DE8208
+105DE8208:lI116|H105DE81F8
+105DE81F8:lI47|H105DE81E8
+105DE81E8:lI95|H105DE81D8
+105DE81D8:lI103|H105DE81C8
+105DE81C8:lI108|H105DE81B8
+105DE81B8:lI101|H105DE81A8
+105DE81A8:lI97|H105DE8198
+105DE8198:lI109|H105DE8188
+105DE8188:lI95|H105DE8178
+105DE8178:lI97|H105DE8168
+105DE8168:lI114|H105DE8158
+105DE8158:lI116|H105DE8148
+105DE8148:lI101|H105DE8138
+105DE8138:lI102|H105DE8128
+105DE8128:lI97|H105DE8118
+105DE8118:lI99|H105DE8108
+105DE8108:lI116|H105DE80F8
+105DE80F8:lI115|H105DE80E8
+105DE80E8:lI47|H105DE80D8
+105DE80D8:lI115|H105DE80C8
+105DE80C8:lI104|H105DE80B8
+105DE80B8:lI111|H105DE80A8
+105DE80A8:lI119|H105DE8098
+105DE8098:lI116|H105DE8088
+105DE8088:lI105|H105DE8078
+105DE8078:lI109|H105DE8068
+105DE8068:lI101|H105DE8058
+105DE8058:lI64|H105DE8048
+105DE8048:lI105|H105DE8038
+105DE8038:lI110|H105DE8028
+105DE8028:lI116|H105DE8018
+105DE8018:lI101|H105DE8008
+105DE8008:lI114|H105DE7FF8
+105DE7FF8:lI110|H105DE7FE8
+105DE7FE8:lI97|H105DE7FD8
+105DE7FD8:lI108|H105DE7FC8
+105DE7FC8:lI64|H105DE7FB8
+105DE7FB8:lI114|H105DE7FA8
+105DE7FA8:lI101|H105DE7F98
+105DE7F98:lI112|H105DE7F88
+105DE7F88:lI111|H105DE7F78
+105DE7F78:lI114|H105DE7F68
+105DE7F68:lI116|H105DE7F58
+105DE7F58:lI115|H105DE7F48
+105DE7F48:lI64|H105DE7F38
+105DE7F38:lI102|H105DE7F28
+105DE7F28:lI111|H105DE7F18
+105DE7F18:lI114|H105DE7F08
+105DE7F08:lI109|H105DE7EF8
+105DE7EF8:lI97|H105DE7EE8
+105DE7EE8:lI116|H105DE7ED8
+105DE7ED8:lI116|H105DE7EC8
+105DE7EC8:lI101|H105DE7EB8
+105DE7EB8:lI114|H105DE7EA8
+105DE7EA8:lI46|H105DE7E98
+105DE7E98:lI101|H105DE7E88
+105DE7E88:lI114|H105DE7E78
+105DE7E78:lI108|N
+105DE5DE8:lH105DE5E90|N
+105DE5E90:t2:A4:line,I665
+105DE5CA0:lH105DE5D38|H105DE5CB0
+105DE5D38:t4:AA:gleam@list,AD:do_filter_map,I3,H105DE5DF8
+105DE5DF8:lH105DE5EA8|H105DE5E08
+105DE5EA8:t2:A4:file,H105DE7E68
+105DE7E68:lI47|H105DE7E58
+105DE7E58:lI85|H105DE7E48
+105DE7E48:lI115|H105DE7E38
+105DE7E38:lI101|H105DE7E28
+105DE7E28:lI114|H105DE7E18
+105DE7E18:lI115|H105DE7E08
+105DE7E08:lI47|H105DE7DF8
+105DE7DF8:lI110|H105DE7DE8
+105DE7DE8:lI105|H105DE7DD8
+105DE7DD8:lI99|H105DE7DC8
+105DE7DC8:lI104|H105DE7DB8
+105DE7DB8:lI111|H105DE7DA8
+105DE7DA8:lI108|H105DE7D98
+105DE7D98:lI97|H105DE7D88
+105DE7D88:lI115|H105DE7D78
+105DE7D78:lI99|H105DE7D68
+105DE7D68:lI97|H105DE7D58
+105DE7D58:lI114|H105DE7D48
+105DE7D48:lI108|H105DE7D38
+105DE7D38:lI115|H105DE7D28
+105DE7D28:lI111|H105DE7D18
+105DE7D18:lI110|H105DE7D08
+105DE7D08:lI47|H105DE7CF8
+105DE7CF8:lI86|H105DE7CE8
+105DE7CE8:lI83|H105DE7CD8
+105DE7CD8:lI32|H105DE7CC8
+105DE7CC8:lI67|H105DE7CB8
+105DE7CB8:lI111|H105DE7CA8
+105DE7CA8:lI100|H105DE7C98
+105DE7C98:lI101|H105DE7C88
+105DE7C88:lI47|H105DE7C78
+105DE7C78:lI65|H105DE7C68
+105DE7C68:lI100|H105DE7C58
+105DE7C58:lI118|H105DE7C48
+105DE7C48:lI101|H105DE7C38
+105DE7C38:lI110|H105DE7C28
+105DE7C28:lI116|H105DE7C18
+105DE7C18:lI79|H105DE7C08
+105DE7C08:lI102|H105DE7BF8
+105DE7BF8:lI67|H105DE7BE8
+105DE7BE8:lI111|H105DE7BD8
+105DE7BD8:lI100|H105DE7BC8
+105DE7BC8:lI101|H105DE7BB8
+105DE7BB8:lI47|H105DE7BA8
+105DE7BA8:lI97|H105DE7B98
+105DE7B98:lI111|H105DE7B88
+105DE7B88:lI99|H105DE7B78
+105DE7B78:lI50|H105DE7B68
+105DE7B68:lI48|H105DE7B58
+105DE7B58:lI50|H105DE7B48
+105DE7B48:lI51|H105DE7B38
+105DE7B38:lI47|H105DE7B28
+105DE7B28:lI98|H105DE7B18
+105DE7B18:lI117|H105DE7B08
+105DE7B08:lI105|H105DE7AF8
+105DE7AF8:lI108|H105DE7AE8
+105DE7AE8:lI100|H105DE7AD8
+105DE7AD8:lI47|H105DE7AC8
+105DE7AC8:lI100|H105DE7AB8
+105DE7AB8:lI101|H105DE7AA8
+105DE7AA8:lI118|H105DE7A98
+105DE7A98:lI47|H105DE7A88
+105DE7A88:lI101|H105DE7A78
+105DE7A78:lI114|H105DE7A68
+105DE7A68:lI108|H105DE7A58
+105DE7A58:lI97|H105DE7A48
+105DE7A48:lI110|H105DE7A38
+105DE7A38:lI103|H105DE7A28
+105DE7A28:lI47|H105DE7A18
+105DE7A18:lI103|H105DE7A08
+105DE7A08:lI108|H105DE79F8
+105DE79F8:lI101|H105DE79E8
+105DE79E8:lI97|H105DE79D8
+105DE79D8:lI109|H105DE79C8
+105DE79C8:lI95|H105DE79B8
+105DE79B8:lI115|H105DE79A8
+105DE79A8:lI116|H105DE7998
+105DE7998:lI100|H105DE7988
+105DE7988:lI108|H105DE7978
+105DE7978:lI105|H105DE7968
+105DE7968:lI98|H105DE7958
+105DE7958:lI47|H105DE7948
+105DE7948:lI95|H105DE7938
+105DE7938:lI103|H105DE7928
+105DE7928:lI108|H105DE7918
+105DE7918:lI101|H105DE7908
+105DE7908:lI97|H105DE78F8
+105DE78F8:lI109|H105DE78E8
+105DE78E8:lI95|H105DE78D8
+105DE78D8:lI97|H105DE78C8
+105DE78C8:lI114|H105DE78B8
+105DE78B8:lI116|H105DE78A8
+105DE78A8:lI101|H105DE7898
+105DE7898:lI102|H105DE7888
+105DE7888:lI97|H105DE7878
+105DE7878:lI99|H105DE7868
+105DE7868:lI116|H105DE7858
+105DE7858:lI115|H105DE7848
+105DE7848:lI47|H105DE7838
+105DE7838:lI103|H105DE7828
+105DE7828:lI108|H105DE7818
+105DE7818:lI101|H105DE7808
+105DE7808:lI97|H105DE77F8
+105DE77F8:lI109|H105DE77E8
+105DE77E8:lI64|H105DE77D8
+105DE77D8:lI108|H105DE77C8
+105DE77C8:lI105|H105DE77B8
+105DE77B8:lI115|H105DE77A8
+105DE77A8:lI116|H105DE7798
+105DE7798:lI46|H105DE7788
+105DE7788:lI101|H105DE7778
+105DE7778:lI114|H105DE7768
+105DE7768:lI108|N
+105DE5E08:lH105DE5EC0|N
+105DE5EC0:t2:A4:line,I94
+105DE5CB0:lH105DE5D60|H105DE5CC0
+105DE5D60:t4:A23:showtime@internal@reports@formatter,A12:create_test_report,I1,H105DE5E18
+105DE5E18:lH105DE5ED8|H105DE5E28
+105DE5ED8:t2:A4:file,H105DE7758
+105DE7758:lI47|H105DE7748
+105DE7748:lI85|H105DE7738
+105DE7738:lI115|H105DE7728
+105DE7728:lI101|H105DE7718
+105DE7718:lI114|H105DE7708
+105DE7708:lI115|H105DE76F8
+105DE76F8:lI47|H105DE76E8
+105DE76E8:lI110|H105DE76D8
+105DE76D8:lI105|H105DE76C8
+105DE76C8:lI99|H105DE76B8
+105DE76B8:lI104|H105DE76A8
+105DE76A8:lI111|H105DE7698
+105DE7698:lI108|H105DE7688
+105DE7688:lI97|H105DE7678
+105DE7678:lI115|H105DE7668
+105DE7668:lI99|H105DE7658
+105DE7658:lI97|H105DE7648
+105DE7648:lI114|H105DE7638
+105DE7638:lI108|H105DE7628
+105DE7628:lI115|H105DE7618
+105DE7618:lI111|H105DE7608
+105DE7608:lI110|H105DE75F8
+105DE75F8:lI47|H105DE75E8
+105DE75E8:lI86|H105DE75D8
+105DE75D8:lI83|H105DE75C8
+105DE75C8:lI32|H105DE75B8
+105DE75B8:lI67|H105DE75A8
+105DE75A8:lI111|H105DE7598
+105DE7598:lI100|H105DE7588
+105DE7588:lI101|H105DE7578
+105DE7578:lI47|H105DE7568
+105DE7568:lI65|H105DE7558
+105DE7558:lI100|H105DE7548
+105DE7548:lI118|H105DE7538
+105DE7538:lI101|H105DE7528
+105DE7528:lI110|H105DE7518
+105DE7518:lI116|H105DE7508
+105DE7508:lI79|H105DE74F8
+105DE74F8:lI102|H105DE74E8
+105DE74E8:lI67|H105DE74D8
+105DE74D8:lI111|H105DE74C8
+105DE74C8:lI100|H105DE74B8
+105DE74B8:lI101|H105DE74A8
+105DE74A8:lI47|H105DE7498
+105DE7498:lI97|H105DE7488
+105DE7488:lI111|H105DE7478
+105DE7478:lI99|H105DE7468
+105DE7468:lI50|H105DE7458
+105DE7458:lI48|H105DE7448
+105DE7448:lI50|H105DE7438
+105DE7438:lI51|H105DE7428
+105DE7428:lI47|H105DE7418
+105DE7418:lI98|H105DE7408
+105DE7408:lI117|H105DE73F8
+105DE73F8:lI105|H105DE73E8
+105DE73E8:lI108|H105DE73D8
+105DE73D8:lI100|H105DE73C8
+105DE73C8:lI47|H105DE73B8
+105DE73B8:lI100|H105DE73A8
+105DE73A8:lI101|H105DE7398
+105DE7398:lI118|H105DE7388
+105DE7388:lI47|H105DE7378
+105DE7378:lI101|H105DE7368
+105DE7368:lI114|H105DE7358
+105DE7358:lI108|H105DE7348
+105DE7348:lI97|H105DE7338
+105DE7338:lI110|H105DE7328
+105DE7328:lI103|H105DE7318
+105DE7318:lI47|H105DE7308
+105DE7308:lI97|H105DE72F8
+105DE72F8:lI100|H105DE72E8
+105DE72E8:lI103|H105DE72D8
+105DE72D8:lI108|H105DE72C8
+105DE72C8:lI101|H105DE72B8
+105DE72B8:lI110|H105DE72A8
+105DE72A8:lI116|H105DE7298
+105DE7298:lI47|H105DE7288
+105DE7288:lI95|H105DE7278
+105DE7278:lI103|H105DE7268
+105DE7268:lI108|H105DE7258
+105DE7258:lI101|H105DE7248
+105DE7248:lI97|H105DE7238
+105DE7238:lI109|H105DE7228
+105DE7228:lI95|H105DE7218
+105DE7218:lI97|H105DE7208
+105DE7208:lI114|H105DE71F8
+105DE71F8:lI116|H105DE71E8
+105DE71E8:lI101|H105DE71D8
+105DE71D8:lI102|H105DE71C8
+105DE71C8:lI97|H105DE71B8
+105DE71B8:lI99|H105DE71A8
+105DE71A8:lI116|H105DE7198
+105DE7198:lI115|H105DE7188
+105DE7188:lI47|H105DE7178
+105DE7178:lI115|H105DE7168
+105DE7168:lI104|H105DE7158
+105DE7158:lI111|H105DE7148
+105DE7148:lI119|H105DE7138
+105DE7138:lI116|H105DE7128
+105DE7128:lI105|H105DE7118
+105DE7118:lI109|H105DE7108
+105DE7108:lI101|H105DE70F8
+105DE70F8:lI64|H105DE70E8
+105DE70E8:lI105|H105DE70D8
+105DE70D8:lI110|H105DE70C8
+105DE70C8:lI116|H105DE70B8
+105DE70B8:lI101|H105DE70A8
+105DE70A8:lI114|H105DE7098
+105DE7098:lI110|H105DE7088
+105DE7088:lI97|H105DE7078
+105DE7078:lI108|H105DE7068
+105DE7068:lI64|H105DE7058
+105DE7058:lI114|H105DE7048
+105DE7048:lI101|H105DE7038
+105DE7038:lI112|H105DE7028
+105DE7028:lI111|H105DE7018
+105DE7018:lI114|H105DE7008
+105DE7008:lI116|H105DE6FF8
+105DE6FF8:lI115|H105DE6FE8
+105DE6FE8:lI64|H105DE6FD8
+105DE6FD8:lI102|H105DE6FC8
+105DE6FC8:lI111|H105DE6FB8
+105DE6FB8:lI114|H105DE6FA8
+105DE6FA8:lI109|H105DE6F98
+105DE6F98:lI97|H105DE6F88
+105DE6F88:lI116|H105DE6F78
+105DE6F78:lI116|H105DE6F68
+105DE6F68:lI101|H105DE6F58
+105DE6F58:lI114|H105DE6F48
+105DE6F48:lI46|H105DE6F38
+105DE6F38:lI101|H105DE6F28
+105DE6F28:lI114|H105DE6F18
+105DE6F18:lI108|N
+105DE5E28:lH105DE5EF0|N
+105DE5EF0:t2:A4:line,I486
+105DE5CC0:lH105DE5D88|H105DE5CD0
+105DE5D88:t4:A26:showtime@internal@erlang@event_handler,AF:-start/0-fun-1-,I2,H105DE5E38
+105DE5E38:lH105DE5F08|H105DE5E48
+105DE5F08:t2:A4:file,H105DE6F08
+105DE6F08:lI47|H105DE6EF8
+105DE6EF8:lI85|H105DE6EE8
+105DE6EE8:lI115|H105DE6ED8
+105DE6ED8:lI101|H105DE6EC8
+105DE6EC8:lI114|H105DE6EB8
+105DE6EB8:lI115|H105DE6EA8
+105DE6EA8:lI47|H105DE6E98
+105DE6E98:lI110|H105DE6E88
+105DE6E88:lI105|H105DE6E78
+105DE6E78:lI99|H105DE6E68
+105DE6E68:lI104|H105DE6E58
+105DE6E58:lI111|H105DE6E48
+105DE6E48:lI108|H105DE6E38
+105DE6E38:lI97|H105DE6E28
+105DE6E28:lI115|H105DE6E18
+105DE6E18:lI99|H105DE6E08
+105DE6E08:lI97|H105DE6DF8
+105DE6DF8:lI114|H105DE6DE8
+105DE6DE8:lI108|H105DE6DD8
+105DE6DD8:lI115|H105DE6DC8
+105DE6DC8:lI111|H105DE6DB8
+105DE6DB8:lI110|H105DE6DA8
+105DE6DA8:lI47|H105DE6D98
+105DE6D98:lI86|H105DE6D88
+105DE6D88:lI83|H105DE6D78
+105DE6D78:lI32|H105DE6D68
+105DE6D68:lI67|H105DE6D58
+105DE6D58:lI111|H105DE6D48
+105DE6D48:lI100|H105DE6D38
+105DE6D38:lI101|H105DE6D28
+105DE6D28:lI47|H105DE6D18
+105DE6D18:lI65|H105DE6D08
+105DE6D08:lI100|H105DE6CF8
+105DE6CF8:lI118|H105DE6CE8
+105DE6CE8:lI101|H105DE6CD8
+105DE6CD8:lI110|H105DE6CC8
+105DE6CC8:lI116|H105DE6CB8
+105DE6CB8:lI79|H105DE6CA8
+105DE6CA8:lI102|H105DE6C98
+105DE6C98:lI67|H105DE6C88
+105DE6C88:lI111|H105DE6C78
+105DE6C78:lI100|H105DE6C68
+105DE6C68:lI101|H105DE6C58
+105DE6C58:lI47|H105DE6C48
+105DE6C48:lI97|H105DE6C38
+105DE6C38:lI111|H105DE6C28
+105DE6C28:lI99|H105DE6C18
+105DE6C18:lI50|H105DE6C08
+105DE6C08:lI48|H105DE6BF8
+105DE6BF8:lI50|H105DE6BE8
+105DE6BE8:lI51|H105DE6BD8
+105DE6BD8:lI47|H105DE6BC8
+105DE6BC8:lI98|H105DE6BB8
+105DE6BB8:lI117|H105DE6BA8
+105DE6BA8:lI105|H105DE6B98
+105DE6B98:lI108|H105DE6B88
+105DE6B88:lI100|H105DE6B78
+105DE6B78:lI47|H105DE6B68
+105DE6B68:lI100|H105DE6B58
+105DE6B58:lI101|H105DE6B48
+105DE6B48:lI118|H105DE6B38
+105DE6B38:lI47|H105DE6B28
+105DE6B28:lI101|H105DE6B18
+105DE6B18:lI114|H105DE6B08
+105DE6B08:lI108|H105DE6AF8
+105DE6AF8:lI97|H105DE6AE8
+105DE6AE8:lI110|H105DE6AD8
+105DE6AD8:lI103|H105DE6AC8
+105DE6AC8:lI47|H105DE6AB8
+105DE6AB8:lI97|H105DE6AA8
+105DE6AA8:lI100|H105DE6A98
+105DE6A98:lI103|H105DE6A88
+105DE6A88:lI108|H105DE6A78
+105DE6A78:lI101|H105DE6A68
+105DE6A68:lI110|H105DE6A58
+105DE6A58:lI116|H105DE6A48
+105DE6A48:lI47|H105DE6A38
+105DE6A38:lI95|H105DE6A28
+105DE6A28:lI103|H105DE6A18
+105DE6A18:lI108|H105DE6A08
+105DE6A08:lI101|H105DE69F8
+105DE69F8:lI97|H105DE69E8
+105DE69E8:lI109|H105DE69D8
+105DE69D8:lI95|H105DE69C8
+105DE69C8:lI97|H105DE69B8
+105DE69B8:lI114|H105DE69A8
+105DE69A8:lI116|H105DE6998
+105DE6998:lI101|H105DE6988
+105DE6988:lI102|H105DE6978
+105DE6978:lI97|H105DE6968
+105DE6968:lI99|H105DE6958
+105DE6958:lI116|H105DE6948
+105DE6948:lI115|H105DE6938
+105DE6938:lI47|H105DE6928
+105DE6928:lI115|H105DE6918
+105DE6918:lI104|H105DE6908
+105DE6908:lI111|H105DE68F8
+105DE68F8:lI119|H105DE68E8
+105DE68E8:lI116|H105DE68D8
+105DE68D8:lI105|H105DE68C8
+105DE68C8:lI109|H105DE68B8
+105DE68B8:lI101|H105DE68A8
+105DE68A8:lI64|H105DE6898
+105DE6898:lI105|H105DE6888
+105DE6888:lI110|H105DE6878
+105DE6878:lI116|H105DE6868
+105DE6868:lI101|H105DE6858
+105DE6858:lI114|H105DE6848
+105DE6848:lI110|H105DE6838
+105DE6838:lI97|H105DE6828
+105DE6828:lI108|H105DE6818
+105DE6818:lI64|H105DE6808
+105DE6808:lI101|H105DE67F8
+105DE67F8:lI114|H105DE67E8
+105DE67E8:lI108|H105DE67D8
+105DE67D8:lI97|H105DE67C8
+105DE67C8:lI110|H105DE67B8
+105DE67B8:lI103|H105DE67A8
+105DE67A8:lI64|H105DE6798
+105DE6798:lI101|H105DE6788
+105DE6788:lI118|H105DE6778
+105DE6778:lI101|H105DE6768
+105DE6768:lI110|H105DE6758
+105DE6758:lI116|H105DE6748
+105DE6748:lI95|H105DE6738
+105DE6738:lI104|H105DE6728
+105DE6728:lI97|H105DE6718
+105DE6718:lI110|H105DE6708
+105DE6708:lI100|H105DE66F8
+105DE66F8:lI108|H105DE66E8
+105DE66E8:lI101|H105DE66D8
+105DE66D8:lI114|H105DE66C8
+105DE66C8:lI46|H105DE66B8
+105DE66B8:lI101|H105DE66A8
+105DE66A8:lI114|H105DE6698
+105DE6698:lI108|N
+105DE5E48:lH105DE5F20|N
+105DE5F20:t2:A4:line,I29
+105DE5CD0:lH105DE5DB0|N
+105DE5DB0:t4:AF:gleam@otp@actor,A4:loop,I1,H105DE5E58
+105DE5E58:lH105DE5F38|H105DE5E68
+105DE5F38:t2:A4:file,H105DE6688
+105DE6688:lI47|H105DE6678
+105DE6678:lI85|H105DE6668
+105DE6668:lI115|H105DE6658
+105DE6658:lI101|H105DE6648
+105DE6648:lI114|H105DE6638
+105DE6638:lI115|H105DE6628
+105DE6628:lI47|H105DE6618
+105DE6618:lI110|H105DE6608
+105DE6608:lI105|H105DE65F8
+105DE65F8:lI99|H105DE65E8
+105DE65E8:lI104|H105DE65D8
+105DE65D8:lI111|H105DE65C8
+105DE65C8:lI108|H105DE65B8
+105DE65B8:lI97|H105DE65A8
+105DE65A8:lI115|H105DE6598
+105DE6598:lI99|H105DE6588
+105DE6588:lI97|H105DE6578
+105DE6578:lI114|H105DE6568
+105DE6568:lI108|H105DE6558
+105DE6558:lI115|H105DE6548
+105DE6548:lI111|H105DE6538
+105DE6538:lI110|H105DE6528
+105DE6528:lI47|H105DE6518
+105DE6518:lI86|H105DE6508
+105DE6508:lI83|H105DE64F8
+105DE64F8:lI32|H105DE64E8
+105DE64E8:lI67|H105DE64D8
+105DE64D8:lI111|H105DE64C8
+105DE64C8:lI100|H105DE64B8
+105DE64B8:lI101|H105DE64A8
+105DE64A8:lI47|H105DE6498
+105DE6498:lI65|H105DE6488
+105DE6488:lI100|H105DE6478
+105DE6478:lI118|H105DE6468
+105DE6468:lI101|H105DE6458
+105DE6458:lI110|H105DE6448
+105DE6448:lI116|H105DE6438
+105DE6438:lI79|H105DE6428
+105DE6428:lI102|H105DE6418
+105DE6418:lI67|H105DE6408
+105DE6408:lI111|H105DE63F8
+105DE63F8:lI100|H105DE63E8
+105DE63E8:lI101|H105DE63D8
+105DE63D8:lI47|H105DE63C8
+105DE63C8:lI97|H105DE63B8
+105DE63B8:lI111|H105DE63A8
+105DE63A8:lI99|H105DE6398
+105DE6398:lI50|H105DE6388
+105DE6388:lI48|H105DE6378
+105DE6378:lI50|H105DE6368
+105DE6368:lI51|H105DE6358
+105DE6358:lI47|H105DE6348
+105DE6348:lI98|H105DE6338
+105DE6338:lI117|H105DE6328
+105DE6328:lI105|H105DE6318
+105DE6318:lI108|H105DE6308
+105DE6308:lI100|H105DE62F8
+105DE62F8:lI47|H105DE62E8
+105DE62E8:lI100|H105DE62D8
+105DE62D8:lI101|H105DE62C8
+105DE62C8:lI118|H105DE62B8
+105DE62B8:lI47|H105DE62A8
+105DE62A8:lI101|H105DE6298
+105DE6298:lI114|H105DE6288
+105DE6288:lI108|H105DE6278
+105DE6278:lI97|H105DE6268
+105DE6268:lI110|H105DE6258
+105DE6258:lI103|H105DE6248
+105DE6248:lI47|H105DE6238
+105DE6238:lI103|H105DE6228
+105DE6228:lI108|H105DE6218
+105DE6218:lI101|H105DE6208
+105DE6208:lI97|H105DE61F8
+105DE61F8:lI109|H105DE61E8
+105DE61E8:lI95|H105DE61D8
+105DE61D8:lI111|H105DE61C8
+105DE61C8:lI116|H105DE61B8
+105DE61B8:lI112|H105DE61A8
+105DE61A8:lI47|H105DE6198
+105DE6198:lI95|H105DE6188
+105DE6188:lI103|H105DE6178
+105DE6178:lI108|H105DE6168
+105DE6168:lI101|H105DE6158
+105DE6158:lI97|H105DE6148
+105DE6148:lI109|H105DE6138
+105DE6138:lI95|H105DE6128
+105DE6128:lI97|H105DE6118
+105DE6118:lI114|H105DE6108
+105DE6108:lI116|H105DE60F8
+105DE60F8:lI101|H105DE60E8
+105DE60E8:lI102|H105DE60D8
+105DE60D8:lI97|H105DE60C8
+105DE60C8:lI99|H105DE60B8
+105DE60B8:lI116|H105DE60A8
+105DE60A8:lI115|H105DE6098
+105DE6098:lI47|H105DE6088
+105DE6088:lI103|H105DE6078
+105DE6078:lI108|H105DE6068
+105DE6068:lI101|H105DE6058
+105DE6058:lI97|H105DE6048
+105DE6048:lI109|H105DE6038
+105DE6038:lI64|H105DE6028
+105DE6028:lI111|H105DE6018
+105DE6018:lI116|H105DE6008
+105DE6008:lI112|H105DE5FF8
+105DE5FF8:lI64|H105DE5FE8
+105DE5FE8:lI97|H105DE5FD8
+105DE5FD8:lI99|H105DE5FC8
+105DE5FC8:lI116|H105DE5FB8
+105DE5FB8:lI111|H105DE5FA8
+105DE5FA8:lI114|H105DE5F98
+105DE5F98:lI46|H105DE5F88
+105DE5F88:lI101|H105DE5F78
+105DE5F78:lI114|H105DE5F68
+105DE5F68:lI108|N
+105DE5E68:lH105DE5F50|N
+105DE5F50:t2:A4:line,I150
+105DE5C50:Mf5:H105DE5CE0:H105DE8730,I178,H105DE8700,H105DE86C8,A5:panic
+105DE5CE0:t5:A8:function,A4:line,A7:message,A6:module,AB:gleam_error
+105DE86C8:Yh23:c2hvd3RpbWUvaW50ZXJuYWwvcmVwb3J0cy9mb3JtYXR0ZXI=
+105DE8700:Yh1A:cGFuaWMgZXhwcmVzc2lvbiBldmFsdWF0ZWQ=
+105DE8730:Yh12:Y3JlYXRlX3Rlc3RfcmVwb3J0
+105DE5C18:lI69|H105DE5C08
+105DE5C08:lI114|H105DE5BF8
+105DE5BF8:lI114|H105DE5BE8
+105DE5BE8:lI111|H105DE5BD8
+105DE5BD8:lI114|H105DE5BC8
+105DE5BC8:lI32|H105DE5BB8
+105DE5BB8:lI105|H105DE5BA8
+105DE5BA8:lI110|H105DE5B98
+105DE5B98:lI32|H105DE5B88
+105DE5B88:lI112|H105DE5B78
+105DE5B78:lI114|H105DE5B68
+105DE5B68:lI111|H105DE5B58
+105DE5B58:lI99|H105DE5B48
+105DE5B48:lI101|H105DE5B38
+105DE5B38:lI115|H105DE5B28
+105DE5B28:lI115|H105DE5B18
+105DE5B18:lI32|H105DE5B08
+105DE5B08:lI126|H105DE5AF8
+105DE5AF8:lI112|H105DE5AE8
+105DE5AE8:lI32|H105DE5AD8
+105DE5AD8:lI119|H105DE5AC8
+105DE5AC8:lI105|H105DE5AB8
+105DE5AB8:lI116|H105DE5AA8
+105DE5AA8:lI104|H105DE5A98
+105DE5A98:lI32|H105DE5A88
+105DE5A88:lI101|H105DE5A78
+105DE5A78:lI120|H105DE5A68
+105DE5A68:lI105|H105DE5A58
+105DE5A58:lI116|H105DE5A48
+105DE5A48:lI32|H105DE5A38
+105DE5A38:lI118|H105DE5A28
+105DE5A28:lI97|H105DE5A18
+105DE5A18:lI108|H105DE5A08
+105DE5A08:lI117|H105DE59F8
+105DE59F8:lI101|H105DE59E8
+105DE59E8:lI58|H105DE59D8
+105DE59D8:lI126|H105DE59C8
+105DE59C8:lI110|H105DE59B8
+105DE59B8:lI126|H105DE59A8
+105DE59A8:lI112|H105DE5998
+105DE5998:lI126|H105DE5988
+105DE5988:lI110|N
+105D8A120:t5:AE:callback_cache,AA:logger_olp,H105D8A0A8,H105D8A0D0,H105D8A0F8
+105D8A0F8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9pbmZvYQI=
+105D8A0D0:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYXN0YQI=
+105D8A0A8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYWxsYQM=
+105D89DB0:t2:A7:olp_ref,H105D89ED8
+105D89ED8:t3:AC:logger_proxy,P<0.72.0>,H105D89EC0
+105D89DC8:t2:AA:$ancestors,H105D89EF8
+105D89EF8:lAA:logger_sup|H105D89F48
+105D89F48:lAA:kernel_sup|H105D89F78
+105D89F78:lP<0.47.0>|N
+105D89DE0:t2:AD:$initial_call,H105D89F08
+105D89F08:t3:AA:logger_olp,A4:init,I1
+=proc_dictionary:<0.73.0>
+H105DAD620
+H105DAD658
+=proc_stack:<0.73.0>
+y0:N
+y1:A8:infinity
+y2:H105DAD6E8
+y3:N
+y4:P<0.73.0>
+y5:P<0.49.0>
+0x0000000105dadc70:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105dadc90:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.73.0>
+105DAD6E8:t5:AE:callback_cache,AD:kernel_config,H105DAD670,H105DAD698,H105DAD6C0
+105DAD6C0:E20:g3F3DWtlcm5lbF9jb25maWd3C2hhbmRsZV9pbmZvYQI=
+105DAD698:E20:g3F3DWtlcm5lbF9jb25maWd3C2hhbmRsZV9jYXN0YQI=
+105DAD670:E20:g3F3DWtlcm5lbF9jb25maWd3C2hhbmRsZV9jYWxsYQM=
+105DAD620:t2:AA:$ancestors,H105DAD610
+105DAD610:lAA:kernel_sup|H105DAD5D0
+105DAD5D0:lP<0.47.0>|N
+105DAD658:t2:AD:$initial_call,H105DAD638
+105DAD638:t3:AD:kernel_config,A4:init,I1
+=proc_dictionary:<0.74.0>
+H105DA80D0
+H105DA8108
+=proc_stack:<0.74.0>
+y0:N
+y1:A8:infinity
+y2:H105DA8198
+y3:H28008FA68
+y4:AB:kernel_refc
+y5:P<0.49.0>
+0x0000000105da8710:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105da8730:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.74.0>
+105DA8198:t5:AE:callback_cache,AB:kernel_refc,H105DA8120,H105DA8148,H105DA8170
+105DA8170:E1E:g3F3C2tlcm5lbF9yZWZjdwtoYW5kbGVfaW5mb2EC
+105DA8148:E1E:g3F3C2tlcm5lbF9yZWZjdwtoYW5kbGVfY2FzdGEC
+105DA8120:E1E:g3F3C2tlcm5lbF9yZWZjdwtoYW5kbGVfY2FsbGED
+105DA80D0:t2:AA:$ancestors,H105DA80C0
+105DA80C0:lAA:kernel_sup|H105DA8080
+105DA8080:lP<0.47.0>|N
+105DA8108:t2:AD:$initial_call,H105DA80E8
+105DA80E8:t3:AB:kernel_refc,A4:init,I1
+=proc_dictionary:<0.75.0>
+H105DAC078
+H105DAC090
+=proc_stack:<0.75.0>
+0x0000000105dac210:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.75.0>
+105DAC078:t2:AA:$ancestors,H105DAC0B8
+105DAC0B8:lAA:kernel_sup|H105DAC0F8
+105DAC0F8:lP<0.47.0>|N
+105DAC090:t2:AD:$initial_call,H105DAC0C8
+105DAC0C8:t3:AA:supervisor,A6:kernel,I1
+=proc_dictionary:<0.77.0>
+H105DA2880
+H105DA2898
+H105DA28B0
+=proc_stack:<0.77.0>
+y0:N
+y1:A8:infinity
+y2:H105DA3BB8
+y3:H105DA27C8
+y4:P<0.77.0>
+y5:P<0.70.0>
+0x0000000105da4dc8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105da4de8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.77.0>
+105DA3BB8:t5:AE:callback_cache,AA:logger_olp,H105DA3BF8,H105DA3C20,H105DA3C48
+105DA3C48:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9pbmZvYQI=
+105DA3C20:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYXN0YQI=
+105DA3BF8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYWxsYQM=
+105DA27C8:Mf14:H105DA28C8:A14:logger_std_h_default,AF:logger_h_common,A5:async,A4:true,A4:true,I200,I1000,I10,I0,I-576460751874469,H105DA2970,I-576460751874469,I0,H105DA29B8,I5000,I500,I1000,A5:false,I3000000,I20000
+105DA28C8:t14:A2:id,A6:module,A4:mode,A4:idle,A12:burst_limit_enable,AE:drop_mode_qlen,AA:flush_qlen,AE:sync_mode_qlen,AF:burst_msg_count,AC:burst_win_ts,A8:cb_state,AC:last_load_ts,A9:last_qlen,A8:mode_ref,A1B:overload_kill_restart_after,A15:burst_limit_max_count,A17:burst_limit_window_time,A14:overload_kill_enable,A16:overload_kill_mem_size,A12:overload_kill_qlen
+105DA29B8:t2:AA:logger_olp,A14:logger_std_h_default
+105DA2970:Mf6:H105DA2A20:A7:default,AC:logger_std_h,A9:no_repeat,I20,H105DA2A58,A4:sync
+105DA2A20:t6:A2:id,A6:module,A18:filesync_repeat_interval,AF:ctrl_sync_count,AD:handler_state,A7:last_op
+105DA2A58:Mf2:H105DA2A90:AB:standard_io,P<0.78.0>
+105DA2A90:t2:A4:type,AD:file_ctrl_pid
+105DA2880:t2:A7:olp_ref,H105DA29D0
+105DA29D0:t3:A14:logger_std_h_default,P<0.77.0>,H105DA29B8
+105DA2898:t2:AA:$ancestors,H105DA29F0
+105DA29F0:lAA:logger_sup|H105DA2A80
+105DA2A80:lAA:kernel_sup|H105DA2AA8
+105DA2AA8:lP<0.47.0>|N
+105DA28B0:t2:AD:$initial_call,H105DA2A00
+105DA2A00:t3:AA:logger_olp,A4:init,I1
+=proc_stack:<0.78.0>
+y0:N
+y1:N
+y2:H105D98488
+0x0000000105d98b30:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.78.0>
+105D98488:Mf2:H280091C80:A7:default,AB:standard_io
+=proc_dictionary:<0.90.0>
+H105D97F00
+H105D97F38
+=proc_stack:<0.90.0>
+y0:H105D98098
+y1:P<0.44.0>
+0x0000000105d98110:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d98130:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.90.0>
+105D98098:t7:A5:state,P<0.91.0>,H105D97A10,N,I0,P<0.69.0>,N
+105D97A10:t8:A9:appl_data,A5:inets,H105D97E70,A9:undefined,H105D97A58,H105D97E50,A8:infinity,A8:infinity
+105D97E50:lA5:inets|H105D97E40
+105D97E40:lA9:inets_sup|H105D97E30
+105D97E30:lA9:inets_app|H105D97E20
+105D97E20:lAD:inets_service|H105D97E10
+105D97E10:lAB:inets_trace|H105D97E00
+105D97E00:lA9:inets_lib|H105D97DF0
+105D97DF0:lA5:httpc|H105D97DE0
+105D97DE0:lAD:httpc_handler|H105D97DD0
+105D97DD0:lA11:httpc_handler_sup|H105D97DC0
+105D97DC0:lAD:httpc_manager|H105D97DB0
+105D97DB0:lA11:httpc_profile_sup|H105D97DA0
+105D97DA0:lAD:httpc_request|H105D97D90
+105D97D90:lAE:httpc_response|H105D97D80
+105D97D80:lA9:httpc_sup|H105D97D70
+105D97D70:lAC:httpc_cookie|H105D97D60
+105D97D60:lAA:http_chunk|H105D97D50
+105D97D50:lAC:http_request|H105D97D40
+105D97D40:lAD:http_response|H105D97D30
+105D97D30:lAE:http_transport|H105D97D20
+105D97D20:lA9:http_util|H105D97D10
+105D97D10:lA8:http_uri|H105D97D00
+105D97D00:lA5:httpd|H105D97CF0
+105D97CF0:lAE:httpd_acceptor|H105D97CE0
+105D97CE0:lA12:httpd_acceptor_sup|H105D97CD0
+105D97CD0:lA9:httpd_cgi|H105D97CC0
+105D97CC0:lA14:httpd_connection_sup|H105D97CB0
+105D97CB0:lAA:httpd_conf|H105D97CA0
+105D97CA0:lAC:httpd_custom|H105D97C90
+105D97C90:lA10:httpd_custom_api|H105D97C80
+105D97C80:lA9:httpd_esi|H105D97C70
+105D97C70:lAD:httpd_example|H105D97C60
+105D97C60:lAA:httpd_file|H105D97C50
+105D97C50:lA12:httpd_instance_sup|H105D97C40
+105D97C40:lA9:httpd_log|H105D97C30
+105D97C30:lAC:httpd_logger|H105D97C20
+105D97C20:lAD:httpd_manager|H105D97C10
+105D97C10:lAE:httpd_misc_sup|H105D97C00
+105D97C00:lAD:httpd_request|H105D97BF0
+105D97BF0:lA15:httpd_request_handler|H105D97BE0
+105D97BE0:lAE:httpd_response|H105D97BD0
+105D97BD0:lA10:httpd_script_env|H105D97BC0
+105D97BC0:lAC:httpd_socket|H105D97BB0
+105D97BB0:lA9:httpd_sup|H105D97BA0
+105D97BA0:lAA:httpd_util|H105D97B90
+105D97B90:lAB:mod_actions|H105D97B80
+105D97B80:lA9:mod_alias|H105D97B70
+105D97B70:lA8:mod_auth|H105D97B60
+105D97B60:lAD:mod_auth_dets|H105D97B50
+105D97B50:lAF:mod_auth_mnesia|H105D97B40
+105D97B40:lAE:mod_auth_plain|H105D97B30
+105D97B30:lAF:mod_auth_server|H105D97B20
+105D97B20:lA7:mod_cgi|H105D97B10
+105D97B10:lA7:mod_dir|H105D97B00
+105D97B00:lAC:mod_disk_log|H105D97AF0
+105D97AF0:lA7:mod_esi|H105D97AE0
+105D97AE0:lA7:mod_get|H105D97AD0
+105D97AD0:lA8:mod_head|H105D97AC0
+105D97AC0:lA7:mod_log|H105D97AB0
+105D97AB0:lA9:mod_range|H105D97AA0
+105D97AA0:lA13:mod_responsecontrol|H105D97A90
+105D97A90:lAC:mod_security|H105D97A80
+105D97A80:lA13:mod_security_server|H105D97A70
+105D97A70:lA9:mod_trace|N
+105D97A58:t2:A9:inets_app,N
+105D97E70:lA9:inets_sup|H105D97E60
+105D97E60:lAD:httpc_manager|N
+105D97F00:t2:AA:$ancestors,H105D97EF0
+105D97EF0:lP<0.89.0>|N
+105D97F38:t2:AD:$initial_call,H105D97F18
+105D97F18:t3:A12:application_master,A4:init,I4
+=proc_stack:<0.91.0>
+y0:N
+y1:N
+y2:A9:inets_app
+y3:P<0.92.0>
+y4:P<0.90.0>
+0x0000000105da7fe0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.91.0>
+=proc_dictionary:<0.92.0>
+H105DBF960
+H105DBF978
+=proc_stack:<0.92.0>
+0x0000000105dbfc58:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.92.0>
+105DBF960:t2:AA:$ancestors,H105DBF9A0
+105DBF9A0:lP<0.91.0>|N
+105DBF978:t2:AD:$initial_call,H105DBF9B0
+105DBF9B0:t3:AA:supervisor,A9:inets_sup,I1
+=proc_dictionary:<0.93.0>
+H105D99BA8
+H105D99BC0
+=proc_stack:<0.93.0>
+0x0000000105d99e90:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.93.0>
+105D99BA8:t2:AA:$ancestors,H105D99BE8
+105D99BE8:lA9:inets_sup|H105D99C28
+105D99C28:lP<0.91.0>|N
+105D99BC0:t2:AD:$initial_call,H105D99BF8
+105D99BF8:t3:AA:supervisor,A9:httpc_sup,I1
+=proc_dictionary:<0.94.0>
+H105DAF280
+H105DAF298
+=proc_stack:<0.94.0>
+0x0000000105daf518:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.94.0>
+105DAF280:t2:AA:$ancestors,H105DAF2C0
+105DAF2C0:lA9:httpc_sup|H105DAF300
+105DAF300:lA9:inets_sup|H105DAF320
+105DAF320:lP<0.91.0>|N
+105DAF298:t2:AD:$initial_call,H105DAF2D0
+105DAF2D0:t3:AA:supervisor,A11:httpc_profile_sup,I1
+=proc_dictionary:<0.95.0>
+H105E0BA38
+H105E0BA50
+=proc_stack:<0.95.0>
+y0:N
+y1:A8:infinity
+y2:H105E0B9F0
+y3:H105E0D878
+y4:AD:httpc_manager
+y5:P<0.94.0>
+0x0000000105e0dff0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105e0e010:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.95.0>
+105E0B9F0:t5:AE:callback_cache,AD:httpc_manager,H105E0BA68,H105E0BA90,H105E0BAB8
+105E0BAB8:E20:g3F3DWh0dHBjX21hbmFnZXJ3C2hhbmRsZV9pbmZvYQI=
+105E0BA90:E20:g3F3DWh0dHBjX21hbmFnZXJ3C2hhbmRsZV9jYXN0YQI=
+105E0BA68:E20:g3F3DWh0dHBjX21hbmFnZXJ3C2hhbmRsZV9jYWxsYQM=
+105E0D878:t7:A5:state,N,A19:httpc_manager__handler_db,H105E0D858,A19:httpc_manager__session_db,AD:httpc_manager,H2800B17A0
+105E0D858:t3:A9:cookie_db,A9:undefined,H105E0D840
+105E0D840:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALEs+vYAAd/g02c=
+105E0BA38:t2:AA:$ancestors,H105E0BAE0
+105E0BAE0:lA11:httpc_profile_sup|H105E0BB10
+105E0BB10:lA9:httpc_sup|H105E0BB20
+105E0BB20:lA9:inets_sup|H105E0BB30
+105E0BB30:lP<0.91.0>|N
+105E0BA50:t2:AD:$initial_call,H105E0BAF0
+105E0BAF0:t3:AD:httpc_manager,A4:init,I1
+=proc_dictionary:<0.96.0>
+H105D82D78
+H105D82DB0
+=proc_stack:<0.96.0>
+y0:N
+y1:A8:infinity
+y2:H105D82E40
+y3:H105D831B8
+y4:A11:httpc_handler_sup
+y5:P<0.93.0>
+0x0000000105d83388:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d833a8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.96.0>
+105D82E40:t5:AE:callback_cache,AA:supervisor,H105D82DC8,H105D82DF0,H105D82E18
+105D82E18:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105D82DF0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105D82DC8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105D831B8:tC:A5:state,H2800B6F58,A12:simple_one_for_one,H105D83120,H280028328,I0,I3600,N,I0,A5:never,A11:httpc_handler_sup,N
+105D83120:t2:H105D83110,H105D830F0
+105D830F0:Mf1:H105D830E0:H105D83078
+105D830E0:t1:A9:undefined
+105D83078:t9:A5:child,A9:undefined,A9:undefined,H105D82E70,A9:temporary,A5:false,I4000,A6:worker,H2800B6F70
+105D82E70:t3:AD:httpc_handler,AA:start_link,N
+105D83110:lA9:undefined|N
+105D82D78:t2:AA:$ancestors,H105D82D68
+105D82D68:lA9:httpc_sup|H105D82D28
+105D82D28:lA9:inets_sup|H105D82D18
+105D82D18:lP<0.91.0>|N
+105D82DB0:t2:AD:$initial_call,H105D82D90
+105D82D90:t3:AA:supervisor,A11:httpc_handler_sup,I1
+=proc_dictionary:<0.97.0>
+H105D98B40
+H105D98B58
+=proc_stack:<0.97.0>
+0x0000000105d98ce8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.97.0>
+105D98B40:t2:AA:$ancestors,H105D98B80
+105D98B80:lA9:inets_sup|H105D98BC0
+105D98BC0:lP<0.91.0>|N
+105D98B58:t2:AD:$initial_call,H105D98B90
+105D98B90:t3:AA:supervisor,A9:httpd_sup,I1
+=proc_dictionary:<0.102.0>
+H105DBE6D0
+H105DBE6E8
+=proc_stack:<0.102.0>
+y0:H105DBEC80
+y1:P<0.44.0>
+0x0000000105dbed68:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105dbed88:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.102.0>
+105DBEC80:t7:A5:state,P<0.103.0>,H105DBE688,N,I0,P<0.69.0>,N
+105DBE688:t8:A9:appl_data,A3:ssl,H105DBE718,A9:undefined,H105DBE728,H105DBE740,A8:infinity,A8:infinity
+105DBE740:lAE:tls_connection|H105DBE790
+105DBE790:lA19:tls_client_connection_1_3|H105DBE7A0
+105DBE7A0:lA19:tls_server_connection_1_3|H105DBE7B0
+105DBE7B0:lA16:tls_gen_connection_1_3|H105DBE7C0
+105DBE7C0:lAD:tls_handshake|H105DBE7D0
+105DBE7D0:lA11:tls_handshake_1_3|H105DBE7E0
+105DBE7E0:lAA:tls_record|H105DBE7F0
+105DBE7F0:lAE:tls_record_1_3|H105DBE800
+105DBE800:lAA:tls_socket|H105DBE810
+105DBE810:lA6:tls_v1|H105DBE820
+105DBE820:lA12:tls_connection_sup|H105DBE830
+105DBE830:lA12:tls_gen_connection|H105DBE840
+105DBE840:lAA:tls_sender|H105DBE850
+105DBE850:lAE:tls_server_sup|H105DBE860
+105DBE860:lA1D:tls_server_session_ticket_sup|H105DBE870
+105DBE870:lA19:tls_server_session_ticket|H105DBE880
+105DBE880:lA7:tls_sup|H105DBE890
+105DBE890:lA16:tls_dyn_connection_sup|H105DBE8A0
+105DBE8A0:lAD:ssl_dh_groups|H105DBE8B0
+105DBE8B0:lAF:dtls_connection|H105DBE8C0
+105DBE8C0:lAE:dtls_handshake|H105DBE8D0
+105DBE8D0:lAB:dtls_record|H105DBE8E0
+105DBE8E0:lAB:dtls_socket|H105DBE8F0
+105DBE8F0:lA7:dtls_v1|H105DBE900
+105DBE900:lA13:dtls_connection_sup|H105DBE910
+105DBE910:lA13:dtls_gen_connection|H105DBE920
+105DBE920:lA11:dtls_packet_demux|H105DBE930
+105DBE930:lA11:dtls_listener_sup|H105DBE940
+105DBE940:lA8:dtls_sup|H105DBE950
+105DBE950:lAF:dtls_server_sup|H105DBE960
+105DBE960:lA1D:dtls_server_session_cache_sup|H105DBE970
+105DBE970:lA3:ssl|H105DBE980
+105DBE980:lA15:ssl_session_cache_api|H105DBE990
+105DBE990:lA13:tls_dtls_connection|H105DBE9A0
+105DBE9A0:lAA:ssl_config|H105DBE9B0
+105DBE9B0:lAE:ssl_gen_statem|H105DBE9C0
+105DBE9C0:lAD:ssl_handshake|H105DBE9D0
+105DBE9D0:lAA:ssl_record|H105DBE9E0
+105DBE9E0:lAA:ssl_cipher|H105DBE9F0
+105DBE9F0:lA11:ssl_cipher_format|H105DBEA00
+105DBEA00:lAE:ssl_srp_primes|H105DBEA10
+105DBEA10:lA9:ssl_alert|H105DBEA20
+105DBEA20:lA16:ssl_listen_tracker_sup|H105DBEA30
+105DBEA30:lA10:tls_bloom_filter|H105DBEA40
+105DBEA40:lA17:tls_client_ticket_store|H105DBEA50
+105DBEA50:lAD:inet_tls_dist|H105DBEA60
+105DBEA60:lAE:inet6_tls_dist|H105DBEA70
+105DBEA70:lAC:ssl_dist_sup|H105DBEA80
+105DBEA80:lA17:ssl_dist_connection_sup|H105DBEA90
+105DBEA90:lA12:ssl_dist_admin_sup|H105DBEAA0
+105DBEAA0:lAC:tls_dist_sup|H105DBEAB0
+105DBEAB0:lA13:tls_dist_server_sup|H105DBEAC0
+105DBEAC0:lAB:ssl_session|H105DBEAD0
+105DBEAD0:lA1B:ssl_client_session_cache_db|H105DBEAE0
+105DBEAE0:lA18:ssl_server_session_cache|H105DBEAF0
+105DBEAF0:lA1B:ssl_server_session_cache_db|H105DBEB00
+105DBEB00:lA1C:ssl_server_session_cache_sup|H105DBEB10
+105DBEB10:lA24:ssl_upgrade_server_session_cache_sup|H105DBEB20
+105DBEB20:lAB:ssl_manager|H105DBEB30
+105DBEB30:lAD:ssl_pem_cache|H105DBEB40
+105DBEB40:lAB:ssl_pkix_db|H105DBEB50
+105DBEB50:lAF:ssl_certificate|H105DBEB60
+105DBEB60:lA7:ssl_crl|H105DBEB70
+105DBEB70:lAD:ssl_crl_cache|H105DBEB80
+105DBEB80:lA11:ssl_crl_cache_api|H105DBEB90
+105DBEB90:lA10:ssl_crl_hash_dir|H105DBEBA0
+105DBEBA0:lAA:ssl_logger|H105DBEBB0
+105DBEBB0:lA9:ssl_trace|H105DBEBC0
+105DBEBC0:lA7:ssl_app|H105DBEBD0
+105DBEBD0:lA7:ssl_sup|H105DBEBE0
+105DBEBE0:lAD:ssl_admin_sup|H105DBEBF0
+105DBEBF0:lA12:ssl_connection_sup|N
+105DBE728:t2:A7:ssl_app,N
+105DBE718:lA7:ssl_sup|H105DBE780
+105DBE780:lAB:ssl_manager|N
+105DBE6D0:t2:AA:$ancestors,H105DBE750
+105DBE750:lP<0.101.0>|N
+105DBE6E8:t2:AD:$initial_call,H105DBE760
+105DBE760:t3:A12:application_master,A4:init,I4
+=proc_stack:<0.103.0>
+y0:N
+y1:N
+y2:A7:ssl_app
+y3:P<0.107.0>
+y4:P<0.102.0>
+0x0000000105da1bf0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.103.0>
+=proc_dictionary:<0.105.0>
+H105DB0708
+H105DB0720
+H105DB0738
+=proc_stack:<0.105.0>
+y0:N
+y1:A8:infinity
+y2:H105DB1980
+y3:H105DB0650
+y4:P<0.105.0>
+y5:P<0.70.0>
+0x0000000105db2c50:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105db2c70:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.105.0>
+105DB1980:t5:AE:callback_cache,AA:logger_olp,H105DB19D0,H105DB19F8,H105DB1A20
+105DB1A20:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9pbmZvYQI=
+105DB19F8:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYXN0YQI=
+105DB19D0:E1D:g3F3CmxvZ2dlcl9vbHB3C2hhbmRsZV9jYWxsYQM=
+105DB0650:Mf14:H105DB0750:A18:logger_std_h_ssl_handler,AF:logger_h_common,A5:async,A4:true,A4:true,I200,I1000,I10,I0,I-576460751796696,H105DB07F8,I-576460751796696,I0,H105DB0840,I5000,I500,I1000,A5:false,I3000000,I20000
+105DB0750:t14:A2:id,A6:module,A4:mode,A4:idle,A12:burst_limit_enable,AE:drop_mode_qlen,AA:flush_qlen,AE:sync_mode_qlen,AF:burst_msg_count,AC:burst_win_ts,A8:cb_state,AC:last_load_ts,A9:last_qlen,A8:mode_ref,A1B:overload_kill_restart_after,A15:burst_limit_max_count,A17:burst_limit_window_time,A14:overload_kill_enable,A16:overload_kill_mem_size,A12:overload_kill_qlen
+105DB0840:t2:AA:logger_olp,A18:logger_std_h_ssl_handler
+105DB07F8:Mf6:H105DB08A8:AB:ssl_handler,AC:logger_std_h,A9:no_repeat,I20,H105DB08E0,A4:sync
+105DB08A8:t6:A2:id,A6:module,A18:filesync_repeat_interval,AF:ctrl_sync_count,AD:handler_state,A7:last_op
+105DB08E0:Mf2:H105DB0918:AB:standard_io,P<0.106.0>
+105DB0918:t2:A4:type,AD:file_ctrl_pid
+105DB0708:t2:A7:olp_ref,H105DB0858
+105DB0858:t3:A18:logger_std_h_ssl_handler,P<0.105.0>,H105DB0840
+105DB0720:t2:AA:$ancestors,H105DB0878
+105DB0878:lAA:logger_sup|H105DB0908
+105DB0908:lAA:kernel_sup|H105DB0930
+105DB0930:lP<0.47.0>|N
+105DB0738:t2:AD:$initial_call,H105DB0888
+105DB0888:t3:AA:logger_olp,A4:init,I1
+=proc_stack:<0.106.0>
+y0:N
+y1:N
+y2:H105DA87D8
+0x0000000105da8e80:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.106.0>
+105DA87D8:Mf2:H280091C80:AB:ssl_handler,AB:standard_io
+=proc_dictionary:<0.107.0>
+H105D8C6D0
+H105D8C6E8
+=proc_stack:<0.107.0>
+0x0000000105d8c958:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.107.0>
+105D8C6D0:t2:AA:$ancestors,H105D8C710
+105D8C710:lP<0.103.0>|N
+105D8C6E8:t2:AD:$initial_call,H105D8C720
+105D8C720:t3:AA:supervisor,A7:ssl_sup,I1
+=proc_dictionary:<0.108.0>
+H105DBFC68
+H105DBFC80
+=proc_stack:<0.108.0>
+0x0000000105dbffe0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.108.0>
+105DBFC68:t2:AA:$ancestors,H105DBFCA8
+105DBFCA8:lA7:ssl_sup|H105DBFCE8
+105DBFCE8:lP<0.103.0>|N
+105DBFC80:t2:AD:$initial_call,H105DBFCB8
+105DBFCB8:t3:AA:supervisor,AD:ssl_admin_sup,I1
+=proc_dictionary:<0.109.0>
+H105D82110
+H105D82128
+H105D82140
+=proc_stack:<0.109.0>
+y0:N
+y1:A8:infinity
+y2:H105D820E0
+y3:H105D828A8
+y4:AD:ssl_pem_cache
+y5:P<0.108.0>
+0x0000000105d82c38:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d82c58:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.109.0>
+105D820E0:t5:AE:callback_cache,AD:ssl_pem_cache,H105D82178,H105D821A0,H105D821C8
+105D821C8:E20:g3F3DXNzbF9wZW1fY2FjaGV3C2hhbmRsZV9pbmZvYQI=
+105D821A0:E20:g3F3DXNzbF9wZW1fY2FjaGV3C2hhbmRsZV9jYXN0YQI=
+105D82178:E20:g3F3DXNzbF9wZW1fY2FjaGV3C2hhbmRsZV9jYWxsYQM=
+105D828A8:t4:A5:state,AD:ssl_pem_cache,I1701928823,I120000
+105D82110:t2:AA:$ancestors,H105D821F0
+105D821F0:lAD:ssl_admin_sup|H105D82260
+105D82260:lA7:ssl_sup|H105D82280
+105D82280:lP<0.103.0>|N
+105D82128:t2:AD:ssl_pem_cache,AD:ssl_pem_cache
+105D82140:t2:AD:$initial_call,H105D82200
+105D82200:t3:AD:ssl_pem_cache,A4:init,I1
+=proc_dictionary:<0.110.0>
+H105DB84D8
+H105DB84F0
+H105DB8508
+H105DB8520
+=proc_stack:<0.110.0>
+y0:N
+y1:A8:infinity
+y2:H105DB84A8
+y3:H105DB67C8
+y4:AB:ssl_manager
+y5:P<0.108.0>
+0x0000000105db7160:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105db7180:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.110.0>
+105DB84A8:t5:AE:callback_cache,AB:ssl_manager,H105DB8538,H105DB8560,H105DB8588
+105DB8588:E1E:g3F3C3NzbF9tYW5hZ2VydwtoYW5kbGVfaW5mb2EC
+105DB8560:E1E:g3F3C3NzbF9tYW5hZ2VydwtoYW5kbGVfY2FzdGEC
+105DB8538:E1E:g3F3C3NzbF9tYW5hZ2VydwtoYW5kbGVfY2FsbGED
+105DB67C8:tA:A5:state,H105DB66B0,A1B:ssl_client_session_cache_db,I86400,H105DB67A0,H105DB67B0,I1000,A9:undefined,N,H280061C80
+105DB67B0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGc+vQAAd/g02c=
+105DB67A0:lH105DB66C8|H105DB6790
+105DB66C8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGX+vYAAd/g02c=
+105DB6790:lH105DB6778|H105DB6768
+105DB6778:t2:H105DB66E0,H105DB66F8
+105DB66F8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGZ+vYAAd/g02c=
+105DB66E0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGY+vYAAd/g02c=
+105DB6768:lAD:ssl_pem_cache|H105DB6758
+105DB6758:lH105DB6740|N
+105DB6740:t2:H105DB6710,H105DB6728
+105DB6728:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGb+vYAAd/g02c=
+105DB6710:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGa+vYAAd/g02c=
+105DB66B0:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALGW+vYAAd/g02c=
+105DB84D8:t2:AA:$ancestors,H105DB85B0
+105DB85B0:lAD:ssl_admin_sup|H105DB85E0
+105DB85E0:lA7:ssl_sup|H105DB85F0
+105DB85F0:lP<0.103.0>|N
+105DB84F0:t2:AB:ssl_manager,AB:ssl_manager
+105DB8508:t2:AD:ssl_pem_cache,AD:ssl_pem_cache
+105DB8520:t2:AD:$initial_call,H105DB85C0
+105DB85C0:t3:AB:ssl_manager,A4:init,I1
+=proc_dictionary:<0.111.0>
+H105D8FCA8
+H105D8FCE0
+=proc_stack:<0.111.0>
+y0:N
+y1:A8:infinity
+y2:H105D8FD70
+y3:H105D8FDB8
+y4:A17:tls_client_ticket_store
+y5:P<0.108.0>
+0x0000000105d902b8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d902d8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.111.0>
+105D8FD70:t5:AE:callback_cache,A17:tls_client_ticket_store,H105D8FCF8,H105D8FD20,H105D8FD48
+105D8FD48:E2A:g3F3F3Rsc19jbGllbnRfdGlja2V0X3N0b3JldwtoYW5kbGVfaW5mb2EC
+105D8FD20:E2A:g3F3F3Rsc19jbGllbnRfdGlja2V0X3N0b3JldwtoYW5kbGVfY2FzdGEC
+105D8FCF8:E2A:g3F3F3Rsc19jbGllbnRfdGlja2V0X3N0b3JldwtoYW5kbGVfY2FsbGED
+105D8FDB8:t4:A5:state,H280061C80,I7200,I1000
+105D8FCA8:t2:AA:$ancestors,H105D8FC98
+105D8FC98:lAD:ssl_admin_sup|H105D8FC58
+105D8FC58:lA7:ssl_sup|H105D8FC48
+105D8FC48:lP<0.103.0>|N
+105D8FCE0:t2:AD:$initial_call,H105D8FCC0
+105D8FCC0:t3:A17:tls_client_ticket_store,A4:init,I1
+=proc_dictionary:<0.112.0>
+H105DADF58
+H105DADF70
+=proc_stack:<0.112.0>
+0x0000000105dae1f0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.112.0>
+105DADF58:t2:AA:$ancestors,H105DADF98
+105DADF98:lA7:ssl_sup|H105DADFD8
+105DADFD8:lP<0.103.0>|N
+105DADF70:t2:AD:$initial_call,H105DADFA8
+105DADFA8:t3:AA:supervisor,A12:ssl_connection_sup,I1
+=proc_dictionary:<0.113.0>
+H105DADCA0
+H105DADCB8
+=proc_stack:<0.113.0>
+0x0000000105dadf48:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.113.0>
+105DADCA0:t2:AA:$ancestors,H105DADCE0
+105DADCE0:lA12:ssl_connection_sup|H105DADD20
+105DADD20:lA7:ssl_sup|H105DADD40
+105DADD40:lP<0.103.0>|N
+105DADCB8:t2:AD:$initial_call,H105DADCF0
+105DADCF0:t3:AA:supervisor,A7:tls_sup,I1
+=proc_dictionary:<0.114.0>
+H105D87718
+H105D87750
+=proc_stack:<0.114.0>
+y0:N
+y1:A8:infinity
+y2:H105D877E0
+y3:H105D87A80
+y4:A12:tls_connection_sup
+y5:P<0.113.0>
+0x0000000105d87d18:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105d87d38:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.114.0>
+105D877E0:t5:AE:callback_cache,AA:supervisor,H105D87768,H105D87790,H105D877B8
+105D877B8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105D87790:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105D87768:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105D87A80:tC:A5:state,H2800BDB80,A12:simple_one_for_one,H105D879E8,H280028328,I0,I3600,N,I0,A5:never,A12:tls_connection_sup,N
+105D879E8:t2:H105D879D8,H105D879B8
+105D879B8:Mf1:H105D879A8:H105D87940
+105D879A8:t1:A9:undefined
+105D87940:t9:A5:child,A9:undefined,A9:undefined,H2800BDCA0,A9:temporary,A5:false,A8:infinity,AA:supervisor,H105D87930
+105D87930:lA16:tls_dyn_connection_sup|N
+105D879D8:lA9:undefined|N
+105D87718:t2:AA:$ancestors,H105D87708
+105D87708:lA7:tls_sup|H105D876C8
+105D876C8:lA12:ssl_connection_sup|H105D876B8
+105D876B8:lA7:ssl_sup|H105D876A8
+105D876A8:lP<0.103.0>|N
+105D87750:t2:AD:$initial_call,H105D87730
+105D87730:t3:AA:supervisor,A12:tls_connection_sup,I1
+=proc_dictionary:<0.115.0>
+H105DA2350
+H105DA2368
+=proc_stack:<0.115.0>
+0x0000000105da26e8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.115.0>
+105DA2350:t2:AA:$ancestors,H105DA2390
+105DA2390:lA7:tls_sup|H105DA23D0
+105DA23D0:lA12:ssl_connection_sup|H105DA23F0
+105DA23F0:lA7:ssl_sup|H105DA2410
+105DA2410:lP<0.103.0>|N
+105DA2368:t2:AD:$initial_call,H105DA23A0
+105DA23A0:t3:AA:supervisor,AE:tls_server_sup,I1
+=proc_dictionary:<0.116.0>
+H105DBD3E8
+H105DBD420
+=proc_stack:<0.116.0>
+y0:N
+y1:A8:infinity
+y2:H105DBD4B0
+y3:H105DBD740
+y4:A16:ssl_listen_tracker_sup
+y5:P<0.115.0>
+0x0000000105dbd9d8:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105dbd9f8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.116.0>
+105DBD4B0:t5:AE:callback_cache,AA:supervisor,H105DBD438,H105DBD460,H105DBD488
+105DBD488:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105DBD460:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105DBD438:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105DBD740:tC:A5:state,H2800BE298,A12:simple_one_for_one,H105DBD6A8,H280028328,I0,I3600,N,I0,A5:never,A16:ssl_listen_tracker_sup,N
+105DBD6A8:t2:H105DBD698,H105DBD678
+105DBD678:Mf1:H105DBD668:H105DBD600
+105DBD668:t1:A9:undefined
+105DBD600:t9:A5:child,A9:undefined,A9:undefined,H2800BE3E8,A9:temporary,A5:false,I4000,A6:worker,H2800BE3D8
+105DBD698:lA9:undefined|N
+105DBD3E8:t2:AA:$ancestors,H105DBD3D8
+105DBD3D8:lAE:tls_server_sup|H105DBD398
+105DBD398:lA7:tls_sup|H105DBD388
+105DBD388:lA12:ssl_connection_sup|H105DBD378
+105DBD378:lA7:ssl_sup|H105DBD368
+105DBD368:lP<0.103.0>|N
+105DBD420:t2:AD:$initial_call,H105DBD400
+105DBD400:t3:AA:supervisor,A16:ssl_listen_tracker_sup,I1
+=proc_dictionary:<0.117.0>
+H105DA1D30
+H105DA1D68
+=proc_stack:<0.117.0>
+y0:N
+y1:A8:infinity
+y2:H105DA1DF8
+y3:H105DA2088
+y4:A1D:tls_server_session_ticket_sup
+y5:P<0.115.0>
+0x0000000105da2320:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105da2340:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.117.0>
+105DA1DF8:t5:AE:callback_cache,AA:supervisor,H105DA1D80,H105DA1DA8,H105DA1DD0
+105DA1DD0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105DA1DA8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105DA1D80:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105DA2088:tC:A5:state,H2800BE5C0,A12:simple_one_for_one,H105DA1FF0,H280028358,I0,I3600,N,I0,A5:never,A1D:tls_server_session_ticket_sup,N
+105DA1FF0:t2:H105DA1FE0,H105DA1FC0
+105DA1FC0:Mf1:H105DA1FB0:H105DA1F48
+105DA1FB0:t1:A9:undefined
+105DA1F48:t9:A5:child,A9:undefined,A9:undefined,H2800BE710,A9:transient,A5:false,I4000,A6:worker,H2800BE700
+105DA1FE0:lA9:undefined|N
+105DA1D30:t2:AA:$ancestors,H105DA1D20
+105DA1D20:lAE:tls_server_sup|H105DA1CE0
+105DA1CE0:lA7:tls_sup|H105DA1CD0
+105DA1CD0:lA12:ssl_connection_sup|H105DA1CC0
+105DA1CC0:lA7:ssl_sup|H105DA1CB0
+105DA1CB0:lP<0.103.0>|N
+105DA1D68:t2:AD:$initial_call,H105DA1D48
+105DA1D48:t3:AA:supervisor,A1D:tls_server_session_ticket_sup,I1
+=proc_dictionary:<0.118.0>
+H105EBF1B0
+H105EBF1E8
+=proc_stack:<0.118.0>
+y0:N
+y1:A8:infinity
+y2:H105EBF278
+y3:H105EBF508
+y4:A1C:ssl_server_session_cache_sup
+y5:P<0.115.0>
+0x0000000105ebf7a0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105ebf7c0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.118.0>
+105EBF278:t5:AE:callback_cache,AA:supervisor,H105EBF200,H105EBF228,H105EBF250
+105EBF250:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105EBF228:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105EBF200:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105EBF508:tC:A5:state,H2800BE958,A12:simple_one_for_one,H105EBF470,H280028358,I3,I3600,N,I0,A5:never,A1C:ssl_server_session_cache_sup,N
+105EBF470:t2:H105EBF460,H105EBF440
+105EBF440:Mf1:H105EBF430:H105EBF3C8
+105EBF430:t1:A9:undefined
+105EBF3C8:t9:A5:child,A9:undefined,A9:undefined,H2800BEA90,A9:transient,A5:false,I4000,A6:worker,H2800BEA80
+105EBF460:lA9:undefined|N
+105EBF1B0:t2:AA:$ancestors,H105EBF1A0
+105EBF1A0:lAE:tls_server_sup|H105EBF160
+105EBF160:lA7:tls_sup|H105EBF150
+105EBF150:lA12:ssl_connection_sup|H105EBF140
+105EBF140:lA7:ssl_sup|H105EBF130
+105EBF130:lP<0.103.0>|N
+105EBF1E8:t2:AD:$initial_call,H105EBF1C8
+105EBF1C8:t3:AA:supervisor,A1C:ssl_server_session_cache_sup,I1
+=proc_dictionary:<0.119.0>
+H105EBF900
+H105EBF938
+=proc_stack:<0.119.0>
+y0:N
+y1:A8:infinity
+y2:H105EBF9C8
+y3:H105EBFC58
+y4:A24:ssl_upgrade_server_session_cache_sup
+y5:P<0.115.0>
+0x0000000105ebfef0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105ebff10:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.119.0>
+105EBF9C8:t5:AE:callback_cache,AA:supervisor,H105EBF950,H105EBF978,H105EBF9A0
+105EBF9A0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105EBF978:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105EBF950:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105EBFC58:tC:A5:state,H2800BECC8,A12:simple_one_for_one,H105EBFBC0,H280028358,I3,I3600,N,I0,A5:never,A24:ssl_upgrade_server_session_cache_sup,N
+105EBFBC0:t2:H105EBFBB0,H105EBFB90
+105EBFB90:Mf1:H105EBFB80:H105EBFB18
+105EBFB80:t1:A9:undefined
+105EBFB18:t9:A5:child,A9:undefined,A9:undefined,H2800BEE18,A9:transient,A5:false,I4000,A6:worker,H2800BEE08
+105EBFBB0:lA9:undefined|N
+105EBF900:t2:AA:$ancestors,H105EBF8F0
+105EBF8F0:lAE:tls_server_sup|H105EBF8B0
+105EBF8B0:lA7:tls_sup|H105EBF8A0
+105EBF8A0:lA12:ssl_connection_sup|H105EBF890
+105EBF890:lA7:ssl_sup|H105EBF880
+105EBF880:lP<0.103.0>|N
+105EBF938:t2:AD:$initial_call,H105EBF918
+105EBF918:t3:AA:supervisor,A24:ssl_upgrade_server_session_cache_sup,I1
+=proc_dictionary:<0.120.0>
+H105DB8030
+H105DB8048
+=proc_stack:<0.120.0>
+0x0000000105db82d8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.120.0>
+105DB8030:t2:AA:$ancestors,H105DB8070
+105DB8070:lA12:ssl_connection_sup|H105DB80B0
+105DB80B0:lA7:ssl_sup|H105DB80D0
+105DB80D0:lP<0.103.0>|N
+105DB8048:t2:AD:$initial_call,H105DB8080
+105DB8080:t3:AA:supervisor,A8:dtls_sup,I1
+=proc_dictionary:<0.121.0>
+H105DB72B0
+H105DB72E8
+=proc_stack:<0.121.0>
+y0:N
+y1:A8:infinity
+y2:H105DB7378
+y3:H105DB7608
+y4:A13:dtls_connection_sup
+y5:P<0.120.0>
+0x0000000105db78b0:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105db78d0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.121.0>
+105DB7378:t5:AE:callback_cache,AA:supervisor,H105DB7300,H105DB7328,H105DB7350
+105DB7350:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105DB7328:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105DB7300:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105DB7608:tC:A5:state,H2800BF370,A12:simple_one_for_one,H105DB7570,H280028328,I0,I3600,N,I0,A5:never,A13:dtls_connection_sup,N
+105DB7570:t2:H105DB7560,H105DB7540
+105DB7540:Mf1:H105DB7530:H105DB74C8
+105DB7530:t1:A9:undefined
+105DB74C8:t9:A5:child,A9:undefined,A9:undefined,H2800BF4D0,A9:temporary,A5:false,I4000,A6:worker,H2800BF4B0
+105DB7560:lA9:undefined|N
+105DB72B0:t2:AA:$ancestors,H105DB72A0
+105DB72A0:lA8:dtls_sup|H105DB7260
+105DB7260:lA12:ssl_connection_sup|H105DB7250
+105DB7250:lA7:ssl_sup|H105DB7240
+105DB7240:lP<0.103.0>|N
+105DB72E8:t2:AD:$initial_call,H105DB72C8
+105DB72C8:t3:AA:supervisor,A13:dtls_connection_sup,I1
+=proc_dictionary:<0.122.0>
+H105D8D9E8
+H105D8DA00
+=proc_stack:<0.122.0>
+0x0000000105d8dca0:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.122.0>
+105D8D9E8:t2:AA:$ancestors,H105D8DA28
+105D8DA28:lA8:dtls_sup|H105D8DA68
+105D8DA68:lA12:ssl_connection_sup|H105D8DA88
+105D8DA88:lA7:ssl_sup|H105D8DAA8
+105D8DAA8:lP<0.103.0>|N
+105D8DA00:t2:AD:$initial_call,H105D8DA38
+105D8DA38:t3:AA:supervisor,AF:dtls_server_sup,I1
+=proc_dictionary:<0.123.0>
+H105DB7A10
+H105DB7A48
+=proc_stack:<0.123.0>
+y0:N
+y1:A8:infinity
+y2:H105DB7AD8
+y3:H105DB7D68
+y4:A11:dtls_listener_sup
+y5:P<0.122.0>
+0x0000000105db8000:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105db8020:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.123.0>
+105DB7AD8:t5:AE:callback_cache,AA:supervisor,H105DB7A60,H105DB7A88,H105DB7AB0
+105DB7AB0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105DB7A88:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105DB7A60:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105DB7D68:tC:A5:state,H2800BF988,A12:simple_one_for_one,H105DB7CD0,H280028328,I0,I3600,N,I0,A5:never,A11:dtls_listener_sup,N
+105DB7CD0:t2:H105DB7CC0,H105DB7CA0
+105DB7CA0:Mf1:H105DB7C90:H105DB7C28
+105DB7C90:t1:A9:undefined
+105DB7C28:t9:A5:child,A9:undefined,A9:undefined,H2800BFB08,A9:temporary,A5:false,I4000,A6:worker,H2800BFAF8
+105DB7CC0:lA9:undefined|N
+105DB7A10:t2:AA:$ancestors,H105DB7A00
+105DB7A00:lAF:dtls_server_sup|H105DB79C0
+105DB79C0:lA8:dtls_sup|H105DB79B0
+105DB79B0:lA12:ssl_connection_sup|H105DB79A0
+105DB79A0:lA7:ssl_sup|H105DB7990
+105DB7990:lP<0.103.0>|N
+105DB7A48:t2:AD:$initial_call,H105DB7A28
+105DB7A28:t3:AA:supervisor,A11:dtls_listener_sup,I1
+=proc_dictionary:<0.124.0>
+H105DE5340
+H105DE5378
+=proc_stack:<0.124.0>
+y0:N
+y1:A8:infinity
+y2:H105DE5408
+y3:H105DE5698
+y4:A1D:dtls_server_session_cache_sup
+y5:P<0.122.0>
+0x0000000105de5930:SReturn addr 0x3E95064 (proc_lib:init_p_do_apply/3 + 180)
+y0:N
+y1:N
+y2:SCatch 0x3E9508C (proc_lib:init_p_do_apply/3 + 220)
+0x0000000105de5950:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.124.0>
+105DE5408:t5:AE:callback_cache,AA:supervisor,H105DE5390,H105DE53B8,H105DE53E0
+105DE53E0:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9pbmZvYQI=
+105DE53B8:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYXN0YQI=
+105DE5390:E1D:g3F3CnN1cGVydmlzb3J3C2hhbmRsZV9jYWxsYQM=
+105DE5698:tC:A5:state,H2800BFC90,A12:simple_one_for_one,H105DE5600,H280028328,I0,I3600,N,I0,A5:never,A1D:dtls_server_session_cache_sup,N
+105DE5600:t2:H105DE55F0,H105DE55D0
+105DE55D0:Mf1:H105DE55C0:H105DE5558
+105DE55C0:t1:A9:undefined
+105DE5558:t9:A5:child,A9:undefined,A9:undefined,H2800BFDC8,A9:temporary,A5:false,I4000,A6:worker,H2800BFDB8
+105DE55F0:lA9:undefined|N
+105DE5340:t2:AA:$ancestors,H105DE5330
+105DE5330:lAF:dtls_server_sup|H105DE52F0
+105DE52F0:lA8:dtls_sup|H105DE52E0
+105DE52E0:lA12:ssl_connection_sup|H105DE52D0
+105DE52D0:lA7:ssl_sup|H105DE52C0
+105DE52C0:lP<0.103.0>|N
+105DE5378:t2:AD:$initial_call,H105DE5358
+105DE5358:t3:AA:supervisor,A1D:dtls_server_session_cache_sup,I1
+=proc_messages:<0.135.0>
+=proc_stack:<0.135.0>
+y0:H2800CD8C8
+y1:H105D8D5E0
+y2:A8:infinity
+0x0000000105d8d7d0:SReturn addr 0x41FF57C (gleam_erlang_ffi:select/1 + 76)
+0x0000000105d8d7d8:SReturn addr 0x41F8888 ('gleam@otp@actor':loop/1 + 88)
+y0:N
+y1:N
+y2:H105D8D4B0
+0x0000000105d8d7f8:SReturn addr 0x3D82348 (<terminate process normally>)
+=proc_heap:<0.135.0>
+105D8D5E0:Mf3:H105D8D610:H2800CD8C8,H105D8D598,H105D8D340
+105D8D610:t3:A8:anything,H105D8D5C8,H105D8D3B0
+105D8D3B0:t2:H105D8D288,I2
+105D8D288:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALJ5+vQAAd/g02c=
+105D8D5C8:t2:A6:system,I3
+105D8D340:E59:g3AAAABXATXkq0co6TIEH9F8d4ohKbUAAAABAAAAAXcUZ2xlYW1AZXJsYW5nQHByb2Nlc3NhAWIBryVaWHcNbm9ub2RlQG5vaG9zdAAAAIcAAAAAAAAAAGo=
+105D8D598:E59:g3AAAABXATXkq0co6TIEH9F8d4ohKbUAAAAEAAAAAXcUZ2xlYW1AZXJsYW5nQHByb2Nlc3NhBGIBryVaWHcNbm9ub2RlQG5vaG9zdAAAAIcAAAAAAAAAAGo=
+105D8D4B0:t8:A4:self,A7:running,P<0.9.0>,A3:nil,H105D8D160,H105D8D180,N,H105D8D198
+105D8D198:E70:g3AAAABuAm0lB8VhbzpekP2Yj7+xrtsAAAAAAAAABXcnc2hvd3RpbWVAaW50ZXJuYWxAZXJsYW5nQG1vZHVsZV9oYW5kbGVyYQBiA2koPlh3DW5vbm9kZUBub2hvc3QAAAAJAAAAAAAAAABqampqag==
+105D8D180:t2:A8:selector,H105D8D2A0
+105D8D2A0:Mf1:H105D8D330:H105D8D340
+105D8D330:t1:H105D8D3B0
+105D8D160:t3:A7:subject,P<0.135.0>,H105D8D288
+=persistent_terms
+H280093098|A5:async
+AC:logger_proxy|H28008F560
+H2800930E0|I10
+H28001C210|H28001C228
+H280093140|A9:undefined
+AC:global_group|H28007FBF0
+H280017DD8|H280017DF0
+H2800BB860|I23
+H28001F250|H28001F268
+H280068270|H280068288
+H280068B60|N
+H28001EEC0|H28001EED8
+H2800BB800|I7
+H2800BB7B8|A5:async
+A12:rex_nodes_observer|H2800711C8
+H28001EFE8|H28001F000
+H28005B268|I5
+H28006A4B8|I5
+H28008F5C8|A5:async
+H280068BF0|I5
+H280068BA8|A4:true
+H280068B18|N
+H28005B2B0|I5
+=literals
+2800101F8:t2:A4:unix,A6:darwin
+280010230:t3:I23,I0,I0
+280010268:t6:AB:erts_dflags,I55966662588,I17230663572,I55966662588,I8396866,I8192
+280010188:t0:
+280010190:t0:
+2800102B8:lI108|N
+2800102C8:lI114|H2800102B8
+2800102D8:lI101|H2800102C8
+2800102E8:lI46|H2800102D8
+280013CD0:t4:A5:state,H280013CF8,H280013D10,H280013D28
+280013CF8:Mf0:H280010188:
+280013D10:Mf0:H280010188:
+280013D28:Mf0:H280010188:
+280013D40:Mf0:H280010188:
+280013D58:lA5:flush|N
+280013D68:lI115|H280013D78
+280013D78:lI111|H280013D88
+280013D88:lI99|H280013D98
+280013D98:lI107|H280013DA8
+280013DA8:lI101|H280013DB8
+280013DB8:lI116|H280013DC8
+280013DC8:lI45|H280013DD8
+280013DD8:lI114|H280013DE8
+280013DE8:lI101|H280013DF8
+280013DF8:lI103|H280013E08
+280013E08:lI105|H280013E18
+280013E18:lI115|H280013E28
+280013E28:lI116|H280013E38
+280013E38:lI114|H280013E48
+280013E48:lI121|H280013E58
+280013E58:lI32|H280013E68
+280013E68:lI114|H280013E78
+280013E78:lI101|H280013E88
+280013E88:lI99|H280013E98
+280013E98:lI101|H280013EA8
+280013EA8:lI105|H280013EB8
+280013EB8:lI118|H280013EC8
+280013EC8:lI101|H280013ED8
+280013ED8:lI100|H280013EE8
+280013EE8:lI32|H280013EF8
+280013EF8:lI117|H280013F08
+280013F08:lI110|H280013F18
+280013F18:lI101|H280013F28
+280013F28:lI120|H280013F38
+280013F38:lI112|H280013F48
+280013F48:lI101|H280013F58
+280013F58:lI99|H280013F68
+280013F68:lI116|H280013F78
+280013F78:lI101|H280013F88
+280013F88:lI100|H280013F98
+280013F98:lI32|H280013FA8
+280013FA8:lI101|H280013FB8
+280013FB8:lI120|H280013FC8
+280013FC8:lI105|H280013FD8
+280013FD8:lI116|H280013FE8
+280013FE8:lI32|H280013FF8
+280013FF8:lI102|H280014008
+280014008:lI114|H280014018
+280014018:lI111|H280014028
+280014028:lI109|H280014038
+280014038:lI32|H280014048
+280014048:lI126|H280014058
+280014058:lI112|H280014068
+280014068:lI58|H280014078
+280014078:lI126|H280014088
+280014088:lI110|H280014098
+280014098:lI32|H2800140A8
+2800140A8:lI32|H2800140B8
+2800140B8:lI32|H2800140C8
+2800140C8:lI126|H2800140D8
+2800140D8:lI112|N
+2800140E8:lI115|H2800140F8
+2800140F8:lI111|H280014108
+280014108:lI99|H280014118
+280014118:lI107|H280014128
+280014128:lI101|H280014138
+280014138:lI116|H280014148
+280014148:lI45|H280014158
+280014158:lI114|H280014168
+280014168:lI101|H280014178
+280014178:lI103|H280014188
+280014188:lI105|H280014198
+280014198:lI115|H2800141A8
+2800141A8:lI116|H2800141B8
+2800141B8:lI114|H2800141C8
+2800141C8:lI121|H2800141D8
+2800141D8:lI32|H2800141E8
+2800141E8:lI114|H2800141F8
+2800141F8:lI101|H280014208
+280014208:lI99|H280014218
+280014218:lI101|H280014228
+280014228:lI105|H280014238
+280014238:lI118|H280014248
+280014248:lI101|H280014258
+280014258:lI100|H280014268
+280014268:lI32|H280014278
+280014278:lI117|H280014288
+280014288:lI110|H280014298
+280014298:lI101|H2800142A8
+2800142A8:lI120|H2800142B8
+2800142B8:lI112|H2800142C8
+2800142C8:lI101|H2800142D8
+2800142D8:lI99|H2800142E8
+2800142E8:lI116|H2800142F8
+2800142F8:lI101|H280014308
+280014308:lI100|H280014318
+280014318:lI58|H280014328
+280014328:lI126|H280014338
+280014338:lI110|H280014348
+280014348:lI32|H280014358
+280014358:lI32|H280014368
+280014368:lI32|H280014378
+280014378:lI126|H280014388
+280014388:lI112|N
+280014398:lI115|H2800143A8
+2800143A8:lI111|H2800143B8
+2800143B8:lI99|H2800143C8
+2800143C8:lI107|H2800143D8
+2800143D8:lI101|H2800143E8
+2800143E8:lI116|H2800143F8
+2800143F8:lI45|H280014408
+280014408:lI114|H280014418
+280014418:lI101|H280014428
+280014428:lI103|H280014438
+280014438:lI105|H280014448
+280014448:lI115|H280014458
+280014458:lI116|H280014468
+280014468:lI114|H280014478
+280014478:lI121|H280014488
+280014488:lI32|H280014498
+280014498:lI101|H2800144A8
+2800144A8:lI114|H2800144B8
+2800144B8:lI114|H2800144C8
+2800144C8:lI111|H2800144D8
+2800144D8:lI114|H2800144E8
+2800144E8:lI32|H2800144F8
+2800144F8:lI119|H280014508
+280014508:lI104|H280014518
+280014518:lI105|H280014528
+280014528:lI108|H280014538
+280014538:lI101|H280014548
+280014548:lI32|H280014558
+280014558:lI112|H280014568
+280014568:lI114|H280014578
+280014578:lI111|H280014588
+280014588:lI99|H280014598
+280014598:lI101|H2800145A8
+2800145A8:lI115|H2800145B8
+2800145B8:lI115|H2800145C8
+2800145C8:lI105|H2800145D8
+2800145D8:lI110|H2800145E8
+2800145E8:lI103|H2800145F8
+2800145F8:lI32|H280014608
+280014608:lI115|H280014618
+280014618:lI111|H280014628
+280014628:lI99|H280014638
+280014638:lI107|H280014648
+280014648:lI101|H280014658
+280014658:lI116|H280014668
+280014668:lI58|H280014678
+280014678:lI32|H280014688
+280014688:lI126|H280014698
+280014698:lI110|H2800146A8
+2800146A8:lI32|H2800146B8
+2800146B8:lI32|H2800146C8
+2800146C8:lI32|H2800146D8
+2800146D8:lI67|H2800146E8
+2800146E8:lI108|H2800146F8
+2800146F8:lI97|H280014708
+280014708:lI115|H280014718
+280014718:lI115|H280014728
+280014728:lI58|H280014738
+280014738:lI32|H280014748
+280014748:lI126|H280014758
+280014758:lI112|H280014768
+280014768:lI126|H280014778
+280014778:lI110|H280014788
+280014788:lI32|H280014798
+280014798:lI32|H2800147A8
+2800147A8:lI32|H2800147B8
+2800147B8:lI69|H2800147C8
+2800147C8:lI114|H2800147D8
+2800147D8:lI114|H2800147E8
+2800147E8:lI111|H2800147F8
+2800147F8:lI114|H280014808
+280014808:lI58|H280014818
+280014818:lI32|H280014828
+280014828:lI126|H280014838
+280014838:lI112|H280014848
+280014848:lI126|H280014858
+280014858:lI110|H280014868
+280014868:lI32|H280014878
+280014878:lI32|H280014888
+280014888:lI32|H280014898
+280014898:lI83|H2800148A8
+2800148A8:lI116|H2800148B8
+2800148B8:lI97|H2800148C8
+2800148C8:lI99|H2800148D8
+2800148D8:lI107|H2800148E8
+2800148E8:lI58|H2800148F8
+2800148F8:lI32|H280014908
+280014908:lI126|H280014918
+280014918:lI112|N
+280014928:t2:A5:error,AE:unknown_socket
+280014940:t2:A5:error,A9:not_owner
+280014958:t2:A5:error,AF:unknown_monitor
+280014970:t2:AF:socket_registry,A9:not_found
+280014988:lI115|H280014998
+280014998:lI111|H2800149A8
+2800149A8:lI99|H2800149B8
+2800149B8:lI107|H2800149C8
+2800149C8:lI101|H2800149D8
+2800149D8:lI116|H2800149E8
+2800149E8:lI45|H2800149F8
+2800149F8:lI114|H280014A08
+280014A08:lI101|H280014A18
+280014A18:lI103|H280014A28
+280014A28:lI105|H280014A38
+280014A38:lI115|H280014A48
+280014A48:lI116|H280014A58
+280014A58:lI114|H280014A68
+280014A68:lI121|H280014A78
+280014A78:lI32|H280014A88
+280014A88:lI115|H280014A98
+280014A98:lI101|H280014AA8
+280014AA8:lI110|H280014AB8
+280014AB8:lI100|H280014AC8
+280014AC8:lI102|H280014AD8
+280014AD8:lI105|H280014AE8
+280014AE8:lI108|H280014AF8
+280014AF8:lI101|H280014B08
+280014B08:lI95|H280014B18
+280014B18:lI100|H280014B28
+280014B28:lI101|H280014B38
+280014B38:lI102|H280014B48
+280014B48:lI101|H280014B58
+280014B58:lI114|H280014B68
+280014B68:lI114|H280014B78
+280014B78:lI101|H280014B88
+280014B88:lI100|H280014B98
+280014B98:lI95|H280014BA8
+280014BA8:lI99|H280014BB8
+280014BB8:lI108|H280014BC8
+280014BC8:lI111|H280014BD8
+280014BD8:lI115|H280014BE8
+280014BE8:lI101|H280014BF8
+280014BF8:lI58|H280014C08
+280014C08:lI126|H280014C18
+280014C18:lI110|H280014C28
+280014C28:lI32|H280014C38
+280014C38:lI32|H280014C48
+280014C48:lI32|H280014C58
+280014C58:lI91|H280014C68
+280014C68:lI126|H280014C78
+280014C78:lI112|H280014C88
+280014C88:lI93|H280014C98
+280014C98:lI32|H280014CA8
+280014CA8:lI126|H280014CB8
+280014CB8:lI112|N
+280014CC8:lI115|H280014CD8
+280014CD8:lI111|H280014CE8
+280014CE8:lI99|H280014CF8
+280014CF8:lI107|H280014D08
+280014D08:lI101|H280014D18
+280014D18:lI116|H280014D28
+280014D28:lI45|H280014D38
+280014D38:lI114|H280014D48
+280014D48:lI101|H280014D58
+280014D58:lI103|H280014D68
+280014D68:lI105|H280014D78
+280014D78:lI115|H280014D88
+280014D88:lI116|H280014D98
+280014D98:lI114|H280014DA8
+280014DA8:lI121|H280014DB8
+280014DB8:lI32|H280014DC8
+280014DC8:lI115|H280014DD8
+280014DD8:lI101|H280014DE8
+280014DE8:lI110|H280014DF8
+280014DF8:lI100|H280014E08
+280014E08:lI102|H280014E18
+280014E18:lI105|H280014E28
+280014E28:lI108|H280014E38
+280014E38:lI101|H280014E48
+280014E48:lI95|H280014E58
+280014E58:lI100|H280014E68
+280014E68:lI101|H280014E78
+280014E78:lI102|H280014E88
+280014E88:lI101|H280014E98
+280014E98:lI114|H280014EA8
+280014EA8:lI114|H280014EB8
+280014EB8:lI101|H280014EC8
+280014EC8:lI100|H280014ED8
+280014ED8:lI95|H280014EE8
+280014EE8:lI99|H280014EF8
+280014EF8:lI108|H280014F08
+280014F08:lI111|H280014F18
+280014F18:lI115|H280014F28
+280014F28:lI101|H280014F38
+280014F38:lI58|H280014F48
+280014F48:lI126|H280014F58
+280014F58:lI110|H280014F68
+280014F68:lI32|H280014F78
+280014F78:lI32|H280014F88
+280014F88:lI32|H280014F98
+280014F98:lI91|H280014FA8
+280014FA8:lI126|H280014FB8
+280014FB8:lI112|H280014FC8
+280014FC8:lI93|H280014FD8
+280014FD8:lI32|H280014FE8
+280014FE8:lI40|H280014FF8
+280014FF8:lI126|H280015008
+280015008:lI112|H280015018
+280015018:lI58|H280015028
+280015028:lI126|H280015038
+280015038:lI112|H280015048
+280015048:lI41|H280015058
+280015058:lI126|H280015068
+280015068:lI110|H280015078
+280015078:lI32|H280015088
+280015088:lI32|H280015098
+280015098:lI32|H2800150A8
+2800150A8:lI32|H2800150B8
+2800150B8:lI32|H2800150C8
+2800150C8:lI32|H2800150D8
+2800150D8:lI126|H2800150E8
+2800150E8:lI112|N
+2800150F8:t1:A3:tag
+280015108:t4:AC:error_logger,A3:pid,A4:time,A2:gl
+280017B40:t2:I0,N
+280025F58:lI67|H280025F68
+280025F68:lI97|H280025F78
+280025F78:lI108|H280025F88
+280025F88:lI108|H280025F98
+280025F98:lI98|H280025FA8
+280025FA8:lI97|H280025FB8
+280025FB8:lI99|H280025FC8
+280025FC8:lI107|N
+280025FD8:lI83|H280025FE8
+280025FE8:lI116|H280025FF8
+280025FF8:lI97|H280026008
+280026008:lI116|H280026018
+280026018:lI101|N
+280026028:t2:A2:ok,A9:undefined
+280026040:t2:A5:error,AA:restarting
+280026058:t2:A5:error,A7:running
+280026070:t2:A5:error,A9:not_found
+280026088:t2:A5:error,A12:simple_one_for_one
+2800260A0:t2:AB:supervisors,I0
+2800260B8:t2:A5:specs,I1
+2800260D0:lH2800260E0|N
+2800260E0:t2:A7:workers,I0
+2800260F8:t4:I0,I0,I0,I0
+280026120:lI83|H280026130
+280026130:lI117|H280026140
+280026140:lI112|H280026150
+280026150:lI101|H280026160
+280026160:lI114|H280026170
+280026170:lI118|H280026180
+280026180:lI105|H280026190
+280026190:lI115|H2800261A0
+2800261A0:lI111|H2800261B0
+2800261B0:lI114|H2800261C0
+2800261C0:lI32|H2800261D0
+2800261D0:lI114|H2800261E0
+2800261E0:lI101|H2800261F0
+2800261F0:lI99|H280026200
+280026200:lI101|H280026210
+280026210:lI105|H280026220
+280026220:lI118|H280026230
+280026230:lI101|H280026240
+280026240:lI100|H280026250
+280026250:lI32|H280026260
+280026260:lI117|H280026270
+280026270:lI110|H280026280
+280026280:lI101|H280026290
+280026290:lI120|H2800262A0
+2800262A0:lI112|H2800262B0
+2800262B0:lI101|H2800262C0
+2800262C0:lI99|H2800262D0
+2800262D0:lI116|H2800262E0
+2800262E0:lI101|H2800262F0
+2800262F0:lI100|H280026300
+280026300:lI32|H280026310
+280026310:lI109|H280026320
+280026320:lI101|H280026330
+280026330:lI115|H280026340
+280026340:lI115|H280026350
+280026350:lI97|H280026360
+280026360:lI103|H280026370
+280026370:lI101|H280026380
+280026380:lI58|H280026390
+280026390:lI32|H2800263A0
+2800263A0:lI126|H2800263B0
+2800263B0:lI116|H2800263C0
+2800263C0:lI112|H2800263D0
+2800263D0:lI126|H2800263E0
+2800263E0:lI110|N
+2800263F0:t2:AC:error_logger,A6:domain
+280026408:Mf2:H2800263F0:H280026450,H280026430
+280026430:lA3:otp|N
+280026440:t1:A3:tag
+280026450:Mf1:H280026440:A5:error
+280026470:t3:A4:line,A4:file,A3:mfa
+280026490:Mf3:H280026470:I623,H2800264C0,H2800265A0
+2800264C0:lI115|H2800264D0
+2800264D0:lI117|H2800264E0
+2800264E0:lI112|H2800264F0
+2800264F0:lI101|H280026500
+280026500:lI114|H280026510
+280026510:lI118|H280026520
+280026520:lI105|H280026530
+280026530:lI115|H280026540
+280026540:lI111|H280026550
+280026550:lI114|H280026560
+280026560:lI46|H280026570
+280026570:lI101|H280026580
+280026580:lI114|H280026590
+280026590:lI108|N
+2800265A0:t3:AA:supervisor,AB:handle_info,I2
+2800265C0:t2:A5:error,AF:already_present
+2800265D8:t2:AC:errorContext,A10:child_terminated
+2800265F0:Mf0:H280010188:
+280026608:t2:AA:supervisor,A10:child_terminated
+280026620:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb
+280026648:Mf4:H280026620:H2800266C0,H280026680,H280026728,H280026858
+280026680:lA3:otp|H280026690
+280026690:lA4:sasl|N
+2800266A0:t3:A3:tag,A4:type,A9:report_cb
+2800266C0:Mf3:H2800266A0:AC:error_report,A11:supervisor_report,H2800266F0
+2800266F0:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAQ==
+280026718:t1:A5:title
+280026728:Mf1:H280026718:H280026748
+280026748:lI83|H280026758
+280026758:lI85|H280026768
+280026768:lI80|H280026778
+280026778:lI69|H280026788
+280026788:lI82|H280026798
+280026798:lI86|H2800267A8
+2800267A8:lI73|H2800267B8
+2800267B8:lI83|H2800267C8
+2800267C8:lI79|H2800267D8
+2800267D8:lI82|H2800267E8
+2800267E8:lI32|H2800267F8
+2800267F8:lI82|H280026808
+280026808:lI69|H280026818
+280026818:lI80|H280026828
+280026828:lI79|H280026838
+280026838:lI82|H280026848
+280026848:lI84|N
+280026858:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAg==
+280026880:t3:A4:line,A4:file,A3:mfa
+2800268A0:Mf3:H280026880:I742,H2800268D0,H2800269B0
+2800268D0:lI115|H2800268E0
+2800268E0:lI117|H2800268F0
+2800268F0:lI112|H280026900
+280026900:lI101|H280026910
+280026910:lI114|H280026920
+280026920:lI118|H280026930
+280026930:lI105|H280026940
+280026940:lI115|H280026950
+280026950:lI111|H280026960
+280026960:lI114|H280026970
+280026970:lI46|H280026980
+280026980:lI101|H280026990
+280026990:lI114|H2800269A0
+2800269A0:lI108|N
+2800269B0:t3:AA:supervisor,AA:do_restart,I3
+2800269D0:t3:A4:line,A4:file,A3:mfa
+2800269F0:Mf3:H2800269D0:I754,H280026A20,H280026B00
+280026A20:lI115|H280026A30
+280026A30:lI117|H280026A40
+280026A40:lI112|H280026A50
+280026A50:lI101|H280026A60
+280026A60:lI114|H280026A70
+280026A70:lI118|H280026A80
+280026A80:lI105|H280026A90
+280026A90:lI115|H280026AA0
+280026AA0:lI111|H280026AB0
+280026AB0:lI114|H280026AC0
+280026AC0:lI46|H280026AD0
+280026AD0:lI101|H280026AE0
+280026AE0:lI114|H280026AF0
+280026AF0:lI108|N
+280026B00:t3:AA:supervisor,AA:do_restart,I3
+280026B20:t3:A4:line,A4:file,A3:mfa
+280026B40:Mf3:H280026B20:I757,H280026B70,H280026C50
+280026B70:lI115|H280026B80
+280026B80:lI117|H280026B90
+280026B90:lI112|H280026BA0
+280026BA0:lI101|H280026BB0
+280026BB0:lI114|H280026BC0
+280026BC0:lI118|H280026BD0
+280026BD0:lI105|H280026BE0
+280026BE0:lI115|H280026BF0
+280026BF0:lI111|H280026C00
+280026C00:lI114|H280026C10
+280026C10:lI46|H280026C20
+280026C20:lI101|H280026C30
+280026C30:lI114|H280026C40
+280026C40:lI108|N
+280026C50:t3:AA:supervisor,AA:do_restart,I3
+280026C70:t2:A6:reason,A1D:reached_max_restart_intensity
+280026C88:t2:AC:errorContext,A8:shutdown
+280026CA0:t2:AA:supervisor,A8:shutdown
+280026CB8:t3:A4:line,A4:file,A3:mfa
+280026CD8:Mf3:H280026CB8:I811,H280026D08,H280026DE8
+280026D08:lI115|H280026D18
+280026D18:lI117|H280026D28
+280026D28:lI112|H280026D38
+280026D38:lI101|H280026D48
+280026D48:lI114|H280026D58
+280026D58:lI118|H280026D68
+280026D68:lI105|H280026D78
+280026D78:lI115|H280026D88
+280026D88:lI111|H280026D98
+280026D98:lI114|H280026DA8
+280026DA8:lI46|H280026DB8
+280026DB8:lI101|H280026DC8
+280026DC8:lI114|H280026DD8
+280026DD8:lI108|N
+280026DE8:t3:AA:supervisor,A7:restart,I2
+280026E08:t2:AC:errorContext,AB:start_error
+280026E20:t2:AA:supervisor,AB:start_error
+280026E38:t3:A4:line,A4:file,A3:mfa
+280026E58:Mf3:H280026E38:I838,H280026E88,H280026F68
+280026E88:lI115|H280026E98
+280026E98:lI117|H280026EA8
+280026EA8:lI112|H280026EB8
+280026EB8:lI101|H280026EC8
+280026EC8:lI114|H280026ED8
+280026ED8:lI118|H280026EE8
+280026EE8:lI105|H280026EF8
+280026EF8:lI115|H280026F08
+280026F08:lI111|H280026F18
+280026F18:lI114|H280026F28
+280026F28:lI46|H280026F38
+280026F38:lI101|H280026F48
+280026F48:lI114|H280026F58
+280026F58:lI108|N
+280026F68:t3:AA:supervisor,A7:restart,I3
+280026F88:t3:A4:line,A4:file,A3:mfa
+280026FA8:Mf3:H280026F88:I852,H280026FD8,H2800270B8
+280026FD8:lI115|H280026FE8
+280026FE8:lI117|H280026FF8
+280026FF8:lI112|H280027008
+280027008:lI101|H280027018
+280027018:lI114|H280027028
+280027028:lI118|H280027038
+280027038:lI105|H280027048
+280027048:lI115|H280027058
+280027058:lI111|H280027068
+280027068:lI114|H280027078
+280027078:lI46|H280027088
+280027088:lI101|H280027098
+280027098:lI114|H2800270A8
+2800270A8:lI108|N
+2800270B8:t3:AA:supervisor,A7:restart,I3
+2800270D8:t2:AA:restarting,A9:undefined
+2800270F0:t2:AC:errorContext,AE:shutdown_error
+280027108:t2:AA:supervisor,AE:shutdown_error
+280027120:t3:A4:line,A4:file,A3:mfa
+280027140:Mf3:H280027120:I911,H280027170,H280027250
+280027170:lI115|H280027180
+280027180:lI117|H280027190
+280027190:lI112|H2800271A0
+2800271A0:lI101|H2800271B0
+2800271B0:lI114|H2800271C0
+2800271C0:lI118|H2800271D0
+2800271D0:lI105|H2800271E0
+2800271E0:lI115|H2800271F0
+2800271F0:lI111|H280027200
+280027200:lI114|H280027210
+280027210:lI46|H280027220
+280027220:lI101|H280027230
+280027230:lI114|H280027240
+280027240:lI108|N
+280027250:t3:AA:supervisor,AC:do_terminate,I2
+280027270:t2:N,H280027288
+280027288:Mf0:H280010188:
+2800272A0:t4:A8:strategy,A6:period,A9:intensity,AD:auto_shutdown
+2800272C8:Mf4:H2800272A0:AB:one_for_one,I5,I1,A5:never
+280027300:t2:A7:restart,A4:type
+280027318:Mf2:H280027300:A9:permanent,A6:worker
+280027340:t2:AF:bad_combination,H280027358
+280027358:lH280027378|H280027368
+280027368:lH280027390|N
+280027378:t2:AD:auto_shutdown,A5:never
+280027390:t2:AB:significant,A4:true
+2800273A8:t2:AF:bad_combination,H2800273C0
+2800273C0:lH2800273E0|H2800273D0
+2800273D0:lH2800273F8|N
+2800273E0:t2:A7:restart,A9:permanent
+2800273F8:t2:AB:significant,A4:true
+280027410:t2:AA:supervisor,A8:progress
+280027428:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb
+280027450:Mf4:H280027428:H2800274C8,H280027488,H280027530,H280027640
+280027488:lA3:otp|H280027498
+280027498:lA4:sasl|N
+2800274A8:t3:A3:tag,A4:type,A9:report_cb
+2800274C8:Mf3:H2800274A8:AB:info_report,A8:progress,H2800274F8
+2800274F8:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAQ==
+280027520:t1:A5:title
+280027530:Mf1:H280027520:H280027550
+280027550:lI80|H280027560
+280027560:lI82|H280027570
+280027570:lI79|H280027580
+280027580:lI71|H280027590
+280027590:lI82|H2800275A0
+2800275A0:lI69|H2800275B0
+2800275B0:lI83|H2800275C0
+2800275C0:lI83|H2800275D0
+2800275D0:lI32|H2800275E0
+2800275E0:lI82|H2800275F0
+2800275F0:lI69|H280027600
+280027600:lI80|H280027610
+280027610:lI79|H280027620
+280027620:lI82|H280027630
+280027630:lI84|N
+280027640:E1C:g3F3CnN1cGVydmlzb3J3CmZvcm1hdF9sb2dhAg==
+280027668:t3:A4:line,A4:file,A3:mfa
+280027688:Mf3:H280027668:I1563,H2800276B8,H280027798
+2800276B8:lI115|H2800276C8
+2800276C8:lI117|H2800276D8
+2800276D8:lI112|H2800276E8
+2800276E8:lI101|H2800276F8
+2800276F8:lI114|H280027708
+280027708:lI118|H280027718
+280027718:lI105|H280027728
+280027728:lI115|H280027738
+280027738:lI111|H280027748
+280027748:lI114|H280027758
+280027758:lI46|H280027768
+280027768:lI101|H280027778
+280027778:lI114|H280027788
+280027788:lI108|N
+280027798:t3:AA:supervisor,AF:report_progress,I2
+2800277B8:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+2800277E0:Mf4:H2800277B8:A9:unlimited,A9:unlimited,A4:utf8,A5:false
+280027818:lI83|H280027828
+280027828:lI116|H280027838
+280027838:lI97|H280027848
+280027848:lI114|H280027858
+280027858:lI116|H280027868
+280027868:lI101|H280027878
+280027878:lI100|H280027888
+280027888:lI58|N
+280027898:lI46|N
+2800278A8:lI83|H2800278B8
+2800278B8:lI117|H2800278C8
+2800278C8:lI112|H2800278D8
+2800278D8:lI101|H2800278E8
+2800278E8:lI114|H2800278F8
+2800278F8:lI118|H280027908
+280027908:lI105|H280027918
+280027918:lI115|H280027928
+280027928:lI111|H280027938
+280027938:lI114|H280027948
+280027948:lI58|H280027958
+280027958:lI32|N
+280027968:lH280027978|N
+280027978:lI46|N
+280027988:lI46|H280027998
+280027998:lI32|H2800279A8
+2800279A8:lI82|H2800279B8
+2800279B8:lI101|H2800279C8
+2800279C8:lI97|H2800279D8
+2800279D8:lI115|H2800279E8
+2800279E8:lI111|H2800279F8
+2800279F8:lI110|H280027A08
+280027A08:lI58|H280027A18
+280027A18:lI32|N
+280027A28:lI46|H280027A38
+280027A38:lI32|H280027A48
+280027A48:lI67|H280027A58
+280027A58:lI111|H280027A68
+280027A68:lI110|H280027A78
+280027A78:lI116|H280027A88
+280027A88:lI101|H280027A98
+280027A98:lI120|H280027AA8
+280027AA8:lI116|H280027AB8
+280027AB8:lI58|H280027AC8
+280027AC8:lI32|N
+280027AD8:lI79|H280027AE8
+280027AE8:lI102|H280027AF8
+280027AF8:lI102|H280027B08
+280027B08:lI101|H280027B18
+280027B18:lI110|H280027B28
+280027B28:lI100|H280027B38
+280027B38:lI101|H280027B48
+280027B48:lI114|H280027B58
+280027B58:lI58|N
+280027B68:lH280027B78|N
+280027B78:lI126|H280027B88
+280027B88:lI110|N
+280027B98:lI32|H280027BA8
+280027BA8:lI32|H280027BB8
+280027BB8:lI32|H280027BC8
+280027BC8:lI32|H280027BD8
+280027BD8:lI115|H280027BE8
+280027BE8:lI116|H280027BF8
+280027BF8:lI97|H280027C08
+280027C08:lI114|H280027C18
+280027C18:lI116|H280027C28
+280027C28:lI101|H280027C38
+280027C38:lI100|H280027C48
+280027C48:lI58|H280027C58
+280027C58:lI32|N
+280027C68:lI126|H280027C78
+280027C78:lI110|N
+280027C88:lI32|H280027C98
+280027C98:lI32|H280027CA8
+280027CA8:lI32|H280027CB8
+280027CB8:lI32|H280027CC8
+280027CC8:lI115|H280027CD8
+280027CD8:lI117|H280027CE8
+280027CE8:lI112|H280027CF8
+280027CF8:lI101|H280027D08
+280027D08:lI114|H280027D18
+280027D18:lI118|H280027D28
+280027D28:lI105|H280027D38
+280027D38:lI115|H280027D48
+280027D48:lI111|H280027D58
+280027D58:lI114|H280027D68
+280027D68:lI58|H280027D78
+280027D78:lI32|N
+280027D88:lI32|H280027D98
+280027D98:lI32|H280027DA8
+280027DA8:lI32|H280027DB8
+280027DB8:lI32|H280027DC8
+280027DC8:lI111|H280027DD8
+280027DD8:lI102|H280027DE8
+280027DE8:lI102|H280027DF8
+280027DF8:lI101|H280027E08
+280027E08:lI110|H280027E18
+280027E18:lI100|H280027E28
+280027E28:lI101|H280027E38
+280027E38:lI114|H280027E48
+280027E48:lI58|H280027E58
+280027E58:lI32|N
+280027E68:lI32|H280027E78
+280027E78:lI32|H280027E88
+280027E88:lI32|H280027E98
+280027E98:lI32|H280027EA8
+280027EA8:lI114|H280027EB8
+280027EB8:lI101|H280027EC8
+280027EC8:lI97|H280027ED8
+280027ED8:lI115|H280027EE8
+280027EE8:lI111|H280027EF8
+280027EF8:lI110|H280027F08
+280027F08:lI58|H280027F18
+280027F18:lI32|N
+280027F28:lI32|H280027F38
+280027F38:lI32|H280027F48
+280027F48:lI32|H280027F58
+280027F58:lI32|H280027F68
+280027F68:lI101|H280027F78
+280027F78:lI114|H280027F88
+280027F88:lI114|H280027F98
+280027F98:lI111|H280027FA8
+280027FA8:lI114|H280027FB8
+280027FB8:lI67|H280027FC8
+280027FC8:lI111|H280027FD8
+280027FD8:lI110|H280027FE8
+280027FE8:lI116|H280027FF8
+280027FF8:lI101|H280028008
+280028008:lI120|H280028018
+280028018:lI116|H280028028
+280028028:lI58|H280028038
+280028038:lI32|N
+280028048:lI32|H280028058
+280028058:lI126|H280028068
+280028068:lI115|H280028078
+280028078:lI32|H280028088
+280028088:lI105|H280028098
+280028098:lI100|H2800280A8
+2800280A8:lI61|H2800280B8
+2800280B8:lI126|H2800280C8
+2800280C8:lI119|H2800280D8
+2800280D8:lI44|H2800280E8
+2800280E8:lI110|H2800280F8
+2800280F8:lI98|H280028108
+280028108:lI95|H280028118
+280028118:lI99|H280028128
+280028128:lI104|H280028138
+280028138:lI105|H280028148
+280028148:lI108|H280028158
+280028158:lI100|H280028168
+280028168:lI114|H280028178
+280028178:lI101|H280028188
+280028188:lI110|H280028198
+280028198:lI61|H2800281A8
+2800281A8:lI126|H2800281B8
+2800281B8:lI119|H2800281C8
+2800281C8:lI46|N
+2800281D8:lI32|H2800281E8
+2800281E8:lI126|H2800281F8
+2800281F8:lI115|H280028208
+280028208:lI32|H280028218
+280028218:lI105|H280028228
+280028228:lI100|H280028238
+280028238:lI61|H280028248
+280028248:lI126|H280028258
+280028258:lI119|H280028268
+280028268:lI44|H280028278
+280028278:lI112|H280028288
+280028288:lI105|H280028298
+280028298:lI100|H2800282A8
+2800282A8:lI61|H2800282B8
+2800282B8:lI126|H2800282C8
+2800282C8:lI119|H2800282D8
+2800282D8:lI46|N
+2800282E8:lI112|N
+2800282F8:lI80|N
+280028308:lI48|N
+280028318:lI116|N
+280028328:t2:A7:mapsets,H280028340
+280028340:Mf0:H280010188:
+280028358:t2:A4:maps,H280028370
+280028370:Mf0:H280010188:
+280028388:lH280028398|N
+280028398:t2:A4:init,I1
+2800283B0:t3:A4:line,A4:file,A3:mfa
+2800283D0:Mf3:H2800283B0:I1026,H280028400,H2800284E0
+280028400:lI115|H280028410
+280028410:lI117|H280028420
+280028420:lI112|H280028430
+280028430:lI101|H280028440
+280028440:lI114|H280028450
+280028450:lI118|H280028460
+280028460:lI105|H280028470
+280028470:lI115|H280028480
+280028480:lI111|H280028490
+280028490:lI114|H2800284A0
+2800284A0:lI46|H2800284B0
+2800284B0:lI101|H2800284C0
+2800284C0:lI114|H2800284D0
+2800284D0:lI108|N
+2800284E0:t3:AA:supervisor,A1A:terminate_dynamic_children,I1
+280028500:t3:A4:line,A4:file,A3:mfa
+280028520:Mf3:H280028500:I398,H280028550,H280028630
+280028550:lI115|H280028560
+280028560:lI117|H280028570
+280028570:lI112|H280028580
+280028580:lI101|H280028590
+280028590:lI114|H2800285A0
+2800285A0:lI118|H2800285B0
+2800285B0:lI105|H2800285C0
+2800285C0:lI115|H2800285D0
+2800285D0:lI111|H2800285E0
+2800285E0:lI114|H2800285F0
+2800285F0:lI46|H280028600
+280028600:lI101|H280028610
+280028610:lI114|H280028620
+280028620:lI108|N
+280028630:t3:AA:supervisor,AE:start_children,I2
+280028650:lI108|N
+280028660:lI114|H280028650
+280028670:lI101|H280028660
+280028680:lI46|H280028670
+280028690:lI114|H280028680
+2800286A0:lI111|H280028690
+2800286B0:lI115|H2800286A0
+2800286C0:lI105|H2800286B0
+2800286D0:lI118|H2800286C0
+2800286E0:lI114|H2800286D0
+2800286F0:lI101|H2800286E0
+280028700:lI112|H2800286F0
+280028710:lI117|H280028700
+280028720:lI115|H280028710
+280028730:E4E:g3AAAABMAnoLCyY6L4XTypzaMLAOL78AAAACAAAAAHcKc3VwZXJ2aXNvcmECYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+280028758:E4E:g3AAAABMA3oLCyY6L4XTypzaMLAOL78AAAADAAAAAHcKc3VwZXJ2aXNvcmEDYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+280028780:t2:A5:label,A6:report
+280028798:E4E:g3AAAABMAnoLCyY6L4XTypzaMLAOL78AAAAEAAAAAHcKc3VwZXJ2aXNvcmEEYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+2800287C0:E4E:g3AAAABMAnoLCyY6L4XTypzaMLAOL78AAAAIAAAAAHcKc3VwZXJ2aXNvcmEIYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+2800287E8:t4:A8:strategy,A6:period,A9:intensity,AD:auto_shutdown
+280028810:t7:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules,AB:significant
+280028850:E4E:g3AAAABMAXoLCyY6L4XTypzaMLAOL78AAAALAAAAAHcKc3VwZXJ2aXNvcmELYgPQWFlYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+280028878:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+280042AD8:lA5:flush|N
+280042AE8:t2:A5:error,A7:timeout
+280042B00:lA4:link|H280042B10
+280042B10:lA7:monitor|N
+280042B20:lI65|H280042B30
+280042B30:lI114|H280042B40
+280042B40:lI103|H280042B50
+280042B50:lI117|H280042B60
+280042B60:lI109|H280042B70
+280042B70:lI101|H280042B80
+280042B80:lI110|H280042B90
+280042B90:lI116|H280042BA0
+280042BA0:lI95|H280042BB0
+280042BB0:lI95|N
+280042BC0:t3:A8:proc_lib,A6:init_p,I5
+280042BE0:t3:A9:gen_event,A7:init_it,I6
+280042C00:Mf0:H280010188:
+280042C18:t2:A8:proc_lib,A5:crash
+280042C30:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb
+280042C58:Mf4:H280042C30:H280042CC8,H280042C90,H280042D00,H280042DE0
+280042C90:lA3:otp|H280042CA0
+280042CA0:lA4:sasl|N
+280042CB0:t2:A3:tag,A4:type
+280042CC8:Mf2:H280042CB0:AC:error_report,AC:crash_report
+280042CF0:t1:A5:title
+280042D00:Mf1:H280042CF0:H280042D20
+280042D20:lI67|H280042D30
+280042D30:lI82|H280042D40
+280042D40:lI65|H280042D50
+280042D50:lI83|H280042D60
+280042D60:lI72|H280042D70
+280042D70:lI32|H280042D80
+280042D80:lI82|H280042D90
+280042D90:lI69|H280042DA0
+280042DA0:lI80|H280042DB0
+280042DB0:lI79|H280042DC0
+280042DC0:lI82|H280042DD0
+280042DD0:lI84|N
+280042DE0:E19:g3F3CHByb2NfbGlidwlyZXBvcnRfY2JhAg==
+280042E08:t3:A4:line,A4:file,A3:mfa
+280042E28:Mf3:H280042E08:I584,H280042E58,H280042F18
+280042E58:lI112|H280042E68
+280042E68:lI114|H280042E78
+280042E78:lI111|H280042E88
+280042E88:lI99|H280042E98
+280042E98:lI95|H280042EA8
+280042EA8:lI108|H280042EB8
+280042EB8:lI105|H280042EC8
+280042EC8:lI98|H280042ED8
+280042ED8:lI46|H280042EE8
+280042EE8:lI101|H280042EF8
+280042EF8:lI114|H280042F08
+280042F08:lI108|N
+280042F18:t3:A8:proc_lib,AC:crash_report,I4
+280042F38:t2:A9:ancestors,N
+280042F50:t2:AA:dictionary,N
+280042F68:t2:A9:trap_exit,A5:false
+280042F80:t2:AF:registered_name,N
+280042F98:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+280042FC0:Mf4:H280042F98:A9:unlimited,A9:unlimited,A4:utf8,A5:false
+280042FF8:lI32|H280043008
+280043008:lI32|N
+280043018:lI32|N
+280043028:lI126|H280043038
+280043038:lI116|H280043048
+280043048:lI115|N
+280043058:lI126|H280043068
+280043068:lI115|H280043078
+280043078:lI99|H280043088
+280043088:lI114|H280043098
+280043098:lI97|H2800430A8
+2800430A8:lI115|H2800430B8
+2800430B8:lI104|H2800430C8
+2800430C8:lI101|H2800430D8
+2800430D8:lI114|H2800430E8
+2800430E8:lI58|N
+2800430F8:lI48|N
+280043108:lI110|H280043118
+280043118:lI101|H280043128
+280043128:lI105|H280043138
+280043138:lI103|H280043148
+280043148:lI104|H280043158
+280043158:lI98|H280043168
+280043168:lI111|H280043178
+280043178:lI117|H280043188
+280043188:lI114|H280043198
+280043198:lI115|H2800431A8
+2800431A8:lI58|H2800431B8
+2800431B8:lI32|H2800431C8
+2800431C8:lI126|N
+2800431D8:lI110|H2800431E8
+2800431E8:lI101|H2800431F8
+2800431F8:lI105|H280043208
+280043208:lI103|H280043218
+280043218:lI104|H280043228
+280043228:lI98|H280043238
+280043238:lI111|H280043248
+280043248:lI117|H280043258
+280043258:lI114|H280043268
+280043268:lI115|H280043278
+280043278:lI58|N
+280043288:lI110|H280043298
+280043298:lI101|H2800432A8
+2800432A8:lI105|H2800432B8
+2800432B8:lI103|H2800432C8
+2800432C8:lI104|H2800432D8
+2800432D8:lI98|H2800432E8
+2800432E8:lI111|H2800432F8
+2800432F8:lI117|H280043308
+280043308:lI114|H280043318
+280043318:lI58|N
+280043328:lI58|H280043338
+280043338:lI32|N
+280043348:lI32|H280043358
+280043358:lI32|H280043368
+280043368:lI32|H280043378
+280043378:lI32|N
+280043388:lI105|H280043398
+280043398:lI110|H2800433A8
+2800433A8:lI105|H2800433B8
+2800433B8:lI116|H2800433C8
+2800433C8:lI105|H2800433D8
+2800433D8:lI97|H2800433E8
+2800433E8:lI108|H2800433F8
+2800433F8:lI32|H280043408
+280043408:lI99|H280043418
+280043418:lI97|H280043428
+280043428:lI108|H280043438
+280043438:lI108|H280043448
+280043448:lI58|H280043458
+280043458:lI32|N
+280043468:lI112|N
+280043478:lI80|N
+280043488:lI59|H280043498
+280043498:lI32|N
+2800434A8:lI44|H2800434B8
+2800434B8:lI32|N
+2800434C8:lI116|N
+2800434D8:lI10|N
+2800434E8:lI108|N
+2800434F8:lI114|H2800434E8
+280043508:lI101|H2800434F8
+280043518:lI46|H280043508
+280043528:lI98|H280043518
+280043538:lI105|H280043528
+280043548:lI108|H280043538
+280043558:lI95|H280043548
+280043568:lI99|H280043558
+280043578:lI111|H280043568
+280043588:lI114|H280043578
+280043598:lI112|H280043588
+2800435A8:t2:A5:label,A6:report
+2800435C0:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+2800435E8:E4C:g3AAAABKAWgua8tdqRXVh3ClT3T2+hwAAAAAAAAAAHcIcHJvY19saWJhAGIDQXNeWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280043610:E4C:g3AAAABKA2gua8tdqRXVh3ClT3T2+hwAAAABAAAAAHcIcHJvY19saWJhAWIDQXNeWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280043650:t2:A5:local,AA:kernel_sup
+280043668:t3:A8:strategy,A6:period,A9:intensity
+280043688:Mf3:H280043668:AB:one_for_one,I3600,I4
+2800436B8:lH280043700|N
+2800436C8:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043700:Mf6:H2800436C8:AD:file_server_2,A9:permanent,I2000,H280043788,A6:worker,H280043748
+280043748:lA4:file|H280043758
+280043758:lAB:file_server|H280043768
+280043768:lAE:file_io_server|H280043778
+280043778:lA9:prim_file|N
+280043788:t3:AB:file_server,AA:start_link,N
+2800437A8:lH2800437B8|N
+2800437B8:lI109|H2800437C8
+2800437C8:lI105|H2800437D8
+2800437D8:lI110|H2800437E8
+2800437E8:lI105|H2800437F8
+2800437F8:lI109|H280043808
+280043808:lI97|H280043818
+280043818:lI108|N
+280043828:lH2800438B0|H280043838
+280043838:lH280043960|H280043848
+280043848:lH280043A10|H280043858
+280043858:lH280043AC0|H280043868
+280043868:lH280043B70|N
+280043878:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800438B0:Mf6:H280043878:A4:user,A9:temporary,I2000,H280043908,AA:supervisor,H2800438F8
+2800438F8:lA8:user_sup|N
+280043908:t3:A8:user_sup,A5:start,N
+280043928:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043960:Mf6:H280043928:AA:logger_sup,A9:permanent,A8:infinity,H2800439B8,AA:supervisor,H2800439A8
+2800439A8:lAA:logger_sup|N
+2800439B8:t3:AA:logger_sup,AA:start_link,N
+2800439D8:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043A10:Mf6:H2800439D8:AD:kernel_config,A9:permanent,I2000,H280043A68,A6:worker,H280043A58
+280043A58:lAD:kernel_config|N
+280043A68:t3:AD:kernel_config,AA:start_link,N
+280043A88:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043AC0:Mf6:H280043A88:AB:kernel_refc,A9:permanent,I2000,H280043B18,A6:worker,H280043B08
+280043B08:lAB:kernel_refc|N
+280043B18:t3:AB:kernel_refc,AA:start_link,N
+280043B38:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043B70:Mf6:H280043B38:AF:kernel_safe_sup,A9:permanent,A8:infinity,H280043BC8,AA:supervisor,H280043BB8
+280043BB8:lA6:kernel|N
+280043BC8:t3:AA:supervisor,AA:start_link,H280043BE8
+280043BE8:lH280043C18|H280043BF8
+280043BF8:lA6:kernel|H280043C08
+280043C08:lA4:safe|N
+280043C18:t2:A5:local,AF:kernel_safe_sup
+280043C30:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043C68:Mf6:H280043C30:A7:on_load,A9:transient,I2000,H280043CC0,A6:worker,H280043CB0
+280043CB0:lA6:kernel|N
+280043CC0:t3:A8:proc_lib,AA:start_link,H280043CE0
+280043CE0:lA6:kernel|H280043CF0
+280043CF0:lA4:init|H280043D00
+280043D00:lH280043D10|N
+280043D10:lA7:on_load|N
+280043D20:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043D58:Mf6:H280043D20:AE:standard_error,A9:temporary,I2000,H280043DB0,AA:supervisor,H280043DA0
+280043DA0:lAE:standard_error|N
+280043DB0:t3:AE:standard_error,AA:start_link,N
+280043DD0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043E08:Mf6:H280043DD0:AB:code_server,A9:permanent,I2000,H280043E60,A6:worker,H280043E50
+280043E50:lA4:code|N
+280043E60:t3:A4:code,AA:start_link,N
+280043E80:t3:A8:strategy,A6:period,A9:intensity
+280043EA0:Mf3:H280043E80:AB:one_for_all,I1,I0
+280043ED0:t2:A2:ok,A5:false
+280043EE8:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043F20:Mf6:H280043EE8:A11:erl_signal_server,A9:permanent,I2000,H280043F68,A6:worker,A7:dynamic
+280043F68:t3:A9:gen_event,AA:start_link,H280043F88
+280043F88:lH280043F98|N
+280043F98:t2:A5:local,A11:erl_signal_server
+280043FB0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280043FE8:Mf6:H280043FB0:A7:inet_db,A9:permanent,I2000,H280044040,A6:worker,H280044030
+280044030:lA7:inet_db|N
+280044040:t3:A7:inet_db,AA:start_link,N
+280044060:lH2800440B8|H280044070
+280044070:lH280044168|N
+280044080:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800440B8:Mf6:H280044080:A7:net_sup,A9:permanent,A8:infinity,H280044110,AA:supervisor,H280044100
+280044100:lA10:erl_distribution|N
+280044110:t3:A10:erl_distribution,AA:start_link,N
+280044130:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044168:Mf6:H280044130:AC:global_group,A9:permanent,I2000,H2800441C0,A6:worker,H2800441B0
+2800441B0:lAC:global_group|N
+2800441C0:t3:AC:global_group,AA:start_link,N
+2800441E0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044218:Mf6:H2800441E0:A12:global_name_server,A9:permanent,I2000,H280044270,A6:worker,H280044260
+280044260:lA6:global|N
+280044270:t3:A6:global,AA:start_link,N
+280044290:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800442C8:Mf6:H280044290:A3:rex,A9:permanent,I2000,H280044320,A6:worker,H280044310
+280044310:lA3:rpc|N
+280044320:t3:A3:rpc,AA:start_link,N
+280044340:lH280044388|N
+280044350:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044388:Mf6:H280044350:A7:dist_ac,A9:permanent,I2000,H2800443E0,A6:worker,H2800443D0
+2800443D0:lA7:dist_ac|N
+2800443E0:t3:A7:dist_ac,AA:start_link,N
+280044400:t2:A2:ok,A4:true
+280044418:Mf0:H280010188:
+280044430:lAF:erl_boot_server|N
+280044440:lH280044498|H280044450
+280044450:lH280044548|N
+280044460:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044498:Mf6:H280044460:AF:disk_log_server,A9:permanent,I2000,H2800444F0,A6:worker,H2800444E0
+2800444E0:lAF:disk_log_server|N
+2800444F0:t3:AF:disk_log_server,AA:start_link,N
+280044510:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044548:Mf6:H280044510:AC:disk_log_sup,A9:permanent,I1000,H2800445A0,AA:supervisor,H280044590
+280044590:lAC:disk_log_sup|N
+2800445A0:t3:AC:disk_log_sup,AA:start_link,N
+2800445C0:lH280044608|N
+2800445D0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044608:Mf6:H2800445D0:A2:pg,A9:permanent,I1000,H280044660,A6:worker,H280044650
+280044650:lA2:pg|N
+280044660:t3:A2:pg,AA:start_link,N
+280044680:lH2800446C8|N
+280044690:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800446C8:Mf6:H280044690:AC:timer_server,A9:permanent,I1000,H280044720,A6:worker,H280044710
+280044710:lA5:timer|N
+280044720:t3:A5:timer,AA:start_link,N
+280044740:lH280044788|N
+280044750:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280044788:Mf6:H280044750:A12:erl_compile_server,A9:permanent,I2000,H2800447E0,A6:worker,H2800447D0
+2800447D0:lA12:erl_compile_server|N
+2800447E0:t3:A12:erl_compile_server,AA:start_link,N
+280044800:lI68|H280044810
+280044810:lI105|H280044820
+280044820:lI115|H280044830
+280044830:lI116|H280044840
+280044840:lI114|H280044850
+280044850:lI105|H280044860
+280044860:lI98|H280044870
+280044870:lI117|H280044880
+280044880:lI116|H280044890
+280044890:lI105|H2800448A0
+2800448A0:lI111|H2800448B0
+2800448B0:lI110|H2800448C0
+2800448C0:lI32|H2800448D0
+2800448D0:lI110|H2800448E0
+2800448E0:lI111|H2800448F0
+2800448F0:lI116|H280044900
+280044900:lI32|H280044910
+280044910:lI99|H280044920
+280044920:lI104|H280044930
+280044930:lI97|H280044940
+280044940:lI110|H280044950
+280044950:lI103|H280044960
+280044960:lI101|H280044970
+280044970:lI100|H280044980
+280044980:lI58|H280044990
+280044990:lI32|H2800449A0
+2800449A0:lI78|H2800449B0
+2800449B0:lI111|H2800449C0
+2800449C0:lI116|H2800449D0
+2800449D0:lI32|H2800449E0
+2800449E0:lI97|H2800449F0
+2800449F0:lI108|H280044A00
+280044A00:lI108|H280044A10
+280044A10:lI111|H280044A20
+280044A20:lI119|H280044A30
+280044A30:lI101|H280044A40
+280044A40:lI100|H280044A50
+280044A50:lI32|H280044A60
+280044A60:lI116|H280044A70
+280044A70:lI111|H280044A80
+280044A80:lI32|H280044A90
+280044A90:lI114|H280044AA0
+280044AA0:lI101|H280044AB0
+280044AB0:lI109|H280044AC0
+280044AC0:lI111|H280044AD0
+280044AD0:lI118|H280044AE0
+280044AE0:lI101|H280044AF0
+280044AF0:lI32|H280044B00
+280044B00:lI116|H280044B10
+280044B10:lI104|H280044B20
+280044B20:lI101|H280044B30
+280044B30:lI32|H280044B40
+280044B40:lI100|H280044B50
+280044B50:lI105|H280044B60
+280044B60:lI115|H280044B70
+280044B70:lI116|H280044B80
+280044B80:lI114|H280044B90
+280044B90:lI105|H280044BA0
+280044BA0:lI98|H280044BB0
+280044BB0:lI117|H280044BC0
+280044BC0:lI116|H280044BD0
+280044BD0:lI105|H280044BE0
+280044BE0:lI111|H280044BF0
+280044BF0:lI110|H280044C00
+280044C00:lI32|H280044C10
+280044C10:lI112|H280044C20
+280044C20:lI97|H280044C30
+280044C30:lI114|H280044C40
+280044C40:lI97|H280044C50
+280044C50:lI109|H280044C60
+280044C60:lI101|H280044C70
+280044C70:lI116|H280044C80
+280044C80:lI101|H280044C90
+280044C90:lI114|H280044CA0
+280044CA0:lI46|N
+280044CB0:t2:A5:error,H280044CC8
+280044CC8:t2:A18:distribution_not_changed,H280044CE0
+280044CE0:lI78|H280044CF0
+280044CF0:lI111|H280044D00
+280044D00:lI116|H280044D10
+280044D10:lI32|H280044D20
+280044D20:lI97|H280044D30
+280044D30:lI108|H280044D40
+280044D40:lI108|H280044D50
+280044D50:lI111|H280044D60
+280044D60:lI119|H280044D70
+280044D70:lI101|H280044D80
+280044D80:lI100|H280044D90
+280044D90:lI32|H280044DA0
+280044DA0:lI116|H280044DB0
+280044DB0:lI111|H280044DC0
+280044DC0:lI32|H280044DD0
+280044DD0:lI114|H280044DE0
+280044DE0:lI101|H280044DF0
+280044DF0:lI109|H280044E00
+280044E00:lI111|H280044E10
+280044E10:lI118|H280044E20
+280044E20:lI101|H280044E30
+280044E30:lI32|H280044E40
+280044E40:lI116|H280044E50
+280044E50:lI104|H280044E60
+280044E60:lI101|H280044E70
+280044E70:lI32|H280044E80
+280044E80:lI39|H280044E90
+280044E90:lI100|H280044EA0
+280044EA0:lI105|H280044EB0
+280044EB0:lI115|H280044EC0
+280044EC0:lI116|H280044ED0
+280044ED0:lI114|H280044EE0
+280044EE0:lI105|H280044EF0
+280044EF0:lI98|H280044F00
+280044F00:lI117|H280044F10
+280044F10:lI116|H280044F20
+280044F20:lI101|H280044F30
+280044F30:lI100|H280044F40
+280044F40:lI39|H280044F50
+280044F50:lI32|H280044F60
+280044F60:lI112|H280044F70
+280044F70:lI97|H280044F80
+280044F80:lI114|H280044F90
+280044F90:lI97|H280044FA0
+280044FA0:lI109|H280044FB0
+280044FB0:lI101|H280044FC0
+280044FC0:lI116|H280044FD0
+280044FD0:lI101|H280044FE0
+280044FE0:lI114|N
+280044FF0:lI68|H280045000
+280045000:lI105|H280045010
+280045010:lI115|H280045020
+280045020:lI116|H280045030
+280045030:lI114|H280045040
+280045040:lI105|H280045050
+280045050:lI98|H280045060
+280045060:lI117|H280045070
+280045070:lI116|H280045080
+280045080:lI105|H280045090
+280045090:lI111|H2800450A0
+2800450A0:lI110|H2800450B0
+2800450B0:lI32|H2800450C0
+2800450C0:lI110|H2800450D0
+2800450D0:lI111|H2800450E0
+2800450E0:lI116|H2800450F0
+2800450F0:lI32|H280045100
+280045100:lI99|H280045110
+280045110:lI104|H280045120
+280045120:lI97|H280045130
+280045130:lI110|H280045140
+280045140:lI103|H280045150
+280045150:lI101|H280045160
+280045160:lI100|H280045170
+280045170:lI58|H280045180
+280045180:lI32|H280045190
+280045190:lI78|H2800451A0
+2800451A0:lI111|H2800451B0
+2800451B0:lI116|H2800451C0
+2800451C0:lI32|H2800451D0
+2800451D0:lI97|H2800451E0
+2800451E0:lI108|H2800451F0
+2800451F0:lI108|H280045200
+280045200:lI111|H280045210
+280045210:lI119|H280045220
+280045220:lI101|H280045230
+280045230:lI100|H280045240
+280045240:lI32|H280045250
+280045250:lI116|H280045260
+280045260:lI111|H280045270
+280045270:lI32|H280045280
+280045280:lI97|H280045290
+280045290:lI100|H2800452A0
+2800452A0:lI100|H2800452B0
+2800452B0:lI32|H2800452C0
+2800452C0:lI116|H2800452D0
+2800452D0:lI104|H2800452E0
+2800452E0:lI101|H2800452F0
+2800452F0:lI32|H280045300
+280045300:lI39|H280045310
+280045310:lI100|H280045320
+280045320:lI105|H280045330
+280045330:lI115|H280045340
+280045340:lI116|H280045350
+280045350:lI114|H280045360
+280045360:lI105|H280045370
+280045370:lI98|H280045380
+280045380:lI117|H280045390
+280045390:lI116|H2800453A0
+2800453A0:lI101|H2800453B0
+2800453B0:lI100|H2800453C0
+2800453C0:lI39|H2800453D0
+2800453D0:lI32|H2800453E0
+2800453E0:lI112|H2800453F0
+2800453F0:lI97|H280045400
+280045400:lI114|H280045410
+280045410:lI97|H280045420
+280045420:lI109|H280045430
+280045430:lI101|H280045440
+280045440:lI116|H280045450
+280045450:lI101|H280045460
+280045460:lI114|H280045470
+280045470:lI46|N
+280045480:t2:A5:error,H280045498
+280045498:t2:A18:distribution_not_changed,H2800454B0
+2800454B0:lI78|H2800454C0
+2800454C0:lI111|H2800454D0
+2800454D0:lI116|H2800454E0
+2800454E0:lI32|H2800454F0
+2800454F0:lI97|H280045500
+280045500:lI108|H280045510
+280045510:lI108|H280045520
+280045520:lI111|H280045530
+280045530:lI119|H280045540
+280045540:lI101|H280045550
+280045550:lI100|H280045560
+280045560:lI32|H280045570
+280045570:lI116|H280045580
+280045580:lI111|H280045590
+280045590:lI32|H2800455A0
+2800455A0:lI97|H2800455B0
+2800455B0:lI100|H2800455C0
+2800455C0:lI100|H2800455D0
+2800455D0:lI32|H2800455E0
+2800455E0:lI116|H2800455F0
+2800455F0:lI104|H280045600
+280045600:lI101|H280045610
+280045610:lI32|H280045620
+280045620:lI39|H280045630
+280045630:lI100|H280045640
+280045640:lI105|H280045650
+280045650:lI115|H280045660
+280045660:lI116|H280045670
+280045670:lI114|H280045680
+280045680:lI105|H280045690
+280045690:lI98|H2800456A0
+2800456A0:lI117|H2800456B0
+2800456B0:lI116|H2800456C0
+2800456C0:lI101|H2800456D0
+2800456D0:lI100|H2800456E0
+2800456E0:lI39|H2800456F0
+2800456F0:lI32|H280045700
+280045700:lI112|H280045710
+280045710:lI97|H280045720
+280045720:lI114|H280045730
+280045730:lI97|H280045740
+280045740:lI109|H280045750
+280045750:lI101|H280045760
+280045760:lI116|H280045770
+280045770:lI101|H280045780
+280045780:lI114|N
+280045790:lI108|N
+2800457A0:lI114|H280045790
+2800457B0:lI101|H2800457A0
+2800457C0:lI46|H2800457B0
+2800457D0:lI108|H2800457C0
+2800457E0:lI101|H2800457D0
+2800457F0:lI110|H2800457E0
+280045800:lI114|H2800457F0
+280045810:lI101|H280045800
+280045820:lI107|H280045810
+280045830:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280046698:lI66|H2800466A8
+2800466A8:lI97|H2800466B8
+2800466B8:lI100|H2800466C8
+2800466C8:lI32|H2800466D8
+2800466D8:lI101|H2800466E8
+2800466E8:lI110|H2800466F8
+2800466F8:lI118|H280046708
+280046708:lI105|H280046718
+280046718:lI114|H280046728
+280046728:lI111|H280046738
+280046738:lI110|H280046748
+280046748:lI109|H280046758
+280046758:lI101|H280046768
+280046768:lI110|H280046778
+280046778:lI116|H280046788
+280046788:lI32|H280046798
+280046798:lI118|H2800467A8
+2800467A8:lI97|H2800467B8
+2800467B8:lI114|H2800467C8
+2800467C8:lI105|H2800467D8
+2800467D8:lI97|H2800467E8
+2800467E8:lI98|H2800467F8
+2800467F8:lI108|H280046808
+280046808:lI101|H280046818
+280046818:lI58|H280046828
+280046828:lI32|H280046838
+280046838:lI126|H280046848
+280046848:lI116|H280046858
+280046858:lI112|H280046868
+280046868:lI32|H280046878
+280046878:lI32|H280046888
+280046888:lI65|H280046898
+280046898:lI112|H2800468A8
+2800468A8:lI112|H2800468B8
+2800468B8:lI108|H2800468C8
+2800468C8:lI105|H2800468D8
+2800468D8:lI99|H2800468E8
+2800468E8:lI97|H2800468F8
+2800468F8:lI116|H280046908
+280046908:lI105|H280046918
+280046918:lI111|H280046928
+280046928:lI110|H280046938
+280046938:lI58|H280046948
+280046948:lI32|H280046958
+280046958:lI126|H280046968
+280046968:lI112|N
+280046978:lH280046988|N
+280046988:t3:H2800469A8,N,H280046A30
+2800469A8:t2:H2800469C0,H2800469D8
+2800469C0:t2:A6:loaded,A2:$1
+2800469D8:tA:A4:appl,A1:_,A1:_,A2:$2,A1:_,A2:$3,A1:_,A1:_,A1:_,A1:_
+280046A30:lH280046A40|N
+280046A40:t1:H280046A50
+280046A50:t3:A2:$1,A2:$2,A2:$3
+280046A70:t2:A12:application_master,A2:$1
+280046A88:t2:H280046AA0,H280046AB8
+280046AA0:t2:A6:loaded,A2:$1
+280046AB8:tA:A4:appl,A1:_,H280046B10,A1:_,A1:_,A1:_,A1:_,A1:_,A1:_,A1:_
+280046B10:t8:A9:appl_data,A1:_,A1:_,A1:_,A1:_,A2:$2,A1:_,A1:_
+280046B58:t3:A16:application_controller,A5:start,I1
+280046B78:lI105|H280046B88
+280046B88:lI110|H280046B98
+280046B98:lI118|H280046BA8
+280046BA8:lI97|H280046BB8
+280046BB8:lI108|H280046BC8
+280046BC8:lI105|H280046BD8
+280046BD8:lI100|H280046BE8
+280046BE8:lI32|H280046BF8
+280046BF8:lI99|H280046C08
+280046C08:lI111|H280046C18
+280046C18:lI110|H280046C28
+280046C28:lI102|H280046C38
+280046C38:lI105|H280046C48
+280046C48:lI103|H280046C58
+280046C58:lI32|H280046C68
+280046C68:lI100|H280046C78
+280046C78:lI97|H280046C88
+280046C88:lI116|H280046C98
+280046C98:lI97|H280046CA8
+280046CA8:lI58|H280046CB8
+280046CB8:lI32|H280046CC8
+280046CC8:lI126|H280046CD8
+280046CD8:lI116|H280046CE8
+280046CE8:lI115|N
+280046CF8:lA3:set|H280046D08
+280046D08:lA6:public|H280046D18
+280046D18:lAB:named_table|H280046D28
+280046D28:lH280046D38|N
+280046D38:t2:A10:read_concurrency,A4:true
+280046D50:t2:A5:local,A16:application_controller
+280046D68:lI101|H280046D78
+280046D78:lI114|H280046D88
+280046D88:lI114|H280046D98
+280046D98:lI111|H280046DA8
+280046DA8:lI114|H280046DB8
+280046DB8:lI32|H280046DC8
+280046DC8:lI105|H280046DD8
+280046DD8:lI110|H280046DE8
+280046DE8:lI32|H280046DF8
+280046DF8:lI99|H280046E08
+280046E08:lI111|H280046E18
+280046E18:lI110|H280046E28
+280046E28:lI102|H280046E38
+280046E38:lI105|H280046E48
+280046E48:lI103|H280046E58
+280046E58:lI32|H280046E68
+280046E68:lI114|H280046E78
+280046E78:lI101|H280046E88
+280046E88:lI97|H280046E98
+280046E98:lI100|H280046EA8
+280046EA8:lI32|H280046EB8
+280046EB8:lI102|H280046EC8
+280046EC8:lI114|H280046ED8
+280046ED8:lI111|H280046EE8
+280046EE8:lI109|H280046EF8
+280046EF8:lI32|H280046F08
+280046F08:lI102|H280046F18
+280046F18:lI105|H280046F28
+280046F28:lI108|H280046F38
+280046F38:lI101|H280046F48
+280046F48:lI32|H280046F58
+280046F58:lI100|H280046F68
+280046F68:lI101|H280046F78
+280046F78:lI115|H280046F88
+280046F88:lI99|H280046F98
+280046F98:lI114|H280046FA8
+280046FA8:lI105|H280046FB8
+280046FB8:lI112|H280046FC8
+280046FC8:lI116|H280046FD8
+280046FD8:lI111|H280046FE8
+280046FE8:lI114|H280046FF8
+280046FF8:lI32|H280047008
+280047008:lI126|H280047018
+280047018:lI116|H280047028
+280047028:lI112|H280047038
+280047038:lI32|H280047048
+280047048:lI40|H280047058
+280047058:lI126|H280047068
+280047068:lI119|H280047078
+280047078:lI41|H280047088
+280047088:lI58|H280047098
+280047098:lI32|H2800470A8
+2800470A8:lI126|H2800470B8
+2800470B8:lI116|H2800470C8
+2800470C8:lI115|N
+2800470D8:lI101|H2800470E8
+2800470E8:lI114|H2800470F8
+2800470F8:lI114|H280047108
+280047108:lI111|H280047118
+280047118:lI114|H280047128
+280047128:lI32|H280047138
+280047138:lI105|H280047148
+280047148:lI110|H280047158
+280047158:lI32|H280047168
+280047168:lI99|H280047178
+280047178:lI111|H280047188
+280047188:lI110|H280047198
+280047198:lI102|H2800471A8
+2800471A8:lI105|H2800471B8
+2800471B8:lI103|H2800471C8
+2800471C8:lI32|H2800471D8
+2800471D8:lI102|H2800471E8
+2800471E8:lI105|H2800471F8
+2800471F8:lI108|H280047208
+280047208:lI101|H280047218
+280047218:lI32|H280047228
+280047228:lI126|H280047238
+280047238:lI116|H280047248
+280047248:lI112|H280047258
+280047258:lI32|H280047268
+280047268:lI40|H280047278
+280047278:lI126|H280047288
+280047288:lI119|H280047298
+280047298:lI41|H2800472A8
+2800472A8:lI58|H2800472B8
+2800472B8:lI32|H2800472C8
+2800472C8:lI126|H2800472D8
+2800472D8:lI116|H2800472E8
+2800472E8:lI115|N
+2800472F8:lI100|H280047308
+280047308:lI117|H280047318
+280047318:lI112|H280047328
+280047328:lI108|H280047338
+280047338:lI105|H280047348
+280047348:lI99|H280047358
+280047358:lI97|H280047368
+280047368:lI116|H280047378
+280047378:lI101|H280047388
+280047388:lI32|H280047398
+280047398:lI97|H2800473A8
+2800473A8:lI112|H2800473B8
+2800473B8:lI112|H2800473C8
+2800473C8:lI108|H2800473D8
+2800473D8:lI105|H2800473E8
+2800473E8:lI99|H2800473F8
+2800473F8:lI97|H280047408
+280047408:lI116|H280047418
+280047418:lI105|H280047428
+280047428:lI111|H280047438
+280047438:lI110|H280047448
+280047448:lI32|H280047458
+280047458:lI99|H280047468
+280047468:lI111|H280047478
+280047478:lI110|H280047488
+280047488:lI102|H280047498
+280047498:lI105|H2800474A8
+2800474A8:lI103|H2800474B8
+2800474B8:lI58|H2800474C8
+2800474C8:lI32|N
+2800474D8:lI126|H2800474E8
+2800474E8:lI116|H2800474F8
+2800474F8:lI112|N
+280047508:lI59|H280047518
+280047518:lI32|H280047528
+280047528:lI97|H280047538
+280047538:lI112|H280047548
+280047548:lI112|H280047558
+280047558:lI108|H280047568
+280047568:lI105|H280047578
+280047578:lI99|H280047588
+280047588:lI97|H280047598
+280047598:lI116|H2800475A8
+2800475A8:lI105|H2800475B8
+2800475B8:lI111|H2800475C8
+2800475C8:lI110|H2800475D8
+2800475D8:lI32|H2800475E8
+2800475E8:lI110|H2800475F8
+2800475F8:lI97|H280047608
+280047608:lI109|H280047618
+280047618:lI101|H280047628
+280047628:lI32|H280047638
+280047638:lI109|H280047648
+280047648:lI117|H280047658
+280047658:lI115|H280047668
+280047668:lI116|H280047678
+280047678:lI32|H280047688
+280047688:lI98|H280047698
+280047698:lI101|H2800476A8
+2800476A8:lI32|H2800476B8
+2800476B8:lI97|H2800476C8
+2800476C8:lI110|H2800476D8
+2800476D8:lI32|H2800476E8
+2800476E8:lI97|H2800476F8
+2800476F8:lI116|H280047708
+280047708:lI111|H280047718
+280047718:lI109|N
+280047728:lI97|H280047738
+280047738:lI112|H280047748
+280047748:lI112|H280047758
+280047758:lI108|H280047768
+280047768:lI105|H280047778
+280047778:lI99|H280047788
+280047788:lI97|H280047798
+280047798:lI116|H2800477A8
+2800477A8:lI105|H2800477B8
+2800477B8:lI111|H2800477C8
+2800477C8:lI110|H2800477D8
+2800477D8:lI58|H2800477E8
+2800477E8:lI32|N
+2800477F8:lI59|H280047808
+280047808:lI32|H280047818
+280047818:lI112|H280047828
+280047828:lI97|H280047838
+280047838:lI114|H280047848
+280047848:lI97|H280047858
+280047858:lI109|H280047868
+280047868:lI101|H280047878
+280047878:lI116|H280047888
+280047888:lI101|H280047898
+280047898:lI114|H2800478A8
+2800478A8:lI115|H2800478B8
+2800478B8:lI32|H2800478C8
+2800478C8:lI109|H2800478D8
+2800478D8:lI117|H2800478E8
+2800478E8:lI115|H2800478F8
+2800478F8:lI116|H280047908
+280047908:lI32|H280047918
+280047918:lI98|H280047928
+280047928:lI101|H280047938
+280047938:lI32|H280047948
+280047948:lI97|H280047958
+280047958:lI32|H280047968
+280047968:lI108|H280047978
+280047978:lI105|H280047988
+280047988:lI115|H280047998
+280047998:lI116|N
+2800479A8:lI105|H2800479B8
+2800479B8:lI110|H2800479C8
+2800479C8:lI118|H2800479D8
+2800479D8:lI97|H2800479E8
+2800479E8:lI108|H2800479F8
+2800479F8:lI105|H280047A08
+280047A08:lI100|H280047A18
+280047A18:lI32|H280047A28
+280047A28:lI97|H280047A38
+280047A38:lI112|H280047A48
+280047A48:lI112|H280047A58
+280047A58:lI108|H280047A68
+280047A68:lI105|H280047A78
+280047A78:lI99|H280047A88
+280047A88:lI97|H280047A98
+280047A98:lI116|H280047AA8
+280047AA8:lI105|H280047AB8
+280047AB8:lI111|H280047AC8
+280047AC8:lI110|H280047AD8
+280047AD8:lI32|H280047AE8
+280047AE8:lI99|H280047AF8
+280047AF8:lI111|H280047B08
+280047B08:lI110|H280047B18
+280047B18:lI102|H280047B28
+280047B28:lI105|H280047B38
+280047B38:lI103|H280047B48
+280047B48:lI58|H280047B58
+280047B58:lI32|N
+280047B68:t2:A5:error,H280047B80
+280047B80:lI99|H280047B90
+280047B90:lI111|H280047BA0
+280047BA0:lI110|H280047BB0
+280047BB0:lI102|H280047BC0
+280047BC0:lI105|H280047BD0
+280047BD0:lI103|H280047BE0
+280047BE0:lI117|H280047BF0
+280047BF0:lI114|H280047C00
+280047C00:lI97|H280047C10
+280047C10:lI116|H280047C20
+280047C20:lI105|H280047C30
+280047C30:lI111|H280047C40
+280047C40:lI110|H280047C50
+280047C50:lI32|H280047C60
+280047C60:lI109|H280047C70
+280047C70:lI117|H280047C80
+280047C80:lI115|H280047C90
+280047C90:lI116|H280047CA0
+280047CA0:lI32|H280047CB0
+280047CB0:lI98|H280047CC0
+280047CC0:lI101|H280047CD0
+280047CD0:lI32|H280047CE0
+280047CE0:lI97|H280047CF0
+280047CF0:lI32|H280047D00
+280047D00:lI108|H280047D10
+280047D10:lI105|H280047D20
+280047D20:lI115|H280047D30
+280047D30:lI116|H280047D40
+280047D40:lI32|H280047D50
+280047D50:lI101|H280047D60
+280047D60:lI110|H280047D70
+280047D70:lI100|H280047D80
+280047D80:lI101|H280047D90
+280047D90:lI100|H280047DA0
+280047DA0:lI32|H280047DB0
+280047DB0:lI98|H280047DC0
+280047DC0:lI121|H280047DD0
+280047DD0:lI32|H280047DE0
+280047DE0:lI60|H280047DF0
+280047DF0:lI100|H280047E00
+280047E00:lI111|H280047E10
+280047E10:lI116|H280047E20
+280047E20:lI62|H280047E30
+280047E30:lI60|H280047E40
+280047E40:lI119|H280047E50
+280047E50:lI104|H280047E60
+280047E60:lI105|H280047E70
+280047E70:lI116|H280047E80
+280047E80:lI101|H280047E90
+280047E90:lI115|H280047EA0
+280047EA0:lI112|H280047EB0
+280047EB0:lI97|H280047EC0
+280047EC0:lI99|H280047ED0
+280047ED0:lI101|H280047EE0
+280047EE0:lI62|N
+280047EF0:lI59|H280047F00
+280047F00:lI32|H280047F10
+280047F10:lI100|H280047F20
+280047F20:lI117|H280047F30
+280047F30:lI112|H280047F40
+280047F40:lI108|H280047F50
+280047F50:lI105|H280047F60
+280047F60:lI99|H280047F70
+280047F70:lI97|H280047F80
+280047F80:lI116|H280047F90
+280047F90:lI101|H280047FA0
+280047FA0:lI32|H280047FB0
+280047FB0:lI112|H280047FC0
+280047FC0:lI97|H280047FD0
+280047FD0:lI114|H280047FE0
+280047FE0:lI97|H280047FF0
+280047FF0:lI109|H280048000
+280048000:lI101|H280048010
+280048010:lI116|H280048020
+280048020:lI101|H280048030
+280048030:lI114|H280048040
+280048040:lI58|H280048050
+280048050:lI32|N
+280048060:lI59|H280048070
+280048070:lI32|H280048080
+280048080:lI105|H280048090
+280048090:lI110|H2800480A0
+2800480A0:lI118|H2800480B0
+2800480B0:lI97|H2800480C0
+2800480C0:lI108|H2800480D0
+2800480D0:lI105|H2800480E0
+2800480E0:lI100|H2800480F0
+2800480F0:lI32|H280048100
+280048100:lI112|H280048110
+280048110:lI97|H280048120
+280048120:lI114|H280048130
+280048130:lI97|H280048140
+280048140:lI109|H280048150
+280048150:lI101|H280048160
+280048160:lI116|H280048170
+280048170:lI101|H280048180
+280048180:lI114|H280048190
+280048190:lI32|H2800481A0
+2800481A0:lI110|H2800481B0
+2800481B0:lI97|H2800481C0
+2800481C0:lI109|H2800481D0
+2800481D0:lI101|H2800481E0
+2800481E0:lI58|H2800481F0
+2800481F0:lI32|N
+280048200:lI59|H280048210
+280048210:lI32|H280048220
+280048220:lI105|H280048230
+280048230:lI110|H280048240
+280048240:lI118|H280048250
+280048250:lI97|H280048260
+280048260:lI108|H280048270
+280048270:lI105|H280048280
+280048280:lI100|H280048290
+280048290:lI32|H2800482A0
+2800482A0:lI112|H2800482B0
+2800482B0:lI97|H2800482C0
+2800482C0:lI114|H2800482D0
+2800482D0:lI97|H2800482E0
+2800482E0:lI109|H2800482F0
+2800482F0:lI101|H280048300
+280048300:lI116|H280048310
+280048310:lI101|H280048320
+280048320:lI114|H280048330
+280048330:lI58|H280048340
+280048340:lI32|N
+280048350:t2:A5:error,H280048368
+280048368:lI97|H280048378
+280048378:lI112|H280048388
+280048388:lI112|H280048398
+280048398:lI108|H2800483A8
+2800483A8:lI105|H2800483B8
+2800483B8:lI99|H2800483C8
+2800483C8:lI97|H2800483D8
+2800483D8:lI116|H2800483E8
+2800483E8:lI105|H2800483F8
+2800483F8:lI111|H280048408
+280048408:lI110|H280048418
+280048418:lI58|H280048428
+280048428:lI32|H280048438
+280048438:lI107|H280048448
+280048448:lI101|H280048458
+280048458:lI114|H280048468
+280048468:lI110|H280048478
+280048478:lI101|H280048488
+280048488:lI108|H280048498
+280048498:lI59|H2800484A8
+2800484A8:lI32|H2800484B8
+2800484B8:lI101|H2800484C8
+2800484C8:lI114|H2800484D8
+2800484D8:lI114|H2800484E8
+2800484E8:lI111|H2800484F8
+2800484F8:lI110|H280048508
+280048508:lI101|H280048518
+280048518:lI111|H280048528
+280048528:lI117|H280048538
+280048538:lI115|H280048548
+280048548:lI32|H280048558
+280048558:lI112|H280048568
+280048568:lI97|H280048578
+280048578:lI114|H280048588
+280048588:lI97|H280048598
+280048598:lI109|H2800485A8
+2800485A8:lI101|H2800485B8
+2800485B8:lI116|H2800485C8
+2800485C8:lI101|H2800485D8
+2800485D8:lI114|H2800485E8
+2800485E8:lI58|H2800485F8
+2800485F8:lI32|H280048608
+280048608:lI100|H280048618
+280048618:lI105|H280048628
+280048628:lI115|H280048638
+280048638:lI116|H280048648
+280048648:lI114|H280048658
+280048658:lI105|H280048668
+280048668:lI98|H280048678
+280048678:lI117|H280048688
+280048688:lI116|H280048698
+280048698:lI101|H2800486A8
+2800486A8:lI100|N
+2800486B8:t2:A17:distributed_application,AB:only_loaded
+2800486D0:t2:A4:EXIT,A6:normal
+2800486E8:t2:AB:distributed,N
+280048700:t2:A12:application_master,A1:_
+280048718:t2:A2:ok,A9:undefined
+280048730:lI46|H280048740
+280048740:lI97|H280048750
+280048750:lI112|H280048760
+280048760:lI112|N
+280048770:t2:A5:error,H280048788
+280048788:lI98|H280048798
+280048798:lI97|H2800487A8
+2800487A8:lI100|H2800487B8
+2800487B8:lI32|H2800487C8
+2800487C8:lI101|H2800487D8
+2800487D8:lI110|H2800487E8
+2800487E8:lI99|H2800487F8
+2800487F8:lI111|H280048808
+280048808:lI100|H280048818
+280048818:lI105|H280048828
+280048828:lI110|H280048838
+280048838:lI103|N
+280048848:t2:A5:error,A6:enoent
+280048860:lI97|H280048870
+280048870:lI112|H280048880
+280048880:lI112|H280048890
+280048890:lI108|H2800488A0
+2800488A0:lI105|H2800488B0
+2800488B0:lI99|H2800488C0
+2800488C0:lI97|H2800488D0
+2800488D0:lI116|H2800488E0
+2800488E0:lI105|H2800488F0
+2800488F0:lI111|H280048900
+280048900:lI110|H280048910
+280048910:lI95|H280048920
+280048920:lI99|H280048930
+280048930:lI111|H280048940
+280048940:lI110|H280048950
+280048950:lI116|H280048960
+280048960:lI114|H280048970
+280048970:lI111|H280048980
+280048980:lI108|H280048990
+280048990:lI108|H2800489A0
+2800489A0:lI101|H2800489B0
+2800489B0:lI114|H2800489C0
+2800489C0:lI58|H2800489D0
+2800489D0:lI32|H2800489E0
+2800489E0:lI126|H2800489F0
+2800489F0:lI116|H280048A00
+280048A00:lI115|H280048A10
+280048A10:lI58|H280048A20
+280048A20:lI32|H280048A30
+280048A30:lI126|H280048A40
+280048A40:lI116|H280048A50
+280048A50:lI115|H280048A60
+280048A60:lI126|H280048A70
+280048A70:lI110|N
+280048A80:t1:AC:error_logger
+280048A90:Mf1:H280048A80:H280048AC0
+280048AB0:t1:A3:tag
+280048AC0:Mf1:H280048AB0:A5:error
+280048AE0:t3:A4:line,A4:file,A3:mfa
+280048B00:Mf3:H280048AE0:I1669,H280048B30,H280048CD0
+280048B30:lI97|H280048B40
+280048B40:lI112|H280048B50
+280048B50:lI112|H280048B60
+280048B60:lI108|H280048B70
+280048B70:lI105|H280048B80
+280048B80:lI99|H280048B90
+280048B90:lI97|H280048BA0
+280048BA0:lI116|H280048BB0
+280048BB0:lI105|H280048BC0
+280048BC0:lI111|H280048BD0
+280048BD0:lI110|H280048BE0
+280048BE0:lI95|H280048BF0
+280048BF0:lI99|H280048C00
+280048C00:lI111|H280048C10
+280048C10:lI110|H280048C20
+280048C20:lI116|H280048C30
+280048C30:lI114|H280048C40
+280048C40:lI111|H280048C50
+280048C50:lI108|H280048C60
+280048C60:lI108|H280048C70
+280048C70:lI101|H280048C80
+280048C80:lI114|H280048C90
+280048C90:lI46|H280048CA0
+280048CA0:lI101|H280048CB0
+280048CB0:lI114|H280048CC0
+280048CC0:lI108|N
+280048CD0:t3:A16:application_controller,A16:handle_make_term_error,I3
+280048CF0:t2:N,N
+280048D08:lH280048D28|H280048D18
+280048D18:lN|N
+280048D28:lI46|H280048D38
+280048D38:lI99|H280048D48
+280048D48:lI111|H280048D58
+280048D58:lI110|H280048D68
+280048D68:lI102|H280048D78
+280048D78:lI105|H280048D88
+280048D88:lI103|N
+280048D98:lI67|H280048DA8
+280048DA8:lI97|H280048DB8
+280048DB8:lI110|H280048DC8
+280048DC8:lI110|H280048DD8
+280048DD8:lI111|H280048DE8
+280048DE8:lI116|H280048DF8
+280048DF8:lI32|H280048E08
+280048E08:lI112|H280048E18
+280048E18:lI97|H280048E28
+280048E28:lI114|H280048E38
+280048E38:lI115|H280048E48
+280048E48:lI101|H280048E58
+280048E58:lI32|H280048E68
+280048E68:lI102|H280048E78
+280048E78:lI105|H280048E88
+280048E88:lI108|H280048E98
+280048E98:lI101|H280048EA8
+280048EA8:lI32|H280048EB8
+280048EB8:lI100|H280048EC8
+280048EC8:lI101|H280048ED8
+280048ED8:lI115|H280048EE8
+280048EE8:lI99|H280048EF8
+280048EF8:lI114|H280048F08
+280048F08:lI105|H280048F18
+280048F18:lI112|H280048F28
+280048F28:lI116|H280048F38
+280048F38:lI111|H280048F48
+280048F48:lI114|H280048F58
+280048F58:lI32|H280048F68
+280048F68:lI111|H280048F78
+280048F78:lI102|H280048F88
+280048F88:lI32|H280048F98
+280048F98:lI116|H280048FA8
+280048FA8:lI121|H280048FB8
+280048FB8:lI112|H280048FC8
+280048FC8:lI101|H280048FD8
+280048FD8:lI58|H280048FE8
+280048FE8:lI32|H280048FF8
+280048FF8:lI126|H280049008
+280049008:lI116|H280049018
+280049018:lI115|N
+280049028:lI84|H280049038
+280049038:lI104|H280049048
+280049048:lI101|H280049058
+280049058:lI32|H280049068
+280049068:lI103|H280049078
+280049078:lI105|H280049088
+280049088:lI118|H280049098
+280049098:lI101|H2800490A8
+2800490A8:lI110|H2800490B8
+2800490B8:lI32|H2800490C8
+2800490C8:lI102|H2800490D8
+2800490D8:lI105|H2800490E8
+2800490E8:lI108|H2800490F8
+2800490F8:lI101|H280049108
+280049108:lI32|H280049118
+280049118:lI100|H280049128
+280049128:lI101|H280049138
+280049138:lI115|H280049148
+280049148:lI99|H280049158
+280049158:lI114|H280049168
+280049168:lI105|H280049178
+280049178:lI112|H280049188
+280049188:lI116|H280049198
+280049198:lI111|H2800491A8
+2800491A8:lI114|H2800491B8
+2800491B8:lI32|H2800491C8
+2800491C8:lI104|H2800491D8
+2800491D8:lI97|H2800491E8
+2800491E8:lI115|H2800491F8
+2800491F8:lI32|H280049208
+280049208:lI105|H280049218
+280049218:lI110|H280049228
+280049228:lI99|H280049238
+280049238:lI111|H280049248
+280049248:lI114|H280049258
+280049258:lI114|H280049268
+280049268:lI101|H280049278
+280049278:lI99|H280049288
+280049288:lI116|H280049298
+280049298:lI32|H2800492A8
+2800492A8:lI102|H2800492B8
+2800492B8:lI111|H2800492C8
+2800492C8:lI114|H2800492D8
+2800492D8:lI109|H2800492E8
+2800492E8:lI97|H2800492F8
+2800492F8:lI116|H280049308
+280049308:lI46|H280049318
+280049318:lI32|H280049328
+280049328:lI84|H280049338
+280049338:lI104|H280049348
+280049348:lI101|H280049358
+280049358:lI32|H280049368
+280049368:lI102|H280049378
+280049378:lI111|H280049388
+280049388:lI114|H280049398
+280049398:lI109|H2800493A8
+2800493A8:lI97|H2800493B8
+2800493B8:lI116|H2800493C8
+2800493C8:lI32|H2800493D8
+2800493D8:lI115|H2800493E8
+2800493E8:lI104|H2800493F8
+2800493F8:lI111|H280049408
+280049408:lI117|H280049418
+280049418:lI108|H280049428
+280049428:lI100|H280049438
+280049438:lI32|H280049448
+280049448:lI98|H280049458
+280049458:lI101|H280049468
+280049468:lI32|H280049478
+280049478:lI34|H280049488
+280049488:lI70|H280049498
+280049498:lI105|H2800494A8
+2800494A8:lI108|H2800494B8
+2800494B8:lI101|H2800494C8
+2800494C8:lI68|H2800494D8
+2800494D8:lI101|H2800494E8
+2800494E8:lI115|H2800494F8
+2800494F8:lI99|H280049508
+280049508:lI73|H280049518
+280049518:lI100|H280049528
+280049528:lI91|H280049538
+280049538:lI46|H280049548
+280049548:lI70|H280049558
+280049558:lI105|H280049568
+280049568:lI108|H280049578
+280049578:lI101|H280049588
+280049588:lI84|H280049598
+280049598:lI121|H2800495A8
+2800495A8:lI112|H2800495B8
+2800495B8:lI101|H2800495C8
+2800495C8:lI93|H2800495D8
+2800495D8:lI34|H2800495E8
+2800495E8:lI46|H2800495F8
+2800495F8:lI32|H280049608
+280049608:lI69|H280049618
+280049618:lI120|H280049628
+280049628:lI97|H280049638
+280049638:lI109|H280049648
+280049648:lI112|H280049658
+280049658:lI108|H280049668
+280049668:lI101|H280049678
+280049678:lI115|H280049688
+280049688:lI58|H280049698
+280049698:lI32|H2800496A8
+2800496A8:lI51|H2800496B8
+2800496B8:lI32|H2800496C8
+2800496C8:lI111|H2800496D8
+2800496D8:lI114|H2800496E8
+2800496E8:lI32|H2800496F8
+2800496F8:lI51|H280049708
+280049708:lI46|H280049718
+280049718:lI99|H280049728
+280049728:lI111|H280049738
+280049738:lI110|H280049748
+280049748:lI102|H280049758
+280049758:lI105|H280049768
+280049768:lI103|N
+280049778:lI46|H280049788
+280049788:lI99|H280049798
+280049798:lI111|H2800497A8
+2800497A8:lI110|H2800497B8
+2800497B8:lI102|H2800497C8
+2800497C8:lI105|H2800497D8
+2800497D8:lI103|N
+2800497E8:lI115|H2800497F8
+2800497F8:lI121|H280049808
+280049808:lI115|N
+280049818:lI32|N
+280049828:t2:A5:error,H280049840
+280049840:t3:A4:none,A9:scan_file,H280049860
+280049860:lI98|H280049870
+280049870:lI97|H280049880
+280049880:lI100|H280049890
+280049890:lI32|H2800498A0
+2800498A0:lI101|H2800498B0
+2800498B0:lI110|H2800498C0
+2800498C0:lI99|H2800498D0
+2800498D0:lI111|H2800498E0
+2800498E0:lI100|H2800498F0
+2800498F0:lI105|H280049900
+280049900:lI110|H280049910
+280049910:lI103|N
+280049920:t2:A5:error,H280049938
+280049938:t3:A4:none,A9:open_file,H280049958
+280049958:lI99|H280049968
+280049968:lI111|H280049978
+280049978:lI110|H280049988
+280049988:lI102|H280049998
+280049998:lI105|H2800499A8
+2800499A8:lI103|H2800499B8
+2800499B8:lI117|H2800499C8
+2800499C8:lI114|H2800499D8
+2800499D8:lI97|H2800499E8
+2800499E8:lI116|H2800499F8
+2800499F8:lI105|H280049A08
+280049A08:lI111|H280049A18
+280049A18:lI110|H280049A28
+280049A28:lI32|H280049A38
+280049A38:lI102|H280049A48
+280049A48:lI105|H280049A58
+280049A58:lI108|H280049A68
+280049A68:lI101|H280049A78
+280049A78:lI32|H280049A88
+280049A88:lI110|H280049A98
+280049A98:lI111|H280049AA8
+280049AA8:lI116|H280049AB8
+280049AB8:lI32|H280049AC8
+280049AC8:lI102|H280049AD8
+280049AD8:lI111|H280049AE8
+280049AE8:lI117|H280049AF8
+280049AF8:lI110|H280049B08
+280049B08:lI100|N
+280049B18:lI67|H280049B28
+280049B28:lI111|H280049B38
+280049B38:lI117|H280049B48
+280049B48:lI108|H280049B58
+280049B58:lI100|H280049B68
+280049B68:lI32|H280049B78
+280049B78:lI110|H280049B88
+280049B88:lI111|H280049B98
+280049B98:lI116|H280049BA8
+280049BA8:lI32|H280049BB8
+280049BB8:lI114|H280049BC8
+280049BC8:lI101|H280049BD8
+280049BD8:lI97|H280049BE8
+280049BE8:lI100|H280049BF8
+280049BF8:lI32|H280049C08
+280049C08:lI102|H280049C18
+280049C18:lI114|H280049C28
+280049C28:lI111|H280049C38
+280049C38:lI109|H280049C48
+280049C48:lI32|H280049C58
+280049C58:lI102|H280049C68
+280049C68:lI105|H280049C78
+280049C78:lI108|H280049C88
+280049C88:lI101|H280049C98
+280049C98:lI32|H280049CA8
+280049CA8:lI100|H280049CB8
+280049CB8:lI101|H280049CC8
+280049CC8:lI115|H280049CD8
+280049CD8:lI99|H280049CE8
+280049CE8:lI114|H280049CF8
+280049CF8:lI105|H280049D08
+280049D08:lI112|H280049D18
+280049D18:lI116|H280049D28
+280049D28:lI111|H280049D38
+280049D38:lI114|H280049D48
+280049D48:lI58|H280049D58
+280049D58:lI32|H280049D68
+280049D68:lI126|H280049D78
+280049D78:lI115|N
+280049D88:t2:A5:error,H280049DA0
+280049DA0:t3:A4:none,A9:load_file,H280049DC0
+280049DC0:lI110|H280049DD0
+280049DD0:lI111|H280049DE0
+280049DE0:lI32|H280049DF0
+280049DF0:lI101|H280049E00
+280049E00:lI110|H280049E10
+280049E10:lI100|H280049E20
+280049E20:lI105|H280049E30
+280049E30:lI110|H280049E40
+280049E40:lI103|H280049E50
+280049E50:lI32|H280049E60
+280049E60:lI60|H280049E70
+280049E70:lI100|H280049E80
+280049E80:lI111|H280049E90
+280049E90:lI116|H280049EA0
+280049EA0:lI62|H280049EB0
+280049EB0:lI32|H280049EC0
+280049EC0:lI102|H280049ED0
+280049ED0:lI111|H280049EE0
+280049EE0:lI117|H280049EF0
+280049EF0:lI110|H280049F00
+280049F00:lI100|N
+280049F10:t2:A5:error,H280049F28
+280049F28:t3:A4:none,A9:load_file,H280049F48
+280049F48:lI99|H280049F58
+280049F58:lI111|H280049F68
+280049F68:lI110|H280049F78
+280049F78:lI102|H280049F88
+280049F88:lI105|H280049F98
+280049F98:lI103|H280049FA8
+280049FA8:lI117|H280049FB8
+280049FB8:lI114|H280049FC8
+280049FC8:lI97|H280049FD8
+280049FD8:lI116|H280049FE8
+280049FE8:lI105|H280049FF8
+280049FF8:lI111|H28004A008
+28004A008:lI110|H28004A018
+28004A018:lI32|H28004A028
+28004A028:lI102|H28004A038
+28004A038:lI105|H28004A048
+28004A048:lI108|H28004A058
+28004A058:lI101|H28004A068
+28004A068:lI32|H28004A078
+28004A078:lI109|H28004A088
+28004A088:lI117|H28004A098
+28004A098:lI115|H28004A0A8
+28004A0A8:lI116|H28004A0B8
+28004A0B8:lI32|H28004A0C8
+28004A0C8:lI99|H28004A0D8
+28004A0D8:lI111|H28004A0E8
+28004A0E8:lI110|H28004A0F8
+28004A0F8:lI116|H28004A108
+28004A108:lI97|H28004A118
+28004A118:lI105|H28004A128
+28004A128:lI110|H28004A138
+28004A138:lI32|H28004A148
+28004A148:lI79|H28004A158
+28004A158:lI78|H28004A168
+28004A168:lI69|H28004A178
+28004A178:lI32|H28004A188
+28004A188:lI108|H28004A198
+28004A198:lI105|H28004A1A8
+28004A1A8:lI115|H28004A1B8
+28004A1B8:lI116|H28004A1C8
+28004A1C8:lI32|H28004A1D8
+28004A1D8:lI101|H28004A1E8
+28004A1E8:lI110|H28004A1F8
+28004A1F8:lI100|H28004A208
+28004A208:lI101|H28004A218
+28004A218:lI100|H28004A228
+28004A228:lI32|H28004A238
+28004A238:lI98|H28004A248
+28004A248:lI121|H28004A258
+28004A258:lI32|H28004A268
+28004A268:lI60|H28004A278
+28004A278:lI100|H28004A288
+28004A288:lI111|H28004A298
+28004A298:lI116|H28004A2A8
+28004A2A8:lI62|N
+28004A2B8:Mf0:H280010188:
+28004A2D0:t2:A16:application_controller,A8:progress
+28004A2E8:t4:AC:error_logger,A6:domain,A10:logger_formatter,A9:report_cb
+28004A310:Mf4:H28004A2E8:H28004A388,H28004A348,H28004A3F0,H28004A500
+28004A348:lA3:otp|H28004A358
+28004A358:lA4:sasl|N
+28004A368:t3:A3:tag,A4:type,A9:report_cb
+28004A388:Mf3:H28004A368:AB:info_report,A8:progress,H28004A3B8
+28004A3B8:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAQ==
+28004A3E0:t1:A5:title
+28004A3F0:Mf1:H28004A3E0:H28004A410
+28004A410:lI80|H28004A420
+28004A420:lI82|H28004A430
+28004A430:lI79|H28004A440
+28004A440:lI71|H28004A450
+28004A450:lI82|H28004A460
+28004A460:lI69|H28004A470
+28004A470:lI83|H28004A480
+28004A480:lI83|H28004A490
+28004A490:lI32|H28004A4A0
+28004A4A0:lI82|H28004A4B0
+28004A4B0:lI69|H28004A4C0
+28004A4C0:lI80|H28004A4D0
+28004A4D0:lI79|H28004A4E0
+28004A4E0:lI82|H28004A4F0
+28004A4F0:lI84|N
+28004A500:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAg==
+28004A528:t3:A4:line,A4:file,A3:mfa
+28004A548:Mf3:H28004A528:I2117,H28004A578,H28004A718
+28004A578:lI97|H28004A588
+28004A588:lI112|H28004A598
+28004A598:lI112|H28004A5A8
+28004A5A8:lI108|H28004A5B8
+28004A5B8:lI105|H28004A5C8
+28004A5C8:lI99|H28004A5D8
+28004A5D8:lI97|H28004A5E8
+28004A5E8:lI116|H28004A5F8
+28004A5F8:lI105|H28004A608
+28004A608:lI111|H28004A618
+28004A618:lI110|H28004A628
+28004A628:lI95|H28004A638
+28004A638:lI99|H28004A648
+28004A648:lI111|H28004A658
+28004A658:lI110|H28004A668
+28004A668:lI116|H28004A678
+28004A678:lI114|H28004A688
+28004A688:lI111|H28004A698
+28004A698:lI108|H28004A6A8
+28004A6A8:lI108|H28004A6B8
+28004A6B8:lI101|H28004A6C8
+28004A6C8:lI114|H28004A6D8
+28004A6D8:lI46|H28004A6E8
+28004A6E8:lI101|H28004A6F8
+28004A6F8:lI114|H28004A708
+28004A708:lI108|N
+28004A718:t3:A16:application_controller,AC:info_started,I2
+28004A738:t2:A16:application_controller,A4:exit
+28004A750:t3:AC:error_logger,A6:domain,A9:report_cb
+28004A770:Mf3:H28004A750:H28004A7D0,H28004A7A0,H28004A828
+28004A7A0:lA3:otp|N
+28004A7B0:t3:A3:tag,A4:type,A9:report_cb
+28004A7D0:Mf3:H28004A7B0:AB:info_report,A8:std_info,H28004A800
+28004A800:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAQ==
+28004A828:E28:g3F3FmFwcGxpY2F0aW9uX2NvbnRyb2xsZXJ3CmZvcm1hdF9sb2dhAg==
+28004A850:t3:A4:line,A4:file,A3:mfa
+28004A870:Mf3:H28004A850:I2129,H28004A8A0,H28004AA40
+28004A8A0:lI97|H28004A8B0
+28004A8B0:lI112|H28004A8C0
+28004A8C0:lI112|H28004A8D0
+28004A8D0:lI108|H28004A8E0
+28004A8E0:lI105|H28004A8F0
+28004A8F0:lI99|H28004A900
+28004A900:lI97|H28004A910
+28004A910:lI116|H28004A920
+28004A920:lI105|H28004A930
+28004A930:lI111|H28004A940
+28004A940:lI110|H28004A950
+28004A950:lI95|H28004A960
+28004A960:lI99|H28004A970
+28004A970:lI111|H28004A980
+28004A980:lI110|H28004A990
+28004A990:lI116|H28004A9A0
+28004A9A0:lI114|H28004A9B0
+28004A9B0:lI111|H28004A9C0
+28004A9C0:lI108|H28004A9D0
+28004A9D0:lI108|H28004A9E0
+28004A9E0:lI101|H28004A9F0
+28004A9F0:lI114|H28004AA00
+28004AA00:lI46|H28004AA10
+28004AA10:lI101|H28004AA20
+28004AA20:lI114|H28004AA30
+28004AA30:lI108|N
+28004AA40:t3:A16:application_controller,AB:info_exited,I3
+28004AA60:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+28004AA88:Mf4:H28004AA60:A9:unlimited,A9:unlimited,A4:utf8,A5:false
+28004AAC0:lI46|N
+28004AAD0:lI46|H28004AAE0
+28004AAE0:lI32|H28004AAF0
+28004AAF0:lI83|H28004AB00
+28004AB00:lI116|H28004AB10
+28004AB10:lI97|H28004AB20
+28004AB20:lI114|H28004AB30
+28004AB30:lI116|H28004AB40
+28004AB40:lI101|H28004AB50
+28004AB50:lI100|H28004AB60
+28004AB60:lI32|H28004AB70
+28004AB70:lI97|H28004AB80
+28004AB80:lI116|H28004AB90
+28004AB90:lI58|H28004ABA0
+28004ABA0:lI32|N
+28004ABB0:lI65|H28004ABC0
+28004ABC0:lI112|H28004ABD0
+28004ABD0:lI112|H28004ABE0
+28004ABE0:lI108|H28004ABF0
+28004ABF0:lI105|H28004AC00
+28004AC00:lI99|H28004AC10
+28004AC10:lI97|H28004AC20
+28004AC20:lI116|H28004AC30
+28004AC30:lI105|H28004AC40
+28004AC40:lI111|H28004AC50
+28004AC50:lI110|H28004AC60
+28004AC60:lI58|H28004AC70
+28004AC70:lI32|N
+28004AC80:lH28004AC90|N
+28004AC90:lI46|N
+28004ACA0:lI46|H28004ACB0
+28004ACB0:lI32|H28004ACC0
+28004ACC0:lI84|H28004ACD0
+28004ACD0:lI121|H28004ACE0
+28004ACE0:lI112|H28004ACF0
+28004ACF0:lI101|H28004AD00
+28004AD00:lI58|H28004AD10
+28004AD10:lI32|N
+28004AD20:lI46|H28004AD30
+28004AD30:lI32|H28004AD40
+28004AD40:lI69|H28004AD50
+28004AD50:lI120|H28004AD60
+28004AD60:lI105|H28004AD70
+28004AD70:lI116|H28004AD80
+28004AD80:lI101|H28004AD90
+28004AD90:lI100|H28004ADA0
+28004ADA0:lI58|H28004ADB0
+28004ADB0:lI32|N
+28004ADC0:lH28004ADD0|N
+28004ADD0:lI126|H28004ADE0
+28004ADE0:lI110|N
+28004ADF0:lI32|H28004AE00
+28004AE00:lI32|H28004AE10
+28004AE10:lI32|H28004AE20
+28004AE20:lI32|H28004AE30
+28004AE30:lI115|H28004AE40
+28004AE40:lI116|H28004AE50
+28004AE50:lI97|H28004AE60
+28004AE60:lI114|H28004AE70
+28004AE70:lI116|H28004AE80
+28004AE80:lI101|H28004AE90
+28004AE90:lI100|H28004AEA0
+28004AEA0:lI95|H28004AEB0
+28004AEB0:lI97|H28004AEC0
+28004AEC0:lI116|H28004AED0
+28004AED0:lI58|H28004AEE0
+28004AEE0:lI32|N
+28004AEF0:lI126|H28004AF00
+28004AF00:lI110|N
+28004AF10:lI32|H28004AF20
+28004AF20:lI32|H28004AF30
+28004AF30:lI32|H28004AF40
+28004AF40:lI32|H28004AF50
+28004AF50:lI97|H28004AF60
+28004AF60:lI112|H28004AF70
+28004AF70:lI112|H28004AF80
+28004AF80:lI108|H28004AF90
+28004AF90:lI105|H28004AFA0
+28004AFA0:lI99|H28004AFB0
+28004AFB0:lI97|H28004AFC0
+28004AFC0:lI116|H28004AFD0
+28004AFD0:lI105|H28004AFE0
+28004AFE0:lI111|H28004AFF0
+28004AFF0:lI110|H28004B000
+28004B000:lI58|H28004B010
+28004B010:lI32|N
+28004B020:lI32|H28004B030
+28004B030:lI32|H28004B040
+28004B040:lI32|H28004B050
+28004B050:lI32|H28004B060
+28004B060:lI116|H28004B070
+28004B070:lI121|H28004B080
+28004B080:lI112|H28004B090
+28004B090:lI101|H28004B0A0
+28004B0A0:lI58|H28004B0B0
+28004B0B0:lI32|N
+28004B0C0:lI32|H28004B0D0
+28004B0D0:lI32|H28004B0E0
+28004B0E0:lI32|H28004B0F0
+28004B0F0:lI32|H28004B100
+28004B100:lI101|H28004B110
+28004B110:lI120|H28004B120
+28004B120:lI105|H28004B130
+28004B130:lI116|H28004B140
+28004B140:lI101|H28004B150
+28004B150:lI100|H28004B160
+28004B160:lI58|H28004B170
+28004B170:lI32|N
+28004B180:lI112|N
+28004B190:lI80|N
+28004B1A0:lI48|N
+28004B1B0:lI116|N
+28004B1C0:t3:A3:env,A6:kernel,AB:permissions
+28004B1E0:lI126|H28004B1F0
+28004B1F0:lI48|H28004B200
+28004B200:lI112|N
+28004B210:lI83|H28004B220
+28004B220:lI108|H28004B230
+28004B230:lI111|H28004B240
+28004B240:lI119|H28004B250
+28004B250:lI32|H28004B260
+28004B260:lI45|H28004B270
+28004B270:lI99|H28004B280
+28004B280:lI111|H28004B290
+28004B290:lI110|H28004B2A0
+28004B2A0:lI102|H28004B2B0
+28004B2B0:lI105|H28004B2C0
+28004B2C0:lI103|H28004B2D0
+28004B2D0:lI102|H28004B2E0
+28004B2E0:lI100|H28004B2F0
+28004B2F0:lI32|H28004B300
+28004B300:lI102|H28004B310
+28004B310:lI105|H28004B320
+28004B320:lI108|H28004B330
+28004B330:lI101|H28004B340
+28004B340:lI32|H28004B350
+28004B350:lI100|H28004B360
+28004B360:lI101|H28004B370
+28004B370:lI115|H28004B380
+28004B380:lI99|H28004B390
+28004B390:lI114|H28004B3A0
+28004B3A0:lI105|H28004B3B0
+28004B3B0:lI112|H28004B3C0
+28004B3C0:lI116|H28004B3D0
+28004B3D0:lI111|H28004B3E0
+28004B3E0:lI114|H28004B3F0
+28004B3F0:lI32|H28004B400
+28004B400:lI126|H28004B410
+28004B410:lI112|H28004B420
+28004B420:lI46|H28004B430
+28004B430:lI32|H28004B440
+28004B440:lI84|H28004B450
+28004B450:lI104|H28004B460
+28004B460:lI101|H28004B470
+28004B470:lI32|H28004B480
+28004B480:lI115|H28004B490
+28004B490:lI121|H28004B4A0
+28004B4A0:lI115|H28004B4B0
+28004B4B0:lI116|H28004B4C0
+28004B4C0:lI101|H28004B4D0
+28004B4D0:lI109|H28004B4E0
+28004B4E0:lI32|H28004B4F0
+28004B4F0:lI119|H28004B500
+28004B500:lI105|H28004B510
+28004B510:lI108|H28004B520
+28004B520:lI108|H28004B530
+28004B530:lI32|H28004B540
+28004B540:lI99|H28004B550
+28004B550:lI111|H28004B560
+28004B560:lI110|H28004B570
+28004B570:lI116|H28004B580
+28004B580:lI105|H28004B590
+28004B590:lI110|H28004B5A0
+28004B5A0:lI117|H28004B5B0
+28004B5B0:lI101|H28004B5C0
+28004B5C0:lI32|H28004B5D0
+28004B5D0:lI116|H28004B5E0
+28004B5E0:lI111|H28004B5F0
+28004B5F0:lI32|H28004B600
+28004B600:lI114|H28004B610
+28004B610:lI101|H28004B620
+28004B620:lI97|H28004B630
+28004B630:lI100|H28004B640
+28004B640:lI32|H28004B650
+28004B650:lI102|H28004B660
+28004B660:lI114|H28004B670
+28004B670:lI111|H28004B680
+28004B680:lI109|H28004B690
+28004B690:lI32|H28004B6A0
+28004B6A0:lI116|H28004B6B0
+28004B6B0:lI104|H28004B6C0
+28004B6C0:lI101|H28004B6D0
+28004B6D0:lI32|H28004B6E0
+28004B6E0:lI102|H28004B6F0
+28004B6F0:lI105|H28004B700
+28004B700:lI108|H28004B710
+28004B710:lI101|H28004B720
+28004B720:lI32|H28004B730
+28004B730:lI100|H28004B740
+28004B740:lI101|H28004B750
+28004B750:lI115|H28004B760
+28004B760:lI99|H28004B770
+28004B770:lI114|H28004B780
+28004B780:lI105|H28004B790
+28004B790:lI112|H28004B7A0
+28004B7A0:lI116|H28004B7B0
+28004B7B0:lI111|H28004B7C0
+28004B7C0:lI114|H28004B7D0
+28004B7D0:lI32|H28004B7E0
+28004B7E0:lI97|H28004B7F0
+28004B7F0:lI110|H28004B800
+28004B800:lI100|H28004B810
+28004B810:lI32|H28004B820
+28004B820:lI119|H28004B830
+28004B830:lI105|H28004B840
+28004B840:lI108|H28004B850
+28004B850:lI108|H28004B860
+28004B860:lI32|H28004B870
+28004B870:lI98|H28004B880
+28004B880:lI101|H28004B890
+28004B890:lI32|H28004B8A0
+28004B8A0:lI98|H28004B8B0
+28004B8B0:lI108|H28004B8C0
+28004B8C0:lI111|H28004B8D0
+28004B8D0:lI99|H28004B8E0
+28004B8E0:lI107|H28004B8F0
+28004B8F0:lI101|H28004B900
+28004B900:lI100|H28004B910
+28004B910:lI32|H28004B920
+28004B920:lI117|H28004B930
+28004B930:lI110|H28004B940
+28004B940:lI116|H28004B950
+28004B950:lI105|H28004B960
+28004B960:lI108|H28004B970
+28004B970:lI32|H28004B980
+28004B980:lI101|H28004B990
+28004B990:lI110|H28004B9A0
+28004B9A0:lI100|H28004B9B0
+28004B9B0:lI32|H28004B9C0
+28004B9C0:lI111|H28004B9D0
+28004B9D0:lI102|H28004B9E0
+28004B9E0:lI32|H28004B9F0
+28004B9F0:lI102|H28004BA00
+28004BA00:lI105|H28004BA10
+28004BA10:lI108|H28004BA20
+28004BA20:lI101|H28004BA30
+28004BA30:lI32|H28004BA40
+28004BA40:lI105|H28004BA50
+28004BA50:lI115|H28004BA60
+28004BA60:lI32|H28004BA70
+28004BA70:lI114|H28004BA80
+28004BA80:lI101|H28004BA90
+28004BA90:lI99|H28004BAA0
+28004BAA0:lI101|H28004BAB0
+28004BAB0:lI105|H28004BAC0
+28004BAC0:lI118|H28004BAD0
+28004BAD0:lI101|H28004BAE0
+28004BAE0:lI100|H28004BAF0
+28004BAF0:lI46|N
+28004BB00:t3:A4:line,A4:file,A3:mfa
+28004BB20:Mf3:H28004BB00:I2094,H28004BB50,H28004BCF0
+28004BB50:lI97|H28004BB60
+28004BB60:lI112|H28004BB70
+28004BB70:lI112|H28004BB80
+28004BB80:lI108|H28004BB90
+28004BB90:lI105|H28004BBA0
+28004BBA0:lI99|H28004BBB0
+28004BBB0:lI97|H28004BBC0
+28004BBC0:lI116|H28004BBD0
+28004BBD0:lI105|H28004BBE0
+28004BBE0:lI111|H28004BBF0
+28004BBF0:lI110|H28004BC00
+28004BC00:lI95|H28004BC10
+28004BC10:lI99|H28004BC20
+28004BC20:lI111|H28004BC30
+28004BC30:lI110|H28004BC40
+28004BC40:lI116|H28004BC50
+28004BC50:lI114|H28004BC60
+28004BC60:lI111|H28004BC70
+28004BC70:lI108|H28004BC80
+28004BC80:lI108|H28004BC90
+28004BC90:lI101|H28004BCA0
+28004BCA0:lI114|H28004BCB0
+28004BCB0:lI46|H28004BCC0
+28004BCC0:lI101|H28004BCD0
+28004BCD0:lI114|H28004BCE0
+28004BCE0:lI108|N
+28004BCF0:t3:A16:application_controller,A1B:read_fd_until_end_and_close,I3
+28004BD10:lA4:read|N
+28004BD20:lI73|H28004BD30
+28004BD30:lI110|H28004BD40
+28004BD40:lI118|H28004BD50
+28004BD50:lI97|H28004BD60
+28004BD60:lI108|H28004BD70
+28004BD70:lI105|H28004BD80
+28004BD80:lI100|H28004BD90
+28004BD90:lI32|H28004BDA0
+28004BDA0:lI102|H28004BDB0
+28004BDB0:lI105|H28004BDC0
+28004BDC0:lI108|H28004BDD0
+28004BDD0:lI101|H28004BDE0
+28004BDE0:lI32|H28004BDF0
+28004BDF0:lI100|H28004BE00
+28004BE00:lI101|H28004BE10
+28004BE10:lI115|H28004BE20
+28004BE20:lI99|H28004BE30
+28004BE30:lI114|H28004BE40
+28004BE40:lI105|H28004BE50
+28004BE50:lI112|H28004BE60
+28004BE60:lI116|H28004BE70
+28004BE70:lI111|H28004BE80
+28004BE80:lI114|N
+28004BE90:lI134217728|N
+28004BEA0:lI77|H28004BEB0
+28004BEB0:lI97|H28004BEC0
+28004BEC0:lI120|H28004BED0
+28004BED0:lI32|H28004BEE0
+28004BEE0:lI115|H28004BEF0
+28004BEF0:lI105|H28004BF00
+28004BF00:lI122|H28004BF10
+28004BF10:lI101|H28004BF20
+28004BF20:lI32|H28004BF30
+28004BF30:lI126|H28004BF40
+28004BF40:lI119|H28004BF50
+28004BF50:lI32|H28004BF60
+28004BF60:lI98|H28004BF70
+28004BF70:lI121|H28004BF80
+28004BF80:lI116|H28004BF90
+28004BF90:lI101|H28004BFA0
+28004BFA0:lI115|H28004BFB0
+28004BFB0:lI32|H28004BFC0
+28004BFC0:lI101|H28004BFD0
+28004BFD0:lI120|H28004BFE0
+28004BFE0:lI99|H28004BFF0
+28004BFF0:lI101|H28004C000
+28004C000:lI101|H28004C010
+28004C010:lI100|H28004C020
+28004C020:lI101|H28004C030
+28004C030:lI100|N
+28004C040:lI48|H28004C050
+28004C050:lI49|H28004C060
+28004C060:lI50|H28004C070
+28004C070:lI51|H28004C080
+28004C080:lI52|H28004C090
+28004C090:lI53|H28004C0A0
+28004C0A0:lI54|H28004C0B0
+28004C0B0:lI55|H28004C0C0
+28004C0C0:lI56|H28004C0D0
+28004C0D0:lI57|N
+28004C0E0:lI126|H28004C0F0
+28004C0F0:lI116|H28004C100
+28004C100:lI112|H28004C110
+28004C110:lI58|H28004C120
+28004C120:lI32|H28004C130
+28004C130:lI126|H28004C140
+28004C140:lI119|H28004C150
+28004C150:lI58|H28004C160
+28004C160:lI32|H28004C170
+28004C170:lI126|H28004C180
+28004C180:lI116|H28004C190
+28004C190:lI115|H28004C1A0
+28004C1A0:lI126|H28004C1B0
+28004C1B0:lI110|N
+28004C1C0:t3:A4:line,A4:file,A3:mfa
+28004C1E0:Mf3:H28004C1C0:I1588,H28004C210,H28004C3B0
+28004C210:lI97|H28004C220
+28004C220:lI112|H28004C230
+28004C230:lI112|H28004C240
+28004C240:lI108|H28004C250
+28004C250:lI105|H28004C260
+28004C260:lI99|H28004C270
+28004C270:lI97|H28004C280
+28004C280:lI116|H28004C290
+28004C290:lI105|H28004C2A0
+28004C2A0:lI111|H28004C2B0
+28004C2B0:lI110|H28004C2C0
+28004C2C0:lI95|H28004C2D0
+28004C2D0:lI99|H28004C2E0
+28004C2E0:lI111|H28004C2F0
+28004C2F0:lI110|H28004C300
+28004C300:lI116|H28004C310
+28004C310:lI114|H28004C320
+28004C320:lI111|H28004C330
+28004C330:lI108|H28004C340
+28004C340:lI108|H28004C350
+28004C350:lI101|H28004C360
+28004C360:lI114|H28004C370
+28004C370:lI46|H28004C380
+28004C380:lI101|H28004C390
+28004C390:lI114|H28004C3A0
+28004C3A0:lI108|N
+28004C3B0:t3:A16:application_controller,AE:do_change_apps,I3
+28004C3D0:lI108|N
+28004C3E0:lI114|H28004C3D0
+28004C3F0:lI101|H28004C3E0
+28004C400:lI46|H28004C3F0
+28004C410:lI114|H28004C400
+28004C420:lI101|H28004C410
+28004C430:lI108|H28004C420
+28004C440:lI108|H28004C430
+28004C450:lI111|H28004C440
+28004C460:lI114|H28004C450
+28004C470:lI116|H28004C460
+28004C480:lI110|H28004C470
+28004C490:lI111|H28004C480
+28004C4A0:lI99|H28004C490
+28004C4B0:lI95|H28004C4A0
+28004C4C0:lI110|H28004C4B0
+28004C4D0:lI111|H28004C4C0
+28004C4E0:lI105|H28004C4D0
+28004C4F0:lI116|H28004C4E0
+28004C500:lI97|H28004C4F0
+28004C510:lI99|H28004C500
+28004C520:lI105|H28004C510
+28004C530:lI108|H28004C520
+28004C540:lI112|H28004C530
+28004C550:lI112|H28004C540
+28004C560:lI97|H28004C550
+28004C570:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAABAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEBYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C598:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAEAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEEYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C5C0:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAAFAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEFYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C5E8:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAAGAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEGYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C610:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAIAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEIYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C638:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAJAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEJYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C660:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAAMAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEMYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C688:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAANAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmENYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C6B0:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAPAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEPYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C6D8:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAARAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmERYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C700:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAASAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmESYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C728:E5A:g3AAAABYAQnO5ercdDL+Dqkv8OJgo/EAAAATAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmETYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C750:E5A:g3AAAABYAgnO5ercdDL+Dqkv8OJgo/EAAAAUAAAAAHcWYXBwbGljYXRpb25fY29udHJvbGxlcmEUYgBOdy9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28004C778:t2:A5:label,A6:report
+28004C790:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+280052908:lAB:named_table|H280052918
+280052918:lA9:protected|N
+280052928:lI108|H280052938
+280052938:lI105|H280052948
+280052948:lI98|N
+280052958:lI46|N
+280052968:lI69|H280052978
+280052978:lI82|H280052988
+280052988:lI76|H280052998
+280052998:lI95|H2800529A8
+2800529A8:lI76|H2800529B8
+2800529B8:lI73|H2800529C8
+2800529C8:lI66|H2800529D8
+2800529D8:lI83|N
+2800529E8:lA5:flush|N
+2800529F8:t2:A6:module,AB:code_server
+280052A10:lI32|H280052A20
+280052A20:lI42|H280052A30
+280052A30:lI42|H280052A40
+280052A40:lI32|H280052A50
+280052A50:lI67|H280052A60
+280052A60:lI111|H280052A70
+280052A70:lI100|H280052A80
+280052A80:lI101|H280052A90
+280052A90:lI115|H280052AA0
+280052AA0:lI101|H280052AB0
+280052AB0:lI114|H280052AC0
+280052AC0:lI118|H280052AD0
+280052AD0:lI101|H280052AE0
+280052AE0:lI114|H280052AF0
+280052AF0:lI42|H280052B00
+280052B00:lI42|H280052B10
+280052B10:lI42|H280052B20
+280052B20:lI32|H280052B30
+280052B30:lI105|H280052B40
+280052B40:lI103|H280052B50
+280052B50:lI110|H280052B60
+280052B60:lI111|H280052B70
+280052B70:lI114|H280052B80
+280052B80:lI105|H280052B90
+280052B90:lI110|H280052BA0
+280052BA0:lI103|H280052BB0
+280052BB0:lI32|H280052BC0
+280052BC0:lI126|H280052BD0
+280052BD0:lI119|H280052BE0
+280052BE0:lI126|H280052BF0
+280052BF0:lI110|H280052C00
+280052C00:lI32|N
+280052C10:lI0|N
+280052C20:lI101|H280052C30
+280052C30:lI98|H280052C40
+280052C40:lI105|H280052C50
+280052C50:lI110|N
+280052C60:lH280052C70|N
+280052C70:lI101|H280052C80
+280052C80:lI98|H280052C90
+280052C90:lI105|H280052CA0
+280052CA0:lI110|N
+280052CB0:t2:A2:ok,H280052CC8
+280052CC8:lH280052CD8|N
+280052CD8:lH280052CE8|N
+280052CE8:lI102|H280052CF8
+280052CF8:lI97|H280052D08
+280052D08:lI108|H280052D18
+280052D18:lI115|H280052D28
+280052D28:lI101|N
+280052D38:lI45|N
+280052D48:t2:A5:error,AD:bad_directory
+280052D60:lAB:named_table|H280052D70
+280052D70:lA6:public|N
+280052D80:lI101|H280052D90
+280052D90:lI114|H280052DA0
+280052DA0:lI116|H280052DB0
+280052DB0:lI115|N
+280052DC0:t2:A5:error,A8:bad_name
+280052DD8:lI99|H280052DE8
+280052DE8:lI111|H280052DF8
+280052DF8:lI109|H280052E08
+280052E08:lI112|H280052E18
+280052E18:lI105|H280052E28
+280052E28:lI108|H280052E38
+280052E38:lI101|H280052E48
+280052E48:lI114|N
+280052E58:lI67|H280052E68
+280052E68:lI97|H280052E78
+280052E78:lI110|H280052E88
+280052E88:lI39|H280052E98
+280052E98:lI116|H280052EA8
+280052EA8:lI32|H280052EB8
+280052EB8:lI108|H280052EC8
+280052EC8:lI111|H280052ED8
+280052ED8:lI97|H280052EE8
+280052EE8:lI100|H280052EF8
+280052EF8:lI32|H280052F08
+280052F08:lI109|H280052F18
+280052F18:lI111|H280052F28
+280052F28:lI100|H280052F38
+280052F38:lI117|H280052F48
+280052F48:lI108|H280052F58
+280052F58:lI101|H280052F68
+280052F68:lI32|H280052F78
+280052F78:lI39|H280052F88
+280052F88:lI126|H280052F98
+280052F98:lI119|H280052FA8
+280052FA8:lI39|H280052FB8
+280052FB8:lI32|H280052FC8
+280052FC8:lI116|H280052FD8
+280052FD8:lI104|H280052FE8
+280052FE8:lI97|H280052FF8
+280052FF8:lI116|H280053008
+280053008:lI32|H280053018
+280053018:lI114|H280053028
+280053028:lI101|H280053038
+280053038:lI115|H280053048
+280053048:lI105|H280053058
+280053058:lI100|H280053068
+280053068:lI101|H280053078
+280053078:lI115|H280053088
+280053088:lI32|H280053098
+280053098:lI105|H2800530A8
+2800530A8:lI110|H2800530B8
+2800530B8:lI32|H2800530C8
+2800530C8:lI115|H2800530D8
+2800530D8:lI116|H2800530E8
+2800530E8:lI105|H2800530F8
+2800530F8:lI99|H280053108
+280053108:lI107|H280053118
+280053118:lI121|H280053128
+280053128:lI32|H280053138
+280053138:lI100|H280053148
+280053148:lI105|H280053158
+280053158:lI114|H280053168
+280053168:lI10|N
+280053178:t2:A5:error,A10:sticky_directory
+280053190:t2:A4:true,A7:nocache
+2800531A8:t2:A5:false,A5:cache
+2800531C0:lI58|H2800531D0
+2800531D0:lI47|N
+2800531E0:t2:A5:error,A7:on_load
+2800531F8:t2:A5:error,A8:deadlock
+280053210:t2:A5:error,AF:on_load_failure
+280053228:lH280053238|N
+280053238:t3:H280053258,H280053270,H280053298
+280053258:t2:A2:$1,A1:_
+280053270:lH280053280|N
+280053280:t2:A7:is_atom,A2:$1
+280053298:lA2:$_|N
+2800532A8:Mf0:H280010188:
+2800532C0:t1:A3:tag
+2800532D0:Mf1:H2800532C0:A5:error
+2800532F0:t2:AB:code_server,A5:error
+280053308:t1:A3:tag
+280053318:Mf1:H280053308:A8:info_msg
+280053338:lI10|N
+280053348:lI84|H280053358
+280053358:lI104|H280053368
+280053368:lI101|H280053378
+280053378:lI32|H280053388
+280053388:lI111|H280053398
+280053398:lI110|H2800533A8
+2800533A8:lI95|H2800533B8
+2800533B8:lI108|H2800533C8
+2800533C8:lI111|H2800533D8
+2800533D8:lI97|H2800533E8
+2800533E8:lI100|H2800533F8
+2800533F8:lI32|H280053408
+280053408:lI102|H280053418
+280053418:lI117|H280053428
+280053428:lI110|H280053438
+280053438:lI99|H280053448
+280053448:lI116|H280053458
+280053458:lI105|H280053468
+280053468:lI111|H280053478
+280053478:lI110|H280053488
+280053488:lI32|H280053498
+280053498:lI102|H2800534A8
+2800534A8:lI111|H2800534B8
+2800534B8:lI114|H2800534C8
+2800534C8:lI32|H2800534D8
+2800534D8:lI109|H2800534E8
+2800534E8:lI111|H2800534F8
+2800534F8:lI100|H280053508
+280053508:lI117|H280053518
+280053518:lI108|H280053528
+280053528:lI101|H280053538
+280053538:lI32|H280053548
+280053548:lI126|H280053558
+280053558:lI115|H280053568
+280053568:lI32|H280053578
+280053578:lI114|H280053588
+280053588:lI101|H280053598
+280053598:lI116|H2800535A8
+2800535A8:lI117|H2800535B8
+2800535B8:lI114|H2800535C8
+2800535C8:lI110|H2800535D8
+2800535D8:lI101|H2800535E8
+2800535E8:lI100|H2800535F8
+2800535F8:lI58|H280053608
+280053608:lI126|H280053618
+280053618:lI110|H280053628
+280053628:lI126|H280053638
+280053638:lI80|H280053648
+280053648:lI10|N
+280053658:lI76|H280053668
+280053668:lI111|H280053678
+280053678:lI97|H280053688
+280053688:lI100|H280053698
+280053698:lI105|H2800536A8
+2800536A8:lI110|H2800536B8
+2800536B8:lI103|H2800536C8
+2800536C8:lI32|H2800536D8
+2800536D8:lI111|H2800536E8
+2800536E8:lI102|H2800536F8
+2800536F8:lI32|H280053708
+280053708:lI126|H280053718
+280053718:lI116|H280053728
+280053728:lI115|H280053738
+280053738:lI32|H280053748
+280053748:lI102|H280053758
+280053758:lI97|H280053768
+280053768:lI105|H280053778
+280053778:lI108|H280053788
+280053788:lI101|H280053798
+280053798:lI100|H2800537A8
+2800537A8:lI58|H2800537B8
+2800537B8:lI32|H2800537C8
+2800537C8:lI126|H2800537D8
+2800537D8:lI112|H2800537E8
+2800537E8:lI10|N
+2800537F8:t2:A5:error,A8:embedded
+280053810:t2:A5:error,A6:nofile
+280053828:lI108|N
+280053838:lI114|H280053828
+280053848:lI101|H280053838
+280053858:lI46|H280053848
+280053868:lI114|H280053858
+280053878:lI101|H280053868
+280053888:lI118|H280053878
+280053898:lI114|H280053888
+2800538A8:lI101|H280053898
+2800538B8:lI115|H2800538A8
+2800538C8:lI95|H2800538B8
+2800538D8:lI101|H2800538C8
+2800538E8:lI100|H2800538D8
+2800538F8:lI111|H2800538E8
+280053908:lI99|H2800538F8
+280053918:E4F:g3AAAABNAdRDfzF//Rs9hGTt7lEXZC0AAAADAAAAAHcLY29kZV9zZXJ2ZXJhA2IGohv5WHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280053940:E4F:g3AAAABNAdRDfzF//Rs9hGTt7lEXZC0AAAAEAAAAAHcLY29kZV9zZXJ2ZXJhBGIGohv5WHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280053968:t4:AC:error_logger,A3:pid,A4:time,A2:gl
+28005A0C0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+28005A0F8:Mf6:H28005A0C0:AC:logger_proxy,A9:temporary,I2000,H28005A150,A6:worker,H28005A140
+28005A140:lAC:logger_proxy|N
+28005A150:t3:AC:logger_proxy,AA:start_link,N
+28005A170:t2:A2:ok,A8:no_state
+28005A188:lA9:nosuspend|N
+28005A198:t2:A2:ok,H28005A1B0
+28005A1B0:E1B:g3F3DGxvZ2dlcl9wcm94eXcHcmVzdGFydGEA
+28005A1D8:lI126|H28005A1E8
+28005A1E8:lI119|H28005A1F8
+28005A1F8:lI32|H28005A208
+28005A208:lI115|H28005A218
+28005A218:lI119|H28005A228
+28005A228:lI105|H28005A238
+28005A238:lI116|H28005A248
+28005A248:lI99|H28005A258
+28005A258:lI104|H28005A268
+28005A268:lI101|H28005A278
+28005A278:lI100|H28005A288
+28005A288:lI32|H28005A298
+28005A298:lI102|H28005A2A8
+28005A2A8:lI114|H28005A2B8
+28005A2B8:lI111|H28005A2C8
+28005A2C8:lI109|H28005A2D8
+28005A2D8:lI32|H28005A2E8
+28005A2E8:lI126|H28005A2F8
+28005A2F8:lI119|H28005A308
+28005A308:lI32|H28005A318
+28005A318:lI116|H28005A328
+28005A328:lI111|H28005A338
+28005A338:lI32|H28005A348
+28005A348:lI126|H28005A358
+28005A358:lI119|H28005A368
+28005A368:lI32|H28005A378
+28005A378:lI109|H28005A388
+28005A388:lI111|H28005A398
+28005A398:lI100|H28005A3A8
+28005A3A8:lI101|N
+28005A3B8:t3:A4:line,A4:file,A3:mfa
+28005A3D8:Mf3:H28005A3B8:I158,H28005A408,H28005A508
+28005A408:lI108|H28005A418
+28005A418:lI111|H28005A428
+28005A428:lI103|H28005A438
+28005A438:lI103|H28005A448
+28005A448:lI101|H28005A458
+28005A458:lI114|H28005A468
+28005A468:lI95|H28005A478
+28005A478:lI112|H28005A488
+28005A488:lI114|H28005A498
+28005A498:lI111|H28005A4A8
+28005A4A8:lI120|H28005A4B8
+28005A4B8:lI121|H28005A4C8
+28005A4C8:lI46|H28005A4D8
+28005A4D8:lI101|H28005A4E8
+28005A4E8:lI114|H28005A4F8
+28005A4F8:lI108|N
+28005A508:t3:AC:logger_proxy,A6:notify,I2
+28005A528:Mf0:H280010188:
+28005A540:lI126|H28005A550
+28005A550:lI119|H28005A560
+28005A560:lI32|H28005A570
+28005A570:lI102|H28005A580
+28005A580:lI108|H28005A590
+28005A590:lI117|H28005A5A0
+28005A5A0:lI115|H28005A5B0
+28005A5B0:lI104|H28005A5C0
+28005A5C0:lI101|H28005A5D0
+28005A5D0:lI100|H28005A5E0
+28005A5E0:lI32|H28005A5F0
+28005A5F0:lI126|H28005A600
+28005A600:lI119|H28005A610
+28005A610:lI32|H28005A620
+28005A620:lI108|H28005A630
+28005A630:lI111|H28005A640
+28005A640:lI103|H28005A650
+28005A650:lI32|H28005A660
+28005A660:lI101|H28005A670
+28005A670:lI118|H28005A680
+28005A680:lI101|H28005A690
+28005A690:lI110|H28005A6A0
+28005A6A0:lI116|H28005A6B0
+28005A6B0:lI115|N
+28005A6C0:t3:A4:line,A4:file,A3:mfa
+28005A6E0:Mf3:H28005A6C0:I161,H28005A710,H28005A810
+28005A710:lI108|H28005A720
+28005A720:lI111|H28005A730
+28005A730:lI103|H28005A740
+28005A740:lI103|H28005A750
+28005A750:lI101|H28005A760
+28005A760:lI114|H28005A770
+28005A770:lI95|H28005A780
+28005A780:lI112|H28005A790
+28005A790:lI114|H28005A7A0
+28005A7A0:lI111|H28005A7B0
+28005A7B0:lI120|H28005A7C0
+28005A7C0:lI121|H28005A7D0
+28005A7D0:lI46|H28005A7E0
+28005A7E0:lI101|H28005A7F0
+28005A7F0:lI114|H28005A800
+28005A800:lI108|N
+28005A810:t3:AC:logger_proxy,A6:notify,I2
+28005A830:t3:A4:line,A4:file,A3:mfa
+28005A850:Mf3:H28005A830:I164,H28005A880,H28005A980
+28005A880:lI108|H28005A890
+28005A890:lI111|H28005A8A0
+28005A8A0:lI103|H28005A8B0
+28005A8B0:lI103|H28005A8C0
+28005A8C0:lI101|H28005A8D0
+28005A8D0:lI114|H28005A8E0
+28005A8E0:lI95|H28005A8F0
+28005A8F0:lI112|H28005A900
+28005A900:lI114|H28005A910
+28005A910:lI111|H28005A920
+28005A920:lI120|H28005A930
+28005A930:lI121|H28005A940
+28005A940:lI46|H28005A950
+28005A950:lI101|H28005A960
+28005A960:lI114|H28005A970
+28005A970:lI108|N
+28005A980:t3:AC:logger_proxy,A6:notify,I2
+28005A9A0:lH28005A9C0|H28005A9B0
+28005A9B0:lH28005AA80|N
+28005A9C0:lI126|H28005A9D0
+28005A9D0:lI119|H28005A9E0
+28005A9E0:lI32|H28005A9F0
+28005A9F0:lI114|H28005AA00
+28005AA00:lI101|H28005AA10
+28005AA10:lI115|H28005AA20
+28005AA20:lI116|H28005AA30
+28005AA30:lI97|H28005AA40
+28005AA40:lI114|H28005AA50
+28005AA50:lI116|H28005AA60
+28005AA60:lI101|H28005AA70
+28005AA70:lI100|N
+28005AA80:lAC:logger_proxy|N
+28005AA90:t2:AC:logger_proxy,AA:log_failed
+28005AAA8:t3:A4:line,A4:file,A3:mfa
+28005AAC8:Mf3:H28005AAA8:I174,H28005AAF8,H28005ABF8
+28005AAF8:lI108|H28005AB08
+28005AB08:lI111|H28005AB18
+28005AB18:lI103|H28005AB28
+28005AB28:lI103|H28005AB38
+28005AB38:lI101|H28005AB48
+28005AB48:lI114|H28005AB58
+28005AB58:lI95|H28005AB68
+28005AB68:lI112|H28005AB78
+28005AB78:lI114|H28005AB88
+28005AB88:lI111|H28005AB98
+28005AB98:lI120|H28005ABA8
+28005ABA8:lI121|H28005ABB8
+28005ABB8:lI46|H28005ABC8
+28005ABC8:lI101|H28005ABD8
+28005ABD8:lI114|H28005ABE8
+28005ABE8:lI108|N
+28005ABF8:t3:AC:logger_proxy,A7:try_log,I1
+28005AC18:lI108|N
+28005AC28:lI114|H28005AC18
+28005AC38:lI101|H28005AC28
+28005AC48:lI46|H28005AC38
+28005AC58:lI121|H28005AC48
+28005AC68:lI120|H28005AC58
+28005AC78:lI111|H28005AC68
+28005AC88:lI114|H28005AC78
+28005AC98:lI112|H28005AC88
+28005ACA8:lI95|H28005AC98
+28005ACB8:lI114|H28005ACA8
+28005ACC8:lI101|H28005ACB8
+28005ACD8:lI103|H28005ACC8
+28005ACE8:lI103|H28005ACD8
+28005ACF8:lI111|H28005ACE8
+28005AD08:lI108|H28005ACF8
+28005B2F8:t2:N,N
+28005B310:t2:A5:empty,H28005B328
+28005B328:t2:N,N
+28005B340:lH28005B350|N
+28005B350:t2:N,N
+28005B368:lI108|N
+28005B378:lI114|H28005B368
+28005B388:lI101|H28005B378
+28005B398:lI46|H28005B388
+28005B3A8:lI101|H28005B398
+28005B3B8:lI117|H28005B3A8
+28005B3C8:lI101|H28005B3B8
+28005B3D8:lI117|H28005B3C8
+28005B3E8:lI113|H28005B3D8
+280061C80:t2:I0,A3:nil
+280061C98:t2:I1,I1
+280061CB0:t2:I1,I0
+280061CC8:lI108|N
+280061CD8:lI114|H280061CC8
+280061CE8:lI101|H280061CD8
+280061CF8:lI46|H280061CE8
+280061D08:lI115|H280061CF8
+280061D18:lI101|H280061D08
+280061D28:lI101|H280061D18
+280061D38:lI114|H280061D28
+280061D48:lI116|H280061D38
+280061D58:lI95|H280061D48
+280061D68:lI98|H280061D58
+280061D78:lI103|H280061D68
+280068C20:t2:A5:local,A12:standard_error_sup
+280068C38:lA3:out|H280068C48
+280068C48:lA6:binary|N
+280068C58:t2:A5:error,AB:no_stderror
+280068C70:t3:A2:fd,I2,I2
+280068C90:lA6:native|N
+280068CA0:t2:A5:error,H280068CB8
+280068CB8:t2:A5:error,A9:put_chars
+280068CD0:t2:A2:ok,A2:ok
+280068CE8:t2:A5:error,H280068D00
+280068D00:t2:A5:error,A7:enotsup
+280068D18:t2:A8:encoding,A4:utf8
+280068D30:t2:A8:encoding,A7:unicode
+280068D48:t2:A8:encoding,A6:latin1
+280068D60:lI13|H280068D70
+280068D70:lI10|N
+280068D80:lI125|N
+280068D90:lI92|H280068DA0
+280068DA0:lI120|H280068DB0
+280068DB0:lI123|N
+280068DC0:lI108|N
+280068DD0:lI114|H280068DC0
+280068DE0:lI101|H280068DD0
+280068DF0:lI46|H280068DE0
+280068E00:lI114|H280068DF0
+280068E10:lI111|H280068E00
+280068E20:lI114|H280068E10
+280068E30:lI114|H280068E20
+280068E40:lI101|H280068E30
+280068E50:lI95|H280068E40
+280068E60:lI100|H280068E50
+280068E70:lI114|H280068E60
+280068E80:lI97|H280068E70
+280068E90:lI100|H280068E80
+280068EA0:lI110|H280068E90
+280068EB0:lI97|H280068EA0
+280068EC0:lI116|H280068EB0
+280068ED0:lI115|H280068EC0
+280068EE0:E52:g3AAAABQAerTAUbpHNfN5LUoR+s7ypAAAAABAAAAAHcOc3RhbmRhcmRfZXJyb3JhAWIHVpgKWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280070EF0:lH280070F00|N
+280070F00:t2:A9:spawn_opt,H280070F18
+280070F18:lH280070F28|N
+280070F28:t2:A12:message_queue_data,A8:off_heap
+280070F40:t2:A5:local,A3:rex
+280070F58:Mf0:H280010188:
+280070F70:t2:A6:badrpc,H280070F88
+280070F88:t2:A4:EXIT,AC:system_limit
+280070FA0:lA4:erpc|N
+280070FB0:t2:A6:badrpc,A7:timeout
+280070FC8:t2:A6:badrpc,A6:notsup
+280070FE0:t2:A6:badrpc,A8:nodedown
+280070FF8:t2:A5:error,A8:nodedown
+280071010:lA5:flush|N
+280071020:t2:A4:erpc,A6:badarg
+280071038:t2:A5:error,A7:enotsup
+280071050:t2:A5:error,A7:request
+280071068:lH280071088|H280071078
+280071078:lA9:protected|N
+280071088:t2:A10:read_concurrency,A4:true
+2800710A0:lI108|N
+2800710B0:lI114|H2800710A0
+2800710C0:lI101|H2800710B0
+2800710D0:lI46|H2800710C0
+2800710E0:lI99|H2800710D0
+2800710F0:lI112|H2800710E0
+280071100:lI114|H2800710F0
+280071110:t1:AE:nodes_observer
+280071120:E47:g3AAAABFAIbTaQSrg2lQNTtMKFV2UOkAAAACAAAAAHcDcnBjYQJiBDabSFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280071148:E47:g3AAAABFAIbTaQSrg2lQNTtMKFV2UOkAAAADAAAAAHcDcnBjYQNiBDabSFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280071170:E47:g3AAAABFAYbTaQSrg2lQNTtMKFV2UOkAAAAHAAAAAHcDcnBjYQdiBDabSFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800711F8:t2:A5:local,A12:global_name_server
+280071210:t2:A2:ok,A5:allow
+280071228:lI103|H280071238
+280071238:lI108|H280071248
+280071248:lI111|H280071258
+280071258:lI98|H280071268
+280071268:lI97|H280071278
+280071278:lI108|H280071288
+280071288:lI58|H280071298
+280071298:lI32|H2800712A8
+2800712A8:lI126|H2800712B8
+2800712B8:lI119|H2800712C8
+2800712C8:lI32|H2800712D8
+2800712D8:lI114|H2800712E8
+2800712E8:lI101|H2800712F8
+2800712F8:lI103|H280071308
+280071308:lI105|H280071318
+280071318:lI115|H280071328
+280071328:lI116|H280071338
+280071338:lI101|H280071348
+280071348:lI114|H280071358
+280071358:lI101|H280071368
+280071368:lI100|H280071378
+280071378:lI32|H280071388
+280071388:lI117|H280071398
+280071398:lI110|H2800713A8
+2800713A8:lI100|H2800713B8
+2800713B8:lI101|H2800713C8
+2800713C8:lI114|H2800713D8
+2800713D8:lI32|H2800713E8
+2800713E8:lI115|H2800713F8
+2800713F8:lI101|H280071408
+280071408:lI118|H280071418
+280071418:lI101|H280071428
+280071428:lI114|H280071438
+280071438:lI97|H280071448
+280071448:lI108|H280071458
+280071458:lI32|H280071468
+280071468:lI110|H280071478
+280071478:lI97|H280071488
+280071488:lI109|H280071498
+280071498:lI101|H2800714A8
+2800714A8:lI115|H2800714B8
+2800714B8:lI58|H2800714C8
+2800714C8:lI32|H2800714D8
+2800714D8:lI126|H2800714E8
+2800714E8:lI116|H2800714F8
+2800714F8:lI119|H280071508
+280071508:lI10|N
+280071518:lH280071528|N
+280071528:t3:H280071548,N,H280071570
+280071548:t4:A2:$1,A2:$2,A2:$3,A2:$4
+280071570:lA2:$1|N
+280071580:t1:AD:connection_id
+280071590:Mf1:H280071580:A4:true
+2800715B0:Mf0:H280010188:
+2800715C8:lA3:set|H2800715D8
+2800715D8:lAB:named_table|H2800715E8
+2800715E8:lA9:protected|N
+2800715F8:lA3:set|H280071608
+280071608:lAB:named_table|H280071618
+280071618:lA9:protected|H280071628
+280071628:lH280071638|N
+280071638:t2:A10:read_concurrency,A4:true
+280071650:lA3:bag|H280071660
+280071660:lAB:named_table|H280071670
+280071670:lA9:protected|N
+280071680:lI71|H280071690
+280071690:lI76|H2800716A0
+2800716A0:lI79|H2800716B0
+2800716B0:lI66|H2800716C0
+2800716C0:lI65|H2800716D0
+2800716D0:lI76|H2800716E0
+2800716E0:lI95|H2800716F0
+2800716F0:lI72|H280071700
+280071700:lI73|H280071710
+280071710:lI71|H280071720
+280071720:lI72|H280071730
+280071730:lI95|H280071740
+280071740:lI76|H280071750
+280071750:lI69|H280071760
+280071760:lI86|H280071770
+280071770:lI69|H280071780
+280071780:lI76|H280071790
+280071790:lI95|H2800717A0
+2800717A0:lI84|H2800717B0
+2800717B0:lI82|H2800717C0
+2800717C0:lI65|H2800717D0
+2800717D0:lI67|H2800717E0
+2800717E0:lI69|N
+2800717F0:lI84|H280071800
+280071800:lI82|H280071810
+280071810:lI85|H280071820
+280071820:lI69|N
+280071830:lI102|H280071840
+280071840:lI97|H280071850
+280071850:lI108|H280071860
+280071860:lI115|H280071870
+280071870:lI101|N
+280071880:lH280071890|N
+280071890:t2:A7:timeout,A8:infinity
+2800718A8:t2:A8:do_trace,A5:false
+2800718C0:t2:A8:do_trace,A4:true
+2800718D8:lI84|H2800718E8
+2800718E8:lI104|H2800718F8
+2800718F8:lI101|H280071908
+280071908:lI32|H280071918
+280071918:lI103|H280071928
+280071928:lI108|H280071938
+280071938:lI111|H280071948
+280071948:lI98|H280071958
+280071958:lI97|H280071968
+280071968:lI108|H280071978
+280071978:lI95|H280071988
+280071988:lI110|H280071998
+280071998:lI97|H2800719A8
+2800719A8:lI109|H2800719B8
+2800719B8:lI101|H2800719C8
+2800719C8:lI95|H2800719D8
+2800719D8:lI115|H2800719E8
+2800719E8:lI101|H2800719F8
+2800719F8:lI114|H280071A08
+280071A08:lI118|H280071A18
+280071A18:lI101|H280071A28
+280071A28:lI114|H280071A38
+280071A38:lI32|H280071A48
+280071A48:lI114|H280071A58
+280071A58:lI101|H280071A68
+280071A68:lI99|H280071A78
+280071A78:lI101|H280071A88
+280071A88:lI105|H280071A98
+280071A98:lI118|H280071AA8
+280071AA8:lI101|H280071AB8
+280071AB8:lI100|H280071AC8
+280071AC8:lI32|H280071AD8
+280071AD8:lI97|H280071AE8
+280071AE8:lI110|H280071AF8
+280071AF8:lI32|H280071B08
+280071B08:lI117|H280071B18
+280071B18:lI110|H280071B28
+280071B28:lI101|H280071B38
+280071B38:lI120|H280071B48
+280071B48:lI112|H280071B58
+280071B58:lI101|H280071B68
+280071B68:lI99|H280071B78
+280071B78:lI116|H280071B88
+280071B88:lI101|H280071B98
+280071B98:lI100|H280071BA8
+280071BA8:lI32|H280071BB8
+280071BB8:lI109|H280071BC8
+280071BC8:lI101|H280071BD8
+280071BD8:lI115|H280071BE8
+280071BE8:lI115|H280071BF8
+280071BF8:lI97|H280071C08
+280071C08:lI103|H280071C18
+280071C18:lI101|H280071C28
+280071C28:lI58|H280071C38
+280071C38:lI10|H280071C48
+280071C48:lI104|H280071C58
+280071C58:lI97|H280071C68
+280071C68:lI110|H280071C78
+280071C78:lI100|H280071C88
+280071C88:lI108|H280071C98
+280071C98:lI101|H280071CA8
+280071CA8:lI95|H280071CB8
+280071CB8:lI99|H280071CC8
+280071CC8:lI97|H280071CD8
+280071CD8:lI108|H280071CE8
+280071CE8:lI108|H280071CF8
+280071CF8:lI40|H280071D08
+280071D08:lI126|H280071D18
+280071D18:lI116|H280071D28
+280071D28:lI112|H280071D38
+280071D38:lI44|H280071D48
+280071D48:lI32|H280071D58
+280071D58:lI126|H280071D68
+280071D68:lI116|H280071D78
+280071D78:lI112|H280071D88
+280071D88:lI44|H280071D98
+280071D98:lI32|H280071DA8
+280071DA8:lI95|H280071DB8
+280071DB8:lI41|H280071DC8
+280071DC8:lI10|N
+280071DD8:lI73|H280071DE8
+280071DE8:lI108|H280071DF8
+280071DF8:lI108|H280071E08
+280071E08:lI101|H280071E18
+280071E18:lI103|H280071E28
+280071E28:lI97|H280071E38
+280071E38:lI108|H280071E48
+280071E48:lI32|H280071E58
+280071E58:lI103|H280071E68
+280071E68:lI108|H280071E78
+280071E78:lI111|H280071E88
+280071E88:lI98|H280071E98
+280071E98:lI97|H280071EA8
+280071EA8:lI108|H280071EB8
+280071EB8:lI32|H280071EC8
+280071EC8:lI112|H280071ED8
+280071ED8:lI114|H280071EE8
+280071EE8:lI111|H280071EF8
+280071EF8:lI116|H280071F08
+280071F08:lI111|H280071F18
+280071F18:lI99|H280071F28
+280071F28:lI111|H280071F38
+280071F38:lI108|H280071F48
+280071F48:lI32|H280071F58
+280071F58:lI118|H280071F68
+280071F68:lI101|H280071F78
+280071F78:lI114|H280071F88
+280071F88:lI115|H280071F98
+280071F98:lI105|H280071FA8
+280071FA8:lI111|H280071FB8
+280071FB8:lI110|H280071FC8
+280071FC8:lI32|H280071FD8
+280071FD8:lI126|H280071FE8
+280071FE8:lI112|H280071FF8
+280071FF8:lI32|H280072008
+280072008:lI78|H280072018
+280072018:lI111|H280072028
+280072028:lI100|H280072038
+280072038:lI101|H280072048
+280072048:lI58|H280072058
+280072058:lI32|H280072068
+280072068:lI126|H280072078
+280072078:lI112|H280072088
+280072088:lI10|N
+280072098:lI84|H2800720A8
+2800720A8:lI104|H2800720B8
+2800720B8:lI101|H2800720C8
+2800720C8:lI32|H2800720D8
+2800720D8:lI103|H2800720E8
+2800720E8:lI108|H2800720F8
+2800720F8:lI111|H280072108
+280072108:lI98|H280072118
+280072118:lI97|H280072128
+280072128:lI108|H280072138
+280072138:lI95|H280072148
+280072148:lI110|H280072158
+280072158:lI97|H280072168
+280072168:lI109|H280072178
+280072178:lI101|H280072188
+280072188:lI95|H280072198
+280072198:lI115|H2800721A8
+2800721A8:lI101|H2800721B8
+2800721B8:lI114|H2800721C8
+2800721C8:lI118|H2800721D8
+2800721D8:lI101|H2800721E8
+2800721E8:lI114|H2800721F8
+2800721F8:lI32|H280072208
+280072208:lI114|H280072218
+280072218:lI101|H280072228
+280072228:lI99|H280072238
+280072238:lI101|H280072248
+280072248:lI105|H280072258
+280072258:lI118|H280072268
+280072268:lI101|H280072278
+280072278:lI100|H280072288
+280072288:lI32|H280072298
+280072298:lI97|H2800722A8
+2800722A8:lI110|H2800722B8
+2800722B8:lI32|H2800722C8
+2800722C8:lI117|H2800722D8
+2800722D8:lI110|H2800722E8
+2800722E8:lI101|H2800722F8
+2800722F8:lI120|H280072308
+280072308:lI112|H280072318
+280072318:lI101|H280072328
+280072328:lI99|H280072338
+280072338:lI116|H280072348
+280072348:lI101|H280072358
+280072358:lI100|H280072368
+280072368:lI32|H280072378
+280072378:lI109|H280072388
+280072388:lI101|H280072398
+280072398:lI115|H2800723A8
+2800723A8:lI115|H2800723B8
+2800723B8:lI97|H2800723C8
+2800723C8:lI103|H2800723D8
+2800723D8:lI101|H2800723E8
+2800723E8:lI58|H2800723F8
+2800723F8:lI10|H280072408
+280072408:lI104|H280072418
+280072418:lI97|H280072428
+280072428:lI110|H280072438
+280072438:lI100|H280072448
+280072448:lI108|H280072458
+280072458:lI101|H280072468
+280072468:lI95|H280072478
+280072478:lI99|H280072488
+280072488:lI97|H280072498
+280072498:lI115|H2800724A8
+2800724A8:lI116|H2800724B8
+2800724B8:lI40|H2800724C8
+2800724C8:lI126|H2800724D8
+2800724D8:lI116|H2800724E8
+2800724E8:lI112|H2800724F8
+2800724F8:lI44|H280072508
+280072508:lI32|H280072518
+280072518:lI95|H280072528
+280072528:lI41|H280072538
+280072538:lI10|N
+280072548:t3:A4:conf,A4:true,A4:true
+280072568:lI100|H280072578
+280072578:lI105|H280072588
+280072588:lI115|H280072598
+280072598:lI99|H2800725A8
+2800725A8:lI111|H2800725B8
+2800725B8:lI110|H2800725C8
+2800725C8:lI110|H2800725D8
+2800725D8:lI101|H2800725E8
+2800725E8:lI99|H2800725F8
+2800725F8:lI116|H280072608
+280072608:lI101|H280072618
+280072618:lI100|H280072628
+280072628:lI32|H280072638
+280072638:lI111|H280072648
+280072648:lI108|H280072658
+280072658:lI100|N
+280072668:lI101|H280072678
+280072678:lI120|H280072688
+280072688:lI99|H280072698
+280072698:lI108|H2800726A8
+2800726A8:lI117|H2800726B8
+2800726B8:lI100|H2800726C8
+2800726C8:lI101|H2800726D8
+2800726D8:lI100|H2800726E8
+2800726E8:lI32|H2800726F8
+2800726F8:lI103|H280072708
+280072708:lI108|H280072718
+280072718:lI111|H280072728
+280072728:lI98|H280072738
+280072738:lI97|H280072748
+280072748:lI108|H280072758
+280072758:lI32|H280072768
+280072768:lI103|H280072778
+280072778:lI114|H280072788
+280072788:lI111|H280072798
+280072798:lI117|H2800727A8
+2800727A8:lI112|H2800727B8
+2800727B8:lI32|H2800727C8
+2800727C8:lI109|H2800727D8
+2800727D8:lI101|H2800727E8
+2800727E8:lI109|H2800727F8
+2800727F8:lI98|H280072808
+280072808:lI101|H280072818
+280072818:lI114|N
+280072828:lI114|H280072838
+280072838:lI101|H280072848
+280072848:lI113|H280072858
+280072858:lI117|H280072868
+280072868:lI101|H280072878
+280072878:lI115|H280072888
+280072888:lI116|H280072898
+280072898:lI101|H2800728A8
+2800728A8:lI100|H2800728B8
+2800728B8:lI32|H2800728C8
+2800728C8:lI100|H2800728D8
+2800728D8:lI105|H2800728E8
+2800728E8:lI115|H2800728F8
+2800728F8:lI99|H280072908
+280072908:lI111|H280072918
+280072918:lI110|H280072928
+280072928:lI110|H280072938
+280072938:lI101|H280072948
+280072948:lI99|H280072958
+280072958:lI116|H280072968
+280072968:lI32|H280072978
+280072978:lI102|H280072988
+280072988:lI114|H280072998
+280072998:lI111|H2800729A8
+2800729A8:lI109|N
+2800729B8:lI39|H2800729C8
+2800729C8:lI103|H2800729D8
+2800729D8:lI108|H2800729E8
+2800729E8:lI111|H2800729F8
+2800729F8:lI98|H280072A08
+280072A08:lI97|H280072A18
+280072A18:lI108|H280072A28
+280072A28:lI39|H280072A38
+280072A38:lI32|H280072A48
+280072A48:lI97|H280072A58
+280072A58:lI116|H280072A68
+280072A68:lI32|H280072A78
+280072A78:lI110|H280072A88
+280072A88:lI111|H280072A98
+280072A98:lI100|H280072AA8
+280072AA8:lI101|H280072AB8
+280072AB8:lI32|H280072AC8
+280072AC8:lI126|H280072AD8
+280072AD8:lI112|H280072AE8
+280072AE8:lI32|H280072AF8
+280072AF8:lI126|H280072B08
+280072B08:lI115|H280072B18
+280072B18:lI32|H280072B28
+280072B28:lI110|H280072B38
+280072B38:lI111|H280072B48
+280072B48:lI100|H280072B58
+280072B58:lI101|H280072B68
+280072B68:lI32|H280072B78
+280072B78:lI126|H280072B88
+280072B88:lI112|H280072B98
+280072B98:lI32|H280072BA8
+280072BA8:lI105|H280072BB8
+280072BB8:lI110|H280072BC8
+280072BC8:lI32|H280072BD8
+280072BD8:lI111|H280072BE8
+280072BE8:lI114|H280072BF8
+280072BF8:lI100|H280072C08
+280072C08:lI101|H280072C18
+280072C18:lI114|H280072C28
+280072C28:lI32|H280072C38
+280072C38:lI116|H280072C48
+280072C48:lI111|H280072C58
+280072C58:lI32|H280072C68
+280072C68:lI112|H280072C78
+280072C78:lI114|H280072C88
+280072C88:lI101|H280072C98
+280072C98:lI118|H280072CA8
+280072CA8:lI101|H280072CB8
+280072CB8:lI110|H280072CC8
+280072CC8:lI116|H280072CD8
+280072CD8:lI32|H280072CE8
+280072CE8:lI111|H280072CF8
+280072CF8:lI118|H280072D08
+280072D08:lI101|H280072D18
+280072D18:lI114|H280072D28
+280072D28:lI108|H280072D38
+280072D38:lI97|H280072D48
+280072D48:lI112|H280072D58
+280072D58:lI112|H280072D68
+280072D68:lI105|H280072D78
+280072D78:lI110|H280072D88
+280072D88:lI103|H280072D98
+280072D98:lI32|H280072DA8
+280072DA8:lI112|H280072DB8
+280072DB8:lI97|H280072DC8
+280072DC8:lI114|H280072DD8
+280072DD8:lI116|H280072DE8
+280072DE8:lI105|H280072DF8
+280072DF8:lI116|H280072E08
+280072E08:lI105|H280072E18
+280072E18:lI111|H280072E28
+280072E28:lI110|H280072E38
+280072E38:lI115|N
+280072E48:t3:A4:conf,A5:false,A5:false
+280072E68:lI100|H280072E78
+280072E78:lI105|H280072E88
+280072E88:lI115|H280072E98
+280072E98:lI99|H280072EA8
+280072EA8:lI111|H280072EB8
+280072EB8:lI110|H280072EC8
+280072EC8:lI110|H280072ED8
+280072ED8:lI101|H280072EE8
+280072EE8:lI99|H280072EF8
+280072EF8:lI116|H280072F08
+280072F08:lI101|H280072F18
+280072F18:lI100|N
+280072F28:lI62|H280072F38
+280072F38:lI62|H280072F48
+280072F48:lI62|H280072F58
+280072F58:lI62|H280072F68
+280072F68:lI32|H280072F78
+280072F78:lI126|H280072F88
+280072F88:lI112|H280072F98
+280072F98:lI10|N
+280072FA8:lI84|H280072FB8
+280072FB8:lI104|H280072FC8
+280072FC8:lI101|H280072FD8
+280072FD8:lI32|H280072FE8
+280072FE8:lI103|H280072FF8
+280072FF8:lI108|H280073008
+280073008:lI111|H280073018
+280073018:lI98|H280073028
+280073028:lI97|H280073038
+280073038:lI108|H280073048
+280073048:lI95|H280073058
+280073058:lI110|H280073068
+280073068:lI97|H280073078
+280073078:lI109|H280073088
+280073088:lI101|H280073098
+280073098:lI95|H2800730A8
+2800730A8:lI115|H2800730B8
+2800730B8:lI101|H2800730C8
+2800730C8:lI114|H2800730D8
+2800730D8:lI118|H2800730E8
+2800730E8:lI101|H2800730F8
+2800730F8:lI114|H280073108
+280073108:lI32|H280073118
+280073118:lI114|H280073128
+280073128:lI101|H280073138
+280073138:lI99|H280073148
+280073148:lI101|H280073158
+280073158:lI105|H280073168
+280073168:lI118|H280073178
+280073178:lI101|H280073188
+280073188:lI100|H280073198
+280073198:lI32|H2800731A8
+2800731A8:lI97|H2800731B8
+2800731B8:lI110|H2800731C8
+2800731C8:lI32|H2800731D8
+2800731D8:lI117|H2800731E8
+2800731E8:lI110|H2800731F8
+2800731F8:lI101|H280073208
+280073208:lI120|H280073218
+280073218:lI112|H280073228
+280073228:lI101|H280073238
+280073238:lI99|H280073248
+280073248:lI116|H280073258
+280073258:lI101|H280073268
+280073268:lI100|H280073278
+280073278:lI32|H280073288
+280073288:lI109|H280073298
+280073298:lI101|H2800732A8
+2800732A8:lI115|H2800732B8
+2800732B8:lI115|H2800732C8
+2800732C8:lI97|H2800732D8
+2800732D8:lI103|H2800732E8
+2800732E8:lI101|H2800732F8
+2800732F8:lI58|H280073308
+280073308:lI10|H280073318
+280073318:lI104|H280073328
+280073328:lI97|H280073338
+280073338:lI110|H280073348
+280073348:lI100|H280073358
+280073358:lI108|H280073368
+280073368:lI101|H280073378
+280073378:lI95|H280073388
+280073388:lI105|H280073398
+280073398:lI110|H2800733A8
+2800733A8:lI102|H2800733B8
+2800733B8:lI111|H2800733C8
+2800733C8:lI40|H2800733D8
+2800733D8:lI126|H2800733E8
+2800733E8:lI116|H2800733F8
+2800733F8:lI112|H280073408
+280073408:lI44|H280073418
+280073418:lI32|H280073428
+280073428:lI95|H280073438
+280073438:lI41|H280073448
+280073448:lI10|N
+280073458:lI39|H280073468
+280073468:lI103|H280073478
+280073478:lI108|H280073488
+280073488:lI111|H280073498
+280073498:lI98|H2800734A8
+2800734A8:lI97|H2800734B8
+2800734B8:lI108|H2800734C8
+2800734C8:lI39|H2800734D8
+2800734D8:lI32|H2800734E8
+2800734E8:lI97|H2800734F8
+2800734F8:lI116|H280073508
+280073508:lI32|H280073518
+280073518:lI110|H280073528
+280073528:lI111|H280073538
+280073538:lI100|H280073548
+280073548:lI101|H280073558
+280073558:lI32|H280073568
+280073568:lI126|H280073578
+280073578:lI112|H280073588
+280073588:lI32|H280073598
+280073598:lI103|H2800735A8
+2800735A8:lI111|H2800735B8
+2800735B8:lI116|H2800735C8
+2800735C8:lI32|H2800735D8
+2800735D8:lI97|H2800735E8
+2800735E8:lI110|H2800735F8
+2800735F8:lI32|H280073608
+280073608:lI111|H280073618
+280073618:lI117|H280073628
+280073628:lI116|H280073638
+280073638:lI32|H280073648
+280073648:lI111|H280073658
+280073658:lI102|H280073668
+280073668:lI32|H280073678
+280073678:lI115|H280073688
+280073688:lI121|H280073698
+280073698:lI110|H2800736A8
+2800736A8:lI99|H2800736B8
+2800736B8:lI32|H2800736C8
+2800736C8:lI99|H2800736D8
+2800736D8:lI111|H2800736E8
+2800736E8:lI110|H2800736F8
+2800736F8:lI110|H280073708
+280073708:lI101|H280073718
+280073718:lI99|H280073728
+280073728:lI116|H280073738
+280073738:lI105|H280073748
+280073748:lI111|H280073758
+280073758:lI110|H280073768
+280073768:lI32|H280073778
+280073778:lI97|H280073788
+280073788:lI116|H280073798
+280073798:lI116|H2800737A8
+2800737A8:lI101|H2800737B8
+2800737B8:lI109|H2800737C8
+2800737C8:lI112|H2800737D8
+2800737D8:lI116|H2800737E8
+2800737E8:lI32|H2800737F8
+2800737F8:lI102|H280073808
+280073808:lI114|H280073818
+280073818:lI111|H280073828
+280073828:lI109|H280073838
+280073838:lI32|H280073848
+280073848:lI111|H280073858
+280073858:lI108|H280073868
+280073868:lI100|H280073878
+280073878:lI32|H280073888
+280073888:lI118|H280073898
+280073898:lI101|H2800738A8
+2800738A8:lI114|H2800738B8
+2800738B8:lI115|H2800738C8
+2800738C8:lI105|H2800738D8
+2800738D8:lI111|H2800738E8
+2800738E8:lI110|H2800738F8
+2800738F8:lI32|H280073908
+280073908:lI126|H280073918
+280073918:lI112|H280073928
+280073928:lI32|H280073938
+280073938:lI110|H280073948
+280073948:lI111|H280073958
+280073958:lI100|H280073968
+280073968:lI101|H280073978
+280073978:lI32|H280073988
+280073988:lI126|H280073998
+280073998:lI112|H2800739A8
+2800739A8:lI46|H2800739B8
+2800739B8:lI32|H2800739C8
+2800739C8:lI68|H2800739D8
+2800739D8:lI105|H2800739E8
+2800739E8:lI115|H2800739F8
+2800739F8:lI99|H280073A08
+280073A08:lI111|H280073A18
+280073A18:lI110|H280073A28
+280073A28:lI110|H280073A38
+280073A38:lI101|H280073A48
+280073A48:lI99|H280073A58
+280073A58:lI116|H280073A68
+280073A68:lI105|H280073A78
+280073A78:lI110|H280073A88
+280073A88:lI103|H280073A98
+280073A98:lI32|H280073AA8
+280073AA8:lI102|H280073AB8
+280073AB8:lI114|H280073AC8
+280073AC8:lI111|H280073AD8
+280073AD8:lI109|H280073AE8
+280073AE8:lI32|H280073AF8
+280073AF8:lI105|H280073B08
+280073B08:lI116|H280073B18
+280073B18:lI46|N
+280073B28:t2:A4:true,N
+280073B40:lA5:flush|N
+280073B50:lA15:allow_passive_connect|N
+280073B60:lI39|H280073B70
+280073B70:lI103|H280073B80
+280073B80:lI108|H280073B90
+280073B90:lI111|H280073BA0
+280073BA0:lI98|H280073BB0
+280073BB0:lI97|H280073BC0
+280073BC0:lI108|H280073BD0
+280073BD0:lI39|H280073BE0
+280073BE0:lI32|H280073BF0
+280073BF0:lI97|H280073C00
+280073C00:lI116|H280073C10
+280073C10:lI32|H280073C20
+280073C20:lI126|H280073C30
+280073C30:lI119|H280073C40
+280073C40:lI32|H280073C50
+280073C50:lI102|H280073C60
+280073C60:lI97|H280073C70
+280073C70:lI105|H280073C80
+280073C80:lI108|H280073C90
+280073C90:lI101|H280073CA0
+280073CA0:lI100|H280073CB0
+280073CB0:lI32|H280073CC0
+280073CC0:lI116|H280073CD0
+280073CD0:lI111|H280073CE0
+280073CE0:lI32|H280073CF0
+280073CF0:lI99|H280073D00
+280073D00:lI111|H280073D10
+280073D10:lI110|H280073D20
+280073D20:lI110|H280073D30
+280073D30:lI101|H280073D40
+280073D40:lI99|H280073D50
+280073D50:lI116|H280073D60
+280073D60:lI32|H280073D70
+280073D70:lI116|H280073D80
+280073D80:lI111|H280073D90
+280073D90:lI32|H280073DA0
+280073DA0:lI126|H280073DB0
+280073DB0:lI119|H280073DC0
+280073DC0:lI10|N
+280073DD0:lA9:noconnect|N
+280073DE0:lI103|H280073DF0
+280073DF0:lI108|H280073E00
+280073E00:lI111|H280073E10
+280073E10:lI98|H280073E20
+280073E20:lI97|H280073E30
+280073E30:lI108|H280073E40
+280073E40:lI58|H280073E50
+280073E50:lI32|H280073E60
+280073E60:lI98|H280073E70
+280073E70:lI97|H280073E80
+280073E80:lI100|H280073E90
+280073E90:lI114|H280073EA0
+280073EA0:lI112|H280073EB0
+280073EB0:lI99|H280073EC0
+280073EC0:lI32|H280073ED0
+280073ED0:lI126|H280073EE0
+280073EE0:lI119|H280073EF0
+280073EF0:lI32|H280073F00
+280073F00:lI114|H280073F10
+280073F10:lI101|H280073F20
+280073F20:lI99|H280073F30
+280073F30:lI101|H280073F40
+280073F40:lI105|H280073F50
+280073F50:lI118|H280073F60
+280073F60:lI101|H280073F70
+280073F70:lI100|H280073F80
+280073F80:lI32|H280073F90
+280073F90:lI119|H280073FA0
+280073FA0:lI104|H280073FB0
+280073FB0:lI101|H280073FC0
+280073FC0:lI110|H280073FD0
+280073FD0:lI32|H280073FE0
+280073FE0:lI99|H280073FF0
+280073FF0:lI111|H280074000
+280074000:lI110|H280074010
+280074010:lI102|H280074020
+280074020:lI108|H280074030
+280074030:lI105|H280074040
+280074040:lI99|H280074050
+280074050:lI116|H280074060
+280074060:lI105|H280074070
+280074070:lI110|H280074080
+280074080:lI103|H280074090
+280074090:lI32|H2800740A0
+2800740A0:lI110|H2800740B0
+2800740B0:lI97|H2800740C0
+2800740C0:lI109|H2800740D0
+2800740D0:lI101|H2800740E0
+2800740E0:lI32|H2800740F0
+2800740F0:lI126|H280074100
+280074100:lI116|H280074110
+280074110:lI119|H280074120
+280074120:lI32|H280074130
+280074130:lI119|H280074140
+280074140:lI97|H280074150
+280074150:lI115|H280074160
+280074160:lI32|H280074170
+280074170:lI102|H280074180
+280074180:lI111|H280074190
+280074190:lI117|H2800741A0
+2800741A0:lI110|H2800741B0
+2800741B0:lI100|H2800741C0
+2800741C0:lI10|N
+2800741D0:lI103|H2800741E0
+2800741E0:lI108|H2800741F0
+2800741F0:lI111|H280074200
+280074200:lI98|H280074210
+280074210:lI97|H280074220
+280074220:lI108|H280074230
+280074230:lI58|H280074240
+280074240:lI32|H280074250
+280074250:lI82|H280074260
+280074260:lI101|H280074270
+280074270:lI115|H280074280
+280074280:lI111|H280074290
+280074290:lI108|H2800742A0
+2800742A0:lI118|H2800742B0
+2800742B0:lI101|H2800742C0
+2800742C0:lI32|H2800742D0
+2800742D0:lI109|H2800742E0
+2800742E0:lI101|H2800742F0
+2800742F0:lI116|H280074300
+280074300:lI104|H280074310
+280074310:lI111|H280074320
+280074320:lI100|H280074330
+280074330:lI32|H280074340
+280074340:lI126|H280074350
+280074350:lI119|H280074360
+280074360:lI32|H280074370
+280074370:lI102|H280074380
+280074380:lI111|H280074390
+280074390:lI114|H2800743A0
+2800743A0:lI32|H2800743B0
+2800743B0:lI99|H2800743C0
+2800743C0:lI111|H2800743D0
+2800743D0:lI110|H2800743E0
+2800743E0:lI102|H2800743F0
+2800743F0:lI108|H280074400
+280074400:lI105|H280074410
+280074410:lI99|H280074420
+280074420:lI116|H280074430
+280074430:lI105|H280074440
+280074440:lI110|H280074450
+280074450:lI103|H280074460
+280074460:lI32|H280074470
+280074470:lI110|H280074480
+280074480:lI97|H280074490
+280074490:lI109|H2800744A0
+2800744A0:lI101|H2800744B0
+2800744B0:lI32|H2800744C0
+2800744C0:lI126|H2800744D0
+2800744D0:lI116|H2800744E0
+2800744E0:lI119|H2800744F0
+2800744F0:lI32|H280074500
+280074500:lI114|H280074510
+280074510:lI101|H280074520
+280074520:lI116|H280074530
+280074530:lI117|H280074540
+280074540:lI114|H280074550
+280074550:lI110|H280074560
+280074560:lI101|H280074570
+280074570:lI100|H280074580
+280074580:lI32|H280074590
+280074590:lI126|H2800745A0
+2800745A0:lI116|H2800745B0
+2800745B0:lI119|H2800745C0
+2800745C0:lI10|N
+2800745D0:lI103|H2800745E0
+2800745E0:lI108|H2800745F0
+2800745F0:lI111|H280074600
+280074600:lI98|H280074610
+280074610:lI97|H280074620
+280074620:lI108|H280074630
+280074630:lI58|H280074640
+280074640:lI32|H280074650
+280074650:lI78|H280074660
+280074660:lI97|H280074670
+280074670:lI109|H280074680
+280074680:lI101|H280074690
+280074690:lI32|H2800746A0
+2800746A0:lI99|H2800746B0
+2800746B0:lI111|H2800746C0
+2800746C0:lI110|H2800746D0
+2800746D0:lI102|H2800746E0
+2800746E0:lI108|H2800746F0
+2800746F0:lI105|H280074700
+280074700:lI99|H280074710
+280074710:lI116|H280074720
+280074720:lI32|H280074730
+280074730:lI116|H280074740
+280074740:lI101|H280074750
+280074750:lI114|H280074760
+280074760:lI109|H280074770
+280074770:lI105|H280074780
+280074780:lI110|H280074790
+280074790:lI97|H2800747A0
+2800747A0:lI116|H2800747B0
+2800747B0:lI105|H2800747C0
+2800747C0:lI110|H2800747D0
+2800747D0:lI103|H2800747E0
+2800747E0:lI32|H2800747F0
+2800747F0:lI126|H280074800
+280074800:lI116|H280074810
+280074810:lI119|H280074820
+280074820:lI10|N
+280074830:lA9:monotonic|N
+280074840:t3:A9:undefined,A9:undefined,A9:undefined
+280074860:lH280074880|H280074870
+280074870:lH280074898|N
+280074880:t2:A5:async,A4:true
+280074898:t2:A4:info,A5:false
+2800748B0:lH2800748C0|N
+2800748C0:t3:H2800748E0,N,H280074908
+2800748E0:t4:A2:$1,A2:$2,A2:$3,A2:$4
+280074908:lH280074918|N
+280074918:t1:H280074928
+280074928:t3:A2:$1,A2:$2,A2:$3
+280074948:lI84|H280074958
+280074958:lI114|H280074968
+280074968:lI121|H280074978
+280074978:lI105|H280074988
+280074988:lI110|H280074998
+280074998:lI103|H2800749A8
+2800749A8:lI32|H2800749B8
+2800749B8:lI116|H2800749C8
+2800749C8:lI111|H2800749D8
+2800749D8:lI32|H2800749E8
+2800749E8:lI115|H2800749F8
+2800749F8:lI121|H280074A08
+280074A08:lI110|H280074A18
+280074A18:lI99|H280074A28
+280074A28:lI32|H280074A38
+280074A38:lI110|H280074A48
+280074A48:lI111|H280074A58
+280074A58:lI100|H280074A68
+280074A68:lI101|H280074A78
+280074A78:lI115|H280074A88
+280074A88:lI32|H280074A98
+280074A98:lI110|H280074AA8
+280074AA8:lI111|H280074AB8
+280074AB8:lI116|H280074AC8
+280074AC8:lI32|H280074AD8
+280074AD8:lI100|H280074AE8
+280074AE8:lI101|H280074AF8
+280074AF8:lI102|H280074B08
+280074B08:lI105|H280074B18
+280074B18:lI110|H280074B28
+280074B28:lI101|H280074B38
+280074B38:lI100|H280074B48
+280074B48:lI32|H280074B58
+280074B58:lI105|H280074B68
+280074B68:lI110|H280074B78
+280074B78:lI32|H280074B88
+280074B88:lI116|H280074B98
+280074B98:lI104|H280074BA8
+280074BA8:lI101|H280074BB8
+280074BB8:lI32|H280074BC8
+280074BC8:lI111|H280074BD8
+280074BD8:lI119|H280074BE8
+280074BE8:lI110|H280074BF8
+280074BF8:lI32|H280074C08
+280074C08:lI103|H280074C18
+280074C18:lI108|H280074C28
+280074C28:lI111|H280074C38
+280074C38:lI98|H280074C48
+280074C48:lI97|H280074C58
+280074C58:lI108|H280074C68
+280074C68:lI32|H280074C78
+280074C78:lI103|H280074C88
+280074C88:lI114|H280074C98
+280074C98:lI111|H280074CA8
+280074CA8:lI117|H280074CB8
+280074CB8:lI112|N
+280074CC8:lI103|H280074CD8
+280074CD8:lI108|H280074CE8
+280074CE8:lI111|H280074CF8
+280074CF8:lI98|H280074D08
+280074D08:lI97|H280074D18
+280074D18:lI108|H280074D28
+280074D28:lI95|H280074D38
+280074D38:lI103|H280074D48
+280074D48:lI114|H280074D58
+280074D58:lI111|H280074D68
+280074D68:lI117|H280074D78
+280074D78:lI112|H280074D88
+280074D88:lI115|H280074D98
+280074D98:lI32|H280074DA8
+280074DA8:lI100|H280074DB8
+280074DB8:lI101|H280074DC8
+280074DC8:lI102|H280074DD8
+280074DD8:lI105|H280074DE8
+280074DE8:lI110|H280074DF8
+280074DF8:lI105|H280074E08
+280074E08:lI116|H280074E18
+280074E18:lI105|H280074E28
+280074E28:lI111|H280074E38
+280074E38:lI110|H280074E48
+280074E48:lI32|H280074E58
+280074E58:lI101|H280074E68
+280074E68:lI114|H280074E78
+280074E78:lI114|H280074E88
+280074E88:lI111|H280074E98
+280074E98:lI114|N
+280074EA8:lI84|H280074EB8
+280074EB8:lI104|H280074EC8
+280074EC8:lI101|H280074ED8
+280074ED8:lI32|H280074EE8
+280074EE8:lI103|H280074EF8
+280074EF8:lI108|H280074F08
+280074F08:lI111|H280074F18
+280074F18:lI98|H280074F28
+280074F28:lI97|H280074F38
+280074F38:lI108|H280074F48
+280074F48:lI95|H280074F58
+280074F58:lI110|H280074F68
+280074F68:lI97|H280074F78
+280074F78:lI109|H280074F88
+280074F88:lI101|H280074F98
+280074F98:lI95|H280074FA8
+280074FA8:lI115|H280074FB8
+280074FB8:lI101|H280074FC8
+280074FC8:lI114|H280074FD8
+280074FD8:lI118|H280074FE8
+280074FE8:lI101|H280074FF8
+280074FF8:lI114|H280075008
+280075008:lI32|H280075018
+280075018:lI126|H280075028
+280075028:lI119|H280075038
+280075038:lI32|H280075048
+280075048:lI112|H280075058
+280075058:lI114|H280075068
+280075068:lI111|H280075078
+280075078:lI99|H280075088
+280075088:lI101|H280075098
+280075098:lI115|H2800750A8
+2800750A8:lI115|H2800750B8
+2800750B8:lI32|H2800750C8
+2800750C8:lI114|H2800750D8
+2800750D8:lI101|H2800750E8
+2800750E8:lI99|H2800750F8
+2800750F8:lI101|H280075108
+280075108:lI105|H280075118
+280075118:lI118|H280075128
+280075128:lI101|H280075138
+280075138:lI100|H280075148
+280075148:lI32|H280075158
+280075158:lI97|H280075168
+280075168:lI110|H280075178
+280075178:lI32|H280075188
+280075188:lI117|H280075198
+280075198:lI110|H2800751A8
+2800751A8:lI101|H2800751B8
+2800751B8:lI120|H2800751C8
+2800751C8:lI112|H2800751D8
+2800751D8:lI101|H2800751E8
+2800751E8:lI99|H2800751F8
+2800751F8:lI116|H280075208
+280075208:lI101|H280075218
+280075218:lI100|H280075228
+280075228:lI32|H280075238
+280075238:lI109|H280075248
+280075248:lI101|H280075258
+280075258:lI115|H280075268
+280075268:lI115|H280075278
+280075278:lI97|H280075288
+280075288:lI103|H280075298
+280075298:lI101|H2800752A8
+2800752A8:lI58|H2800752B8
+2800752B8:lI10|H2800752C8
+2800752C8:lI126|H2800752D8
+2800752D8:lI116|H2800752E8
+2800752E8:lI112|H2800752F8
+2800752F8:lI10|N
+280075308:lI108|N
+280075318:lI114|H280075308
+280075328:lI101|H280075318
+280075338:lI46|H280075328
+280075348:lI108|H280075338
+280075358:lI97|H280075348
+280075368:lI98|H280075358
+280075378:lI111|H280075368
+280075388:lI108|H280075378
+280075398:lI103|H280075388
+2800753A8:E4A:g3AAAABIA79fDarOZVmFQtYEsqv4Sd0AAAAAAAAAAHcGZ2xvYmFsYQBiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800753D0:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAFAAAAAHcGZ2xvYmFsYQViBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800753F8:B1152921504606846975
+280075408:E4A:g3AAAABIA79fDarOZVmFQtYEsqv4Sd0AAAAGAAAAAHcGZ2xvYmFsYQZiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075430:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAHAAAAAHcGZ2xvYmFsYQdiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075458:E4A:g3AAAABIA79fDarOZVmFQtYEsqv4Sd0AAAALAAAAAHcGZ2xvYmFsYQtiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075480:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAANAAAAAHcGZ2xvYmFsYQ1iBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800754A8:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAATAAAAAHcGZ2xvYmFsYRNiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800754D0:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAXAAAAAHcGZ2xvYmFsYRdiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800754F8:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAZAAAAAHcGZ2xvYmFsYRliBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075520:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAbAAAAAHcGZ2xvYmFsYRtiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075548:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAcAAAAAHcGZ2xvYmFsYRxiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075570:E4A:g3AAAABIAr9fDarOZVmFQtYEsqv4Sd0AAAAdAAAAAHcGZ2xvYmFsYR1iBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280075598:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAgAAAAAHcGZ2xvYmFsYSBiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800755C0:E4A:g3AAAABIAb9fDarOZVmFQtYEsqv4Sd0AAAAhAAAAAHcGZ2xvYmFsYSFiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800755E8:E4A:g3AAAABIAL9fDarOZVmFQtYEsqv4Sd0AAAAiAAAAAHcGZ2xvYmFsYSJiBfr4bVh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280078CF0:F1A:1.11022302462515654042e-16
+280078D00:F1A:5.55111512312578270212e-17
+280078D10:F1A:2.77555756156289135106e-17
+280078D20:F1A:1.38777878078144567553e-17
+280078D30:F1A:2.00000000000000000000e+00
+280078D40:Yh0:
+280078D50:t100:H280079558,H280079580,H2800795A8,H2800795D0,H2800795F8,H280079620,H280079648,H280079670,H280079698,H2800796C0,H2800796E8,H280079710,H280079738,H280079760,H280079788,H2800797B0,H2800797D8,H280079800,H280079828,H280079850,H280079878,H2800798A0,H2800798C8,H2800798F0,H280079918,H280079940,H280079968,H280079990,H2800799B8,H2800799E0,H280079A08,H280079A30,H280079A58,H280079A80,H280079AA8,H280079AD0,H280079AF8,H280079B20,H280079B48,H280079B70,H280079B98,H280079BC0,H280079BE8,H280079C10,H280079C38,H280079C60,H280079C88,H280079CB0,H280079CD8,H280079D00,H280079D28,H280079D50,H280079D78,H280079DA0,H280079DC8,H280079DF0,H280079E18,H280079E40,H280079E68,H280079E90,H280079EB8,H280079EE0,H280079F08,H280079F30,H280079F58,H280079F80,H280079FA8,H280079FD0,H280079FF8,H28007A020,H28007A048,H28007A070,H28007A098,H28007A0C0,H28007A0E8,H28007A110,H28007A138,H28007A160,H28007A188,H28007A1B0,H28007A1D8,H28007A200,H28007A228,H28007A250,H28007A278,H28007A2A0,H28007A2C8,H28007A2F0,H28007A318,H28007A340,H28007A368,H28007A390,H28007A3B8,H28007A3E0,H28007A408,H28007A430,H28007A458,H28007A480,H28007A4A8,H28007A4D0,H28007A4F8,H28007A520,H28007A548,H28007A570,H28007A598,H28007A5C0,H28007A5E8,H28007A610,H28007A638,H28007A660,H28007A688,H28007A6B0,H28007A6D8,H28007A700,H28007A728,H28007A750,H28007A778,H28007A7A0,H28007A7C8,H28007A7F0,H28007A818,H28007A840,H28007A868,H28007A890,H28007A8B8,H28007A8E0,H28007A908,H28007A930,H28007A958,H28007A980,H28007A9A8,H28007A9D0,H28007A9F8,H28007AA20,H28007AA48,H28007AA70,H28007AA98,H28007AAC0,H28007AAE8,H28007AB10,H28007AB38,H28007AB60,H28007AB88,H28007ABB0,H28007ABD8,H28007AC00,H28007AC28,H28007AC50,H28007AC78,H28007ACA0,H28007ACC8,H28007ACF0,H28007AD18,H28007AD40,H28007AD68,H28007AD90,H28007ADB8,H28007ADE0,H28007AE08,H28007AE30,H28007AE58,H28007AE80,H28007AEA8,H28007AED0,H28007AEF8,H28007AF20,H28007AF48,H28007AF70,H28007AF98,H28007AFC0,H28007AFE8,H28007B010,H28007B038,H28007B060,H28007B088,H28007B0B0,H28007B0D8,H28007B100,H28007B128,H28007B150,H28007B178,H28007B1A0,H28007B1C8,H28007B1F0,H28007B218,H28007B240,H28007B268,H28007B290,H28007B2B8,H28007B2E0,H28007B308,H28007B330,H28007B358,H28007B380,H28007B3A8,H28007B3D0,H28007B3F8,H28007B420,H28007B448,H28007B470,H28007B498,H28007B4C0,H28007B4E8,H28007B510,H28007B538,H28007B560,H28007B588,H28007B5B0,H28007B5D8,H28007B600,H28007B628,H28007B650,H28007B678,H28007B6A0,H28007B6C8,H28007B6F0,H28007B718,H28007B740,H28007B768,H28007B790,H28007B7B8,H28007B7E0,H28007B808,H28007B830,H28007B858,H28007B880,H28007B8A8,H28007B8D0,H28007B8F8,H28007B920,H28007B948,H28007B970,H28007B998,H28007B9C0,H28007B9E8,H28007BA10,H28007BA38,H28007BA60,H28007BA88,H28007BAB0,H28007BAD8,H28007BB00,H28007BB28,H28007BB50,H28007BB78,H28007BBA0,H28007BBC8,H28007BBF0,H28007BC18,H28007BC40,H28007BC68,H28007BC90,H28007BCB8,H28007BCE0,H28007BD08,H28007BD30
+280079558:t2:I2104047571236786,H280079570
+280079570:F1A:1.73672541216026300829e-15
+280079580:t2:I0,H280079598
+280079598:F1A:9.55866035145563388593e-17
+2800795A8:t2:I1693657211986787,H2800795C0
+2800795C0:F1A:1.27087048348106232125e-16
+2800795D0:t2:I1919380038271141,H2800795E8
+2800795E8:F1A:1.49097409624954739056e-16
+2800795F8:t2:I2015384402196343,H280079610
+280079610:F1A:1.66587336315862684825e-16
+280079620:t2:I2068365869448128,H280079638
+280079638:F1A:1.81361208101190286598e-16
+280079648:t2:I2101878624052573,H280079660
+280079660:F1A:1.94297201531355877741e-16
+280079670:t2:I2124958784102998,H280079688
+280079688:F1A:2.05895006284820926559e-16
+280079698:t2:I2141808670795147,H2800796B0
+2800796B0:F1A:2.16468605768954222017e-16
+2800796C0:t2:I2154644611568301,H2800796D8
+2800796D8:F1A:2.26229403922181158232e-16
+2800796E8:t2:I2164744887587275,H280079700
+280079700:F1A:2.35327189140458915861e-16
+280079710:t2:I2172897953696594,H280079728
+280079728:F1A:2.43872345574287710295e-16
+280079738:t2:I2179616279372365,H280079750
+280079750:F1A:2.51948798292742250158e-16
+280079760:t2:I2185247251868649,H280079778
+280079778:F1A:2.59621997725281025263e-16
+280079788:t2:I2190034623107822,H2800797A0
+2800797A0:F1A:2.66944074736482849525e-16
+2800797B0:t2:I2194154434521197,H2800797C8
+2800797C8:F1A:2.73957296851424460024e-16
+2800797D8:t2:I2197736978774660,H2800797F0
+2800797F0:F1A:2.80696460024848035749e-16
+280079800:t2:I2200880740891961,H280079818
+280079818:F1A:2.87190589041139304275e-16
+280079828:t2:I2203661538010620,H280079840
+280079840:F1A:2.93464174847288832596e-16
+280079850:t2:I2206138681109102,H280079868
+280079868:F1A:2.99538093367821129281e-16
+280079878:t2:I2208359231806599,H280079890
+280079890:F1A:3.05430300071924403235e-16
+2800798A0:t2:I2210361007258210,H2800798B8
+2800798B8:F1A:3.11156363389215722701e-16
+2800798C8:t2:I2212174742388539,H2800798E0
+2800798E0:F1A:3.16729880185818151712e-16
+2800798F0:t2:I2213825672704646,H280079908
+280079908:F1A:3.22162803505499051688e-16
+280079918:t2:I2215334711002614,H280079930
+280079930:F1A:3.27465704079397507757e-16
+280079940:t2:I2216719334487595,H280079958
+280079958:F1A:3.32647981168417099987e-16
+280079968:t2:I2217994262139172,H280079980
+280079980:F1A:3.37718034173532322460e-16
+280079990:t2:I2219171977965032,H2800799A8
+2800799A8:F1A:3.42683403531193559494e-16
+2800799B8:t2:I2220263139538712,H2800799D0
+2800799D0:F1A:3.47550887317297581051e-16
+2800799E0:t2:I2221276900117330,H2800799F8
+2800799F8:F1A:3.52326638460020314094e-16
+280079A08:t2:I2222221164932930,H280079A20
+280079A20:F1A:3.57016246339534940285e-16
+280079A30:t2:I2223102796829069,H280079A48
+280079A48:F1A:3.61624805715983390475e-16
+280079A58:t2:I2223927782546658,H280079A70
+280079A70:F1A:3.66156975296535397983e-16
+280079A80:t2:I2224701368170060,H280079A98
+280079A98:F1A:3.70617027772360773203e-16
+280079AA8:t2:I2225428170204312,H280079AC0
+280079AC0:F1A:3.75008892787477978824e-16
+280079AD0:t2:I2226112267248242,H280079AE8
+280079AE8:F1A:3.79336194015495537551e-16
+280079AF8:t2:I2226757276105256,H280079B10
+280079B10:F1A:3.83602281296772790489e-16
+280079B20:t2:I2227366415328399,H280079B38
+280079B38:F1A:3.87810258612502468569e-16
+280079B48:t2:I2227942558554684,H280079B60
+280079B60:F1A:3.91963008532576783898e-16
+280079B70:t2:I2228488279492521,H280079B88
+280079B88:F1A:3.96063213662563775295e-16
+280079B98:t2:I2229005890047222,H280079BB0
+280079BB0:F1A:4.00113375525466896220e-16
+280079BC0:t2:I2229497472775193,H280079BD8
+280079BD8:F1A:4.04115831241433324136e-16
+280079BE8:t2:I2229964908627060,H280079C00
+280079C00:F1A:4.08072768309604483145e-16
+280079C10:t2:I2230409900758597,H280079C28
+280079C28:F1A:4.11986237748074422111e-16
+280079C38:t2:I2230833995044585,H280079C50
+280079C50:F1A:4.15858165808280641140e-16
+280079C60:t2:I2231238597816133,H280079C78
+280079C78:F1A:4.19690364447407329203e-16
+280079C88:t2:I2231624991250191,H280079CA0
+280079CA0:F1A:4.23484540715207084057e-16
+280079CB0:t2:I2231994346765928,H280079CC8
+280079CC8:F1A:4.27242305188997608562e-16
+280079CD8:t2:I2232347736722750,H280079CF0
+280079CF0:F1A:4.30965179571629408372e-16
+280079D00:t2:I2232686144665934,H280079D18
+280079D18:F1A:4.34654603551287596498e-16
+280079D28:t2:I2233010474325959,H280079D40
+280079D40:F1A:4.38311941008545712860e-16
+280079D50:t2:I2233321557544881,H280079D68
+280079D68:F1A:4.41938485644706647812e-16
+280079D78:t2:I2233620161276071,H280079D90
+280079D90:F1A:4.45535466095791365718e-16
+280079DA0:t2:I2233906993781271,H280079DB8
+280079DB8:F1A:4.49104050588287499193e-16
+280079DC8:t2:I2234182710130335,H280079DE0
+280079DE0:F1A:4.52645351185713967562e-16
+280079DF0:t2:I2234447917093496,H280079E08
+280079E08:F1A:4.56160427669003807995e-16
+280079E18:t2:I2234703177503020,H280079E30
+280079E30:F1A:4.59650291088494072552e-16
+280079E40:t2:I2234949014150181,H280079E58
+280079E58:F1A:4.63115907020816468447e-16
+280079E68:t2:I2235185913274316,H280079E80
+280079E80:F1A:4.66558198560087516686e-16
+280079E90:t2:I2235414327692884,H280079EA8
+280079EA8:F1A:4.69978049069419496306e-16
+280079EB8:t2:I2235634679614920,H280079ED0
+280079ED0:F1A:4.73376304715832370759e-16
+280079EE0:t2:I2235847363174595,H280079EF8
+280079EF8:F1A:4.76753776809085264392e-16
+280079F08:t2:I2236052746716837,H280079F20
+280079F20:F1A:4.80111243962701550521e-16
+280079F30:t2:I2236251174862869,H280079F48
+280079F48:F1A:4.83449454093500800172e-16
+280079F58:t2:I2236442970379967,H280079F70
+280079F70:F1A:4.86769126274220868624e-16
+280079F80:t2:I2236628435876762,H280079F98
+280079F98:F1A:4.90070952452299375578e-16
+280079FA8:t2:I2236807855342765,H280079FC0
+280079FC0:F1A:4.93355599046541390746e-16
+280079FD0:t2:I2236981495548562,H280079FE8
+280079FE8:F1A:4.96623708432217831361e-16
+280079FF8:t2:I2237149607321147,H28007A010
+28007A010:F1A:4.99875900324090879179e-16
+28007A020:t2:I2237312426707209,H28007A038
+28007A038:F1A:5.03112773065931868701e-16
+28007A048:t2:I2237470176035652,H28007A060
+28007A060:F1A:5.06334904834271949789e-16
+28007A070:t2:I2237623064889403,H28007A088
+28007A088:F1A:5.09542854763389229036e-16
+28007A098:t2:I2237771290995388,H28007A0B0
+28007A0B0:F1A:5.12737163997879663320e-16
+28007A0C0:t2:I2237915041040597,H28007A0D8
+28007A0D8:F1A:5.15918356678573644216e-16
+28007A0E8:t2:I2238054491421305,H28007A100
+28007A100:F1A:5.19086940867034337507e-16
+28007A110:t2:I2238189808931712,H28007A128
+28007A128:F1A:5.22243409413404174016e-16
+28007A138:t2:I2238321151397660,H28007A150
+28007A150:F1A:5.25388240771945425068e-16
+28007A160:t2:I2238448668260432,H28007A178
+28007A178:F1A:5.28521899768238198395e-16
+28007A188:t2:I2238572501115169,H28007A1A0
+28007A1A0:F1A:5.31644838321661755014e-16
+28007A1B0:t2:I2238692784207942,H28007A1C8
+28007A1C8:F1A:5.34757496126472954545e-16
+28007A1D8:t2:I2238809644895133,H28007A1F0
+28007A1F0:F1A:5.37860301294523479377e-16
+28007A200:t2:I2238923204068402,H28007A218
+28007A218:F1A:5.40953670962399333412e-16
+28007A228:t2:I2239033576548190,H28007A240
+28007A240:F1A:5.44038011865546709133e-16
+28007A250:t2:I2239140871448443,H28007A268
+28007A268:F1A:5.47113720881736113194e-16
+28007A278:t2:I2239245192514958,H28007A290
+28007A290:F1A:5.50181185546033624966e-16
+28007A2A0:t2:I2239346638439541,H28007A2B8
+28007A2B8:F1A:5.53240784539278360189e-16
+28007A2C8:t2:I2239445303151952,H28007A2E0
+28007A2E0:F1A:5.56292888151909017422e-16
+28007A2F0:t2:I2239541276091442,H28007A308
+28007A308:F1A:5.59337858724846207834e-16
+28007A318:t2:I2239634642459498,H28007A330
+28007A330:F1A:5.62376051069004345873e-16
+28007A340:t2:I2239725483455293,H28007A358
+28007A358:F1A:5.65407812864896043333e-16
+28007A368:t2:I2239813876495186,H28007A380
+28007A380:F1A:5.68433485043681410254e-16
+28007A390:t2:I2239899895417494,H28007A3A8
+28007A3A8:F1A:5.71453402150920397185e-16
+28007A3B8:t2:I2239983610673676,H28007A3D0
+28007A3D0:F1A:5.74467892694196087369e-16
+28007A3E0:t2:I2240065089506935,H28007A3F8
+28007A3F8:F1A:5.77477279475696482238e-16
+28007A408:t2:I2240144396119183,H28007A420
+28007A420:F1A:5.80481879910768565067e-16
+28007A430:t2:I2240221591827230,H28007A448
+28007A448:F1A:5.83482006333389205125e-16
+28007A458:t2:I2240296735208969,H28007A470
+28007A470:F1A:5.86477966289436525146e-16
+28007A480:t2:I2240369882240293,H28007A498
+28007A498:F1A:5.89470062818587176437e-16
+28007A4A8:t2:I2240441086423386,H28007A4C0
+28007A4C0:F1A:5.92458594725613394191e-16
+28007A4D0:t2:I2240510398907004,H28007A4E8
+28007A4E8:F1A:5.95443856841805979446e-16
+28007A4F8:t2:I2240577868599305,H28007A510
+28007A510:F1A:5.98426140277202811378e-16
+28007A520:t2:I2240643542273726,H28007A538
+28007A538:F1A:6.01405732664266403201e-16
+28007A548:t2:I2240707464668391,H28007A560
+28007A560:F1A:6.04382918393612501158e-16
+28007A570:t2:I2240769678579486,H28007A588
+28007A588:F1A:6.07357978842360566070e-16
+28007A598:t2:I2240830224948980,H28007A5B0
+28007A5B0:F1A:6.10331192595643943370e-16
+28007A5C0:t2:I2240889142947082,H28007A5D8
+28007A5D8:F1A:6.13302835661791100703e-16
+28007A5E8:t2:I2240946470049769,H28007A600
+28007A600:F1A:6.16273181681659631279e-16
+28007A610:t2:I2241002242111691,H28007A628
+28007A628:F1A:6.19242502132584703827e-16
+28007A638:t2:I2241056493434746,H28007A650
+28007A650:F1A:6.22211066527378790876e-16
+28007A660:t2:I2241109256832602,H28007A678
+28007A678:F1A:6.25179142608799982782e-16
+28007A688:t2:I2241160563691400,H28007A6A0
+28007A6A0:F1A:6.28146996539889530228e-16
+28007A6B0:t2:I2241210444026879,H28007A6C8
+28007A6C8:F1A:6.31114893090560423885e-16
+28007A6D8:t2:I2241258926538122,H28007A6F0
+28007A6F0:F1A:6.34083095820806000914e-16
+28007A700:t2:I2241306038658137,H28007A718
+28007A718:F1A:6.37051867260881494958e-16
+28007A728:t2:I2241351806601435,H28007A740
+28007A740:F1A:6.40021469088802472988e-16
+28007A750:t2:I2241396255408788,H28007A768
+28007A768:F1A:6.42992162305489607018e-16
+28007A778:t2:I2241439408989313,H28007A790
+28007A790:F1A:6.45964207407883213683e-16
+28007A7A0:t2:I2241481290160038,H28007A7B8
+28007A7B8:F1A:6.48937864560339654762e-16
+28007A7C8:t2:I2241521920683062,H28007A7E0
+28007A7E0:F1A:6.51913393764615873896e-16
+28007A7F0:t2:I2241561321300462,H28007A808
+28007A808:F1A:6.54891055028741540820e-16
+28007A818:t2:I2241599511767028,H28007A830
+28007A830:F1A:6.57871108535074132917e-16
+28007A840:t2:I2241636510880960,H28007A858
+28007A858:F1A:6.60853814807825874393e-16
+28007A868:t2:I2241672336512612,H28007A880
+28007A880:F1A:6.63839434880350565911e-16
+28007A890:t2:I2241707005631362,H28007A8A8
+28007A8A8:F1A:6.66828230462474590443e-16
+28007A8B8:t2:I2241740534330713,H28007A8D0
+28007A8D0:F1A:6.69820464108155789432e-16
+28007A8E0:t2:I2241772937851689,H28007A8F8
+28007A8F8:F1A:6.72816399383753114503e-16
+28007A908:t2:I2241804230604585,H28007A920
+28007A920:F1A:6.75816301037190058595e-16
+28007A930:t2:I2241834426189161,H28007A948
+28007A948:F1A:6.78820435168298025779e-16
+28007A958:t2:I2241863537413311,H28007A970
+28007A970:F1A:6.81829069400625404640e-16
+28007A980:t2:I2241891576310281,H28007A998
+28007A998:F1A:6.84842473055003829332e-16
+28007A9A8:t2:I2241918554154466,H28007A9C0
+28007A9C0:F1A:6.87860917325166366447e-16
+28007A9D0:t2:I2241944481475843,H28007A9E8
+28007A9E8:F1A:6.90884675455716901816e-16
+28007A9F8:t2:I2241969368073071,H28007AA10
+28007AA10:F1A:6.93914022922756903880e-16
+28007AA20:t2:I2241993223025298,H28007AA38
+28007AA38:F1A:6.96949237617482938615e-16
+28007AA48:t2:I2242016054702685,H28007AA60
+28007AA60:F1A:6.99990600033076396841e-16
+28007AA70:t2:I2242037870775710,H28007AA88
+28007AA88:F1A:7.03038393455215079165e-16
+28007AA98:t2:I2242058678223225,H28007AAB0
+28007AAB0:F1A:7.06092904156548215323e-16
+28007AAC0:t2:I2242078483339331,H28007AAD8
+28007AAD8:F1A:7.09154421595487341536e-16
+28007AAE8:t2:I2242097291739040,H28007AB00
+28007AB00:F1A:7.12223238619677884046e-16
+28007AB10:t2:I2242115108362774,H28007AB28
+28007AB28:F1A:7.15299651674530299286e-16
+28007AB38:t2:I2242131937479672,H28007AB50
+28007AB50:F1A:7.18383961017206285811e-16
+28007AB60:t2:I2242147782689725,H28007AB78
+28007AB78:F1A:7.21476470936470670108e-16
+28007AB88:t2:I2242162646924736,H28007ABA0
+28007ABA0:F1A:7.24577489978838698238e-16
+28007ABB0:t2:I2242176532448092,H28007ABC8
+28007ABC8:F1A:7.27687331181469271523e-16
+28007ABD8:t2:I2242189440853337,H28007ABF0
+28007ABF0:F1A:7.30806312312274287356e-16
+28007AC00:t2:I2242201373061537,H28007AC18
+28007AC18:F1A:7.33934756117740475864e-16
+28007AC28:t2:I2242212329317416,H28007AC40
+28007AC40:F1A:7.37072990578983098735e-16
+28007AC50:t2:I2242222309184237,H28007AC68
+28007AC68:F1A:7.40221349176579965727e-16
+28007AC78:t2:I2242231311537397,H28007AC90
+28007AC90:F1A:7.43380171164764792799e-16
+28007ACA0:t2:I2242239334556717,H28007ACB8
+28007ACB8:F1A:7.46549801855588902443e-16
+28007ACC8:t2:I2242246375717369,H28007ACE0
+28007ACE0:F1A:7.49730592913697934980e-16
+28007ACF0:t2:I2242252431779415,H28007AD08
+28007AD08:F1A:7.52922902662405836870e-16
+28007AD18:t2:I2242257498775893,H28007AD30
+28007AD30:F1A:7.56127096401792173910e-16
+28007AD40:t2:I2242261571999416,H28007AD58
+28007AD58:F1A:7.59343546739588950455e-16
+28007AD68:t2:I2242264645987196,H28007AD80
+28007AD80:F1A:7.62572633935675575083e-16
+28007AD90:t2:I2242266714504453,H28007ADA8
+28007ADA8:F1A:7.65814746261048733621e-16
+28007ADB8:t2:I2242267770526109,H28007ADD0
+28007ADD0:F1A:7.69070280372191911716e-16
+28007ADE0:t2:I2242267806216711,H28007ADF8
+28007ADF8:F1A:7.72339641701829854238e-16
+28007AE08:t2:I2242266812908462,H28007AE20
+28007AE20:F1A:7.75623244867117442328e-16
+28007AE30:t2:I2242264781077289,H28007AE48
+28007AE48:F1A:7.78921514096385241347e-16
+28007AE58:t2:I2242261700316818,H28007AE70
+28007AE70:F1A:7.82234883675641084120e-16
+28007AE80:t2:I2242257559310145,H28007AE98
+28007AE98:F1A:7.85563798416108405147e-16
+28007AEA8:t2:I2242252345799276,H28007AEC0
+28007AEC0:F1A:7.88908714144175521500e-16
+28007AED0:t2:I2242246046552082,H28007AEE8
+28007AEE8:F1A:7.92270098215227085966e-16
+28007AEF8:t2:I2242238647326615,H28007AF10
+28007AF10:F1A:7.95648430052936617556e-16
+28007AF20:t2:I2242230132832625,H28007AF38
+28007AF38:F1A:7.99044201715713004887e-16
+28007AF48:t2:I2242220486690076,H28007AF60
+28007AF60:F1A:8.02457918492125913510e-16
+28007AF70:t2:I2242209691384458,H28007AF88
+28007AF88:F1A:8.05890099527265683393e-16
+28007AF98:t2:I2242197728218684,H28007AFB0
+28007AFB0:F1A:8.09341278482150088838e-16
+28007AFC0:t2:I2242184577261310,H28007AFD8
+28007AFD8:F1A:8.12812004228450077447e-16
+28007AFE8:t2:I2242170217290819,H28007B000
+28007B000:F1A:8.16302841580987746960e-16
+28007B010:t2:I2242154625735679,H28007B028
+28007B028:F1A:8.19814372070653286895e-16
+28007B038:t2:I2242137778609839,H28007B050
+28007B050:F1A:8.23347194760605041733e-16
+28007B060:t2:I2242119650443327,H28007B078
+28007B078:F1A:8.26901927108847002541e-16
+28007B088:t2:I2242100214207556,H28007B0A0
+28007B0A0:F1A:8.30479205880537371959e-16
+28007B0B0:t2:I2242079441234906,H28007B0C8
+28007B0C8:F1A:8.34079688113662879173e-16
+28007B0D8:t2:I2242057301132135,H28007B0F0
+28007B0F0:F1A:8.37704052142022163322e-16
+28007B100:t2:I2242033761687079,H28007B118
+28007B118:F1A:8.41352998679802824740e-16
+28007B128:t2:I2242008788768107,H28007B140
+28007B140:F1A:8.45027251972409677425e-16
+28007B150:t2:I2241982346215682,H28007B168
+28007B168:F1A:8.48727561018615493666e-16
+28007B178:t2:I2241954395725356,H28007B190
+28007B190:F1A:8.52454700869559619833e-16
+28007B1A0:t2:I2241924896721443,H28007B1B8
+28007B1B8:F1A:8.56209474010623332794e-16
+28007B1C8:t2:I2241893806220517,H28007B1E0
+28007B1E0:F1A:8.59992711832766460322e-16
+28007B1F0:t2:I2241861078683830,H28007B208
+28007B208:F1A:8.63805276200525889234e-16
+28007B218:t2:I2241826665857598,H28007B230
+28007B230:F1A:8.67648061124558160821e-16
+28007B240:t2:I2241790516600041,H28007B258
+28007B258:F1A:8.71521994547369801105e-16
+28007B268:t2:I2241752576693881,H28007B280
+28007B280:F1A:8.75428040251717494016e-16
+28007B290:t2:I2241712788642916,H28007B2A8
+28007B2A8:F1A:8.79367199902104274846e-16
+28007B2B8:t2:I2241671091451078,H28007B2D0
+28007B2D0:F1A:8.83340515230840795477e-16
+28007B2E0:t2:I2241627420382235,H28007B2F8
+28007B2F8:F1A:8.87349070381313453209e-16
+28007B308:t2:I2241581706698773,H28007B320
+28007B320:F1A:8.91393994422408613348e-16
+28007B330:t2:I2241533877376767,H28007B348
+28007B348:F1A:8.95476464049506774624e-16
+28007B358:t2:I2241483854795281,H28007B370
+28007B370:F1A:8.99597706489109936019e-16
+28007B380:t2:I2241431556397035,H28007B398
+28007B398:F1A:9.03759002626011752555e-16
+28007B3A8:t2:I2241376894317345,H28007B3C0
+28007B3C0:F1A:9.07961690374006801893e-16
+28007B3D0:t2:I2241319774977817,H28007B3E8
+28007B3E8:F1A:9.12207168313484609982e-16
+28007B3F8:t2:I2241260098640860,H28007B410
+28007B410:F1A:9.16496899621913531320e-16
+28007B420:t2:I2241197758920538,H28007B438
+28007B438:F1A:9.20832416326230760072e-16
+28007B448:t2:I2241132642244704,H28007B460
+28007B460:F1A:9.25215323909569332723e-16
+28007B470:t2:I2241064627262652,H28007B488
+28007B488:F1A:9.29647306308641672775e-16
+28007B498:t2:I2240993584191742,H28007B4B0
+28007B4B0:F1A:9.34130131342526512592e-16
+28007B4C0:t2:I2240919374095536,H28007B4D8
+28007B4D8:F1A:9.38665656618665978610e-16
+28007B4E8:t2:I2240841848084890,H28007B500
+28007B500:F1A:9.43255835967670653963e-16
+28007B510:t2:I2240760846432232,H28007B528
+28007B528:F1A:9.47902726465173824760e-16
+28007B538:t2:I2240676197587784,H28007B550
+28007B550:F1A:9.52608496106627869756e-16
+28007B560:t2:I2240587717084782,H28007B578
+28007B578:F1A:9.57375432209744962925e-16
+28007B588:t2:I2240495206318753,H28007B5A0
+28007B5A0:F1A:9.62205950629483835507e-16
+28007B5B0:t2:I2240398451183567,H28007B5C8
+28007B5C8:F1A:9.67102605882305424755e-16
+28007B5D8:t2:I2240297220544165,H28007B5F0
+28007B5F0:F1A:9.72068102290162588019e-16
+28007B600:t2:I2240191264522612,H28007B618
+28007B618:F1A:9.77105306270720883776e-16
+28007B628:t2:I2240080312570155,H28007B640
+28007B640:F1A:9.82217259919054108939e-16
+28007B650:t2:I2239964071293331,H28007B668
+28007B668:F1A:9.87407196048067106672e-16
+28007B678:t2:I2239842221996530,H28007B690
+28007B690:F1A:9.92678554880797648454e-16
+28007B6A0:t2:I2239714417896699,H28007B6B8
+28007B6B8:F1A:9.98035002618364491509e-16
+28007B6C8:t2:I2239580280957725,H28007B6E0
+28007B6E0:F1A:1.00348045214361808924e-15
+28007B6F0:t2:I2239439398282193,H28007B708
+28007B708:F1A:1.00901908616374569449e-15
+28007B718:t2:I2239291317986196,H28007B730
+28007B730:F1A:1.01465538314670861133e-15
+28007B740:t2:I2239135544468203,H28007B758
+28007B758:F1A:1.02039414646831236830e-15
+28007B768:t2:I2238971532964979,H28007B780
+28007B780:F1A:1.02624053726135674640e-15
+28007B790:t2:I2238798683265269,H28007B7A8
+28007B7A8:F1A:1.03220011154864564914e-15
+28007B7B8:t2:I2238616332424351,H28007B7D0
+28007B7D0:F1A:1.03827886235153991696e-15
+28007B7E0:t2:I2238423746288095,H28007B7F8
+28007B7F8:F1A:1.04448326760004705473e-15
+28007B808:t2:I2238220109591890,H28007B820
+28007B820:F1A:1.05082034483551946539e-15
+28007B830:t2:I2238004514345216,H28007B848
+28007B848:F1A:1.05729771390098902296e-15
+28007B858:t2:I2237775946143212,H28007B870
+28007B870:F1A:1.06392366906768007507e-15
+28007B880:t2:I2237533267957822,H28007B898
+28007B898:F1A:1.07070726236329937629e-15
+28007B8A8:t2:I2237275200846753,H28007B8C0
+28007B8C0:F1A:1.07765840026681064032e-15
+28007B8D0:t2:I2237000300869952,H28007B8E8
+28007B8E8:F1A:1.08478795644034246815e-15
+28007B8F8:t2:I2236706931309099,H28007B910
+28007B910:F1A:1.09210790381495627955e-15
+28007B920:t2:I2236393229029147,H28007B938
+28007B938:F1A:1.09963147017856282141e-15
+28007B948:t2:I2236057063479501,H28007B960
+28007B960:F1A:1.10737332249357520075e-15
+28007B970:t2:I2235695986373246,H28007B988
+28007B988:F1A:1.11534978658531549289e-15
+28007B998:t2:I2235307169458859,H28007B9B0
+28007B9B0:F1A:1.12357911071108333166e-15
+28007B9C0:t2:I2234887326941578,H28007B9D8
+28007B9D8:F1A:1.13208178401648463069e-15
+28007B9E8:t2:I2234432617919447,H28007BA00
+28007BA00:F1A:1.14088092425827801405e-15
+28007BA10:t2:I2233938522519765,H28007BA28
+28007BA28:F1A:1.15000275378397924458e-15
+28007BA38:t2:I2233399683022677,H28007BA50
+28007BA50:F1A:1.15947718914491892724e-15
+28007BA60:t2:I2232809697779198,H28007BA78
+28007BA78:F1A:1.16933857869109599762e-15
+28007BA88:t2:I2232160850599817,H28007BAA0
+28007BAA0:F1A:1.17962663529558008258e-15
+28007BAB0:t2:I2231443750584641,H28007BAC8
+28007BAC8:F1A:1.19038762992828902828e-15
+28007BAD8:t2:I2230646845562170,H28007BAF0
+28007BAF0:F1A:1.20167593925438186168e-15
+28007BB00:t2:I2229755753817986,H28007BB18
+28007BB18:F1A:1.21355608186668970279e-15
+28007BB28:t2:I2228752329126533,H28007BB40
+28007BB40:F1A:1.22610544174505612103e-15
+28007BB50:t2:I2227613325162504,H28007BB68
+28007BB68:F1A:1.23941797891632511077e-15
+28007BB78:t2:I2226308442121174,H28007BB90
+28007BB90:F1A:1.25360939266025668161e-15
+28007BBA0:t2:I2224797391720399,H28007BBB8
+28007BBB8:F1A:1.26882448142550100004e-15
+28007BBC8:t2:I2223025347823832,H28007BBE0
+28007BBE0:F1A:1.28524793190961088468e-15
+28007BBF0:t2:I2220915633329809,H28007BC08
+28007BC08:F1A:1.30312066346899851655e-15
+28007BC18:t2:I2218357446087030,H28007BC30
+28007BC30:F1A:1.32276557701953263307e-15
+28007BC40:t2:I2215184158448668,H28007BC58
+28007BC58:F1A:1.34463009250111712861e-15
+28007BC68:t2:I2211132412537369,H28007BC80
+28007BC80:F1A:1.36936068351285175171e-15
+28007BC90:t2:I2205758503851065,H28007BCA8
+28007BCA8:F1A:1.39794366727752399083e-15
+28007BCB8:t2:I2198248265654987,H28007BCD0
+28007BCD0:F1A:1.43199898696613284312e-15
+28007BCE0:t2:I2186916352102141,H28007BCF8
+28007BCF8:F1A:1.47448486035975958423e-15
+28007BD08:t2:I2167562552481814,H28007BD20
+28007BD20:F1A:1.53178727416111435375e-15
+28007BD30:t2:I2125549880839716,H28007BD48
+28007BD48:F1A:1.62276986753129683713e-15
+28007BD58:Mf0:H280010188:
+28007BD70:lI0|I0
+28007BD80:lI0|H28007BD90
+28007BD90:lI0|H28007BDA0
+28007BDA0:lI0|H28007BDB0
+28007BDB0:lI0|H28007BDC0
+28007BDC0:lI0|H28007BDD0
+28007BDD0:lI0|H28007BDE0
+28007BDE0:lI0|H28007BDF0
+28007BDF0:lI0|H28007BE00
+28007BE00:lI0|H28007BE10
+28007BE10:lI0|H28007BE20
+28007BE20:lI0|H28007BE30
+28007BE30:lI0|H28007BE40
+28007BE40:lI0|H28007BE50
+28007BE50:lI0|H28007BE60
+28007BE60:lI0|H28007BE70
+28007BE70:lI0|N
+28007BE80:lI114527183042123105|H28007BE90
+28007BE90:lI160423628620659260|H28007BEA0
+28007BEA0:lI284733707589872850|H28007BEB0
+28007BEB0:lI164435740288387503|H28007BEC0
+28007BEC0:lI259572741793888962|H28007BED0
+28007BED0:lI215793509705812255|H28007BEE0
+28007BEE0:lI228241955430903492|H28007BEF0
+28007BEF0:lI221708554683218499|H28007BF00
+28007BF00:lI212006596549813798|H28007BF10
+28007BF10:lI139215019150089363|H28007BF20
+28007BF20:lI23964000621384961|H28007BF30
+28007BF30:lI55201052708218217|H28007BF40
+28007BF40:lI112969240468397636|H28007BF50
+28007BF50:lI22130735059088892|H28007BF60
+28007BF60:lI244278597799509466|H28007BF70
+28007BF70:lI220175845070832114|H28007BF80
+28007BF80:lI43243288828|N
+28007BF90:lI290573448171827402|H28007BFA0
+28007BFA0:lI382251779910418577|H28007BFB0
+28007BFB0:lI423857156240780192|H28007BFC0
+28007BFC0:lI317638803078791815|H28007BFD0
+28007BFD0:lI312577798172065765|H28007BFE0
+28007BFE0:lI305801842905235492|H28007BFF0
+28007BFF0:lI450887821400921554|H28007C000
+28007C000:lI490154825290594607|H28007C010
+28007C010:lI507224882549817556|H28007C020
+28007C020:lI305131922350994371|H28007C030
+28007C030:lI524004876356613068|H28007C040
+28007C040:lI399286492428034246|H28007C050
+28007C050:lI556129459533271918|H28007C060
+28007C060:lI302163523288674092|H28007C070
+28007C070:lI295571835370094372|H28007C080
+28007C080:lI487547435355635071|N
+28007C090:lI412473694820566502|H28007C0A0
+28007C0A0:lI432883605991317039|H28007C0B0
+28007C0B0:lI525373508288112196|H28007C0C0
+28007C0C0:lI403915169708599875|H28007C0D0
+28007C0D0:lI319067783491633768|H28007C0E0
+28007C0E0:lI301226760020322060|H28007C0F0
+28007C0F0:lI311627678308842608|H28007C100
+28007C100:lI376040681981803602|H28007C110
+28007C110:lI339701046172540810|H28007C120
+28007C120:lI406476937554306621|H28007C130
+28007C130:lI319178240279900411|H28007C140
+28007C140:lI538961455727032748|H28007C150
+28007C150:lI343829982822907227|H28007C160
+28007C160:lI562090186051299616|H28007C170
+28007C170:lI294421712295949406|H28007C180
+28007C180:lI517056752316592047|N
+28007C190:lI171572743241724754|N
+28007C1A0:F1A:5.00000000000000000000e-01
+28007C1B0:lH28007C1E0|H28007C1C0
+28007C1C0:lH28007C1F8|H28007C1D0
+28007C1D0:lA6:global|N
+28007C1E0:t2:A7:newline,A3:any
+28007C1F8:t3:A7:capture,AD:all_but_first,A6:binary
+28007C218:lI48|H28007C228
+28007C228:lI120|H28007C238
+28007C238:lI40|H28007C248
+28007C248:lI91|H28007C258
+28007C258:lI97|H28007C268
+28007C268:lI45|H28007C278
+28007C278:lI122|H28007C288
+28007C288:lI65|H28007C298
+28007C298:lI45|H28007C2A8
+28007C2A8:lI90|H28007C2B8
+28007C2B8:lI48|H28007C2C8
+28007C2C8:lI45|H28007C2D8
+28007C2D8:lI57|H28007C2E8
+28007C2E8:lI93|H28007C2F8
+28007C2F8:lI43|H28007C308
+28007C308:lI41|N
+28007C318:lI49|H28007C328
+28007C328:lI54|H28007C338
+28007C338:lI35|H28007C348
+28007C348:lI126|H28007C358
+28007C358:lI115|H28007C368
+28007C368:lI44|H28007C378
+28007C378:lI126|H28007C388
+28007C388:lI110|N
+28007C398:F1B:-2.73661237329758277870e-01
+28007C3A8:F1A:3.65415288536100879568e+00
+28007C3B8:F1B:-3.65415288536100879568e+00
+28007C3C8:F1B:-5.00000000000000000000e-01
+28007C3D8:t100:H28007CBE0,H28007CBF0,H28007CC00,H28007CC10,H28007CC20,H28007CC30,H28007CC40,H28007CC50,H28007CC60,H28007CC70,H28007CC80,H28007CC90,H28007CCA0,H28007CCB0,H28007CCC0,H28007CCD0,H28007CCE0,H28007CCF0,H28007CD00,H28007CD10,H28007CD20,H28007CD30,H28007CD40,H28007CD50,H28007CD60,H28007CD70,H28007CD80,H28007CD90,H28007CDA0,H28007CDB0,H28007CDC0,H28007CDD0,H28007CDE0,H28007CDF0,H28007CE00,H28007CE10,H28007CE20,H28007CE30,H28007CE40,H28007CE50,H28007CE60,H28007CE70,H28007CE80,H28007CE90,H28007CEA0,H28007CEB0,H28007CEC0,H28007CED0,H28007CEE0,H28007CEF0,H28007CF00,H28007CF10,H28007CF20,H28007CF30,H28007CF40,H28007CF50,H28007CF60,H28007CF70,H28007CF80,H28007CF90,H28007CFA0,H28007CFB0,H28007CFC0,H28007CFD0,H28007CFE0,H28007CFF0,H28007D000,H28007D010,H28007D020,H28007D030,H28007D040,H28007D050,H28007D060,H28007D070,H28007D080,H28007D090,H28007D0A0,H28007D0B0,H28007D0C0,H28007D0D0,H28007D0E0,H28007D0F0,H28007D100,H28007D110,H28007D120,H28007D130,H28007D140,H28007D150,H28007D160,H28007D170,H28007D180,H28007D190,H28007D1A0,H28007D1B0,H28007D1C0,H28007D1D0,H28007D1E0,H28007D1F0,H28007D200,H28007D210,H28007D220,H28007D230,H28007D240,H28007D250,H28007D260,H28007D270,H28007D280,H28007D290,H28007D2A0,H28007D2B0,H28007D2C0,H28007D2D0,H28007D2E0,H28007D2F0,H28007D300,H28007D310,H28007D320,H28007D330,H28007D340,H28007D350,H28007D360,H28007D370,H28007D380,H28007D390,H28007D3A0,H28007D3B0,H28007D3C0,H28007D3D0,H28007D3E0,H28007D3F0,H28007D400,H28007D410,H28007D420,H28007D430,H28007D440,H28007D450,H28007D460,H28007D470,H28007D480,H28007D490,H28007D4A0,H28007D4B0,H28007D4C0,H28007D4D0,H28007D4E0,H28007D4F0,H28007D500,H28007D510,H28007D520,H28007D530,H28007D540,H28007D550,H28007D560,H28007D570,H28007D580,H28007D590,H28007D5A0,H28007D5B0,H28007D5C0,H28007D5D0,H28007D5E0,H28007D5F0,H28007D600,H28007D610,H28007D620,H28007D630,H28007D640,H28007D650,H28007D660,H28007D670,H28007D680,H28007D690,H28007D6A0,H28007D6B0,H28007D6C0,H28007D6D0,H28007D6E0,H28007D6F0,H28007D700,H28007D710,H28007D720,H28007D730,H28007D740,H28007D750,H28007D760,H28007D770,H28007D780,H28007D790,H28007D7A0,H28007D7B0,H28007D7C0,H28007D7D0,H28007D7E0,H28007D7F0,H28007D800,H28007D810,H28007D820,H28007D830,H28007D840,H28007D850,H28007D860,H28007D870,H28007D880,H28007D890,H28007D8A0,H28007D8B0,H28007D8C0,H28007D8D0,H28007D8E0,H28007D8F0,H28007D900,H28007D910,H28007D920,H28007D930,H28007D940,H28007D950,H28007D960,H28007D970,H28007D980,H28007D990,H28007D9A0,H28007D9B0,H28007D9C0,H28007D9D0,H28007D9E0,H28007D9F0,H28007DA00,H28007DA10,H28007DA20,H28007DA30,H28007DA40,H28007DA50,H28007DA60,H28007DA70,H28007DA80,H28007DA90,H28007DAA0,H28007DAB0,H28007DAC0,H28007DAD0,H28007DAE0,H28007DAF0,H28007DB00,H28007DB10,H28007DB20,H28007DB30,H28007DB40,H28007DB50,H28007DB60,H28007DB70,H28007DB80,H28007DB90,H28007DBA0,H28007DBB0,H28007DBC0,H28007DBD0
+28007CBE0:F1A:1.00000000000000000000e+00
+28007CBF0:F1A:9.77101701267670819107e-01
+28007CC00:F1A:9.59879091800105999077e-01
+28007CC10:F1A:9.45198953442299094618e-01
+28007CC20:F1A:9.32060075959229905607e-01
+28007CC30:F1A:9.19991505039346457728e-01
+28007CC40:F1A:9.08726440052130324254e-01
+28007CC50:F1A:8.98095921898342974821e-01
+28007CC60:F1A:8.87984660755832821977e-01
+28007CC70:F1A:8.78309655808916844855e-01
+28007CC80:F1A:8.69008688036856491443e-01
+28007CC90:F1A:8.60033621196331088399e-01
+28007CCA0:F1A:8.51346258458677507264e-01
+28007CCB0:F1A:8.42915653112203733244e-01
+28007CCC0:F1A:8.34716292986882990590e-01
+28007CCD0:F1A:8.26726833946220929228e-01
+28007CCE0:F1A:8.18929191603701922553e-01
+28007CCF0:F1A:8.11307874312655719073e-01
+28007CD00:F1A:8.03849483170963829970e-01
+28007CD10:F1A:7.96542330422958411162e-01
+28007CD20:F1A:7.89376143566024035536e-01
+28007CD30:F1A:7.82341832654801949687e-01
+28007CD40:F1A:7.75431304981186619862e-01
+28007CD50:F1A:7.68637315798485709628e-01
+28007CD60:F1A:7.61953346836794831454e-01
+28007CD70:F1A:7.55373506507095671125e-01
+28007CD80:F1A:7.48892447219156376370e-01
+28007CD90:F1A:7.42505296340150611201e-01
+28007CDA0:F1A:7.36207598126862095000e-01
+28007CDB0:F1A:7.29995264561475676324e-01
+28007CDC0:F1A:7.23864533468629667290e-01
+28007CDD0:F1A:7.17811932630721516446e-01
+28007CDE0:F1A:7.11834248878247977110e-01
+28007CDF0:F1A:7.05928501332753755015e-01
+28007CE00:F1A:7.00091918136511170978e-01
+28007CE10:F1A:6.94321916126116267520e-01
+28007CE20:F1A:6.88616083004671364343e-01
+28007CE30:F1A:6.82972161644994302243e-01
+28007CE40:F1A:6.77388036218773081920e-01
+28007CE50:F1A:6.71861719897081655084e-01
+28007CE60:F1A:6.66391343908749766989e-01
+28007CE70:F1A:6.60975147776662774746e-01
+28007CE80:F1A:6.55611470579696931082e-01
+28007CE90:F1A:6.50298743110816368507e-01
+28007CEA0:F1A:6.45035480820821960357e-01
+28007CEB0:F1A:6.39820277453056140970e-01
+28007CEC0:F1A:6.34651799287623274992e-01
+28007CED0:F1A:6.29528779924836245918e-01
+28007CEE0:F1A:6.24450015547026060503e-01
+28007CEF0:F1A:6.19414360605833991258e-01
+28007CF00:F1A:6.14420723888913444810e-01
+28007CF10:F1A:6.09468064925773100882e-01
+28007CF20:F1A:6.04555390697467331940e-01
+28007CF30:F1A:5.99681752619124819326e-01
+28007CF40:F1A:5.94846243767986893047e-01
+28007CF50:F1A:5.90047996332825452903e-01
+28007CF60:F1A:5.85286179263370898163e-01
+28007CF70:F1A:5.80559996100790343121e-01
+28007CF80:F1A:5.75868682972353163052e-01
+28007CF90:F1A:5.71211506735252672051e-01
+28007CFA0:F1A:5.66587763256163889913e-01
+28007CFB0:F1A:5.61996775814523896742e-01
+28007CFC0:F1A:5.57437893618765500925e-01
+28007CFD0:F1A:5.52910490425831846473e-01
+28007CFE0:F1A:5.48413963255265368701e-01
+28007CFF0:F1A:5.43947731190025818293e-01
+28007D000:F1A:5.39511234256951577315e-01
+28007D010:F1A:5.35103932380457170126e-01
+28007D020:F1A:5.30725304403661501951e-01
+28007D030:F1A:5.26374847171684034919e-01
+28007D040:F1A:5.22052074672321397841e-01
+28007D050:F1A:5.17756517229755908183e-01
+28007D060:F1A:5.13487720747326514825e-01
+28007D070:F1A:5.09245245995747608525e-01
+28007D080:F1A:5.05028667943467901580e-01
+28007D090:F1A:5.00837575126148348836e-01
+28007D0A0:F1A:4.96671569052489325635e-01
+28007D0B0:F1A:4.92530263643868149170e-01
+28007D0C0:F1A:4.88413284705457584334e-01
+28007D0D0:F1A:4.84320269426682881164e-01
+28007D0E0:F1A:4.80250865909046420477e-01
+28007D0F0:F1A:4.76204732719505474670e-01
+28007D100:F1A:4.72181538467729755570e-01
+28007D110:F1A:4.68180961405693207844e-01
+28007D120:F1A:4.64202689048173910980e-01
+28007D130:F1A:4.60246417812842478767e-01
+28007D140:F1A:4.56311852678716101117e-01
+28007D150:F1A:4.52398706861848243221e-01
+28007D160:F1A:4.48506701507202731882e-01
+28007D170:F1A:4.44635565395739118522e-01
+28007D180:F1A:4.40785034665803765463e-01
+28007D190:F1A:4.36954852547985328481e-01
+28007D1A0:F1A:4.33144769112652094911e-01
+28007D1B0:F1A:4.29354541029441261202e-01
+28007D1C0:F1A:4.25583931338021803636e-01
+28007D1D0:F1A:4.21832709229495728120e-01
+28007D1E0:F1A:4.18100649837847948564e-01
+28007D1F0:F1A:4.14387534040890903597e-01
+28007D200:F1A:4.10693148270187990967e-01
+28007D210:F1A:4.07017284329473150173e-01
+28007D220:F1A:4.03359739221114288465e-01
+28007D230:F1A:3.99720314980197000132e-01
+28007D240:F1A:3.96098818515832229448e-01
+28007D250:F1A:3.92495061459315397467e-01
+28007D260:F1A:3.88908860018788549162e-01
+28007D270:F1A:3.85340034840077061418e-01
+28007D280:F1A:3.81788410873393435629e-01
+28007D290:F1A:3.78253817245618961795e-01
+28007D2A0:F1A:3.74736087137890860888e-01
+28007D2B0:F1A:3.71235057668239221140e-01
+28007D2C0:F1A:3.67750569779032254747e-01
+28007D2D0:F1A:3.64282468129003722535e-01
+28007D2E0:F1A:3.60830600989647753973e-01
+28007D2F0:F1A:3.57394820145780223175e-01
+28007D300:F1A:3.53974980800076555187e-01
+28007D310:F1A:3.50570941481405884410e-01
+28007D320:F1A:3.47182563956793477367e-01
+28007D330:F1A:3.43809713146850548515e-01
+28007D340:F1A:3.40452257044521644502e-01
+28007D350:F1A:3.37110066637005878487e-01
+28007D360:F1A:3.33783015830718232664e-01
+28007D370:F1A:3.30470981379163419867e-01
+28007D380:F1A:3.27173842813601289947e-01
+28007D390:F1A:3.23891482376391037779e-01
+28007D3A0:F1A:3.20623784956905300003e-01
+28007D3B0:F1A:3.17370638029913498812e-01
+28007D3C0:F1A:3.14131931596337066193e-01
+28007D3D0:F1A:3.10907558126286343025e-01
+28007D3E0:F1A:3.07697412504291889501e-01
+28007D3F0:F1A:3.04501391976649826709e-01
+28007D400:F1A:3.01319396100802883165e-01
+28007D410:F1A:2.98151326696685314843e-01
+28007D420:F1A:2.94997087799961643650e-01
+28007D430:F1A:2.91856585617094987928e-01
+28007D440:F1A:2.88729728482182701477e-01
+28007D450:F1A:2.85616426815501589509e-01
+28007D460:F1A:2.82516593083707412415e-01
+28007D470:F1A:2.79430141761637718112e-01
+28007D480:F1A:2.76356989295668098450e-01
+28007D490:F1A:2.73297054068576905639e-01
+28007D4A0:F1A:2.70250256365875185516e-01
+28007D4B0:F1A:2.67216518343561137971e-01
+28007D4C0:F1A:2.64195763997260801847e-01
+28007D4D0:F1A:2.61187919132720824944e-01
+28007D4E0:F1A:2.58192911337618902223e-01
+28007D4F0:F1A:2.55210669954661684145e-01
+28007D500:F1A:2.52241126055941899953e-01
+28007D510:F1A:2.49284212418528244859e-01
+28007D520:F1A:2.46339863501263633960e-01
+28007D530:F1A:2.43408015422750118040e-01
+28007D540:F1A:2.40488605940500393965e-01
+28007D550:F1A:2.37581574431237951828e-01
+28007D560:F1A:2.34686861872329899370e-01
+28007D570:F1A:2.31804410824338585906e-01
+28007D580:F1A:2.28934165414680229622e-01
+28007D590:F1A:2.26076071322380195427e-01
+28007D5A0:F1A:2.23230075763917457099e-01
+28007D5B0:F1A:2.20396127480151943212e-01
+28007D5C0:F1A:2.17574176724331130872e-01
+28007D5D0:F1A:2.14764175251173583536e-01
+28007D5E0:F1A:2.11966076307030154569e-01
+28007D5F0:F1A:2.09179834621124993710e-01
+28007D600:F1A:2.06405406397880714087e-01
+28007D610:F1A:2.03642749310334852941e-01
+28007D620:F1A:2.00891822494656563380e-01
+28007D630:F1A:1.98152586545775111215e-01
+28007D640:F1A:1.95425003514134276728e-01
+28007D650:F1A:1.92709036903589120415e-01
+28007D660:F1A:1.90004651670464957958e-01
+28007D670:F1A:1.87311814223800249257e-01
+28007D680:F1A:1.84630492426799269756e-01
+28007D690:F1A:1.81960655599522541648e-01
+28007D6A0:F1A:1.79302274522847665539e-01
+28007D6B0:F1A:1.76655321443734997233e-01
+28007D6C0:F1A:1.74019770081838748288e-01
+28007D6D0:F1A:1.71395595637505948616e-01
+28007D6E0:F1A:1.68782774801211510329e-01
+28007D6F0:F1A:1.66181285764482045142e-01
+28007D700:F1A:1.63591108232365695097e-01
+28007D710:F1A:1.61012223437511065027e-01
+28007D720:F1A:1.58444614155924312637e-01
+28007D730:F1A:1.55888264724479197465e-01
+28007D740:F1A:1.53343161060262828110e-01
+28007D750:F1A:1.50809290681845675763e-01
+28007D760:F1A:1.48286642732574525105e-01
+28007D770:F1A:1.45775208005994028060e-01
+28007D780:F1A:1.43274978973513406055e-01
+28007D790:F1A:1.40785949814444699690e-01
+28007D7A0:F1A:1.38308116448550705302e-01
+28007D7B0:F1A:1.35841476571253727545e-01
+28007D7C0:F1A:1.33386029691669127928e-01
+28007D7D0:F1A:1.30941777173644302579e-01
+28007D7E0:F1A:1.28508722279999515470e-01
+28007D7F0:F1A:1.26086870220185859326e-01
+28007D800:F1A:1.23676228201596544176e-01
+28007D810:F1A:1.21276805484790209388e-01
+28007D820:F1A:1.18888613442909976681e-01
+28007D830:F1A:1.16511665625610799646e-01
+28007D840:F1A:1.14145977827838349117e-01
+28007D850:F1A:1.11791568163838006544e-01
+28007D860:F1A:1.09448457146811631291e-01
+28007D870:F1A:1.07116667774683635428e-01
+28007D880:F1A:1.04796225622486902096e-01
+28007D890:F1A:1.02487158941935080358e-01
+28007D8A0:F1A:1.00189498768809809315e-01
+28007D8B0:F1A:9.79032790388622842226e-02
+28007D8C0:F1A:9.56285367130088187482e-02
+28007D8D0:F1A:9.33653119126908598302e-02
+28007D8E0:F1A:9.11136480663736342267e-02
+28007D8F0:F1A:8.88735920682757890576e-02
+28007D900:F1A:8.66451944505579607636e-02
+28007D910:F1A:8.44285095703533744471e-02
+28007D920:F1A:8.22235958132028627032e-02
+28007D930:F1A:8.00305158146630557514e-02
+28007D940:F1A:7.78493367020960391756e-02
+28007D950:F1A:7.56801303589270668581e-02
+28007D960:F1A:7.35229737139812683511e-02
+28007D970:F1A:7.13779490588903747783e-02
+28007D980:F1A:6.92451443970067692657e-02
+28007D990:F1A:6.71246538277884968737e-02
+28007D9A0:F1A:6.50165779712428421044e-02
+28007D9B0:F1A:6.29210244377581134900e-02
+28007D9C0:F1A:6.08381083495398641836e-02
+28007D9D0:F1A:5.87679529209337581097e-02
+28007D9E0:F1A:5.67106901062029017391e-02
+28007D9F0:F1A:5.46664613248889139085e-02
+28007DA00:F1A:5.26354182767921757735e-02
+28007DA10:F1A:5.06177238609477608833e-02
+28007DA20:F1A:4.86135532158685212956e-02
+28007DA30:F1A:4.66230949019303675396e-02
+28007DA40:F1A:4.46465522512944426592e-02
+28007DA50:F1A:4.26841449164744313194e-02
+28007DA60:F1A:4.07361106559409325012e-02
+28007DA70:F1A:3.88027074045261127777e-02
+28007DA80:F1A:3.68842156885672844968e-02
+28007DA90:F1A:3.49809414617160835403e-02
+28007DAA0:F1A:3.30932194585785224850e-02
+28007DAB0:F1A:3.12214171919202448935e-02
+28007DAC0:F1A:2.93659397581333136973e-02
+28007DAD0:F1A:2.75272356696030819079e-02
+28007DAE0:F1A:2.57058040085488964666e-02
+28007DAF0:F1A:2.39022033057958820101e-02
+28007DB00:F1A:2.21170627073088640890e-02
+28007DB10:F1A:2.03510962300445172324e-02
+28007DB20:F1A:1.86051212757246432761e-02
+28007DB30:F1A:1.68800831525431661861e-02
+28007DB40:F1A:1.51770883079353248457e-02
+28007DB50:F1A:1.34974506017398795249e-02
+28007DB60:F1A:1.18427578579078877224e-02
+28007DB70:F1A:1.02149714397014711870e-02
+28007DB80:F1A:8.61658276939873159217e-03
+28007DB90:F1A:7.05087547137322676050e-03
+28007DBA0:F1A:5.52240329925099675962e-03
+28007DBB0:F1A:4.03797259336303050042e-03
+28007DBC0:F1A:2.60907274610216273134e-03
+28007DBD0:F1A:1.26028593049859753868e-03
+28007DBE0:lI126|H28007DBF0
+28007DBF0:lI99|H28007DC00
+28007DC00:lI126|H28007DC10
+28007DC10:lI99|H28007DC20
+28007DC20:lI46|H28007DC30
+28007DC30:lI126|H28007DC40
+28007DC40:lI49|H28007DC50
+28007DC50:lI51|H28007DC60
+28007DC60:lI46|H28007DC70
+28007DC70:lI49|H28007DC80
+28007DC80:lI54|H28007DC90
+28007DC90:lI46|H28007DCA0
+28007DCA0:lI48|H28007DCB0
+28007DCB0:lI98|H28007DCC0
+28007DCC0:lI69|H28007DCD0
+28007DCD0:lI126|H28007DCE0
+28007DCE0:lI98|N
+28007DCF0:lI108|N
+28007DD00:lI114|H28007DCF0
+28007DD10:lI101|H28007DD00
+28007DD20:lI46|H28007DD10
+28007DD30:lI100|H28007DD20
+28007DD40:lI110|H28007DD30
+28007DD50:lI97|H28007DD40
+28007DD60:lI114|H28007DD50
+28007DD70:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAAAAAAAHcEcmFuZGEAYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DD98:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAABAAAAAHcEcmFuZGEBYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DDC0:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAACAAAAAHcEcmFuZGECYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DDE8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAADAAAAAHcEcmFuZGEDYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DE10:t6:A4:type,A4:next,A4:bits,A7:uniform,A9:uniform_n,A4:jump
+28007DE48:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAEAAAAAHcEcmFuZGEEYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DE70:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAFAAAAAHcEcmFuZGEFYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DE98:t4:A3:max,A4:type,A4:next,A4:jump
+28007DEC0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAGAAAAAHcEcmFuZGEGYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DEE8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAHAAAAAHcEcmFuZGEHYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DF10:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAIAAAAAHcEcmFuZGEIYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DF38:t7:A4:type,A4:next,A4:bits,A7:uniform,AD:weak_low_bits,A9:uniform_n,A4:jump
+28007DF78:B18446744073709551615
+28007DF88:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAJAAAAAHcEcmFuZGEJYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DFB0:t3:A3:max,A4:type,A4:next
+28007DFD0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAKAAAAAHcEcmFuZGEKYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007DFF8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAALAAAAAHcEcmFuZGELYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E020:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAMAAAAAHcEcmFuZGEMYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E048:t5:A4:type,A4:next,A4:bits,AD:weak_low_bits,A4:jump
+28007E078:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAANAAAAAHcEcmFuZGENYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E0A0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAOAAAAAHcEcmFuZGEOYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E0C8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAPAAAAAHcEcmFuZGEPYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E0F0:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAQAAAAAHcEcmFuZGEQYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E118:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAARAAAAAHcEcmFuZGERYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E140:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAASAAAAAHcEcmFuZGESYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E168:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAATAAAAAHcEcmFuZGETYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E190:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAUAAAAAHcEcmFuZGEUYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E1B8:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAVAAAAAHcEcmFuZGEVYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E1E0:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAWAAAAAHcEcmFuZGEWYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E208:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAXAAAAAHcEcmFuZGEXYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E230:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAYAAAAAHcEcmFuZGEYYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E258:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAZAAAAAHcEcmFuZGEZYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E280:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAaAAAAAHcEcmFuZGEaYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E2A8:t5:A4:type,A4:next,A4:bits,A7:uniform,A9:uniform_n
+28007E2D8:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAbAAAAAHcEcmFuZGEbYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E300:B2685821657736338717
+28007E310:B18446744073709551614
+28007E320:B1181783497276652981
+28007E330:E48:g3AAAABGAn3XkEUS41MGPnrQPyy5JUoAAAAcAAAAAHcEcmFuZGEcYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E358:E48:g3AAAABGAX3XkEUS41MGPnrQPyy5JUoAAAAdAAAAAHcEcmFuZGEdYgPuvIJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007E380:B11400714819323198485
+28007E390:B13787848793156543929
+28007E3A0:B10723151780598845931
+28007E3B0:B9223372036854775808
+28007F160:t2:A5:error,AB:not_boolean
+28007F178:t2:A5:error,A17:global_group_not_runnig
+28007F190:t2:A5:local,AC:global_group
+28007F1A8:t1:AD:connection_id
+28007F1B8:Mf1:H28007F1A8:A4:true
+28007F1D8:lA9:undefined|N
+28007F1E8:Mf0:H280010188:
+28007F200:t2:A4:node,AB:test3844zty
+28007F218:t2:A5:error,A15:illegal_function_call
+28007F230:t2:A5:error,A1A:no global_groups definiton
+28007F248:t2:H28007F260,H28007F278
+28007F260:Mf0:H280010188:
+28007F278:Mf0:H280010188:
+28007F290:t3:N,N,N
+28007F2B0:lI103|H28007F2C0
+28007F2C0:lI108|H28007F2D0
+28007F2D0:lI111|H28007F2E0
+28007F2E0:lI98|H28007F2F0
+28007F2F0:lI97|H28007F300
+28007F300:lI108|H28007F310
+28007F310:lI95|H28007F320
+28007F320:lI103|H28007F330
+28007F330:lI114|H28007F340
+28007F340:lI111|H28007F350
+28007F350:lI117|H28007F360
+28007F360:lI112|H28007F370
+28007F370:lI58|H28007F380
+28007F380:lI32|H28007F390
+28007F390:lI67|H28007F3A0
+28007F3A0:lI111|H28007F3B0
+28007F3B0:lI117|H28007F3C0
+28007F3C0:lI108|H28007F3D0
+28007F3D0:lI100|H28007F3E0
+28007F3E0:lI32|H28007F3F0
+28007F3F0:lI110|H28007F400
+28007F400:lI111|H28007F410
+28007F410:lI116|H28007F420
+28007F420:lI32|H28007F430
+28007F430:lI115|H28007F440
+28007F440:lI121|H28007F450
+28007F450:lI110|H28007F460
+28007F460:lI99|H28007F470
+28007F470:lI104|H28007F480
+28007F480:lI114|H28007F490
+28007F490:lI111|H28007F4A0
+28007F4A0:lI110|H28007F4B0
+28007F4B0:lI105|H28007F4C0
+28007F4C0:lI122|H28007F4D0
+28007F4D0:lI101|H28007F4E0
+28007F4E0:lI32|H28007F4F0
+28007F4F0:lI119|H28007F500
+28007F500:lI105|H28007F510
+28007F510:lI116|H28007F520
+28007F520:lI104|H28007F530
+28007F530:lI32|H28007F540
+28007F540:lI110|H28007F550
+28007F550:lI111|H28007F560
+28007F560:lI100|H28007F570
+28007F570:lI101|H28007F580
+28007F580:lI32|H28007F590
+28007F590:lI126|H28007F5A0
+28007F5A0:lI112|H28007F5B0
+28007F5B0:lI126|H28007F5C0
+28007F5C0:lI110|H28007F5D0
+28007F5D0:lI98|H28007F5E0
+28007F5E0:lI101|H28007F5F0
+28007F5F0:lI99|H28007F600
+28007F600:lI97|H28007F610
+28007F610:lI117|H28007F620
+28007F620:lI115|H28007F630
+28007F630:lI101|H28007F640
+28007F640:lI32|H28007F650
+28007F650:lI103|H28007F660
+28007F660:lI108|H28007F670
+28007F670:lI111|H28007F680
+28007F680:lI98|H28007F690
+28007F690:lI97|H28007F6A0
+28007F6A0:lI108|H28007F6B0
+28007F6B0:lI95|H28007F6C0
+28007F6C0:lI103|H28007F6D0
+28007F6D0:lI114|H28007F6E0
+28007F6E0:lI111|H28007F6F0
+28007F6F0:lI117|H28007F700
+28007F700:lI112|H28007F710
+28007F710:lI115|H28007F720
+28007F720:lI32|H28007F730
+28007F730:lI112|H28007F740
+28007F740:lI97|H28007F750
+28007F750:lI114|H28007F760
+28007F760:lI97|H28007F770
+28007F770:lI109|H28007F780
+28007F780:lI101|H28007F790
+28007F790:lI116|H28007F7A0
+28007F7A0:lI101|H28007F7B0
+28007F7B0:lI114|H28007F7C0
+28007F7C0:lI32|H28007F7D0
+28007F7D0:lI119|H28007F7E0
+28007F7E0:lI101|H28007F7F0
+28007F7F0:lI114|H28007F800
+28007F800:lI101|H28007F810
+28007F810:lI32|H28007F820
+28007F820:lI110|H28007F830
+28007F830:lI111|H28007F840
+28007F840:lI116|H28007F850
+28007F850:lI32|H28007F860
+28007F860:lI105|H28007F870
+28007F870:lI110|H28007F880
+28007F880:lI32|H28007F890
+28007F890:lI97|H28007F8A0
+28007F8A0:lI103|H28007F8B0
+28007F8B0:lI114|H28007F8C0
+28007F8C0:lI101|H28007F8D0
+28007F8D0:lI101|H28007F8E0
+28007F8E0:lI109|H28007F8F0
+28007F8F0:lI101|H28007F900
+28007F900:lI110|H28007F910
+28007F910:lI116|H28007F920
+28007F920:lI46|H28007F930
+28007F930:lI126|H28007F940
+28007F940:lI110|N
+28007F950:t2:A4:erpc,AC:noconnection
+28007F968:t9:A5:gconf,A7:invalid,A9:undefined,N,A6:normal,N,A3:all,N,A7:no_conf
+28007F9B8:t2:A2:ok,A3:all
+28007F9D0:lI108|N
+28007F9E0:lI114|H28007F9D0
+28007F9F0:lI101|H28007F9E0
+28007FA00:lI46|H28007F9F0
+28007FA10:lI112|H28007FA00
+28007FA20:lI117|H28007FA10
+28007FA30:lI111|H28007FA20
+28007FA40:lI114|H28007FA30
+28007FA50:lI103|H28007FA40
+28007FA60:lI95|H28007FA50
+28007FA70:lI108|H28007FA60
+28007FA80:lI97|H28007FA70
+28007FA90:lI98|H28007FA80
+28007FAA0:lI111|H28007FA90
+28007FAB0:lI108|H28007FAA0
+28007FAC0:lI103|H28007FAB0
+28007FAD0:E50:g3AAAABOAP90bxlFikMVMF8VpcuovIcAAAAAAAAAAHcMZ2xvYmFsX2dyb3VwYQBiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+28007FAF8:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAABAAAAAHcMZ2xvYmFsX2dyb3VwYQFiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+28007FB20:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAACAAAAAHcMZ2xvYmFsX2dyb3VwYQJiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+28007FB48:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAADAAAAAHcMZ2xvYmFsX2dyb3VwYQNiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+28007FB70:E50:g3AAAABOA/90bxlFikMVMF8VpcuovIcAAAAHAAAAAHcMZ2xvYmFsX2dyb3VwYQdiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+28007FB98:E50:g3AAAABOAv90bxlFikMVMF8VpcuovIcAAAAIAAAAAHcMZ2xvYmFsX2dyb3VwYQhiB/ujeFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+28007FC58:lN|N
+28007FC68:t2:A4:erpc,A6:badarg
+28007FC80:lH28007FCA0|H28007FC90
+28007FC90:lA7:monitor|N
+28007FCA0:t2:A5:reply,AA:error_only
+28007FCB8:t2:A4:erpc,AC:noconnection
+28007FCD0:t2:A4:erpc,A7:timeout
+28007FCE8:Mf0:H280010188:
+28007FD00:lH28007FD10|N
+28007FD10:t2:A5:reply,A2:no
+28007FD28:lA4:info|N
+28007FD38:t2:A5:reply,AA:error_only
+28007FD50:t2:A5:error,H28007FD68
+28007FD68:t2:A4:erpc,A7:timeout
+28007FD80:lI108|N
+28007FD90:lI114|H28007FD80
+28007FDA0:lI101|H28007FD90
+28007FDB0:lI46|H28007FDA0
+28007FDC0:lI99|H28007FDB0
+28007FDD0:lI112|H28007FDC0
+28007FDE0:lI114|H28007FDD0
+28007FDF0:lI101|H28007FDE0
+28007FE00:E48:g3AAAABGArZvHmfGlHCs4XDYkOAiwhMAAAAAAAAAAHcEZXJwY2EAYgWzePNYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007FE28:E48:g3AAAABGA7ZvHmfGlHCs4XDYkOAiwhMAAAABAAAAAHcEZXJwY2EBYgWzePNYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+28007FE50:t1:AA:local_call
+280082718:lA8:infinity|N
+280082728:lH280082738|N
+280082738:t2:A8:postpone,A5:false
+280082750:lAA:gen_statem|N
+280082760:t1:A3:t0q
+280082770:Mf1:H280082760:N
+280082790:lH2800827A0|N
+2800827A0:t2:A8:internal,AA:init_state
+2800827B8:t5:A5:state,H2800827E8,N,H280082810,A5:false
+2800827E8:t2:A9:undefined,A9:undefined
+280082800:t1:A3:t0q
+280082810:Mf1:H280082800:N
+280082830:t2:A4:exit,A6:normal
+280082848:lI83|H280082858
+280082858:lI116|H280082868
+280082868:lI97|H280082878
+280082878:lI116|H280082888
+280082888:lI117|H280082898
+280082898:lI115|H2800828A8
+2800828A8:lI32|H2800828B8
+2800828B8:lI102|H2800828C8
+2800828C8:lI111|H2800828D8
+2800828D8:lI114|H2800828E8
+2800828E8:lI32|H2800828F8
+2800828F8:lI115|H280082908
+280082908:lI116|H280082918
+280082918:lI97|H280082928
+280082928:lI116|H280082938
+280082938:lI101|H280082948
+280082948:lI32|H280082958
+280082958:lI109|H280082968
+280082968:lI97|H280082978
+280082978:lI99|H280082988
+280082988:lI104|H280082998
+280082998:lI105|H2800829A8
+2800829A8:lI110|H2800829B8
+2800829B8:lI101|N
+2800829C8:Mf0:H280010188:
+2800829E0:lI83|H2800829F0
+2800829F0:lI116|H280082A00
+280082A00:lI97|H280082A10
+280082A10:lI116|H280082A20
+280082A20:lI101|N
+280082A30:lI80|H280082A40
+280082A40:lI111|H280082A50
+280082A50:lI115|H280082A60
+280082A60:lI116|H280082A70
+280082A70:lI112|H280082A80
+280082A80:lI111|H280082A90
+280082A90:lI110|H280082AA0
+280082AA0:lI101|H280082AB0
+280082AB0:lI100|N
+280082AC0:lI76|H280082AD0
+280082AD0:lI111|H280082AE0
+280082AE0:lI103|H280082AF0
+280082AF0:lI103|H280082B00
+280082B00:lI101|H280082B10
+280082B10:lI100|H280082B20
+280082B20:lI32|H280082B30
+280082B30:lI69|H280082B40
+280082B40:lI118|H280082B50
+280082B50:lI101|H280082B60
+280082B60:lI110|H280082B70
+280082B70:lI116|H280082B80
+280082B80:lI115|N
+280082B90:lI84|H280082BA0
+280082BA0:lI105|H280082BB0
+280082BB0:lI109|H280082BC0
+280082BC0:lI101|H280082BD0
+280082BD0:lI45|H280082BE0
+280082BE0:lI111|H280082BF0
+280082BF0:lI117|H280082C00
+280082C00:lI116|H280082C10
+280082C10:lI115|N
+280082C20:lI77|H280082C30
+280082C30:lI111|H280082C40
+280082C40:lI100|H280082C50
+280082C50:lI117|H280082C60
+280082C60:lI108|H280082C70
+280082C70:lI101|H280082C80
+280082C80:lI115|N
+280082C90:lI80|H280082CA0
+280082CA0:lI97|H280082CB0
+280082CB0:lI114|H280082CC0
+280082CC0:lI101|H280082CD0
+280082CD0:lI110|H280082CE0
+280082CE0:lI116|N
+280082CF0:lI83|H280082D00
+280082D00:lI116|H280082D10
+280082D10:lI97|H280082D20
+280082D20:lI116|H280082D30
+280082D30:lI117|H280082D40
+280082D40:lI115|N
+280082D50:lI126|H280082D60
+280082D60:lI116|H280082D70
+280082D70:lI112|N
+280082D80:lI126|H280082D90
+280082D90:lI116|H280082DA0
+280082DA0:lI112|H280082DB0
+280082DB0:lI32|H280082DC0
+280082DC0:lI61|H280082DD0
+280082DD0:lI62|H280082DE0
+280082DE0:lI32|H280082DF0
+280082DF0:lI126|H280082E00
+280082E00:lI116|H280082E10
+280082E10:lI112|N
+280082E20:lI42|H280082E30
+280082E30:lI68|H280082E40
+280082E40:lI66|H280082E50
+280082E50:lI71|H280082E60
+280082E60:lI42|H280082E70
+280082E70:lI32|H280082E80
+280082E80:lI126|H280082E90
+280082E90:lI116|H280082EA0
+280082EA0:lI112|H280082EB0
+280082EB0:lI32|H280082EC0
+280082EC0:lI126|H280082ED0
+280082ED0:lI116|H280082EE0
+280082EE0:lI119|H280082EF0
+280082EF0:lI32|H280082F00
+280082F00:lI126|H280082F10
+280082F10:lI116|H280082F20
+280082F20:lI115|H280082F30
+280082F30:lI32|H280082F40
+280082F40:lI105|H280082F50
+280082F50:lI110|H280082F60
+280082F60:lI32|H280082F70
+280082F70:lI115|H280082F80
+280082F80:lI116|H280082F90
+280082F90:lI97|H280082FA0
+280082FA0:lI116|H280082FB0
+280082FB0:lI101|H280082FC0
+280082FC0:lI32|H280082FD0
+280082FD0:lI126|H280082FE0
+280082FE0:lI116|H280082FF0
+280082FF0:lI115|H280083000
+280083000:lI126|H280083010
+280083010:lI110|N
+280083020:lI42|H280083030
+280083030:lI68|H280083040
+280083040:lI66|H280083050
+280083050:lI71|H280083060
+280083060:lI42|H280083070
+280083070:lI32|H280083080
+280083080:lI126|H280083090
+280083090:lI116|H2800830A0
+2800830A0:lI112|H2800830B0
+2800830B0:lI32|H2800830C0
+2800830C0:lI116|H2800830D0
+2800830D0:lI101|H2800830E0
+2800830E0:lI114|H2800830F0
+2800830F0:lI109|H280083100
+280083100:lI105|H280083110
+280083110:lI110|H280083120
+280083120:lI97|H280083130
+280083130:lI116|H280083140
+280083140:lI101|H280083150
+280083150:lI32|H280083160
+280083160:lI126|H280083170
+280083170:lI116|H280083180
+280083180:lI112|H280083190
+280083190:lI32|H2800831A0
+2800831A0:lI105|H2800831B0
+2800831B0:lI110|H2800831C0
+2800831C0:lI32|H2800831D0
+2800831D0:lI115|H2800831E0
+2800831E0:lI116|H2800831F0
+2800831F0:lI97|H280083200
+280083200:lI116|H280083210
+280083210:lI101|H280083220
+280083220:lI32|H280083230
+280083230:lI126|H280083240
+280083240:lI116|H280083250
+280083250:lI112|H280083260
+280083260:lI126|H280083270
+280083270:lI110|N
+280083280:lI42|H280083290
+280083290:lI68|H2800832A0
+2800832A0:lI66|H2800832B0
+2800832B0:lI71|H2800832C0
+2800832C0:lI42|H2800832D0
+2800832D0:lI32|H2800832E0
+2800832E0:lI126|H2800832F0
+2800832F0:lI116|H280083300
+280083300:lI112|H280083310
+280083310:lI32|H280083320
+280083320:lI115|H280083330
+280083330:lI116|H280083340
+280083340:lI97|H280083350
+280083350:lI114|H280083360
+280083360:lI116|H280083370
+280083370:lI95|H280083380
+280083380:lI116|H280083390
+280083390:lI105|H2800833A0
+2800833A0:lI109|H2800833B0
+2800833B0:lI101|H2800833C0
+2800833C0:lI114|H2800833D0
+2800833D0:lI32|H2800833E0
+2800833E0:lI126|H2800833F0
+2800833F0:lI116|H280083400
+280083400:lI112|H280083410
+280083410:lI32|H280083420
+280083420:lI105|H280083430
+280083430:lI110|H280083440
+280083440:lI32|H280083450
+280083450:lI115|H280083460
+280083460:lI116|H280083470
+280083470:lI97|H280083480
+280083480:lI116|H280083490
+280083490:lI101|H2800834A0
+2800834A0:lI32|H2800834B0
+2800834B0:lI126|H2800834C0
+2800834C0:lI116|H2800834D0
+2800834D0:lI112|H2800834E0
+2800834E0:lI126|H2800834F0
+2800834F0:lI110|N
+280083500:lI42|H280083510
+280083510:lI68|H280083520
+280083520:lI66|H280083530
+280083530:lI71|H280083540
+280083540:lI42|H280083550
+280083550:lI32|H280083560
+280083560:lI126|H280083570
+280083570:lI116|H280083580
+280083580:lI112|H280083590
+280083590:lI32|H2800835A0
+2800835A0:lI115|H2800835B0
+2800835B0:lI101|H2800835C0
+2800835C0:lI110|H2800835D0
+2800835D0:lI100|H2800835E0
+2800835E0:lI32|H2800835F0
+2800835F0:lI126|H280083600
+280083600:lI116|H280083610
+280083610:lI112|H280083620
+280083620:lI32|H280083630
+280083630:lI116|H280083640
+280083640:lI111|H280083650
+280083650:lI32|H280083660
+280083660:lI126|H280083670
+280083670:lI116|H280083680
+280083680:lI119|H280083690
+280083690:lI126|H2800836A0
+2800836A0:lI110|N
+2800836B0:lI42|H2800836C0
+2800836C0:lI68|H2800836D0
+2800836D0:lI66|H2800836E0
+2800836E0:lI71|H2800836F0
+2800836F0:lI42|H280083700
+280083700:lI32|H280083710
+280083710:lI126|H280083720
+280083720:lI116|H280083730
+280083730:lI112|H280083740
+280083740:lI32|H280083750
+280083750:lI109|H280083760
+280083760:lI111|H280083770
+280083770:lI100|H280083780
+280083780:lI117|H280083790
+280083790:lI108|H2800837A0
+2800837A0:lI101|H2800837B0
+2800837B0:lI32|H2800837C0
+2800837C0:lI126|H2800837D0
+2800837D0:lI116|H2800837E0
+2800837E0:lI112|H2800837F0
+2800837F0:lI32|H280083800
+280083800:lI105|H280083810
+280083810:lI110|H280083820
+280083820:lI32|H280083830
+280083830:lI115|H280083840
+280083840:lI116|H280083850
+280083850:lI97|H280083860
+280083860:lI116|H280083870
+280083870:lI101|H280083880
+280083880:lI32|H280083890
+280083890:lI126|H2800838A0
+2800838A0:lI116|H2800838B0
+2800838B0:lI112|H2800838C0
+2800838C0:lI126|H2800838D0
+2800838D0:lI110|N
+2800838E0:lI42|H2800838F0
+2800838F0:lI68|H280083900
+280083900:lI66|H280083910
+280083910:lI71|H280083920
+280083920:lI42|H280083930
+280083930:lI32|H280083940
+280083940:lI126|H280083950
+280083950:lI116|H280083960
+280083960:lI112|H280083970
+280083970:lI32|H280083980
+280083980:lI105|H280083990
+280083990:lI110|H2800839A0
+2800839A0:lI115|H2800839B0
+2800839B0:lI101|H2800839C0
+2800839C0:lI114|H2800839D0
+2800839D0:lI116|H2800839E0
+2800839E0:lI95|H2800839F0
+2800839F0:lI116|H280083A00
+280083A00:lI105|H280083A10
+280083A10:lI109|H280083A20
+280083A20:lI101|H280083A30
+280083A30:lI111|H280083A40
+280083A40:lI117|H280083A50
+280083A50:lI116|H280083A60
+280083A60:lI32|H280083A70
+280083A70:lI126|H280083A80
+280083A80:lI116|H280083A90
+280083A90:lI112|H280083AA0
+280083AA0:lI32|H280083AB0
+280083AB0:lI105|H280083AC0
+280083AC0:lI110|H280083AD0
+280083AD0:lI32|H280083AE0
+280083AE0:lI115|H280083AF0
+280083AF0:lI116|H280083B00
+280083B00:lI97|H280083B10
+280083B10:lI116|H280083B20
+280083B20:lI101|H280083B30
+280083B30:lI32|H280083B40
+280083B40:lI126|H280083B50
+280083B50:lI116|H280083B60
+280083B60:lI112|H280083B70
+280083B70:lI126|H280083B80
+280083B80:lI110|N
+280083B90:lI42|H280083BA0
+280083BA0:lI68|H280083BB0
+280083BB0:lI66|H280083BC0
+280083BC0:lI71|H280083BD0
+280083BD0:lI42|H280083BE0
+280083BE0:lI32|H280083BF0
+280083BF0:lI126|H280083C00
+280083C00:lI116|H280083C10
+280083C10:lI112|H280083C20
+280083C20:lI32|H280083C30
+280083C30:lI114|H280083C40
+280083C40:lI101|H280083C50
+280083C50:lI99|H280083C60
+280083C60:lI101|H280083C70
+280083C70:lI105|H280083C80
+280083C80:lI118|H280083C90
+280083C90:lI101|H280083CA0
+280083CA0:lI32|H280083CB0
+280083CB0:lI126|H280083CC0
+280083CC0:lI116|H280083CD0
+280083CD0:lI115|H280083CE0
+280083CE0:lI32|H280083CF0
+280083CF0:lI105|H280083D00
+280083D00:lI110|H280083D10
+280083D10:lI32|H280083D20
+280083D20:lI115|H280083D30
+280083D30:lI116|H280083D40
+280083D40:lI97|H280083D50
+280083D50:lI116|H280083D60
+280083D60:lI101|H280083D70
+280083D70:lI32|H280083D80
+280083D80:lI126|H280083D90
+280083D90:lI116|H280083DA0
+280083DA0:lI112|H280083DB0
+280083DB0:lI126|H280083DC0
+280083DC0:lI110|N
+280083DD0:lI42|H280083DE0
+280083DE0:lI68|H280083DF0
+280083DF0:lI66|H280083E00
+280083E00:lI71|H280083E10
+280083E10:lI42|H280083E20
+280083E20:lI32|H280083E30
+280083E30:lI126|H280083E40
+280083E40:lI116|H280083E50
+280083E50:lI112|H280083E60
+280083E60:lI32|H280083E70
+280083E70:lI101|H280083E80
+280083E80:lI110|H280083E90
+280083E90:lI116|H280083EA0
+280083EA0:lI101|H280083EB0
+280083EB0:lI114|H280083EC0
+280083EC0:lI32|H280083ED0
+280083ED0:lI126|H280083EE0
+280083EE0:lI116|H280083EF0
+280083EF0:lI112|H280083F00
+280083F00:lI32|H280083F10
+280083F10:lI105|H280083F20
+280083F20:lI110|H280083F30
+280083F30:lI32|H280083F40
+280083F40:lI115|H280083F50
+280083F50:lI116|H280083F60
+280083F60:lI97|H280083F70
+280083F70:lI116|H280083F80
+280083F80:lI101|H280083F90
+280083F90:lI32|H280083FA0
+280083FA0:lI126|H280083FB0
+280083FB0:lI116|H280083FC0
+280083FC0:lI112|H280083FD0
+280083FD0:lI126|H280083FE0
+280083FE0:lI110|N
+280083FF0:lI99|H280084000
+280084000:lI97|H280084010
+280084010:lI108|H280084020
+280084020:lI108|H280084030
+280084030:lI32|H280084040
+280084040:lI126|H280084050
+280084050:lI116|H280084060
+280084060:lI112|H280084070
+280084070:lI32|H280084080
+280084080:lI102|H280084090
+280084090:lI114|H2800840A0
+2800840A0:lI111|H2800840B0
+2800840B0:lI109|H2800840C0
+2800840C0:lI32|H2800840D0
+2800840D0:lI126|H2800840E0
+2800840E0:lI116|H2800840F0
+2800840F0:lI119|N
+280084100:lI126|H280084110
+280084110:lI116|H280084120
+280084120:lI119|H280084130
+280084130:lI32|H280084140
+280084140:lI126|H280084150
+280084150:lI116|H280084160
+280084160:lI112|N
+280084170:t2:A2B:should_not_have_arrived_here_but_instead_in,H280084188
+280084188:t3:AA:gen_statem,A15:wakeup_from_hibernate,I3
+2800841A8:t2:A2A:bad_state_enter_action_from_state_function,A8:postpone
+2800841C0:t2:A2A:bad_state_enter_action_from_state_function,A13:pop_callback_module
+2800841D8:t2:AA:gen_statem,A9:terminate
+2800841F0:t3:AC:error_logger,A6:domain,A9:report_cb
+280084210:Mf3:H2800841F0:H280084268,H280084240,H2800842B8
+280084240:lA3:otp|N
+280084250:t2:A3:tag,A9:report_cb
+280084268:Mf2:H280084250:A5:error,H280084290
+280084290:E1C:g3F3Cmdlbl9zdGF0ZW13CmZvcm1hdF9sb2dhAQ==
+2800842B8:E1C:g3F3Cmdlbl9zdGF0ZW13CmZvcm1hdF9sb2dhAg==
+2800842E0:t3:A4:line,A4:file,A3:mfa
+280084300:Mf3:H2800842E0:I2617,H280084330,H280084410
+280084330:lI103|H280084340
+280084340:lI101|H280084350
+280084350:lI110|H280084360
+280084360:lI95|H280084370
+280084370:lI115|H280084380
+280084380:lI116|H280084390
+280084390:lI97|H2800843A0
+2800843A0:lI116|H2800843B0
+2800843B0:lI101|H2800843C0
+2800843C0:lI109|H2800843D0
+2800843D0:lI46|H2800843E0
+2800843E0:lI101|H2800843F0
+2800843F0:lI114|H280084400
+280084400:lI108|N
+280084410:t3:AA:gen_statem,AA:error_info,I7
+280084430:lA12:current_stacktrace|H280084440
+280084440:lAF:registered_name|N
+280084450:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+280084478:Mf4:H280084450:A9:unlimited,A9:unlimited,A4:utf8,A5:false
+2800844B0:lI46|H2800844C0
+2800844C0:lI32|H2800844D0
+2800844D0:lI83|H2800844E0
+2800844E0:lI116|H2800844F0
+2800844F0:lI97|H280084500
+280084500:lI99|H280084510
+280084510:lI107|H280084520
+280084520:lI58|H280084530
+280084530:lI32|N
+280084540:lI46|H280084550
+280084550:lI32|H280084560
+280084560:lI76|H280084570
+280084570:lI97|H280084580
+280084580:lI115|H280084590
+280084590:lI116|H2800845A0
+2800845A0:lI32|H2800845B0
+2800845B0:lI101|H2800845C0
+2800845C0:lI118|H2800845D0
+2800845D0:lI101|H2800845E0
+2800845E0:lI110|H2800845F0
+2800845F0:lI116|H280084600
+280084600:lI58|H280084610
+280084610:lI32|N
+280084620:lI46|H280084630
+280084630:lI32|H280084640
+280084640:lI76|H280084650
+280084650:lI111|H280084660
+280084660:lI103|H280084670
+280084670:lI58|H280084680
+280084680:lI32|N
+280084690:lH2800846A0|N
+2800846A0:lI46|N
+2800846B0:lI46|H2800846C0
+2800846C0:lI32|H2800846D0
+2800846D0:lI83|H2800846E0
+2800846E0:lI116|H2800846F0
+2800846F0:lI97|H280084700
+280084700:lI116|H280084710
+280084710:lI101|H280084720
+280084720:lI58|H280084730
+280084730:lI32|N
+280084740:lI32|H280084750
+280084750:lI116|H280084760
+280084760:lI101|H280084770
+280084770:lI114|H280084780
+280084780:lI109|H280084790
+280084790:lI105|H2800847A0
+2800847A0:lI110|H2800847B0
+2800847B0:lI97|H2800847C0
+2800847C0:lI116|H2800847D0
+2800847D0:lI105|H2800847E0
+2800847E0:lI110|H2800847F0
+2800847F0:lI103|H280084800
+280084800:lI46|H280084810
+280084810:lI32|H280084820
+280084820:lI82|H280084830
+280084830:lI101|H280084840
+280084840:lI97|H280084850
+280084850:lI115|H280084860
+280084860:lI111|H280084870
+280084870:lI110|H280084880
+280084880:lI58|H280084890
+280084890:lI32|N
+2800848A0:lI83|H2800848B0
+2800848B0:lI116|H2800848C0
+2800848C0:lI97|H2800848D0
+2800848D0:lI116|H2800848E0
+2800848E0:lI101|H2800848F0
+2800848F0:lI32|H280084900
+280084900:lI109|H280084910
+280084910:lI97|H280084920
+280084920:lI99|H280084930
+280084930:lI104|H280084940
+280084940:lI105|H280084950
+280084950:lI110|H280084960
+280084960:lI101|H280084970
+280084970:lI32|N
+280084980:lAB:state_enter|N
+280084990:lI126|H2800849A0
+2800849A0:lI110|N
+2800849B0:lI42|H2800849C0
+2800849C0:lI42|H2800849D0
+2800849D0:lI32|H2800849E0
+2800849E0:lI76|H2800849F0
+2800849F0:lI97|H280084A00
+280084A00:lI115|H280084A10
+280084A10:lI116|H280084A20
+280084A20:lI32|H280084A30
+280084A30:lI101|H280084A40
+280084A40:lI118|H280084A50
+280084A50:lI101|H280084A60
+280084A60:lI110|H280084A70
+280084A70:lI116|H280084A80
+280084A80:lI32|H280084A90
+280084A90:lI61|H280084AA0
+280084AA0:lI32|N
+280084AB0:lI42|H280084AC0
+280084AC0:lI42|H280084AD0
+280084AD0:lI32|H280084AE0
+280084AE0:lI81|H280084AF0
+280084AF0:lI117|H280084B00
+280084B00:lI101|H280084B10
+280084B10:lI117|H280084B20
+280084B20:lI101|H280084B30
+280084B30:lI100|H280084B40
+280084B40:lI32|H280084B50
+280084B50:lI61|H280084B60
+280084B60:lI32|N
+280084B70:lI42|H280084B80
+280084B80:lI42|H280084B90
+280084B90:lI32|H280084BA0
+280084BA0:lI80|H280084BB0
+280084BB0:lI111|H280084BC0
+280084BC0:lI115|H280084BD0
+280084BD0:lI116|H280084BE0
+280084BE0:lI112|H280084BF0
+280084BF0:lI111|H280084C00
+280084C00:lI110|H280084C10
+280084C10:lI101|H280084C20
+280084C20:lI100|H280084C30
+280084C30:lI32|H280084C40
+280084C40:lI61|H280084C50
+280084C50:lI32|N
+280084C60:lI42|H280084C70
+280084C70:lI42|H280084C80
+280084C80:lI32|H280084C90
+280084C90:lI83|H280084CA0
+280084CA0:lI116|H280084CB0
+280084CB0:lI97|H280084CC0
+280084CC0:lI99|H280084CD0
+280084CD0:lI107|H280084CE0
+280084CE0:lI116|H280084CF0
+280084CF0:lI114|H280084D00
+280084D00:lI97|H280084D10
+280084D10:lI99|H280084D20
+280084D20:lI101|H280084D30
+280084D30:lI32|H280084D40
+280084D40:lI61|H280084D50
+280084D50:lI126|H280084D60
+280084D60:lI110|H280084D70
+280084D70:lI42|H280084D80
+280084D80:lI42|H280084D90
+280084D90:lI32|H280084DA0
+280084DA0:lI32|N
+280084DB0:lI42|H280084DC0
+280084DC0:lI42|H280084DD0
+280084DD0:lI32|H280084DE0
+280084DE0:lI84|H280084DF0
+280084DF0:lI105|H280084E00
+280084E00:lI109|H280084E10
+280084E10:lI101|H280084E20
+280084E20:lI45|H280084E30
+280084E30:lI111|H280084E40
+280084E40:lI117|H280084E50
+280084E50:lI116|H280084E60
+280084E60:lI115|H280084E70
+280084E70:lI58|H280084E80
+280084E80:lI32|N
+280084E90:lI42|H280084EA0
+280084EA0:lI42|H280084EB0
+280084EB0:lI32|H280084EC0
+280084EC0:lI76|H280084ED0
+280084ED0:lI111|H280084EE0
+280084EE0:lI103|H280084EF0
+280084EF0:lI32|H280084F00
+280084F00:lI61|H280084F10
+280084F10:lI126|H280084F20
+280084F20:lI110|H280084F30
+280084F30:lI42|H280084F40
+280084F40:lI42|H280084F50
+280084F50:lI32|H280084F60
+280084F60:lI32|N
+280084F70:lI42|H280084F80
+280084F80:lI42|H280084F90
+280084F90:lI32|H280084FA0
+280084FA0:lI67|H280084FB0
+280084FB0:lI97|H280084FC0
+280084FC0:lI108|H280084FD0
+280084FD0:lI108|H280084FE0
+280084FE0:lI98|H280084FF0
+280084FF0:lI97|H280085000
+280085000:lI99|H280085010
+280085010:lI107|H280085020
+280085020:lI32|H280085030
+280085030:lI109|H280085040
+280085040:lI111|H280085050
+280085050:lI100|H280085060
+280085060:lI101|H280085070
+280085070:lI32|H280085080
+280085080:lI61|H280085090
+280085090:lI32|N
+2800850A0:lI42|H2800850B0
+2800850B0:lI42|H2800850C0
+2800850C0:lI32|H2800850D0
+2800850D0:lI67|H2800850E0
+2800850E0:lI97|H2800850F0
+2800850F0:lI108|H280085100
+280085100:lI108|H280085110
+280085110:lI98|H280085120
+280085120:lI97|H280085130
+280085130:lI99|H280085140
+280085140:lI107|H280085150
+280085150:lI32|H280085160
+280085160:lI109|H280085170
+280085170:lI111|H280085180
+280085180:lI100|H280085190
+280085190:lI117|H2800851A0
+2800851A0:lI108|H2800851B0
+2800851B0:lI101|H2800851C0
+2800851C0:lI115|H2800851D0
+2800851D0:lI32|H2800851E0
+2800851E0:lI61|H2800851F0
+2800851F0:lI32|N
+280085200:lI58|N
+280085210:lI42|H280085220
+280085220:lI42|H280085230
+280085230:lI32|H280085240
+280085240:lI82|H280085250
+280085250:lI101|H280085260
+280085260:lI97|H280085270
+280085270:lI115|H280085280
+280085280:lI111|H280085290
+280085290:lI110|H2800852A0
+2800852A0:lI32|H2800852B0
+2800852B0:lI102|H2800852C0
+2800852C0:lI111|H2800852D0
+2800852D0:lI114|H2800852E0
+2800852E0:lI32|H2800852F0
+2800852F0:lI116|H280085300
+280085300:lI101|H280085310
+280085310:lI114|H280085320
+280085320:lI109|H280085330
+280085330:lI105|H280085340
+280085340:lI110|H280085350
+280085350:lI97|H280085360
+280085360:lI116|H280085370
+280085370:lI105|H280085380
+280085380:lI111|H280085390
+280085390:lI110|H2800853A0
+2800853A0:lI32|H2800853B0
+2800853B0:lI61|H2800853C0
+2800853C0:lI32|N
+2800853D0:lI42|H2800853E0
+2800853E0:lI42|H2800853F0
+2800853F0:lI32|H280085400
+280085400:lI87|H280085410
+280085410:lI104|H280085420
+280085420:lI101|H280085430
+280085430:lI110|H280085440
+280085440:lI32|H280085450
+280085450:lI115|H280085460
+280085460:lI101|H280085470
+280085470:lI114|H280085480
+280085480:lI118|H280085490
+280085490:lI101|H2800854A0
+2800854A0:lI114|H2800854B0
+2800854B0:lI32|H2800854C0
+2800854C0:lI115|H2800854D0
+2800854D0:lI116|H2800854E0
+2800854E0:lI97|H2800854F0
+2800854F0:lI116|H280085500
+280085500:lI101|H280085510
+280085510:lI32|H280085520
+280085520:lI32|H280085530
+280085530:lI61|H280085540
+280085540:lI32|N
+280085550:lI32|H280085560
+280085560:lI116|H280085570
+280085570:lI101|H280085580
+280085580:lI114|H280085590
+280085590:lI109|H2800855A0
+2800855A0:lI105|H2800855B0
+2800855B0:lI110|H2800855C0
+2800855C0:lI97|H2800855D0
+2800855D0:lI116|H2800855E0
+2800855E0:lI105|H2800855F0
+2800855F0:lI110|H280085600
+280085600:lI103|H280085610
+280085610:lI126|H280085620
+280085620:lI110|N
+280085630:lI42|H280085640
+280085640:lI42|H280085650
+280085650:lI32|H280085660
+280085660:lI83|H280085670
+280085670:lI116|H280085680
+280085680:lI97|H280085690
+280085690:lI116|H2800856A0
+2800856A0:lI101|H2800856B0
+2800856B0:lI32|H2800856C0
+2800856C0:lI109|H2800856D0
+2800856D0:lI97|H2800856E0
+2800856E0:lI99|H2800856F0
+2800856F0:lI104|H280085700
+280085700:lI105|H280085710
+280085710:lI110|H280085720
+280085720:lI101|H280085730
+280085730:lI32|N
+280085740:lI32|H280085750
+280085750:lI115|H280085760
+280085760:lI116|H280085770
+280085770:lI97|H280085780
+280085780:lI99|H280085790
+280085790:lI107|H2800857A0
+2800857A0:lI116|H2800857B0
+2800857B0:lI114|H2800857C0
+2800857C0:lI97|H2800857D0
+2800857D0:lI99|H2800857E0
+2800857E0:lI101|H2800857F0
+2800857F0:lI58|H280085800
+280085800:lI32|N
+280085810:lI32|H280085820
+280085820:lI67|H280085830
+280085830:lI108|H280085840
+280085840:lI105|H280085850
+280085850:lI101|H280085860
+280085860:lI110|H280085870
+280085870:lI116|H280085880
+280085880:lI32|N
+280085890:lI32|H2800858A0
+2800858A0:lI67|H2800858B0
+2800858B0:lI108|H2800858C0
+2800858C0:lI105|H2800858D0
+2800858D0:lI101|H2800858E0
+2800858E0:lI110|H2800858F0
+2800858F0:lI116|H280085900
+280085900:lI32|H280085910
+280085910:lI126|H280085920
+280085920:lI48|H280085930
+280085930:lI112|H280085940
+280085940:lI32|H280085950
+280085950:lI105|H280085960
+280085960:lI115|H280085970
+280085970:lI32|H280085980
+280085980:lI114|H280085990
+280085990:lI101|H2800859A0
+2800859A0:lI109|H2800859B0
+2800859B0:lI111|H2800859C0
+2800859C0:lI116|H2800859D0
+2800859D0:lI101|H2800859E0
+2800859E0:lI32|H2800859F0
+2800859F0:lI111|H280085A00
+280085A00:lI110|H280085A10
+280085A10:lI32|H280085A20
+280085A20:lI110|H280085A30
+280085A30:lI111|H280085A40
+280085A40:lI100|H280085A50
+280085A50:lI101|H280085A60
+280085A60:lI32|H280085A70
+280085A70:lI126|H280085A80
+280085A80:lI48|H280085A90
+280085A90:lI112|H280085AA0
+280085AA0:lI46|N
+280085AB0:lI32|H280085AC0
+280085AC0:lI67|H280085AD0
+280085AD0:lI108|H280085AE0
+280085AE0:lI105|H280085AF0
+280085AF0:lI101|H280085B00
+280085B00:lI110|H280085B10
+280085B10:lI116|H280085B20
+280085B20:lI32|H280085B30
+280085B30:lI126|H280085B40
+280085B40:lI48|H280085B50
+280085B50:lI112|H280085B60
+280085B60:lI32|H280085B70
+280085B70:lI105|H280085B80
+280085B80:lI115|H280085B90
+280085B90:lI32|H280085BA0
+280085BA0:lI100|H280085BB0
+280085BB0:lI101|H280085BC0
+280085BC0:lI97|H280085BD0
+280085BD0:lI100|H280085BE0
+280085BE0:lI46|N
+280085BF0:t2:N,N
+280085C08:lH280085C18|N
+280085C18:lI126|H280085C28
+280085C28:lI110|N
+280085C38:lI32|H280085C48
+280085C48:lI115|H280085C58
+280085C58:lI116|H280085C68
+280085C68:lI97|H280085C78
+280085C78:lI99|H280085C88
+280085C88:lI107|H280085C98
+280085C98:lI116|H280085CA8
+280085CA8:lI114|H280085CB8
+280085CB8:lI97|H280085CC8
+280085CC8:lI99|H280085CD8
+280085CD8:lI101|H280085CE8
+280085CE8:lI126|H280085CF8
+280085CF8:lI110|H280085D08
+280085D08:lI42|H280085D18
+280085D18:lI42|H280085D28
+280085D28:lI32|N
+280085D38:lI42|H280085D48
+280085D48:lI42|H280085D58
+280085D58:lI32|H280085D68
+280085D68:lI67|H280085D78
+280085D78:lI108|H280085D88
+280085D88:lI105|H280085D98
+280085D98:lI101|H280085DA8
+280085DA8:lI110|H280085DB8
+280085DB8:lI116|H280085DC8
+280085DC8:lI32|N
+280085DD8:lI42|H280085DE8
+280085DE8:lI42|H280085DF8
+280085DF8:lI32|H280085E08
+280085E08:lI67|H280085E18
+280085E18:lI108|H280085E28
+280085E28:lI105|H280085E38
+280085E38:lI101|H280085E48
+280085E48:lI110|H280085E58
+280085E58:lI116|H280085E68
+280085E68:lI32|H280085E78
+280085E78:lI126|H280085E88
+280085E88:lI112|H280085E98
+280085E98:lI32|H280085EA8
+280085EA8:lI105|H280085EB8
+280085EB8:lI115|H280085EC8
+280085EC8:lI32|H280085ED8
+280085ED8:lI114|H280085EE8
+280085EE8:lI101|H280085EF8
+280085EF8:lI109|H280085F08
+280085F08:lI111|H280085F18
+280085F18:lI116|H280085F28
+280085F28:lI101|H280085F38
+280085F38:lI32|H280085F48
+280085F48:lI111|H280085F58
+280085F58:lI110|H280085F68
+280085F68:lI32|H280085F78
+280085F78:lI110|H280085F88
+280085F88:lI111|H280085F98
+280085F98:lI100|H280085FA8
+280085FA8:lI101|H280085FB8
+280085FB8:lI32|H280085FC8
+280085FC8:lI126|H280085FD8
+280085FD8:lI112|H280085FE8
+280085FE8:lI126|H280085FF8
+280085FF8:lI110|N
+280086008:lI42|H280086018
+280086018:lI42|H280086028
+280086028:lI32|H280086038
+280086038:lI67|H280086048
+280086048:lI108|H280086058
+280086058:lI105|H280086068
+280086068:lI101|H280086078
+280086078:lI110|H280086088
+280086088:lI116|H280086098
+280086098:lI32|H2800860A8
+2800860A8:lI126|H2800860B8
+2800860B8:lI112|H2800860C8
+2800860C8:lI32|H2800860D8
+2800860D8:lI105|H2800860E8
+2800860E8:lI115|H2800860F8
+2800860F8:lI32|H280086108
+280086108:lI100|H280086118
+280086118:lI101|H280086128
+280086128:lI97|H280086138
+280086138:lI100|H280086148
+280086148:lI126|H280086158
+280086158:lI110|N
+280086168:lI112|N
+280086178:lI80|N
+280086188:lI48|N
+280086198:lI116|N
+2800861A8:lH280086208|H2800861B8
+2800861B8:lH280086220|H2800861C8
+2800861C8:lH280086238|H2800861D8
+2800861D8:lH280086250|H2800861E8
+2800861E8:lH280086268|H2800861F8
+2800861F8:lH280086280|N
+280086208:t2:AD:format_status,I1
+280086220:t2:AD:format_status,I2
+280086238:t2:A9:terminate,I3
+280086250:t2:AB:code_change,I4
+280086268:t2:AA:state_name,I3
+280086280:t2:AC:handle_event,I4
+280086298:lH280086318|H2800862A8
+2800862A8:lH280086330|H2800862B8
+2800862B8:lH280086348|H2800862C8
+2800862C8:lH280086360|H2800862D8
+2800862D8:lH280086378|H2800862E8
+2800862E8:lH280086390|H2800862F8
+2800862F8:lH2800863A8|H280086308
+280086308:lH2800863C0|N
+280086318:t2:A4:init,I1
+280086330:t2:AD:callback_mode,I0
+280086348:t2:AA:state_name,I3
+280086360:t2:AC:handle_event,I4
+280086378:t2:A9:terminate,I3
+280086390:t2:AB:code_change,I4
+2800863A8:t2:AD:format_status,I2
+2800863C0:t2:AD:format_status,I1
+2800863D8:lI108|N
+2800863E8:lI114|H2800863D8
+2800863F8:lI101|H2800863E8
+280086408:lI46|H2800863F8
+280086418:lI109|H280086408
+280086428:lI101|H280086418
+280086438:lI116|H280086428
+280086448:lI97|H280086438
+280086458:lI116|H280086448
+280086468:lI115|H280086458
+280086478:lI95|H280086468
+280086488:lI110|H280086478
+280086498:lI101|H280086488
+2800864A8:lI103|H280086498
+2800864B8:t5:A4:data,A3:log,A5:state,A9:postponed,A8:timeouts
+2800864E8:E4E:g3AAAABMA28avFfTiJ0lhkokoxIXuNAAAAAAAAAAAHcKZ2VuX3N0YXRlbWEAYgN41eJYdw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+280086510:t7:A4:data,A6:reason,A3:log,A5:state,A5:queue,A9:postponed,A8:timeouts
+280086550:tC:A5:label,A4:name,A6:reason,A3:log,A5:state,A5:queue,A7:modules,AB:client_info,AD:callback_mode,A9:postponed,A8:timeouts,AB:state_enter
+2800865B8:t4:AB:chars_limit,A5:depth,A8:encoding,AB:single_line
+2800865F8:Mf0:H280010188:
+280086610:lI112|H280086620
+280086620:lI114|H280086630
+280086630:lI105|H280086640
+280086640:lI109|H280086650
+280086650:lI95|H280086660
+280086660:lI116|H280086670
+280086670:lI116|H280086680
+280086680:lI121|N
+280086690:t2:A5:error,A7:enotsup
+2800866A8:lH2800866D8|H2800866B8
+2800866B8:lH280086738|H2800866C8
+2800866C8:lH2800867B8|N
+2800866D8:lI76|H2800866E8
+2800866E8:lI67|H2800866F8
+2800866F8:lI95|H280086708
+280086708:lI65|H280086718
+280086718:lI76|H280086728
+280086728:lI76|N
+280086738:lI76|H280086748
+280086748:lI67|H280086758
+280086758:lI95|H280086768
+280086768:lI67|H280086778
+280086778:lI84|H280086788
+280086788:lI89|H280086798
+280086798:lI80|H2800867A8
+2800867A8:lI69|N
+2800867B8:lI76|H2800867C8
+2800867C8:lI65|H2800867D8
+2800867D8:lI78|H2800867E8
+2800867E8:lI71|N
+2800867F8:lA7:unicode|N
+280086808:Yc1309301C0:0:9C
+280086838:Yh7:G1tIG1sySg==
+280086850:Yh3:G1tB
+280086868:Yh1:Cg==
+280086880:Yh1:CA==
+280086898:Yh3:G1tD
+2800868B0:Yh4:G1sxSQ==
+2800868C8:Yh3:G1tK
+2800868E0:Yh4:G1s2bg==
+2800868F8:Yh15:G1xbKFswLTldKyk7KFswLTldKylS
+280086920:t4:A5:input,A4:echo,A3:tty,A5:canon
+280086948:Mf4:H280086920:A4:true,A5:false,A4:true,A5:false
+280086980:lI84|H280086990
+280086990:lI69|H2800869A0
+2800869A0:lI82|H2800869B0
+2800869B0:lI77|N
+2800869C0:lI99|H2800869D0
+2800869D0:lI108|H2800869E0
+2800869E0:lI101|H2800869F0
+2800869F0:lI97|H280086A00
+280086A00:lI114|N
+280086A10:lI99|H280086A20
+280086A20:lI111|N
+280086A30:lI117|H280086A40
+280086A40:lI112|N
+280086A50:lI100|H280086A60
+280086A60:lI111|N
+280086A70:lI98|H280086A80
+280086A80:lI115|N
+280086A90:lI98|H280086AA0
+280086AA0:lI99|N
+280086AB0:lI110|H280086AC0
+280086AC0:lI100|N
+280086AD0:lI73|H280086AE0
+280086AE0:lI67|N
+280086AF0:lI116|H280086B00
+280086B00:lI97|N
+280086B10:lI68|H280086B20
+280086B20:lI67|N
+280086B30:lI117|H280086B40
+280086B40:lI55|N
+280086B50:lI117|H280086B60
+280086B60:lI54|N
+280086B70:t2:A2:ok,H280086B88
+280086B88:YhA:G1slaSVkOyVkUg==
+280086BA8:lI99|H280086BB8
+280086BB8:lI100|N
+280086BC8:lI120|H280086BD8
+280086BD8:lI110|N
+280086BE8:lH280086BF8|N
+280086BF8:t2:A5:alias,AF:reply_demonitor
+280086C10:Yh0:
+280086C20:t2:A11:set_unicode_state,A5:false
+280086C38:t2:A5:utf16,A6:little
+280086C50:lI13|H280086C60
+280086C60:lI10|N
+280086C70:t2:A4:move,I0
+280086C88:lN|N
+280086C98:Yh1:Bw==
+280086CB0:t2:N,N
+280086CC8:Yh1:IA==
+280086CE0:Yh1:DQ==
+280086CF8:Yh2:DQo=
+280086D10:lI94|H280086D20
+280086D20:lI63|N
+280086D30:lI0|N
+280086D40:lI92|H280086D50
+280086D50:lI36|H280086D60
+280086D60:lI60|H280086D70
+280086D70:lI91|H280086D80
+280086D80:lI94|H280086D90
+280086D90:lI62|H280086DA0
+280086DA0:lI93|H280086DB0
+280086DB0:lI42|H280086DC0
+280086DC0:lI62|N
+280086DD0:lI10|N
+280086DE0:lI85|H280086DF0
+280086DF0:lI84|H280086E00
+280086E00:lI70|H280086E10
+280086E10:lI45|H280086E20
+280086E20:lI56|N
+280086E30:lI108|N
+280086E40:lI114|H280086E30
+280086E50:lI101|H280086E40
+280086E60:lI46|H280086E50
+280086E70:lI121|H280086E60
+280086E80:lI116|H280086E70
+280086E90:lI116|H280086E80
+280086EA0:lI95|H280086E90
+280086EB0:lI109|H280086EA0
+280086EC0:lI105|H280086EB0
+280086ED0:lI114|H280086EC0
+280086EE0:lI112|H280086ED0
+280086EF0:E4C:g3AAAABKAY/2CN5VWPSliGwYiyNwoQIAAAAAAAAAAHcIcHJpbV90dHlhAGIEf7BGWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280086F18:t2:A4:read,A5:write
+280086F30:E4C:g3AAAABKAY/2CN5VWPSliGwYiyNwoQIAAAABAAAAAHcIcHJpbV90dHlhAWIEf7BGWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280086F58:E4C:g3AAAABKAY/2CN5VWPSliGwYiyNwoQIAAAACAAAAAHcIcHJpbV90dHlhAmIEf7BGWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+2800870F0:E1A:g3F3DGVkbGluX2V4cGFuZHcGZXhwYW5kYQI=
+280087118:t2:A5:error,A7:timeout
+280087130:t2:A5:error,A7:enotsup
+280087148:t2:AC:get_password,A6:latin1
+280087160:t2:A5:error,A7:request
+280087178:t2:A8:encoding,A7:unicode
+280087190:t2:A8:encoding,A6:latin1
+2800871A8:lH2800871B8|N
+2800871B8:t2:A4:list,A6:binary
+2800871D0:t2:A4:exit,AA:terminated
+2800871E8:t3:A5:error,H280087208,N
+280087208:t2:A5:error,AB:interrupted
+280087220:lAA:new_prompt|N
+280087230:lI10|N
+280087240:lI27|H280087250
+280087250:lI91|H280087260
+280087260:lI59|H280087270
+280087270:lI49|H280087280
+280087280:lI59|H280087290
+280087290:lI52|H2800872A0
+2800872A0:lI109|H2800872B0
+2800872B0:lI115|H2800872C0
+2800872C0:lI101|H2800872D0
+2800872D0:lI97|H2800872E0
+2800872E0:lI114|H2800872F0
+2800872F0:lI99|H280087300
+280087300:lI104|H280087310
+280087310:lI58|H280087320
+280087320:lI27|H280087330
+280087330:lI91|H280087340
+280087340:lI48|H280087350
+280087350:lI109|H280087360
+280087360:lI32|N
+280087370:lI80|H280087380
+280087380:lI114|H280087390
+280087390:lI101|H2800873A0
+2800873A0:lI115|H2800873B0
+2800873B0:lI115|H2800873C0
+2800873C0:lI32|H2800873D0
+2800873D0:lI116|H2800873E0
+2800873E0:lI97|H2800873F0
+2800873F0:lI98|H280087400
+280087400:lI32|H280087410
+280087410:lI116|H280087420
+280087420:lI111|H280087430
+280087430:lI32|H280087440
+280087440:lI115|H280087450
+280087450:lI101|H280087460
+280087460:lI101|H280087470
+280087470:lI32|H280087480
+280087480:lI97|H280087490
+280087490:lI108|H2800874A0
+2800874A0:lI108|H2800874B0
+2800874B0:lI32|H2800874C0
+2800874C0:lI126|H2800874D0
+2800874D0:lI112|H2800874E0
+2800874E0:lI32|H2800874F0
+2800874F0:lI101|H280087500
+280087500:lI120|H280087510
+280087510:lI112|H280087520
+280087520:lI97|H280087530
+280087530:lI110|H280087540
+280087540:lI115|H280087550
+280087550:lI105|H280087560
+280087560:lI111|H280087570
+280087570:lI110|H280087580
+280087580:lI115|N
+280087590:lI27|H2800875A0
+2800875A0:lI108|N
+2800875B0:t3:N,H2800875D0,N
+2800875D0:t2:N,N
+2800875E8:lI126|H2800875F8
+2800875F8:lI110|H280087608
+280087608:lI32|H280087618
+280087618:lI32|H280087628
+280087628:lI46|H280087638
+280087638:lI46|H280087648
+280087648:lI46|H280087658
+280087658:lI32|H280087668
+280087668:lI40|H280087678
+280087678:lI126|H280087688
+280087688:lI119|H280087698
+280087698:lI32|H2800876A8
+2800876A8:lI108|H2800876B8
+2800876B8:lI105|H2800876C8
+2800876C8:lI110|H2800876D8
+2800876D8:lI101|H2800876E8
+2800876E8:lI115|H2800876F8
+2800876F8:lI32|H280087708
+280087708:lI111|H280087718
+280087718:lI109|H280087728
+280087728:lI105|H280087738
+280087738:lI116|H280087748
+280087748:lI116|H280087758
+280087758:lI101|H280087768
+280087768:lI100|H280087778
+280087778:lI41|N
+280087788:t3:A4:done,A3:eof,A3:eof
+2800877A8:lH2800877B8|N
+2800877B8:lI10|N
+2800877C8:lI36|H2800877D8
+2800877D8:lI10|N
+2800877E8:lH2800877F8|N
+2800877F8:t3:AC:insert_chars,A7:unicode,H280087818
+280087818:lI10|N
+280087828:lI108|N
+280087838:lI114|H280087828
+280087848:lI101|H280087838
+280087858:lI46|H280087848
+280087868:lI112|H280087858
+280087878:lI117|H280087868
+280087888:lI111|H280087878
+280087898:lI114|H280087888
+2800878A8:lI103|H280087898
+2800878B8:E49:g3AAAABHAqhn0q4vp+7qt42F8kJsnfMAAAABAAAAAHcFZ3JvdXBhAWIFQz6VWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+2800878E0:E49:g3AAAABHAqhn0q4vp+7qt42F8kJsnfMAAAACAAAAAHcFZ3JvdXBhAmIFQz6VWHcNbm9ub2RlQG5vaG9zdAAAAAAAAAAAAAAAAA==
+280088258:t2:A5:local,AA:logger_sup
+280088270:t3:A2:id,A8:shutdown,A5:start
+280088290:Mf3:H280088270:A16:logger_handler_watcher,AB:brutal_kill,H2800882C0
+2800882C0:t3:A16:logger_handler_watcher,AA:start_link,N
+2800882E0:t3:A8:strategy,A6:period,A9:intensity
+280088300:Mf3:H2800882E0:AB:one_for_one,I5,I1
+280088330:lI108|N
+280088340:lI114|H280088330
+280088350:lI101|H280088340
+280088360:lI46|H280088350
+280088370:lI112|H280088360
+280088380:lI117|H280088370
+280088390:lI115|H280088380
+2800883A0:lI95|H280088390
+2800883B0:lI114|H2800883A0
+2800883C0:lI101|H2800883B0
+2800883D0:lI103|H2800883C0
+2800883E0:lI103|H2800883D0
+2800883F0:lI111|H2800883E0
+280088400:lI108|H2800883F0
+28008FA28:t2:A5:local,AB:kernel_refc
+28008FA40:t2:A2:ok,H28008FA68
+28008FA58:t1:A13:scheduler_wall_time
+28008FA68:Mf1:H28008FA58:H28008FA88
+28008FA88:Mf0:H280010188:
+28008FAA0:lA5:flush|N
+28008FAB0:lI108|N
+28008FAC0:lI114|H28008FAB0
+28008FAD0:lI101|H28008FAC0
+28008FAE0:lI46|H28008FAD0
+28008FAF0:lI99|H28008FAE0
+28008FB00:lI102|H28008FAF0
+28008FB10:lI101|H28008FB00
+28008FB20:lI114|H28008FB10
+28008FB30:lI95|H28008FB20
+28008FB40:lI108|H28008FB30
+28008FB50:lI101|H28008FB40
+28008FB60:lI110|H28008FB50
+28008FB70:lI114|H28008FB60
+28008FB80:lI101|H28008FB70
+28008FB90:lI107|H28008FB80
+28008FBB8:t2:A2:ok,H28008FBD0
+28008FBD0:t1:A5:state
+28008FBE0:lI82|H28008FBF0
+28008FBF0:lI101|H28008FC00
+28008FC00:lI99|H28008FC10
+28008FC10:lI101|H28008FC20
+28008FC20:lI105|H28008FC30
+28008FC30:lI118|H28008FC40
+28008FC40:lI101|H28008FC50
+28008FC50:lI100|H28008FC60
+28008FC60:lI32|H28008FC70
+28008FC70:lI83|H28008FC80
+28008FC80:lI73|H28008FC90
+28008FC90:lI71|H28008FCA0
+28008FCA0:lI85|H28008FCB0
+28008FCB0:lI83|H28008FCC0
+28008FCC0:lI82|H28008FCD0
+28008FCD0:lI49|N
+28008FCE0:lI83|H28008FCF0
+28008FCF0:lI73|H28008FD00
+28008FD00:lI71|H28008FD10
+28008FD10:lI84|H28008FD20
+28008FD20:lI69|H28008FD30
+28008FD30:lI82|H28008FD40
+28008FD40:lI77|H28008FD50
+28008FD50:lI32|H28008FD60
+28008FD60:lI114|H28008FD70
+28008FD70:lI101|H28008FD80
+28008FD80:lI99|H28008FD90
+28008FD90:lI101|H28008FDA0
+28008FDA0:lI105|H28008FDB0
+28008FDB0:lI118|H28008FDC0
+28008FDC0:lI101|H28008FDD0
+28008FDD0:lI100|H28008FDE0
+28008FDE0:lI32|H28008FDF0
+28008FDF0:lI45|H28008FE00
+28008FE00:lI32|H28008FE10
+28008FE10:lI115|H28008FE20
+28008FE20:lI104|H28008FE30
+28008FE30:lI117|H28008FE40
+28008FE40:lI116|H28008FE50
+28008FE50:lI116|H28008FE60
+28008FE60:lI105|H28008FE70
+28008FE70:lI110|H28008FE80
+28008FE80:lI103|H28008FE90
+28008FE90:lI32|H28008FEA0
+28008FEA0:lI100|H28008FEB0
+28008FEB0:lI111|H28008FEC0
+28008FEC0:lI119|H28008FED0
+28008FED0:lI110|H28008FEE0
+28008FEE0:lI126|H28008FEF0
+28008FEF0:lI110|N
+28008FF00:lI108|N
+28008FF10:lI114|H28008FF00
+28008FF20:lI101|H28008FF10
+28008FF30:lI46|H28008FF20
+28008FF40:lI114|H28008FF30
+28008FF50:lI101|H28008FF40
+28008FF60:lI108|H28008FF50
+28008FF70:lI100|H28008FF60
+28008FF80:lI110|H28008FF70
+28008FF90:lI97|H28008FF80
+28008FFA0:lI104|H28008FF90
+28008FFB0:lI95|H28008FFA0
+28008FFC0:lI108|H28008FFB0
+28008FFD0:lI97|H28008FFC0
+28008FFE0:lI110|H28008FFD0
+28008FFF0:lI103|H28008FFE0
+280090000:lI105|H28008FFF0
+280090010:lI115|H280090000
+280090020:lI95|H280090010
+280090030:lI108|H280090020
+280090040:lI114|H280090030
+280090050:lI101|H280090040
+280091550:lA4:type|H280091560
+280091560:lA4:file|H280091570
+280091570:lA5:modes|H280091580
+280091580:lAA:file_check|H280091590
+280091590:lAC:max_no_bytes|H2800915A0
+2800915A0:lAC:max_no_files|H2800915B0
+2800915B0:lA12:compress_on_rotate|N
+2800915C0:lA4:type|H2800915D0
+2800915D0:lA4:file|H2800915E0
+2800915E0:lA5:modes|N
+2800915F0:Mf0:H280010188:
+280091608:lA3:raw|H280091618
+280091618:lA6:append|N
+280091628:lA3:raw|N
+280091638:lA5:write|H280091648
+280091648:lA6:append|H280091658
+280091658:lA9:exclusive|N
+280091668:t2:A5:error,A1D:file_ctrl_process_not_started
+280091680:lA5:flush|N
+280091690:lI70|H2800916A0
+2800916A0:lI97|H2800916B0
+2800916B0:lI105|H2800916C0
+2800916C0:lI108|H2800916D0
+2800916D0:lI101|H2800916E0
+2800916E0:lI100|H2800916F0
+2800916F0:lI32|H280091700
+280091700:lI116|H280091710
+280091710:lI111|H280091720
+280091720:lI32|H280091730
+280091730:lI119|H280091740
+280091740:lI114|H280091750
+280091750:lI105|H280091760
+280091760:lI116|H280091770
+280091770:lI101|H280091780
+280091780:lI32|H280091790
+280091790:lI108|H2800917A0
+2800917A0:lI111|H2800917B0
+2800917B0:lI103|H2800917C0
+2800917C0:lI32|H2800917D0
+2800917D0:lI109|H2800917E0
+2800917E0:lI101|H2800917F0
+2800917F0:lI115|H280091800
+280091800:lI115|H280091810
+280091810:lI97|H280091820
+280091820:lI103|H280091830
+280091830:lI101|H280091840
+280091840:lI32|H280091850
+280091850:lI116|H280091860
+280091860:lI111|H280091870
+280091870:lI32|H280091880
+280091880:lI115|H280091890
+280091890:lI116|H2800918A0
+2800918A0:lI100|H2800918B0
+2800918B0:lI111|H2800918C0
+2800918C0:lI117|H2800918D0
+2800918D0:lI116|H2800918E0
+2800918E0:lI44|H2800918F0
+2800918F0:lI32|H280091900
+280091900:lI116|H280091910
+280091910:lI114|H280091920
+280091920:lI121|H280091930
+280091930:lI105|H280091940
+280091940:lI110|H280091950
+280091950:lI103|H280091960
+280091960:lI32|H280091970
+280091970:lI115|H280091980
+280091980:lI116|H280091990
+280091990:lI100|H2800919A0
+2800919A0:lI101|H2800919B0
+2800919B0:lI114|H2800919C0
+2800919C0:lI114|H2800919D0
+2800919D0:lI10|N
+2800919E0:t2:A5:error,A6:enoent
+2800919F8:lI46|H280091A08
+280091A08:lI48|N
+280091A18:lI46|H280091A28
+280091A28:lI103|H280091A38
+280091A38:lI122|N
+280091A48:lA4:read|H280091A58
+280091A58:lA6:binary|N
+280091A68:lA5:write|N
+280091A78:Yh0:
+280091A88:lI108|N
+280091A98:lI114|H280091A88
+280091AA8:lI101|H280091A98
+280091AB8:lI46|H280091AA8
+280091AC8:lI104|H280091AB8
+280091AD8:lI95|H280091AC8
+280091AE8:lI100|H280091AD8
+280091AF8:lI116|H280091AE8
+280091B08:lI115|H280091AF8
+280091B18:lI95|H280091B08
+280091B28:lI114|H280091B18
+280091B38:lI101|H280091B28
+280091B48:lI103|H280091B38
+280091B58:lI103|H280091B48
+280091B68:lI111|H280091B58
+280091B78:lI108|H280091B68
+280091B88:t7:A4:type,A4:file,A12:compress_on_rotate,AA:file_check,AC:max_no_bytes,AC:max_no_files,A5:modes
+280091BC8:t1:A4:type
+280091BD8:E50:g3AAAABOAQjqLBPECzXLncj+B21nkB0AAAAAAAAAAHcMbG9nZ2VyX3N0ZF9oYQBiAEdRYFh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280091C00:t4:A12:compress_on_rotate,AA:file_check,AC:max_no_bytes,AC:max_no_files
+280091C28:tA:A2:fd,A9:file_name,A6:synced,AA:file_check,A5:modes,AC:handler_name,A5:inode,AA:last_check,A8:sync_res,A9:write_res
+280091C80:t2:AC:handler_name,A3:dev
+280091C98:t4:A5:count,A4:size,A8:compress,A9:curr_size
+280091CD8:Mf0:H280010188:
+280091CF0:lAE:sync_mode_qlen|H280091D00
+280091D00:lAE:drop_mode_qlen|H280091D10
+280091D10:lAA:flush_qlen|H280091D20
+280091D20:lA12:burst_limit_enable|H280091D30
+280091D30:lA15:burst_limit_max_count|H280091D40
+280091D40:lA17:burst_limit_window_time|H280091D50
+280091D50:lA14:overload_kill_enable|H280091D60
+280091D60:lA12:overload_kill_qlen|H280091D70
+280091D70:lA16:overload_kill_mem_size|H280091D80
+280091D80:lA1B:overload_kill_restart_after|H280091D90
+280091D90:lA18:filesync_repeat_interval|N
+280091DA0:lA18:filesync_repeat_interval|N
+280091DB0:lAE:sync_mode_qlen|H280091DC0
+280091DC0:lAE:drop_mode_qlen|H280091DD0
+280091DD0:lAA:flush_qlen|H280091DE0
+280091DE0:lA12:burst_limit_enable|H280091DF0
+280091DF0:lA15:burst_limit_max_count|H280091E00
+280091E00:lA17:burst_limit_window_time|H280091E10
+280091E10:lA14:overload_kill_enable|H280091E20
+280091E20:lA12:overload_kill_qlen|H280091E30
+280091E30:lA16:overload_kill_mem_size|H280091E40
+280091E40:lA1B:overload_kill_restart_after|N
+280091E50:lI95|N
+280091E60:lAE:sync_mode_qlen|H280091E70
+280091E70:lAE:drop_mode_qlen|H280091E80
+280091E80:lAA:flush_qlen|H280091E90
+280091E90:lA12:burst_limit_enable|H280091EA0
+280091EA0:lA15:burst_limit_max_count|H280091EB0
+280091EB0:lA17:burst_limit_window_time|H280091EC0
+280091EC0:lA14:overload_kill_enable|H280091ED0
+280091ED0:lA12:overload_kill_qlen|H280091EE0
+280091EE0:lA16:overload_kill_mem_size|H280091EF0
+280091EF0:lA1B:overload_kill_restart_after|H280091F00
+280091F00:lA18:filesync_repeat_interval|H280091F10
+280091F10:lA3:olp|N
+280091F20:lA3:olp|N
+280091F30:lAF:logger_h_common|N
+280091F40:lI72|H280091F50
+280091F50:lI97|H280091F60
+280091F60:lI110|H280091F70
+280091F70:lI100|H280091F80
+280091F80:lI108|H280091F90
+280091F90:lI101|H280091FA0
+280091FA0:lI114|H280091FB0
+280091FB0:lI32|H280091FC0
+280091FC0:lI126|H280091FD0
+280091FD0:lI112|H280091FE0
+280091FE0:lI32|H280091FF0
+280091FF0:lI111|H280092000
+280092000:lI118|H280092010
+280092010:lI101|H280092020
+280092020:lI114|H280092030
+280092030:lI108|H280092040
+280092040:lI111|H280092050
+280092050:lI97|H280092060
+280092060:lI100|H280092070
+280092070:lI101|H280092080
+280092080:lI100|H280092090
+280092090:lI32|H2800920A0
+2800920A0:lI97|H2800920B0
+2800920B0:lI110|H2800920C0
+2800920C0:lI100|H2800920D0
+2800920D0:lI32|H2800920E0
+2800920E0:lI115|H2800920F0
+2800920F0:lI116|H280092100
+280092100:lI111|H280092110
+280092110:lI112|H280092120
+280092120:lI112|H280092130
+280092130:lI105|H280092140
+280092140:lI110|H280092150
+280092150:lI103|N
+280092160:t2:A5:error,A4:busy
+280092178:t2:A5:error,AC:handler_busy
+280092190:lI72|H2800921A0
+2800921A0:lI97|H2800921B0
+2800921B0:lI110|H2800921C0
+2800921C0:lI100|H2800921D0
+2800921D0:lI108|H2800921E0
+2800921E0:lI101|H2800921F0
+2800921F0:lI114|H280092200
+280092200:lI32|H280092210
+280092210:lI126|H280092220
+280092220:lI112|H280092230
+280092230:lI32|H280092240
+280092240:lI115|H280092250
+280092250:lI119|H280092260
+280092260:lI105|H280092270
+280092270:lI116|H280092280
+280092280:lI99|H280092290
+280092290:lI104|H2800922A0
+2800922A0:lI101|H2800922B0
+2800922B0:lI100|H2800922C0
+2800922C0:lI32|H2800922D0
+2800922D0:lI102|H2800922E0
+2800922E0:lI114|H2800922F0
+2800922F0:lI111|H280092300
+280092300:lI109|H280092310
+280092310:lI32|H280092320
+280092320:lI126|H280092330
+280092330:lI112|H280092340
+280092340:lI32|H280092350
+280092350:lI116|H280092360
+280092360:lI111|H280092370
+280092370:lI32|H280092380
+280092380:lI126|H280092390
+280092390:lI112|H2800923A0
+2800923A0:lI32|H2800923B0
+2800923B0:lI109|H2800923C0
+2800923C0:lI111|H2800923D0
+2800923D0:lI100|H2800923E0
+2800923E0:lI101|N
+2800923F0:lI72|H280092400
+280092400:lI97|H280092410
+280092410:lI110|H280092420
+280092420:lI100|H280092430
+280092430:lI108|H280092440
+280092440:lI101|H280092450
+280092450:lI114|H280092460
+280092460:lI32|H280092470
+280092470:lI126|H280092480
+280092480:lI112|H280092490
+280092490:lI32|H2800924A0
+2800924A0:lI102|H2800924B0
+2800924B0:lI108|H2800924C0
+2800924C0:lI117|H2800924D0
+2800924D0:lI115|H2800924E0
+2800924E0:lI104|H2800924F0
+2800924F0:lI101|H280092500
+280092500:lI100|H280092510
+280092510:lI32|H280092520
+280092520:lI126|H280092530
+280092530:lI119|H280092540
+280092540:lI32|H280092550
+280092550:lI108|H280092560
+280092560:lI111|H280092570
+280092570:lI103|H280092580
+280092580:lI32|H280092590
+280092590:lI101|H2800925A0
+2800925A0:lI118|H2800925B0
+2800925B0:lI101|H2800925C0
+2800925C0:lI110|H2800925D0
+2800925D0:lI116|H2800925E0
+2800925E0:lI115|N
+2800925F0:lI72|H280092600
+280092600:lI97|H280092610
+280092610:lI110|H280092620
+280092620:lI100|H280092630
+280092630:lI108|H280092640
+280092640:lI101|H280092650
+280092650:lI114|H280092660
+280092660:lI32|H280092670
+280092670:lI126|H280092680
+280092680:lI112|H280092690
+280092690:lI32|H2800926A0
+2800926A0:lI114|H2800926B0
+2800926B0:lI101|H2800926C0
+2800926C0:lI115|H2800926D0
+2800926D0:lI116|H2800926E0
+2800926E0:lI97|H2800926F0
+2800926F0:lI114|H280092700
+280092700:lI116|H280092710
+280092710:lI101|H280092720
+280092720:lI100|N
+280092730:t1:A9:formatter
+280092740:Mf1:H280092730:H280092760
+280092760:t2:A10:logger_formatter,H280092790
+280092778:t2:AB:single_line,AD:legacy_header
+280092790:Mf2:H280092778:A5:false,A4:true
+2800927B8:E1F:g3F3BmxvZ2dlcncRZm9ybWF0X290cF9yZXBvcnRhAQ==
+2800927E0:t2:A10:logger_formatter,H280092810
+2800927F8:t2:AB:single_line,AD:legacy_header
+280092810:Mf2:H2800927F8:A5:false,A4:true
+280092838:t3:A4:line,A4:file,A3:mfa
+280092858:Mf3:H280092838:I398,H280092888,H2800929B8
+280092888:lI108|H280092898
+280092898:lI111|H2800928A8
+2800928A8:lI103|H2800928B8
+2800928B8:lI103|H2800928C8
+2800928C8:lI101|H2800928D8
+2800928D8:lI114|H2800928E8
+2800928E8:lI95|H2800928F8
+2800928F8:lI104|H280092908
+280092908:lI95|H280092918
+280092918:lI99|H280092928
+280092928:lI111|H280092938
+280092938:lI109|H280092948
+280092948:lI109|H280092958
+280092958:lI111|H280092968
+280092968:lI110|H280092978
+280092978:lI46|H280092988
+280092988:lI101|H280092998
+280092998:lI114|H2800929A8
+2800929A8:lI108|N
+2800929B8:t3:AF:logger_h_common,A10:do_log_to_binary,I2
+2800929D8:Yh22:Rk9STUFUVEVSIEVSUk9SOiBiYWQgcmV0dXJuIHZhbHVlCg==
+280092A10:t3:A4:line,A4:file,A3:mfa
+280092A30:Mf3:H280092A10:I410,H280092A60,H280092B90
+280092A60:lI108|H280092A70
+280092A70:lI111|H280092A80
+280092A80:lI103|H280092A90
+280092A90:lI103|H280092AA0
+280092AA0:lI101|H280092AB0
+280092AB0:lI114|H280092AC0
+280092AC0:lI95|H280092AD0
+280092AD0:lI104|H280092AE0
+280092AE0:lI95|H280092AF0
+280092AF0:lI99|H280092B00
+280092B00:lI111|H280092B10
+280092B10:lI109|H280092B20
+280092B20:lI109|H280092B30
+280092B30:lI111|H280092B40
+280092B40:lI110|H280092B50
+280092B50:lI46|H280092B60
+280092B60:lI101|H280092B70
+280092B70:lI114|H280092B80
+280092B80:lI108|N
+280092B90:t3:AF:logger_h_common,AA:try_format,I3
+280092BB0:lI68|H280092BC0
+280092BC0:lI69|H280092BD0
+280092BD0:lI70|H280092BE0
+280092BE0:lI65|H280092BF0
+280092BF0:lI85|H280092C00
+280092C00:lI76|H280092C10
+280092C10:lI84|H280092C20
+280092C20:lI32|H280092C30
+280092C30:lI70|H280092C40
+280092C40:lI79|H280092C50
+280092C50:lI82|H280092C60
+280092C60:lI77|H280092C70
+280092C70:lI65|H280092C80
+280092C80:lI84|H280092C90
+280092C90:lI84|H280092CA0
+280092CA0:lI69|H280092CB0
+280092CB0:lI82|H280092CC0
+280092CC0:lI32|H280092CD0
+280092CD0:lI67|H280092CE0
+280092CE0:lI82|H280092CF0
+280092CF0:lI65|H280092D00
+280092D00:lI83|H280092D10
+280092D10:lI72|H280092D20
+280092D20:lI69|H280092D30
+280092D30:lI68|H280092D40
+280092D40:lI10|N
+280092D50:lI70|H280092D60
+280092D60:lI79|H280092D70
+280092D70:lI82|H280092D80
+280092D80:lI77|H280092D90
+280092D90:lI65|H280092DA0
+280092DA0:lI84|H280092DB0
+280092DB0:lI84|H280092DC0
+280092DC0:lI69|H280092DD0
+280092DD0:lI82|H280092DE0
+280092DE0:lI32|H280092DF0
+280092DF0:lI67|H280092E00
+280092E00:lI82|H280092E10
+280092E10:lI65|H280092E20
+280092E20:lI83|H280092E30
+280092E30:lI72|H280092E40
+280092E40:lI58|H280092E50
+280092E50:lI32|H280092E60
+280092E60:lI126|H280092E70
+280092E70:lI116|H280092E80
+280092E80:lI112|N
+280092E90:t1:A18:filesync_repeat_interval
+280092EA0:Mf1:H280092E90:I5000
+280092EC0:lI108|N
+280092ED0:lI114|H280092EC0
+280092EE0:lI101|H280092ED0
+280092EF0:lI46|H280092EE0
+280092F00:lI110|H280092EF0
+280092F10:lI111|H280092F00
+280092F20:lI109|H280092F10
+280092F30:lI109|H280092F20
+280092F40:lI111|H280092F30
+280092F50:lI99|H280092F40
+280092F60:lI95|H280092F50
+280092F70:lI104|H280092F60
+280092F80:lI95|H280092F70
+280092F90:lI114|H280092F80
+280092FA0:lI101|H280092F90
+280092FB0:lI103|H280092FA0
+280092FC0:lI103|H280092FB0
+280092FD0:lI111|H280092FC0
+280092FE0:lI108|H280092FD0
+280092FF0:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+280093028:t1:A4:time
+280093038:t3:A4:meta,A3:msg,A5:level
+280093058:t1:A18:filesync_repeat_interval
+2800B0A58:lI115|H2800B0A68
+2800B0A68:lI116|H2800B0A78
+2800B0A78:lI97|H2800B0A88
+2800B0A88:lI110|H2800B0A98
+2800B0A98:lI100|H2800B0AA8
+2800B0AA8:lI95|H2800B0AB8
+2800B0AB8:lI97|H2800B0AC8
+2800B0AC8:lI108|H2800B0AD8
+2800B0AD8:lI111|H2800B0AE8
+2800B0AE8:lI110|H2800B0AF8
+2800B0AF8:lI101|H2800B0B08
+2800B0B08:lI95|N
+2800B0B18:t2:A4:line,I173
+2800B0B30:t2:A6:module,AD:httpc_manager
+2800B0B48:lI105|H2800B0B58
+2800B0B58:lI110|H2800B0B68
+2800B0B68:lI115|H2800B0B78
+2800B0B78:lI101|H2800B0B88
+2800B0B88:lI114|H2800B0B98
+2800B0B98:lI116|H2800B0BA8
+2800B0BA8:lI32|H2800B0BB8
+2800B0BB8:lI115|H2800B0BC8
+2800B0BC8:lI101|H2800B0BD8
+2800B0BD8:lI115|H2800B0BE8
+2800B0BE8:lI115|H2800B0BF8
+2800B0BF8:lI105|H2800B0C08
+2800B0C08:lI111|H2800B0C18
+2800B0C18:lI110|N
+2800B0C28:t2:A4:line,I188
+2800B0C40:lI108|H2800B0C50
+2800B0C50:lI111|H2800B0C60
+2800B0C60:lI111|H2800B0C70
+2800B0C70:lI107|H2800B0C80
+2800B0C80:lI117|H2800B0C90
+2800B0C90:lI112|H2800B0CA0
+2800B0CA0:lI32|H2800B0CB0
+2800B0CB0:lI115|H2800B0CC0
+2800B0CC0:lI101|H2800B0CD0
+2800B0CD0:lI115|H2800B0CE0
+2800B0CE0:lI115|H2800B0CF0
+2800B0CF0:lI105|H2800B0D00
+2800B0D00:lI111|H2800B0D10
+2800B0D10:lI110|N
+2800B0D20:t2:A4:line,I205
+2800B0D38:lI117|H2800B0D48
+2800B0D48:lI112|H2800B0D58
+2800B0D58:lI100|H2800B0D68
+2800B0D68:lI97|H2800B0D78
+2800B0D78:lI116|H2800B0D88
+2800B0D88:lI101|H2800B0D98
+2800B0D98:lI32|H2800B0DA8
+2800B0DA8:lI115|H2800B0DB8
+2800B0DB8:lI101|H2800B0DC8
+2800B0DC8:lI115|H2800B0DD8
+2800B0DD8:lI115|H2800B0DE8
+2800B0DE8:lI105|H2800B0DF8
+2800B0DF8:lI111|H2800B0E08
+2800B0E08:lI110|N
+2800B0E18:t2:A4:line,I225
+2800B0E30:lI100|H2800B0E40
+2800B0E40:lI101|H2800B0E50
+2800B0E50:lI108|H2800B0E60
+2800B0E60:lI101|H2800B0E70
+2800B0E70:lI116|H2800B0E80
+2800B0E80:lI101|H2800B0E90
+2800B0E90:lI32|H2800B0EA0
+2800B0EA0:lI115|H2800B0EB0
+2800B0EB0:lI101|H2800B0EC0
+2800B0EC0:lI115|H2800B0ED0
+2800B0ED0:lI115|H2800B0EE0
+2800B0EE0:lI105|H2800B0EF0
+2800B0EF0:lI111|H2800B0F00
+2800B0F00:lI110|N
+2800B0F10:t2:A4:line,I243
+2800B0F28:lI119|H2800B0F38
+2800B0F38:lI104|H2800B0F48
+2800B0F48:lI105|H2800B0F58
+2800B0F58:lI99|H2800B0F68
+2800B0F68:lI104|H2800B0F78
+2800B0F78:lI95|H2800B0F88
+2800B0F88:lI115|H2800B0F98
+2800B0F98:lI101|H2800B0FA8
+2800B0FA8:lI115|H2800B0FB8
+2800B0FB8:lI115|H2800B0FC8
+2800B0FC8:lI105|H2800B0FD8
+2800B0FD8:lI111|H2800B0FE8
+2800B0FE8:lI110|H2800B0FF8
+2800B0FF8:lI115|N
+2800B1008:t2:A4:line,I276
+2800B1020:lI119|H2800B1030
+2800B1030:lI104|H2800B1040
+2800B1040:lI105|H2800B1050
+2800B1050:lI99|H2800B1060
+2800B1060:lI104|H2800B1070
+2800B1070:lI95|H2800B1080
+2800B1080:lI115|H2800B1090
+2800B1090:lI101|H2800B10A0
+2800B10A0:lI115|H2800B10B0
+2800B10B0:lI115|H2800B10C0
+2800B10C0:lI105|H2800B10D0
+2800B10D0:lI111|H2800B10E0
+2800B10E0:lI110|H2800B10F0
+2800B10F0:lI95|H2800B1100
+2800B1100:lI105|H2800B1110
+2800B1110:lI110|H2800B1120
+2800B1120:lI102|H2800B1130
+2800B1130:lI111|N
+2800B1140:t2:A4:line,I406
+2800B1158:lI115|H2800B1168
+2800B1168:lI116|H2800B1178
+2800B1178:lI97|H2800B1188
+2800B1188:lI114|H2800B1198
+2800B1198:lI116|H2800B11A8
+2800B11A8:lI105|H2800B11B8
+2800B11B8:lI110|H2800B11C8
+2800B11C8:lI103|N
+2800B11D8:t2:A4:line,I409
+2800B11F0:lI115|H2800B1200
+2800B1200:lI116|H2800B1210
+2800B1210:lI97|H2800B1220
+2800B1220:lI114|H2800B1230
+2800B1230:lI116|H2800B1240
+2800B1240:lI101|H2800B1250
+2800B1250:lI100|N
+2800B1260:lI99|H2800B1270
+2800B1270:lI114|H2800B1280
+2800B1280:lI101|H2800B1290
+2800B1290:lI97|H2800B12A0
+2800B12A0:lI116|H2800B12B0
+2800B12B0:lI101|H2800B12C0
+2800B12C0:lI32|H2800B12D0
+2800B12D0:lI115|H2800B12E0
+2800B12E0:lI101|H2800B12F0
+2800B12F0:lI115|H2800B1300
+2800B1300:lI115|H2800B1310
+2800B1310:lI105|H2800B1320
+2800B1320:lI111|H2800B1330
+2800B1330:lI110|H2800B1340
+2800B1340:lI32|H2800B1350
+2800B1350:lI100|H2800B1360
+2800B1360:lI98|N
+2800B1370:lH2800B1390|H2800B1380
+2800B1380:lH2800B13A8|N
+2800B1390:t2:A6:module,AD:httpc_manager
+2800B13A8:t2:A4:line,I420
+2800B13C0:lA6:public|H2800B13D0
+2800B13D0:lA3:set|H2800B13E0
+2800B13E0:lAB:named_table|H2800B13F0
+2800B13F0:lH2800B1400|N
+2800B1400:t2:A6:keypos,I2
+2800B1418:lI99|H2800B1428
+2800B1428:lI114|H2800B1438
+2800B1438:lI101|H2800B1448
+2800B1448:lI97|H2800B1458
+2800B1458:lI116|H2800B1468
+2800B1468:lI101|H2800B1478
+2800B1478:lI32|H2800B1488
+2800B1488:lI104|H2800B1498
+2800B1498:lI97|H2800B14A8
+2800B14A8:lI110|H2800B14B8
+2800B14B8:lI100|H2800B14C8
+2800B14C8:lI108|H2800B14D8
+2800B14D8:lI101|H2800B14E8
+2800B14E8:lI114|H2800B14F8
+2800B14F8:lI47|H2800B1508
+2800B1508:lI114|H2800B1518
+2800B1518:lI101|H2800B1528
+2800B1528:lI113|H2800B1538
+2800B1538:lI117|H2800B1548
+2800B1548:lI101|H2800B1558
+2800B1558:lI115|H2800B1568
+2800B1568:lI116|H2800B1578
+2800B1578:lI32|H2800B1588
+2800B1588:lI100|H2800B1598
+2800B1598:lI98|N
+2800B15A8:lH2800B15C8|H2800B15B8
+2800B15B8:lH2800B15E0|N
+2800B15C8:t2:A6:module,AD:httpc_manager
+2800B15E0:t2:A4:line,I426
+2800B15F8:lA9:protected|H2800B1608
+2800B1608:lA3:set|H2800B1618
+2800B1618:lAB:named_table|H2800B1628
+2800B1628:lH2800B1638|N
+2800B1638:t2:A6:keypos,I1
+2800B1650:lI99|H2800B1660
+2800B1660:lI114|H2800B1670
+2800B1670:lI101|H2800B1680
+2800B1680:lI97|H2800B1690
+2800B1690:lI116|H2800B16A0
+2800B16A0:lI101|H2800B16B0
+2800B16B0:lI32|H2800B16C0
+2800B16C0:lI99|H2800B16D0
+2800B16D0:lI111|H2800B16E0
+2800B16E0:lI111|H2800B16F0
+2800B16F0:lI107|H2800B1700
+2800B1700:lI105|H2800B1710
+2800B1710:lI101|H2800B1720
+2800B1720:lI32|H2800B1730
+2800B1730:lI100|H2800B1740
+2800B1740:lI98|N
+2800B1750:lH2800B1770|H2800B1760
+2800B1760:lH2800B1788|N
+2800B1770:t2:A6:module,AD:httpc_manager
+2800B1788:t2:A4:line,I431
+2800B17A0:tF:A7:options,H2800B1820,H2800B1838,I0,I2,I5,I120000,I2,A8:disabled,A5:false,A4:inet,A7:default,A7:default,N,A9:undefined
+2800B1820:t2:A9:undefined,N
+2800B1838:t2:A9:undefined,N
+2800B1850:t2:A4:line,I474
+2800B1868:lI119|H2800B1878
+2800B1878:lI104|H2800B1888
+2800B1888:lI105|H2800B1898
+2800B1898:lI99|H2800B18A8
+2800B18A8:lI104|H2800B18B8
+2800B18B8:lI32|H2800B18C8
+2800B18C8:lI99|H2800B18D8
+2800B18D8:lI111|H2800B18E8
+2800B18E8:lI111|H2800B18F8
+2800B18F8:lI107|H2800B1908
+2800B1908:lI105|H2800B1918
+2800B1918:lI101|H2800B1928
+2800B1928:lI115|N
+2800B1938:t2:A4:line,I454
+2800B1950:lI114|H2800B1960
+2800B1960:lI101|H2800B1970
+2800B1970:lI113|H2800B1980
+2800B1980:lI117|H2800B1990
+2800B1990:lI101|H2800B19A0
+2800B19A0:lI115|H2800B19B0
+2800B19B0:lI116|N
+2800B19C0:t2:A4:line,I485
+2800B19D8:lI103|H2800B19E8
+2800B19E8:lI101|H2800B19F8
+2800B19F8:lI116|H2800B1A08
+2800B1A08:lI32|H2800B1A18
+2800B1A18:lI111|H2800B1A28
+2800B1A28:lI112|H2800B1A38
+2800B1A38:lI116|H2800B1A48
+2800B1A48:lI105|H2800B1A58
+2800B1A58:lI111|H2800B1A68
+2800B1A68:lI110|H2800B1A78
+2800B1A78:lI115|N
+2800B1A88:lH2800B1AA8|H2800B1A98
+2800B1A98:lH2800B1AC0|N
+2800B1AA8:t2:A6:module,AD:httpc_manager
+2800B1AC0:t2:A4:line,I468
+2800B1AD8:lI114|H2800B1AE8
+2800B1AE8:lI101|H2800B1AF8
+2800B1AF8:lI115|H2800B1B08
+2800B1B08:lI101|H2800B1B18
+2800B1B18:lI116|H2800B1B28
+2800B1B28:lI32|H2800B1B38
+2800B1B38:lI99|H2800B1B48
+2800B1B48:lI111|H2800B1B58
+2800B1B58:lI111|H2800B1B68
+2800B1B68:lI107|H2800B1B78
+2800B1B78:lI105|H2800B1B88
+2800B1B88:lI101|H2800B1B98
+2800B1B98:lI115|N
+2800B1BA8:lH2800B1BC8|H2800B1BB8
+2800B1BB8:lH2800B1BE0|N
+2800B1BC8:t2:A6:module,AD:httpc_manager
+2800B1BE0:t2:A4:line,I463
+2800B1BF8:lI105|H2800B1C08
+2800B1C08:lI110|H2800B1C18
+2800B1C18:lI102|H2800B1C28
+2800B1C28:lI111|N
+2800B1C38:lH2800B1C58|H2800B1C48
+2800B1C48:lH2800B1C70|N
+2800B1C58:t2:A6:module,AD:httpc_manager
+2800B1C70:t2:A4:line,I491
+2800B1C88:lI114|H2800B1C98
+2800B1C98:lI101|H2800B1CA8
+2800B1CA8:lI99|H2800B1CB8
+2800B1CB8:lI101|H2800B1CC8
+2800B1CC8:lI105|H2800B1CD8
+2800B1CD8:lI118|H2800B1CE8
+2800B1CE8:lI101|H2800B1CF8
+2800B1CF8:lI100|H2800B1D08
+2800B1D08:lI32|H2800B1D18
+2800B1D18:lI117|H2800B1D28
+2800B1D28:lI110|H2800B1D38
+2800B1D38:lI107|H2800B1D48
+2800B1D48:lI110|H2800B1D58
+2800B1D58:lI111|H2800B1D68
+2800B1D68:lI119|H2800B1D78
+2800B1D78:lI110|H2800B1D88
+2800B1D88:lI32|H2800B1D98
+2800B1D98:lI114|H2800B1DA8
+2800B1DA8:lI101|H2800B1DB8
+2800B1DB8:lI113|H2800B1DC8
+2800B1DC8:lI117|H2800B1DD8
+2800B1DD8:lI101|H2800B1DE8
+2800B1DE8:lI115|H2800B1DF8
+2800B1DF8:lI116|H2800B1E08
+2800B1E08:lI126|H2800B1E18
+2800B1E18:lI110|H2800B1E28
+2800B1E28:lI32|H2800B1E38
+2800B1E38:lI32|H2800B1E48
+2800B1E48:lI32|H2800B1E58
+2800B1E58:lI82|H2800B1E68
+2800B1E68:lI101|H2800B1E78
+2800B1E78:lI113|H2800B1E88
+2800B1E88:lI58|H2800B1E98
+2800B1E98:lI32|H2800B1EA8
+2800B1EA8:lI32|H2800B1EB8
+2800B1EB8:lI126|H2800B1EC8
+2800B1EC8:lI112|H2800B1ED8
+2800B1ED8:lI126|H2800B1EE8
+2800B1EE8:lI110|H2800B1EF8
+2800B1EF8:lI32|H2800B1F08
+2800B1F08:lI32|H2800B1F18
+2800B1F18:lI32|H2800B1F28
+2800B1F28:lI70|H2800B1F38
+2800B1F38:lI114|H2800B1F48
+2800B1F48:lI111|H2800B1F58
+2800B1F58:lI109|H2800B1F68
+2800B1F68:lI58|H2800B1F78
+2800B1F78:lI32|H2800B1F88
+2800B1F88:lI126|H2800B1F98
+2800B1F98:lI112|N
+2800B1FA8:t2:A5:error,AD:API_violation
+2800B1FC0:t2:A4:line,I542
+2800B1FD8:lI115|H2800B1FE8
+2800B1FE8:lI101|H2800B1FF8
+2800B1FF8:lI116|H2800B2008
+2800B2008:lI32|H2800B2018
+2800B2018:lI111|H2800B2028
+2800B2028:lI112|H2800B2038
+2800B2038:lI116|H2800B2048
+2800B2048:lI105|H2800B2058
+2800B2058:lI111|H2800B2068
+2800B2068:lI110|H2800B2078
+2800B2078:lI115|N
+2800B2088:t2:A4:line,I537
+2800B20A0:lI114|H2800B20B0
+2800B20B0:lI101|H2800B20C0
+2800B20C0:lI113|H2800B20D0
+2800B20D0:lI117|H2800B20E0
+2800B20E0:lI101|H2800B20F0
+2800B20F0:lI115|H2800B2100
+2800B2100:lI116|H2800B2110
+2800B2110:lI32|H2800B2120
+2800B2120:lI100|H2800B2130
+2800B2130:lI111|H2800B2140
+2800B2140:lI110|H2800B2150
+2800B2150:lI101|N
+2800B2160:lI114|H2800B2170
+2800B2170:lI101|H2800B2180
+2800B2180:lI99|H2800B2190
+2800B2190:lI101|H2800B21A0
+2800B21A0:lI105|H2800B21B0
+2800B21B0:lI118|H2800B21C0
+2800B21C0:lI101|H2800B21D0
+2800B21D0:lI100|H2800B21E0
+2800B21E0:lI32|H2800B21F0
+2800B21F0:lI117|H2800B2200
+2800B2200:lI110|H2800B2210
+2800B2210:lI107|H2800B2220
+2800B2220:lI110|H2800B2230
+2800B2230:lI111|H2800B2240
+2800B2240:lI119|H2800B2250
+2800B2250:lI110|H2800B2260
+2800B2260:lI32|H2800B2270
+2800B2270:lI109|H2800B2280
+2800B2280:lI101|H2800B2290
+2800B2290:lI115|H2800B22A0
+2800B22A0:lI115|H2800B22B0
+2800B22B0:lI97|H2800B22C0
+2800B22C0:lI103|H2800B22D0
+2800B22D0:lI101|H2800B22E0
+2800B22E0:lI126|H2800B22F0
+2800B22F0:lI110|H2800B2300
+2800B2300:lI32|H2800B2310
+2800B2310:lI32|H2800B2320
+2800B2320:lI32|H2800B2330
+2800B2330:lI77|H2800B2340
+2800B2340:lI115|H2800B2350
+2800B2350:lI103|H2800B2360
+2800B2360:lI58|H2800B2370
+2800B2370:lI32|H2800B2380
+2800B2380:lI126|H2800B2390
+2800B2390:lI112|N
+2800B23A0:lI85|H2800B23B0
+2800B23B0:lI110|H2800B23C0
+2800B23C0:lI107|H2800B23D0
+2800B23D0:lI110|H2800B23E0
+2800B23E0:lI111|H2800B23F0
+2800B23F0:lI119|H2800B2400
+2800B2400:lI110|H2800B2410
+2800B2410:lI32|H2800B2420
+2800B2420:lI109|H2800B2430
+2800B2430:lI101|H2800B2440
+2800B2440:lI115|H2800B2450
+2800B2450:lI115|H2800B2460
+2800B2460:lI97|H2800B2470
+2800B2470:lI103|H2800B2480
+2800B2480:lI101|H2800B2490
+2800B2490:lI32|H2800B24A0
+2800B24A0:lI105|H2800B24B0
+2800B24B0:lI110|H2800B24C0
+2800B24C0:lI32|H2800B24D0
+2800B24D0:lI104|H2800B24E0
+2800B24E0:lI116|H2800B24F0
+2800B24F0:lI116|H2800B2500
+2800B2500:lI112|H2800B2510
+2800B2510:lI99|H2800B2520
+2800B2520:lI95|H2800B2530
+2800B2530:lI109|H2800B2540
+2800B2540:lI97|H2800B2550
+2800B2550:lI110|H2800B2560
+2800B2560:lI97|H2800B2570
+2800B2570:lI103|H2800B2580
+2800B2580:lI101|H2800B2590
+2800B2590:lI114|H2800B25A0
+2800B25A0:lI58|H2800B25B0
+2800B25B0:lI104|H2800B25C0
+2800B25C0:lI97|H2800B25D0
+2800B25D0:lI110|H2800B25E0
+2800B25E0:lI100|H2800B25F0
+2800B25F0:lI108|H2800B2600
+2800B2600:lI101|H2800B2610
+2800B2610:lI95|H2800B2620
+2800B2620:lI105|H2800B2630
+2800B2630:lI110|H2800B2640
+2800B2640:lI102|H2800B2650
+2800B2650:lI111|H2800B2660
+2800B2660:lI32|H2800B2670
+2800B2670:lI126|H2800B2680
+2800B2680:lI112|H2800B2690
+2800B2690:lI126|H2800B26A0
+2800B26A0:lI110|N
+2800B26B0:lA5:proxy|H2800B26C0
+2800B26C0:lAB:https_proxy|H2800B26D0
+2800B26D0:lA10:pipeline_timeout|H2800B26E0
+2800B26E0:lA13:max_pipeline_length|H2800B26F0
+2800B26F0:lA15:max_keep_alive_length|H2800B2700
+2800B2700:lA12:keep_alive_timeout|H2800B2710
+2800B2710:lAC:max_sessions|H2800B2720
+2800B2720:lA7:cookies|H2800B2730
+2800B2730:lA7:verbose|H2800B2740
+2800B2740:lA8:ipfamily|H2800B2750
+2800B2750:lA2:ip|H2800B2760
+2800B2760:lA4:port|H2800B2770
+2800B2770:lAB:socket_opts|H2800B2780
+2800B2780:lAB:unix_socket|N
+2800B2790:t3:A2:$2,A2:$1,A1:_
+2800B27B0:lI72|H2800B27C0
+2800B27C0:lI84|H2800B27D0
+2800B27D0:lI84|H2800B27E0
+2800B27E0:lI80|H2800B27F0
+2800B27F0:lI47|H2800B2800
+2800B2800:lI49|H2800B2810
+2800B2810:lI46|H2800B2820
+2800B2820:lI48|N
+2800B2830:lI99|H2800B2840
+2800B2840:lI108|H2800B2850
+2800B2850:lI111|H2800B2860
+2800B2860:lI115|H2800B2870
+2800B2870:lI101|N
+2800B2880:t2:A4:line,I817
+2800B2898:lI115|H2800B28A8
+2800B28A8:lI101|H2800B28B8
+2800B28B8:lI108|H2800B28C8
+2800B28C8:lI101|H2800B28D8
+2800B28D8:lI99|H2800B28E8
+2800B28E8:lI116|H2800B28F8
+2800B28F8:lI32|H2800B2908
+2800B2908:lI115|H2800B2918
+2800B2918:lI101|H2800B2928
+2800B2928:lI115|H2800B2938
+2800B2938:lI115|H2800B2948
+2800B2948:lI105|H2800B2958
+2800B2958:lI111|H2800B2968
+2800B2968:lI110|N
+2800B2978:t2:A4:line,I838
+2800B2990:lI115|H2800B29A0
+2800B29A0:lI101|H2800B29B0
+2800B29B0:lI108|H2800B29C0
+2800B29C0:lI101|H2800B29D0
+2800B29D0:lI99|H2800B29E0
+2800B29E0:lI116|H2800B29F0
+2800B29F0:lI32|H2800B2A00
+2800B2A00:lI115|H2800B2A10
+2800B2A10:lI101|H2800B2A20
+2800B2A20:lI115|H2800B2A30
+2800B2A30:lI115|H2800B2A40
+2800B2A40:lI105|H2800B2A50
+2800B2A50:lI111|H2800B2A60
+2800B2A60:lI110|H2800B2A70
+2800B2A70:lI32|H2800B2A80
+2800B2A80:lI45|H2800B2A90
+2800B2A90:lI32|H2800B2AA0
+2800B2AA0:lI110|H2800B2AB0
+2800B2AB0:lI111|H2800B2AC0
+2800B2AC0:lI32|H2800B2AD0
+2800B2AD0:lI99|H2800B2AE0
+2800B2AE0:lI97|H2800B2AF0
+2800B2AF0:lI110|H2800B2B00
+2800B2B00:lI100|H2800B2B10
+2800B2B10:lI105|H2800B2B20
+2800B2B20:lI100|H2800B2B30
+2800B2B30:lI97|H2800B2B40
+2800B2B40:lI116|H2800B2B50
+2800B2B50:lI101|N
+2800B2B60:lH2800B2B80|H2800B2B70
+2800B2B70:lH2800B2B98|N
+2800B2B80:t2:A6:module,AD:httpc_manager
+2800B2B98:t2:A4:line,I853
+2800B2BB0:t2:A4:line,I862
+2800B2BC8:lI115|H2800B2BD8
+2800B2BD8:lI101|H2800B2BE8
+2800B2BE8:lI108|H2800B2BF8
+2800B2BF8:lI101|H2800B2C08
+2800B2C08:lI99|H2800B2C18
+2800B2C18:lI116|H2800B2C28
+2800B2C28:lI32|H2800B2C38
+2800B2C38:lI115|H2800B2C48
+2800B2C48:lI101|H2800B2C58
+2800B2C58:lI115|H2800B2C68
+2800B2C68:lI115|H2800B2C78
+2800B2C78:lI105|H2800B2C88
+2800B2C88:lI111|H2800B2C98
+2800B2C98:lI110|H2800B2CA8
+2800B2CA8:lI32|H2800B2CB8
+2800B2CB8:lI45|H2800B2CC8
+2800B2CC8:lI32|H2800B2CD8
+2800B2CD8:lI102|H2800B2CE8
+2800B2CE8:lI111|H2800B2CF8
+2800B2CF8:lI117|H2800B2D08
+2800B2D08:lI110|H2800B2D18
+2800B2D18:lI100|H2800B2D28
+2800B2D28:lI32|H2800B2D38
+2800B2D38:lI111|H2800B2D48
+2800B2D48:lI110|H2800B2D58
+2800B2D58:lI101|N
+2800B2D68:t2:A5:error,A6:closed
+2800B2D80:t2:H2800B2D98,N
+2800B2D98:lI99|H2800B2DA8
+2800B2DA8:lI111|H2800B2DB8
+2800B2DB8:lI111|H2800B2DC8
+2800B2DC8:lI107|H2800B2DD8
+2800B2DD8:lI105|H2800B2DE8
+2800B2DE8:lI101|N
+2800B2DF8:lI95|H2800B2E08
+2800B2E08:lI95|H2800B2E18
+2800B2E18:lI115|H2800B2E28
+2800B2E28:lI101|H2800B2E38
+2800B2E38:lI115|H2800B2E48
+2800B2E48:lI115|H2800B2E58
+2800B2E58:lI105|H2800B2E68
+2800B2E68:lI111|H2800B2E78
+2800B2E78:lI110|H2800B2E88
+2800B2E88:lI95|H2800B2E98
+2800B2E98:lI100|H2800B2EA8
+2800B2EA8:lI98|N
+2800B2EB8:lI95|H2800B2EC8
+2800B2EC8:lI95|H2800B2ED8
+2800B2ED8:lI99|H2800B2EE8
+2800B2EE8:lI111|H2800B2EF8
+2800B2EF8:lI111|H2800B2F08
+2800B2F08:lI107|H2800B2F18
+2800B2F18:lI105|H2800B2F28
+2800B2F28:lI101|H2800B2F38
+2800B2F38:lI95|H2800B2F48
+2800B2F48:lI100|H2800B2F58
+2800B2F58:lI98|N
+2800B2F68:lI95|H2800B2F78
+2800B2F78:lI95|H2800B2F88
+2800B2F88:lI115|H2800B2F98
+2800B2F98:lI101|H2800B2FA8
+2800B2FA8:lI115|H2800B2FB8
+2800B2FB8:lI115|H2800B2FC8
+2800B2FC8:lI105|H2800B2FD8
+2800B2FD8:lI111|H2800B2FE8
+2800B2FE8:lI110|H2800B2FF8
+2800B2FF8:lI95|H2800B3008
+2800B3008:lI99|H2800B3018
+2800B3018:lI111|H2800B3028
+2800B3028:lI111|H2800B3038
+2800B3038:lI107|H2800B3048
+2800B3048:lI105|H2800B3058
+2800B3058:lI101|H2800B3068
+2800B3068:lI95|H2800B3078
+2800B3078:lI100|H2800B3088
+2800B3088:lI98|N
+2800B3098:lI95|H2800B30A8
+2800B30A8:lI95|H2800B30B8
+2800B30B8:lI104|H2800B30C8
+2800B30C8:lI97|H2800B30D8
+2800B30D8:lI110|H2800B30E8
+2800B30E8:lI100|H2800B30F8
+2800B30F8:lI108|H2800B3108
+2800B3108:lI101|H2800B3118
+2800B3118:lI114|H2800B3128
+2800B3128:lI95|H2800B3138
+2800B3138:lI100|H2800B3148
+2800B3148:lI98|N
+2800B3158:lI115|N
+2800B3168:lA4:call|N
+2800B3178:lH2800B3188|N
+2800B3188:t3:A1:_,N,H2800B31A8
+2800B31A8:lH2800B31B8|N
+2800B31B8:t1:AC:return_trace
+2800B31C8:lI126|H2800B31D8
+2800B31D8:lI110|N
+2800B31E8:lI72|H2800B31F8
+2800B31F8:lI84|H2800B3208
+2800B3208:lI84|H2800B3218
+2800B3218:lI80|H2800B3228
+2800B3228:lI67|H2800B3238
+2800B3238:lI45|H2800B3248
+2800B3248:lI77|H2800B3258
+2800B3258:lI65|H2800B3268
+2800B3268:lI78|H2800B3278
+2800B3278:lI65|H2800B3288
+2800B3288:lI71|H2800B3298
+2800B3298:lI69|H2800B32A8
+2800B32A8:lI82|H2800B32B8
+2800B32B8:lI60|H2800B32C8
+2800B32C8:lI126|H2800B32D8
+2800B32D8:lI112|H2800B32E8
+2800B32E8:lI62|H2800B32F8
+2800B32F8:lI32|N
+2800B3308:lI108|N
+2800B3318:lI114|H2800B3308
+2800B3328:lI101|H2800B3318
+2800B3338:lI46|H2800B3328
+2800B3348:lI114|H2800B3338
+2800B3358:lI101|H2800B3348
+2800B3368:lI103|H2800B3358
+2800B3378:lI97|H2800B3368
+2800B3388:lI110|H2800B3378
+2800B3398:lI97|H2800B3388
+2800B33A8:lI109|H2800B3398
+2800B33B8:lI95|H2800B33A8
+2800B33C8:lI99|H2800B33B8
+2800B33D8:lI112|H2800B33C8
+2800B33E8:lI116|H2800B33D8
+2800B33F8:lI116|H2800B33E8
+2800B3408:lI104|H2800B33F8
+2800B3418:E51:g3AAAABPAav5MfhExLjVj7CSaHK/DswAAAAAAAAAAHcNaHR0cGNfbWFuYWdlcmEAYgVfyY9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+2800B3440:E51:g3AAAABPAav5MfhExLjVj7CSaHK/DswAAAABAAAAAHcNaHR0cGNfbWFuYWdlcmEBYgVfyY9Ydw1ub25vZGVAbm9ob3N0AAAAAAAAAAAAAAAA
+2800B6F58:t2:A5:local,A11:httpc_handler_sup
+2800B6F70:lAD:httpc_handler|N
+2800B6F80:t3:A12:simple_one_for_one,I0,I3600
+2800B6FA0:lI108|N
+2800B6FB0:lI114|H2800B6FA0
+2800B6FC0:lI101|H2800B6FB0
+2800B6FD0:lI46|H2800B6FC0
+2800B6FE0:lI112|H2800B6FD0
+2800B6FF0:lI117|H2800B6FE0
+2800B7000:lI115|H2800B6FF0
+2800B7010:lI95|H2800B7000
+2800B7020:lI114|H2800B7010
+2800B7030:lI101|H2800B7020
+2800B7040:lI108|H2800B7030
+2800B7050:lI100|H2800B7040
+2800B7060:lI110|H2800B7050
+2800B7070:lI97|H2800B7060
+2800B7080:lI104|H2800B7070
+2800B7090:lI95|H2800B7080
+2800B70A0:lI99|H2800B7090
+2800B70B0:lI112|H2800B70A0
+2800B70C0:lI116|H2800B70B0
+2800B70D0:lI116|H2800B70C0
+2800B70E0:lI104|H2800B70D0
+2800BDB80:t2:A5:local,A12:tls_connection_sup
+2800BDB98:t2:A5:local,A17:tls_dist_connection_sup
+2800BDBB0:t2:A2:ok,H2800BDBC8
+2800BDBC8:t2:H2800BDC00,H2800BDC30
+2800BDBE0:t3:A8:strategy,A6:period,A9:intensity
+2800BDC00:Mf3:H2800BDBE0:A12:simple_one_for_one,I3600,I0
+2800BDC30:lH2800BDC68|N
+2800BDC40:t4:A2:id,A7:restart,A5:start,A4:type
+2800BDC68:Mf4:H2800BDC40:A9:undefined,A9:temporary,H2800BDCA0,AA:supervisor
+2800BDCA0:t3:A16:tls_dyn_connection_sup,AA:start_link,N
+2800BDCC0:lI108|N
+2800BDCD0:lI114|H2800BDCC0
+2800BDCE0:lI101|H2800BDCD0
+2800BDCF0:lI46|H2800BDCE0
+2800BDD00:lI112|H2800BDCF0
+2800BDD10:lI117|H2800BDD00
+2800BDD20:lI115|H2800BDD10
+2800BDD30:lI95|H2800BDD20
+2800BDD40:lI110|H2800BDD30
+2800BDD50:lI111|H2800BDD40
+2800BDD60:lI105|H2800BDD50
+2800BDD70:lI116|H2800BDD60
+2800BDD80:lI99|H2800BDD70
+2800BDD90:lI101|H2800BDD80
+2800BDDA0:lI110|H2800BDD90
+2800BDDB0:lI110|H2800BDDA0
+2800BDDC0:lI111|H2800BDDB0
+2800BDDD0:lI99|H2800BDDC0
+2800BDDE0:lI95|H2800BDDD0
+2800BDDF0:lI115|H2800BDDE0
+2800BDE00:lI108|H2800BDDF0
+2800BDE10:lI116|H2800BDE00
+2800BE298:t2:A5:local,A16:ssl_listen_tracker_sup
+2800BE2B0:t2:A5:local,A1B:ssl_listen_tracker_sup_dist
+2800BE2C8:t2:A2:ok,H2800BE2E0
+2800BE2E0:t2:H2800BE318,H2800BE348
+2800BE2F8:t3:A8:strategy,A6:period,A9:intensity
+2800BE318:Mf3:H2800BE2F8:A12:simple_one_for_one,I3600,I0
+2800BE348:lH2800BE390|N
+2800BE358:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BE390:Mf6:H2800BE358:A9:undefined,A9:temporary,I4000,H2800BE3E8,A6:worker,H2800BE3D8
+2800BE3D8:lAA:tls_socket|N
+2800BE3E8:t3:AA:tls_socket,AA:start_link,N
+2800BE408:lI108|N
+2800BE418:lI114|H2800BE408
+2800BE428:lI101|H2800BE418
+2800BE438:lI46|H2800BE428
+2800BE448:lI112|H2800BE438
+2800BE458:lI117|H2800BE448
+2800BE468:lI115|H2800BE458
+2800BE478:lI95|H2800BE468
+2800BE488:lI114|H2800BE478
+2800BE498:lI101|H2800BE488
+2800BE4A8:lI107|H2800BE498
+2800BE4B8:lI99|H2800BE4A8
+2800BE4C8:lI97|H2800BE4B8
+2800BE4D8:lI114|H2800BE4C8
+2800BE4E8:lI116|H2800BE4D8
+2800BE4F8:lI95|H2800BE4E8
+2800BE508:lI110|H2800BE4F8
+2800BE518:lI101|H2800BE508
+2800BE528:lI116|H2800BE518
+2800BE538:lI115|H2800BE528
+2800BE548:lI105|H2800BE538
+2800BE558:lI108|H2800BE548
+2800BE568:lI95|H2800BE558
+2800BE578:lI108|H2800BE568
+2800BE588:lI115|H2800BE578
+2800BE598:lI115|H2800BE588
+2800BE5C0:t2:A5:local,A1D:tls_server_session_ticket_sup
+2800BE5D8:t2:A5:local,A22:tls_server_session_ticket_sup_dist
+2800BE5F0:t2:A2:ok,H2800BE608
+2800BE608:t2:H2800BE640,H2800BE670
+2800BE620:t3:A8:strategy,A6:period,A9:intensity
+2800BE640:Mf3:H2800BE620:A12:simple_one_for_one,I3600,I0
+2800BE670:lH2800BE6B8|N
+2800BE680:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BE6B8:Mf6:H2800BE680:A9:undefined,A9:transient,I4000,H2800BE710,A6:worker,H2800BE700
+2800BE700:lA19:tls_server_session_ticket|N
+2800BE710:t3:A19:tls_server_session_ticket,AA:start_link,N
+2800BE730:lI108|N
+2800BE740:lI114|H2800BE730
+2800BE750:lI101|H2800BE740
+2800BE760:lI46|H2800BE750
+2800BE770:lI112|H2800BE760
+2800BE780:lI117|H2800BE770
+2800BE790:lI115|H2800BE780
+2800BE7A0:lI95|H2800BE790
+2800BE7B0:lI116|H2800BE7A0
+2800BE7C0:lI101|H2800BE7B0
+2800BE7D0:lI107|H2800BE7C0
+2800BE7E0:lI99|H2800BE7D0
+2800BE7F0:lI105|H2800BE7E0
+2800BE800:lI116|H2800BE7F0
+2800BE810:lI95|H2800BE800
+2800BE820:lI110|H2800BE810
+2800BE830:lI111|H2800BE820
+2800BE840:lI105|H2800BE830
+2800BE850:lI115|H2800BE840
+2800BE860:lI115|H2800BE850
+2800BE870:lI101|H2800BE860
+2800BE880:lI115|H2800BE870
+2800BE890:lI95|H2800BE880
+2800BE8A0:lI114|H2800BE890
+2800BE8B0:lI101|H2800BE8A0
+2800BE8C0:lI118|H2800BE8B0
+2800BE8D0:lI114|H2800BE8C0
+2800BE8E0:lI101|H2800BE8D0
+2800BE8F0:lI115|H2800BE8E0
+2800BE900:lI95|H2800BE8F0
+2800BE910:lI115|H2800BE900
+2800BE920:lI108|H2800BE910
+2800BE930:lI116|H2800BE920
+2800BE958:t2:A5:local,A1C:ssl_server_session_cache_sup
+2800BE970:t2:A2:ok,H2800BE988
+2800BE988:t2:H2800BE9C0,H2800BE9F0
+2800BE9A0:t3:A8:strategy,A6:period,A9:intensity
+2800BE9C0:Mf3:H2800BE9A0:A12:simple_one_for_one,I3600,I3
+2800BE9F0:lH2800BEA38|N
+2800BEA00:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BEA38:Mf6:H2800BEA00:A9:undefined,A9:transient,I4000,H2800BEA90,A6:worker,H2800BEA80
+2800BEA80:lA18:ssl_server_session_cache|N
+2800BEA90:t3:A18:ssl_server_session_cache,AA:start_link,N
+2800BEAB0:lI108|N
+2800BEAC0:lI114|H2800BEAB0
+2800BEAD0:lI101|H2800BEAC0
+2800BEAE0:lI46|H2800BEAD0
+2800BEAF0:lI112|H2800BEAE0
+2800BEB00:lI117|H2800BEAF0
+2800BEB10:lI115|H2800BEB00
+2800BEB20:lI95|H2800BEB10
+2800BEB30:lI101|H2800BEB20
+2800BEB40:lI104|H2800BEB30
+2800BEB50:lI99|H2800BEB40
+2800BEB60:lI97|H2800BEB50
+2800BEB70:lI99|H2800BEB60
+2800BEB80:lI95|H2800BEB70
+2800BEB90:lI110|H2800BEB80
+2800BEBA0:lI111|H2800BEB90
+2800BEBB0:lI105|H2800BEBA0
+2800BEBC0:lI115|H2800BEBB0
+2800BEBD0:lI115|H2800BEBC0
+2800BEBE0:lI101|H2800BEBD0
+2800BEBF0:lI115|H2800BEBE0
+2800BEC00:lI95|H2800BEBF0
+2800BEC10:lI114|H2800BEC00
+2800BEC20:lI101|H2800BEC10
+2800BEC30:lI118|H2800BEC20
+2800BEC40:lI114|H2800BEC30
+2800BEC50:lI101|H2800BEC40
+2800BEC60:lI115|H2800BEC50
+2800BEC70:lI95|H2800BEC60
+2800BEC80:lI108|H2800BEC70
+2800BEC90:lI115|H2800BEC80
+2800BECA0:lI115|H2800BEC90
+2800BECC8:t2:A5:local,A24:ssl_upgrade_server_session_cache_sup
+2800BECE0:t2:A5:local,A29:ssl_upgrade_server_session_cache_sup_dist
+2800BECF8:t2:A2:ok,H2800BED10
+2800BED10:t2:H2800BED48,H2800BED78
+2800BED28:t3:A8:strategy,A6:period,A9:intensity
+2800BED48:Mf3:H2800BED28:A12:simple_one_for_one,I3600,I3
+2800BED78:lH2800BEDC0|N
+2800BED88:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BEDC0:Mf6:H2800BED88:A9:undefined,A9:transient,I4000,H2800BEE18,A6:worker,H2800BEE08
+2800BEE08:lA18:ssl_server_session_cache|N
+2800BEE18:t3:A18:ssl_server_session_cache,AA:start_link,N
+2800BEE38:lI108|N
+2800BEE48:lI114|H2800BEE38
+2800BEE58:lI101|H2800BEE48
+2800BEE68:lI46|H2800BEE58
+2800BEE78:lI112|H2800BEE68
+2800BEE88:lI117|H2800BEE78
+2800BEE98:lI115|H2800BEE88
+2800BEEA8:lI95|H2800BEE98
+2800BEEB8:lI101|H2800BEEA8
+2800BEEC8:lI104|H2800BEEB8
+2800BEED8:lI99|H2800BEEC8
+2800BEEE8:lI97|H2800BEED8
+2800BEEF8:lI99|H2800BEEE8
+2800BEF08:lI95|H2800BEEF8
+2800BEF18:lI110|H2800BEF08
+2800BEF28:lI111|H2800BEF18
+2800BEF38:lI105|H2800BEF28
+2800BEF48:lI115|H2800BEF38
+2800BEF58:lI115|H2800BEF48
+2800BEF68:lI101|H2800BEF58
+2800BEF78:lI115|H2800BEF68
+2800BEF88:lI95|H2800BEF78
+2800BEF98:lI114|H2800BEF88
+2800BEFA8:lI101|H2800BEF98
+2800BEFB8:lI118|H2800BEFA8
+2800BEFC8:lI114|H2800BEFB8
+2800BEFD8:lI101|H2800BEFC8
+2800BEFE8:lI115|H2800BEFD8
+2800BEFF8:lI95|H2800BEFE8
+2800BF008:lI101|H2800BEFF8
+2800BF018:lI100|H2800BF008
+2800BF028:lI97|H2800BF018
+2800BF038:lI114|H2800BF028
+2800BF048:lI103|H2800BF038
+2800BF058:lI112|H2800BF048
+2800BF068:lI117|H2800BF058
+2800BF078:lI95|H2800BF068
+2800BF088:lI108|H2800BF078
+2800BF098:lI115|H2800BF088
+2800BF0A8:lI115|H2800BF098
+2800BF370:t2:A5:local,A13:dtls_connection_sup
+2800BF388:t2:A5:local,A18:dtls_connection_sup_dist
+2800BF3A0:t2:A2:ok,H2800BF3B8
+2800BF3B8:t2:H2800BF3F0,H2800BF420
+2800BF3D0:t3:A8:strategy,A6:period,A9:intensity
+2800BF3F0:Mf3:H2800BF3D0:A12:simple_one_for_one,I3600,I0
+2800BF420:lH2800BF468|N
+2800BF430:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BF468:Mf6:H2800BF430:A9:undefined,A9:temporary,I4000,H2800BF4D0,A6:worker,H2800BF4B0
+2800BF4B0:lAE:ssl_gen_statem|H2800BF4C0
+2800BF4C0:lAF:dtls_connection|N
+2800BF4D0:t3:AE:ssl_gen_statem,AA:start_link,N
+2800BF4F0:lI108|N
+2800BF500:lI114|H2800BF4F0
+2800BF510:lI101|H2800BF500
+2800BF520:lI46|H2800BF510
+2800BF530:lI112|H2800BF520
+2800BF540:lI117|H2800BF530
+2800BF550:lI115|H2800BF540
+2800BF560:lI95|H2800BF550
+2800BF570:lI110|H2800BF560
+2800BF580:lI111|H2800BF570
+2800BF590:lI105|H2800BF580
+2800BF5A0:lI116|H2800BF590
+2800BF5B0:lI99|H2800BF5A0
+2800BF5C0:lI101|H2800BF5B0
+2800BF5D0:lI110|H2800BF5C0
+2800BF5E0:lI110|H2800BF5D0
+2800BF5F0:lI111|H2800BF5E0
+2800BF600:lI99|H2800BF5F0
+2800BF610:lI95|H2800BF600
+2800BF620:lI115|H2800BF610
+2800BF630:lI108|H2800BF620
+2800BF640:lI116|H2800BF630
+2800BF650:lI100|H2800BF640
+2800BF988:t2:A5:local,A11:dtls_listener_sup
+2800BF9A0:t2:A5:error,A11:already_listening
+2800BF9B8:lAB:named_table|H2800BF9C8
+2800BF9C8:lA6:public|H2800BF9D8
+2800BF9D8:lA3:set|N
+2800BF9E8:t2:A2:ok,H2800BFA00
+2800BFA00:t2:H2800BFA38,H2800BFA68
+2800BFA18:t3:A8:strategy,A6:period,A9:intensity
+2800BFA38:Mf3:H2800BFA18:A12:simple_one_for_one,I3600,I0
+2800BFA68:lH2800BFAB0|N
+2800BFA78:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BFAB0:Mf6:H2800BFA78:A9:undefined,A9:temporary,I4000,H2800BFB08,A6:worker,H2800BFAF8
+2800BFAF8:lA11:dtls_packet_demux|N
+2800BFB08:t3:A11:dtls_packet_demux,AA:start_link,N
+2800BFB28:lI108|N
+2800BFB38:lI114|H2800BFB28
+2800BFB48:lI101|H2800BFB38
+2800BFB58:lI46|H2800BFB48
+2800BFB68:lI112|H2800BFB58
+2800BFB78:lI117|H2800BFB68
+2800BFB88:lI115|H2800BFB78
+2800BFB98:lI95|H2800BFB88
+2800BFBA8:lI114|H2800BFB98
+2800BFBB8:lI101|H2800BFBA8
+2800BFBC8:lI110|H2800BFBB8
+2800BFBD8:lI101|H2800BFBC8
+2800BFBE8:lI116|H2800BFBD8
+2800BFBF8:lI115|H2800BFBE8
+2800BFC08:lI105|H2800BFBF8
+2800BFC18:lI108|H2800BFC08
+2800BFC28:lI95|H2800BFC18
+2800BFC38:lI115|H2800BFC28
+2800BFC48:lI108|H2800BFC38
+2800BFC58:lI116|H2800BFC48
+2800BFC68:lI100|H2800BFC58
+2800BFC90:t2:A5:local,A1D:dtls_server_session_cache_sup
+2800BFCA8:t2:A2:ok,H2800BFCC0
+2800BFCC0:t2:H2800BFCF8,H2800BFD28
+2800BFCD8:t3:A8:strategy,A6:period,A9:intensity
+2800BFCF8:Mf3:H2800BFCD8:A12:simple_one_for_one,I3600,I0
+2800BFD28:lH2800BFD70|N
+2800BFD38:t6:A2:id,A7:restart,A8:shutdown,A5:start,A4:type,A7:modules
+2800BFD70:Mf6:H2800BFD38:A9:undefined,A9:temporary,I4000,H2800BFDC8,A6:worker,H2800BFDB8
+2800BFDB8:lA18:ssl_server_session_cache|N
+2800BFDC8:t3:A18:ssl_server_session_cache,AA:start_link,N
+2800BFDE8:lI108|N
+2800BFDF8:lI114|H2800BFDE8
+2800BFE08:lI101|H2800BFDF8
+2800BFE18:lI46|H2800BFE08
+2800BFE28:lI112|H2800BFE18
+2800BFE38:lI117|H2800BFE28
+2800BFE48:lI115|H2800BFE38
+2800BFE58:lI95|H2800BFE48
+2800BFE68:lI101|H2800BFE58
+2800BFE78:lI104|H2800BFE68
+2800BFE88:lI99|H2800BFE78
+2800BFE98:lI97|H2800BFE88
+2800BFEA8:lI99|H2800BFE98
+2800BFEB8:lI95|H2800BFEA8
+2800BFEC8:lI110|H2800BFEB8
+2800BFED8:lI111|H2800BFEC8
+2800BFEE8:lI105|H2800BFED8
+2800BFEF8:lI115|H2800BFEE8
+2800BFF08:lI115|H2800BFEF8
+2800BFF18:lI101|H2800BFF08
+2800BFF28:lI115|H2800BFF18
+2800BFF38:lI95|H2800BFF28
+2800BFF48:lI114|H2800BFF38
+2800BFF58:lI101|H2800BFF48
+2800BFF68:lI118|H2800BFF58
+2800BFF78:lI114|H2800BFF68
+2800BFF88:lI101|H2800BFF78
+2800BFF98:lI115|H2800BFF88
+2800BFFA8:lI95|H2800BFF98
+2800BFFB8:lI115|H2800BFFA8
+2800BFFC8:lI108|H2800BFFB8
+2800BFFD8:lI116|H2800BFFC8
+2800BFFE8:lI100|H2800BFFD8
+2800CCFF0:E30:g3F3EmdsZWFtX290cF9leHRlcm5hbHcWY29udmVydF9zeXN0ZW1fbWVzc2FnZWEC
+2800CD018:Yh27:QWN0b3IgZGlzY2FyZGluZyB1bmV4cGVjdGVkIG1lc3NhZ2U6IH5z
+2800CD050:t2:A5:error,AC:init_timeout
+2800CD068:lI108|N
+2800CD078:lI114|H2800CD068
+2800CD088:lI101|H2800CD078
+2800CD098:lI46|H2800CD088
+2800CD0A8:lI114|H2800CD098
+2800CD0B8:lI111|H2800CD0A8
+2800CD0C8:lI116|H2800CD0B8
+2800CD0D8:lI99|H2800CD0C8
+2800CD0E8:lI97|H2800CD0D8
+2800CD0F8:lI64|H2800CD0E8
+2800CD108:lI112|H2800CD0F8
+2800CD118:lI116|H2800CD108
+2800CD128:lI111|H2800CD118
+2800CD138:lI64|H2800CD128
+2800CD148:lI109|H2800CD138
+2800CD158:lI97|H2800CD148
+2800CD168:lI101|H2800CD158
+2800CD178:lI108|H2800CD168
+2800CD188:lI103|H2800CD178
+2800CD198:lI108|N
+2800CD1A8:lI114|H2800CD198
+2800CD1B8:lI101|H2800CD1A8
+2800CD1C8:lI46|H2800CD1B8
+2800CD1D8:lI114|H2800CD1C8
+2800CD1E8:lI111|H2800CD1D8
+2800CD1F8:lI116|H2800CD1E8
+2800CD208:lI99|H2800CD1F8
+2800CD218:lI97|H2800CD208
+2800CD228:lI64|H2800CD218
+2800CD238:lI112|H2800CD228
+2800CD248:lI116|H2800CD238
+2800CD258:lI111|H2800CD248
+2800CD268:lI64|H2800CD258
+2800CD278:lI109|H2800CD268
+2800CD288:lI97|H2800CD278
+2800CD298:lI101|H2800CD288
+2800CD2A8:lI108|H2800CD298
+2800CD2B8:lI103|H2800CD2A8
+2800CD2C8:lI47|H2800CD2B8
+2800CD2D8:lI115|H2800CD2C8
+2800CD2E8:lI116|H2800CD2D8
+2800CD2F8:lI99|H2800CD2E8
+2800CD308:lI97|H2800CD2F8
+2800CD318:lI102|H2800CD308
+2800CD328:lI101|H2800CD318
+2800CD338:lI116|H2800CD328
+2800CD348:lI114|H2800CD338
+2800CD358:lI97|H2800CD348
+2800CD368:lI95|H2800CD358
+2800CD378:lI109|H2800CD368
+2800CD388:lI97|H2800CD378
+2800CD398:lI101|H2800CD388
+2800CD3A8:lI108|H2800CD398
+2800CD3B8:lI103|H2800CD3A8
+2800CD3C8:lI95|H2800CD3B8
+2800CD3D8:lI47|H2800CD3C8
+2800CD3E8:lI112|H2800CD3D8
+2800CD3F8:lI116|H2800CD3E8
+2800CD408:lI111|H2800CD3F8
+2800CD418:lI95|H2800CD408
+2800CD428:lI109|H2800CD418
+2800CD438:lI97|H2800CD428
+2800CD448:lI101|H2800CD438
+2800CD458:lI108|H2800CD448
+2800CD468:lI103|H2800CD458
+2800CD478:lI47|H2800CD468
+2800CD488:lI103|H2800CD478
+2800CD498:lI110|H2800CD488
+2800CD4A8:lI97|H2800CD498
+2800CD4B8:lI108|H2800CD4A8
+2800CD4C8:lI114|H2800CD4B8
+2800CD4D8:lI101|H2800CD4C8
+2800CD4E8:lI47|H2800CD4D8
+2800CD4F8:lI118|H2800CD4E8
+2800CD508:lI101|H2800CD4F8
+2800CD518:lI100|H2800CD508
+2800CD528:lI47|H2800CD518
+2800CD538:lI100|H2800CD528
+2800CD548:lI108|H2800CD538
+2800CD558:lI105|H2800CD548
+2800CD568:lI117|H2800CD558
+2800CD578:lI98|H2800CD568
+2800CD588:lI47|H2800CD578
+2800CD598:lI51|H2800CD588
+2800CD5A8:lI50|H2800CD598
+2800CD5B8:lI48|H2800CD5A8
+2800CD5C8:lI50|H2800CD5B8
+2800CD5D8:lI99|H2800CD5C8
+2800CD5E8:lI111|H2800CD5D8
+2800CD5F8:lI97|H2800CD5E8
+2800CD608:lI47|H2800CD5F8
+2800CD618:lI101|H2800CD608
+2800CD628:lI100|H2800CD618
+2800CD638:lI111|H2800CD628
+2800CD648:lI67|H2800CD638
+2800CD658:lI102|H2800CD648
+2800CD668:lI79|H2800CD658
+2800CD678:lI116|H2800CD668
+2800CD688:lI110|H2800CD678
+2800CD698:lI101|H2800CD688
+2800CD6A8:lI118|H2800CD698
+2800CD6B8:lI100|H2800CD6A8
+2800CD6C8:lI65|H2800CD6B8
+2800CD6D8:lI47|H2800CD6C8
+2800CD6E8:lI101|H2800CD6D8
+2800CD6F8:lI100|H2800CD6E8
+2800CD708:lI111|H2800CD6F8
+2800CD718:lI67|H2800CD708
+2800CD728:lI32|H2800CD718
+2800CD738:lI83|H2800CD728
+2800CD748:lI86|H2800CD738
+2800CD758:lI47|H2800CD748
+2800CD768:lI110|H2800CD758
+2800CD778:lI111|H2800CD768
+2800CD788:lI115|H2800CD778
+2800CD798:lI108|H2800CD788
+2800CD7A8:lI114|H2800CD798
+2800CD7B8:lI97|H2800CD7A8
+2800CD7C8:lI99|H2800CD7B8
+2800CD7D8:lI115|H2800CD7C8
+2800CD7E8:lI97|H2800CD7D8
+2800CD7F8:lI108|H2800CD7E8
+2800CD808:lI111|H2800CD7F8
+2800CD818:lI104|H2800CD808
+2800CD828:lI99|H2800CD818
+2800CD838:lI105|H2800CD828
+2800CD848:lI110|H2800CD838
+2800CD858:lI47|H2800CD848
+2800CD868:lI115|H2800CD858
+2800CD878:lI114|H2800CD868
+2800CD888:lI101|H2800CD878
+2800CD898:lI115|H2800CD888
+2800CD8A8:lI85|H2800CD898
+2800CD8B8:lI47|H2800CD8A8
+2800CD8C8:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAAAAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQBiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800CD8F0:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAABAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQFiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800CD918:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAACAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQJiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800CD940:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAAFAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQViBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+2800CD968:E53:g3AAAABRAaydgc7BzWhFu0HOQjKx7YoAAAAGAAAAAHcPZ2xlYW1Ab3RwQGFjdG9yYQZiBWTsDlh3DW5vbm9kZUBub2hvc3QAAAAAAAAAAAAAAAA=
+280093080:t2:H280093098,A5:async
+280093098:t2:AA:logger_olp,A14:logger_std_h_default
+28008F548:t2:AC:logger_proxy,H28008F560
+28008F560:t3:AC:logger_proxy,P<0.72.0>,H28008F580
+28008F580:t2:AA:logger_olp,AC:logger_proxy
+2800930C8:t2:H2800930E0,I10
+2800930E0:t2:AD:logger_config,H2800930F8
+2800930F8:t2:A10:$handler_config$,A7:default
+28001C1F8:t2:H28001C210,H28001C228
+28001C210:t2:AB:prim_socket,A7:options
+28001C228:MhC2:10:H28001C2B8,H28001C2F8,H28001C338,H28001C380,H28001C3E0,H28001C410,H28001C460,H28001C4B0,H28001C4F8,H28001C550,H28001C598,H28001C5F0,H28001C658,H28001C6B8,H28001C710,H28001C740
+28001C2B8:Mn7:H28001C790,H28001C7A0,H28001C7B0,H28001C7C0,H28001C7D0,H28001C7E0,H28001C7F8
+28001C2F8:Mn7:H28001C808,H28001C830,H28001C840,H28001C850,H28001C860,H28001C878,H28001C888
+28001C338:Mn8:H28001C8A0,H28001C8B0,H28001C8D8,H28001C900,H28001C910,H28001C938,H28001C950,H28001C960
+28001C380:MnB:H28001C988,H28001C998,H28001C9A8,H28001C9C0,H28001C9E0,H28001CA08,H28001CA30,H28001CA48,H28001CA70,H28001CA80,H28001CA90
+28001C3E0:Mn5:H28001CAB8,H28001CAC8,H28001CAD8,H28001CB00,H28001CB20
+28001C410:Mn9:H28001CB38,H28001CB48,H28001CB58,H28001CB68,H28001CB90,H28001CBA8,H28001CBD0,H28001CBF8,H28001CC08
+28001C460:Mn9:H28001CC18,H28001CC30,H28001CC58,H28001CC70,H28001CC88,H28001CC98,H28001CCA8,H28001CCC0,H28001CCD0
+28001C4B0:Mn8:H28001CCF8,H28001CD08,H28001CD18,H28001CD28,H28001CD40,H28001CD50,H28001CD60,H28001CD78
+28001C4F8:MnA:H28001CD88,H28001CDA0,H28001CDC8,H28001CDD8,H28001CDE8,H28001CE00,H28001CE18,H28001CE28,H28001CE38,H28001CE60
+28001C550:Mn8:H28001CE88,H28001CEB0,H28001CED8,H28001CEF0,H28001CF18,H28001CF30,H28001CF40,H28001CF50
+28001C598:MnA:H28001CF60,H28001CF78,H28001CFA0,H28001CFB8,H28001CFD8,H28001D000,H28001D010,H28001D020,H28001D038,H28001D048
+28001C5F0:MnC:H28001D058,H28001D080,H28001D090,H28001D0A8,H28001D0C0,H28001D0E8,H28001D110,H28001D120,H28001D130,H28001D140,H28001D150,H28001D160
+28001C658:MnB:H28001D170,H28001D180,H28001D190,H28001D1A0,H28001D1B0,H28001D1C0,H28001D1E8,H28001D1F8,H28001D208,H28001D218,H28001D228
+28001C6B8:MnA:H28001D238,H28001D248,H28001D268,H28001D278,H28001D298,H28001D2A8,H28001D2B8,H28001D2D0,H28001D2E8,H28001D308
+28001C710:Mn5:H28001D318,H28001D330,H28001D348,H28001D370,H28001D388
+28001C740:Mn9:H28001D398,H28001D3A8,H28001D3B8,H28001D3E0,H28001D3F0,H28001D400,H28001D410,H28001D420,H28001D430
+28001C790:lH28001D440|A9:undefined
+28001C7A0:lH28001D458|A9:undefined
+28001C7B0:lH28001D470|A9:undefined
+28001C7C0:lH28001D488|A9:undefined
+28001C7D0:lH28001D4A0|A9:undefined
+28001C7E0:Mn2:H28001D4B8,H28001D4C8
+28001C7F8:lH28001D4D8|A9:undefined
+28001C808:lH28001D4F0|H28001C818
+28001C818:t2:A6:socket,I1024
+28001C830:lH28001D508|A9:undefined
+28001C840:lH28001D520|A9:undefined
+28001C850:lH28001D538|A9:undefined
+28001C860:Mn2:H28001D550,H28001D560
+28001C878:lH28001D588|A9:undefined
+28001C888:Mn2:H28001D5A0,H28001D5C8
+28001C8A0:lH28001D5F0|A9:undefined
+28001C8B0:lH28001D608|H28001C8C0
+28001C8C0:t2:I0,I4
+28001C8D8:Mn4:H28001D620,H28001D648,H28001D658,H28001D668
+28001C900:lH28001D678|A9:undefined
+28001C910:lH28001D690|H28001C920
+28001C920:t2:I0,I26
+28001C938:Mn2:H28001D6A8,H28001D6B8
+28001C950:lH28001D6C8|A9:undefined
+28001C960:lH28001D6E0|H28001C970
+28001C970:t2:A6:socket,I4099
+28001C988:lH28001D6F8|A9:undefined
+28001C998:lH28001D710|A9:undefined
+28001C9A8:Mn2:H28001D728,H28001D738
+28001C9C0:Mn3:H28001D748,H28001D770,H28001D780
+28001C9E0:lH28001D790|H28001C9F0
+28001C9F0:t2:I0,I72
+28001CA08:lH28001D7A8|H28001CA18
+28001CA18:t2:I41,I36
+28001CA30:Mn2:H28001D7C0,H28001D7D0
+28001CA48:lH28001D7F8|H28001CA58
+28001CA58:t2:I41,I27
+28001CA70:lH28001D810|A9:undefined
+28001CA80:lH28001D828|A9:undefined
+28001CA90:lH28001D840|H28001CAA0
+28001CAA0:t2:I0,I70
+28001CAB8:lH28001D858|A9:undefined
+28001CAC8:lH28001D870|A9:undefined
+28001CAD8:lH28001D888|H28001CAE8
+28001CAE8:t2:I6,I2
+28001CB00:Mn3:H28001D8A0,H28001D8B0,H28001D8D8
+28001CB20:Mn2:H28001D8E8,H28001D8F8
+28001CB38:Mn1:H28001D908
+28001CB48:lH28001D920|A9:undefined
+28001CB58:lH28001D938|A9:undefined
+28001CB68:lH28001D950|H28001CB78
+28001CB78:t2:I0,I73
+28001CB90:Mn2:H28001D968,H28001D978
+28001CBA8:lH28001D9A0|H28001CBB8
+28001CBB8:t2:A6:socket,I256
+28001CBD0:lH28001D9B8|H28001CBE0
+28001CBE0:t2:I41,I10
+28001CBF8:lH28001D9D0|A9:undefined
+28001CC08:lH28001D9E8|A9:undefined
+28001CC18:Mn2:H28001DA00,H28001DA10
+28001CC30:lH28001DA20|H28001CC40
+28001CC40:t2:I0,I3
+28001CC58:Mn2:H28001DA38,H28001DA48
+28001CC70:Mn2:H28001DA58,H28001DA68
+28001CC88:lH28001DA78|A9:undefined
+28001CC98:lH28001DA90|A9:undefined
+28001CCA8:Mn2:H28001DAA8,H28001DAB8
+28001CCC0:lH28001DAC8|A9:undefined
+28001CCD0:Mn4:H28001DAE0,H28001DAF0,H28001DB00,H28001DB10
+28001CCF8:lH28001DB20|A9:undefined
+28001CD08:lH28001DB38|H28001CA58
+28001CD18:lH28001DB50|A9:undefined
+28001CD28:Mn2:H28001DB68,H28001DB90
+28001CD40:lH28001DBA0|H28001CAA0
+28001CD50:lH28001DBB8|H28001CA18
+28001CD60:Mn2:H28001DBD0,H28001DBF8
+28001CD78:lH28001DC08|A9:undefined
+28001CD88:Mn2:H28001DC20,H28001DC30
+28001CDA0:lH28001DC40|H28001CDB0
+28001CDB0:t2:A6:socket,I8
+28001CDC8:Mn1:H28001DC58
+28001CDD8:lH28001DC70|A9:undefined
+28001CDE8:Mn2:H28001DC88,H28001DC98
+28001CE00:Mn2:H28001DCA8,H28001DCB8
+28001CE18:lH28001DCC8|A9:undefined
+28001CE28:lH28001DCE0|A9:undefined
+28001CE38:lH28001DCF8|H28001CE48
+28001CE48:t2:I0,I27
+28001CE60:lH28001DD10|H28001CE70
+28001CE70:t2:I0,I8
+28001CE88:Mn4:H28001DD28,H28001DD38,H28001DD48,H28001DD70
+28001CEB0:lH28001DD98|H28001CEC0
+28001CEC0:t2:I0,I9
+28001CED8:Mn2:H28001DDB0,H28001DDC0
+28001CEF0:lH28001DDE8|H28001CF00
+28001CF00:t2:I0,I24
+28001CF18:Mn2:H28001DE00,H28001DE10
+28001CF30:lH28001DE20|A9:undefined
+28001CF40:lH28001DE38|H28001CB78
+28001CF50:lH28001DE50|A9:undefined
+28001CF60:Mn2:H28001DE68,H28001DE78
+28001CF78:lH28001DE88|H28001CF88
+28001CF88:t2:A6:socket,I1
+28001CFA0:Mn2:H28001DEA0,H28001DEB0
+28001CFB8:Mn3:H28001DEC0,H28001DED8,H28001DEE8
+28001CFD8:lH28001DEF8|H28001CFE8
+28001CFE8:t2:I6,I1
+28001D000:lH28001DF10|A9:undefined
+28001D010:lH28001DF28|A9:undefined
+28001D020:Mn2:H28001DF40,H28001DF50
+28001D038:lH28001DF60|A9:undefined
+28001D048:lH28001DF78|A9:undefined
+28001D058:lH28001DF90|H28001D068
+28001D068:t2:I0,I13
+28001D080:lH28001DFA8|A9:undefined
+28001D090:Mn2:H28001DFC0,H28001DFD0
+28001D0A8:Mn2:H28001DFF8,H28001E008
+28001D0C0:lH28001E018|H28001D0D0
+28001D0D0:t2:I0,I10
+28001D0E8:lH28001E030|H28001D0F8
+28001D0F8:t2:A6:socket,I16
+28001D110:lH28001E048|A9:undefined
+28001D120:lH28001E060|A9:undefined
+28001D130:lH28001E078|A9:undefined
+28001D140:lH28001E090|A9:undefined
+28001D150:lH28001E0A8|A9:undefined
+28001D160:lH28001E0C0|A9:undefined
+28001D170:lH28001E0D8|A9:undefined
+28001D180:Mn1:H28001E0F0
+28001D190:lH28001E108|A9:undefined
+28001D1A0:lH28001E120|A9:undefined
+28001D1B0:lH28001E138|H28001D0D0
+28001D1C0:lH28001E150|H28001D1D0
+28001D1D0:t2:A6:socket,I2
+28001D1E8:lH28001E168|A9:undefined
+28001D1F8:lH28001E180|A9:undefined
+28001D208:lH28001E198|A9:undefined
+28001D218:Mn1:H28001E1B0
+28001D228:lH28001E1C8|A9:undefined
+28001D238:lH28001E1E0|A9:undefined
+28001D248:Mn3:H28001E1F8,H28001E208,H28001E218
+28001D268:lH28001E228|A9:undefined
+28001D278:Mn3:H28001E240,H28001E268,H28001E278
+28001D298:lH28001E288|A9:undefined
+28001D2A8:lH28001E2A0|H28001CE70
+28001D2B8:Mn2:H28001E2B8,H28001E2C8
+28001D2D0:Mn2:H28001E2D8,H28001E2E8
+28001D2E8:Mn3:H28001E2F8,H28001E320,H28001E330
+28001D308:lH28001E340|A9:undefined
+28001D318:Mn2:H28001E358,H28001E368
+28001D330:Mn2:H28001E378,H28001E388
+28001D348:lH28001E398|H28001D358
+28001D358:t2:A6:socket,I4104
+28001D370:Mn2:H28001E3B0,H28001E3C0
+28001D388:lH28001E3D0|A9:undefined
+28001D398:lH28001E3E8|A9:undefined
+28001D3A8:lH28001E400|A9:undefined
+28001D3B8:lH28001E418|H28001D3C8
+28001D3C8:t2:A6:socket,I32
+28001D3E0:lH28001E430|A9:undefined
+28001D3F0:lH28001E448|A9:undefined
+28001D400:lH28001E460|A9:undefined
+28001D410:lH28001E478|A9:undefined
+28001D420:lH28001E490|A9:undefined
+28001D430:lH28001E4A8|A9:undefined
+28001D440:t2:A3:tcp,A8:keepidle
+28001D458:t2:A3:TCP,A5:noopt
+28001D470:t2:A4:ipv6,AA:pktoptions
+28001D488:t2:A4:IPV6,AF:drop_membership
+28001D4A0:t2:A3:tcp,AC:user_timeout
+28001D4B8:lH28001E4C0|A9:undefined
+28001D4C8:lH28001E4D8|A9:undefined
+28001D4D8:t2:A4:IPV6,AB:use_min_mtu
+28001D4F0:t2:A6:socket,A9:timestamp
+28001D508:t2:A2:IP,AD:multicast_all
+28001D520:t2:A3:TCP,A6:syncnt
+28001D538:t2:A4:ipv6,AF:drop_membership
+28001D550:lH28001E4F0|A9:undefined
+28001D560:lH28001E508|H28001D570
+28001D570:t2:I0,I2
+28001D588:t2:A3:TCP,A7:keepcnt
+28001D5A0:lH28001E520|H28001D5B0
+28001D5B0:t2:I0,I20
+28001D5C8:lH28001E538|H28001D5D8
+28001D5D8:t2:A6:socket,I512
+28001D5F0:t2:A2:IP,A8:dontfrag
+28001D608:t2:A2:IP,A3:ttl
+28001D620:lH28001E550|H28001D630
+28001D630:t2:I0,I12
+28001D648:lH28001E568|A9:undefined
+28001D658:lH28001E580|H28001CBE0
+28001D668:lH28001E598|H28001C920
+28001D678:t2:A4:ipv6,AB:use_min_mtu
+28001D690:t2:A2:IP,A7:pktinfo
+28001D6A8:lH28001E5B0|A9:undefined
+28001D6B8:lH28001E5C8|A9:undefined
+28001D6C8:t2:A4:IPV6,A9:portrange
+28001D6E0:t2:A6:socket,A8:sndlowat
+28001D6F8:t2:A3:TCP,A8:keepidle
+28001D710:t2:A2:ip,A3:mtu
+28001D728:lH28001E5E0|A9:undefined
+28001D738:lH28001E5F8|A9:undefined
+28001D748:lH28001E610|H28001D758
+28001D758:t2:A6:socket,I4100
+28001D770:lH28001E628|A9:undefined
+28001D780:lH28001E640|A9:undefined
+28001D790:t2:A2:IP,AC:block_source
+28001D7A8:t2:A4:IPV6,A6:tclass
+28001D7C0:lH28001E658|A9:undefined
+28001D7D0:lH28001E670|H28001D7E0
+28001D7E0:t2:A6:socket,I4098
+28001D7F8:t2:A4:ipv6,A6:v6only
+28001D810:t2:A2:ip,A8:nodefrag
+28001D828:t2:A3:tcp,A7:keepcnt
+28001D840:t2:A2:ip,A15:add_source_membership
+28001D858:t2:A4:ipv6,AB:leave_group
+28001D870:t2:A2:ip,A6:minttl
+28001D888:t2:A3:TCP,A6:maxseg
+28001D8A0:lH28001E688|A9:undefined
+28001D8B0:lH28001E6A0|H28001D8C0
+28001D8C0:t2:I41,I4
+28001D8D8:lH28001E6B8|A9:undefined
+28001D8E8:lH28001E6D0|A9:undefined
+28001D8F8:lH28001E6E8|H28001CE48
+28001D908:Mn2:H28001E700,H28001E710
+28001D920:t2:A6:socket,AB:sndbufforce
+28001D938:t2:A4:IPV6,A5:faith
+28001D950:t2:A2:ip,AE:unblock_source
+28001D968:lH28001E720|A9:undefined
+28001D978:lH28001E738|H28001D988
+28001D988:t2:I41,I35
+28001D9A0:t2:A6:socket,A9:oobinline
+28001D9B8:t2:A4:ipv6,AE:multicast_hops
+28001D9D0:t2:A6:socket,A8:passcred
+28001D9E8:t2:A3:TCP,AA:congestion
+28001DA00:lH28001E750|A9:undefined
+28001DA10:lH28001E768|H28001C8C0
+28001DA20:t2:A2:ip,A3:tos
+28001DA38:lH28001E780|A9:undefined
+28001DA48:lH28001E798|A9:undefined
+28001DA58:lH28001E7B0|A9:undefined
+28001DA68:lH28001E7C8|A9:undefined
+28001DA78:t2:A6:socket,A6:setfib
+28001DA90:t2:A6:socket,A8:protocol
+28001DAA8:lH28001E7E0|A9:undefined
+28001DAB8:lH28001E7F8|H28001CFE8
+28001DAC8:t2:A6:socket,A8:rxq_ovfl
+28001DAE0:lH28001E810|A9:undefined
+28001DAF0:lH28001E828|A9:undefined
+28001DB00:lH28001E840|A9:undefined
+28001DB10:lH28001E858|A9:undefined
+28001DB20:t2:A6:socket,AB:rcvbufforce
+28001DB38:t2:A4:IPV6,A6:v6only
+28001DB50:t2:A4:ipv6,AB:recvpktinfo
+28001DB68:lH28001E870|H28001DB78
+28001DB78:t2:A6:socket,I4
+28001DB90:lH28001E888|H28001D630
+28001DBA0:t2:A2:IP,A15:add_source_membership
+28001DBB8:t2:A4:ipv6,A6:tclass
+28001DBD0:lH28001E8A0|H28001DBE0
+28001DBE0:t2:I0,I7
+28001DBF8:lH28001E8B8|A9:undefined
+28001DC08:t2:A4:ipv6,A7:recverr
+28001DC20:lH28001E8D0|H28001CC40
+28001DC30:lH28001E8E8|A9:undefined
+28001DC40:t2:A6:socket,A9:keepalive
+28001DC58:Mn2:H28001E900,H28001E910
+28001DC70:t2:A6:socket,AC:bindtodevice
+28001DC88:lH28001E920|H28001DBE0
+28001DC98:lH28001E938|A9:undefined
+28001DCA8:lH28001E950|A9:undefined
+28001DCB8:lH28001E968|A9:undefined
+28001DCC8:t2:A4:IPV6,A8:flowinfo
+28001DCE0:t2:A4:IPV6,A8:hoplimit
+28001DCF8:t2:A2:IP,A7:recvtos
+28001DD10:t2:A2:IP,A7:retopts
+28001DD28:lH28001E980|A9:undefined
+28001DD38:lH28001E998|A9:undefined
+28001DD48:lH28001E9B0|H28001DD58
+28001DD58:t2:I41,I11
+28001DD70:lH28001E9C8|H28001DD80
+28001DD80:t2:I0,I11
+28001DD98:t2:A2:IP,AC:multicast_if
+28001DDB0:lH28001E9E0|H28001CAE8
+28001DDC0:lH28001E9F8|H28001DDD0
+28001DDD0:t2:I0,I71
+28001DDE8:t2:A2:ip,A7:recvttl
+28001DE00:lH28001EA10|H28001D8C0
+28001DE10:lH28001EA28|H28001CF00
+28001DE20:t2:A4:ipv6,A8:checksum
+28001DE38:t2:A2:IP,AE:unblock_source
+28001DE50:t2:A4:IPV6,AC:mtu_discover
+28001DE68:lH28001EA40|A9:undefined
+28001DE78:lH28001EA58|A9:undefined
+28001DE88:t2:A6:socket,A5:debug
+28001DEA0:lH28001EA70|H28001D570
+28001DEB0:lH28001EA88|A9:undefined
+28001DEC0:Mn2:H28001EAA0,H28001EAB0
+28001DED8:lH28001EAC0|A9:undefined
+28001DEE8:lH28001EAD8|A9:undefined
+28001DEF8:t2:A3:TCP,A7:nodelay
+28001DF10:t2:A4:IPV6,AC:ipcomp_level
+28001DF28:t2:A3:tcp,A4:cork
+28001DF40:lH28001EAF0|A9:undefined
+28001DF50:lH28001EB08|H28001DD80
+28001DF60:t2:A2:IP,A8:freebind
+28001DF78:t2:A4:IPV6,AA:join_group
+28001DF90:t2:A2:ip,AF:drop_membership
+28001DFA8:t2:A3:tcp,A5:noopt
+28001DFC0:lH28001EB20|H28001CEC0
+28001DFD0:lH28001EB38|H28001DFE0
+28001DFE0:t2:I41,I9
+28001DFF8:lH28001EB50|A9:undefined
+28001E008:lH28001EB68|A9:undefined
+28001E018:t2:A2:ip,AD:multicast_ttl
+28001E030:t2:A6:socket,A9:dontroute
+28001E048:t2:A4:ipv6,AC:ipcomp_level
+28001E060:t2:A2:ip,AA:pktoptions
+28001E078:t2:A4:IPV6,AC:recvhoplimit
+28001E090:t2:A4:IPV6,AE:add_membership
+28001E0A8:t2:A2:ip,AC:router_alert
+28001E0C0:t2:A3:udp,A4:cork
+28001E0D8:t2:A2:ip,A7:options
+28001E0F0:Mn2:H28001EB80,H28001EBA8
+28001E108:t2:A4:IPV6,A7:authhdr
+28001E120:t2:A2:IP,A8:msfilter
+28001E138:t2:A2:IP,AD:multicast_ttl
+28001E150:t2:A6:socket,AA:acceptconn
+28001E168:t2:A4:ipv6,AA:join_group
+28001E180:t2:A4:ipv6,AC:mtu_discover
+28001E198:t2:A4:ipv6,AC:recvhoplimit
+28001E1B0:Mn2:H28001EBB8,H28001EBC8
+28001E1C8:t2:A6:socket,A8:sndtimeo
+28001E1E0:t2:A4:ipv6,A7:authhdr
+28001E1F8:lH28001EBD8|A9:undefined
+28001E208:lH28001EBF0|A9:undefined
+28001E218:lH28001EC08|A9:undefined
+28001E228:t2:A2:ip,A8:msfilter
+28001E240:lH28001EC20|H28001E250
+28001E250:t2:I0,I5
+28001E268:lH28001EC38|A9:undefined
+28001E278:lH28001EC50|H28001D988
+28001E288:t2:A3:tcp,A9:keepintvl
+28001E2A0:t2:A2:ip,A7:retopts
+28001E2B8:lH28001EC68|A9:undefined
+28001E2C8:lH28001EC80|A9:undefined
+28001E2D8:lH28001EC98|A9:undefined
+28001E2E8:lH28001ECB0|A9:undefined
+28001E2F8:lH28001ECC8|H28001E308
+28001E308:t2:A6:socket,I128
+28001E320:lH28001ECE0|H28001C9F0
+28001E330:lH28001ECF8|H28001D068
+28001E340:t2:A4:IPV6,AA:auth_level
+28001E358:lH28001ED10|A9:undefined
+28001E368:lH28001ED28|A9:undefined
+28001E378:lH28001ED40|H28001DD58
+28001E388:lH28001ED58|A9:undefined
+28001E398:t2:A6:socket,A4:type
+28001E3B0:lH28001ED70|A9:undefined
+28001E3C0:lH28001ED88|A9:undefined
+28001E3D0:t2:A3:TCP,A9:keepintvl
+28001E3E8:t2:A2:IP,AC:router_alert
+28001E400:t2:A2:IP,A3:mtu
+28001E418:t2:A6:socket,A9:broadcast
+28001E430:t2:A6:socket,A4:mark
+28001E448:t2:A4:ipv6,A5:rthdr
+28001E460:t2:A2:IP,AB:sendsrcaddr
+28001E478:t2:A4:ipv6,A9:portrange
+28001E490:t2:A6:socket,A6:domain
+28001E4A8:t2:A2:ip,AB:transparent
+28001E4C0:t2:A4:ipv6,AE:add_membership
+28001E4D8:t2:A3:TCP,A4:cork
+28001E4F0:t2:A4:ipv6,A5:faith
+28001E508:t2:A2:ip,A7:hdrincl
+28001E520:t2:A2:IP,A6:recvif
+28001E538:t2:A6:socket,A9:reuseport
+28001E550:t2:A2:ip,AE:add_membership
+28001E568:t2:A6:socket,A8:priority
+28001E580:t2:A4:IPV6,AE:multicast_hops
+28001E598:t2:A2:ip,A7:pktinfo
+28001E5B0:t2:A2:ip,AB:sendsrcaddr
+28001E5C8:t2:A4:IPV6,AC:router_alert
+28001E5E0:t2:A2:IP,A6:minttl
+28001E5F8:t2:A4:IPV6,A8:checksum
+28001E610:t2:A6:socket,A8:rcvlowat
+28001E628:t2:A3:tcp,A4:info
+28001E640:t2:A3:tcp,A6:md5sig
+28001E658:t2:A4:ipv6,A7:hopopts
+28001E670:t2:A6:socket,A6:rcvbuf
+28001E688:t2:A4:IPV6,A3:mtu
+28001E6A0:t2:A4:IPV6,AC:unicast_hops
+28001E6B8:t2:A4:ipv6,A8:hoplimit
+28001E6D0:t2:A2:IP,AF:recvorigdstaddr
+28001E6E8:t2:A2:ip,A7:recvtos
+28001E700:lH28001EDA0|A9:undefined
+28001E710:lH28001EDB8|A9:undefined
+28001E720:t2:A2:ip,AD:multicast_all
+28001E738:t2:A4:ipv6,AA:recvtclass
+28001E750:t2:A2:ip,A8:freebind
+28001E768:t2:A2:ip,A3:ttl
+28001E780:t2:A2:IP,A7:options
+28001E798:t2:A4:IPV6,A5:rthdr
+28001E7B0:t2:A4:ipv6,A8:addrform
+28001E7C8:t2:A6:socket,A8:rcvtimeo
+28001E7E0:t2:A2:ip,AF:recvorigdstaddr
+28001E7F8:t2:A3:tcp,A7:nodelay
+28001E810:t2:A3:TCP,A6:nopush
+28001E828:t2:A6:socket,A9:busy_poll
+28001E840:t2:A2:IP,AA:pktoptions
+28001E858:t2:A4:IPV6,AF:esp_trans_level
+28001E870:t2:A6:socket,A9:reuseaddr
+28001E888:t2:A2:IP,AE:add_membership
+28001E8A0:t2:A2:ip,AB:recvdstaddr
+28001E8B8:t2:A2:ip,A8:dontfrag
+28001E8D0:t2:A2:IP,A3:tos
+28001E8E8:t2:A4:ipv6,AF:esp_trans_level
+28001E900:lH28001EDD0|H28001E250
+28001E910:lH28001EDE8|A9:undefined
+28001E920:t2:A2:IP,AB:recvdstaddr
+28001E938:t2:A2:IP,A7:recverr
+28001E950:t2:A2:IP,A8:nodefrag
+28001E968:t2:A3:UDP,A4:cork
+28001E980:t2:A4:IPV6,A7:hopopts
+28001E998:t2:A4:IPV6,AB:recvpktinfo
+28001E9B0:t2:A4:IPV6,AE:multicast_loop
+28001E9C8:t2:A2:IP,AE:multicast_loop
+28001E9E0:t2:A3:tcp,A6:maxseg
+28001E9F8:t2:A2:IP,A16:drop_source_membership
+28001EA10:t2:A4:ipv6,AC:unicast_hops
+28001EA28:t2:A2:IP,A7:recvttl
+28001EA40:t2:A4:IPV6,A8:addrform
+28001EA58:t2:A4:IPV6,A7:dstopts
+28001EA70:t2:A2:IP,A7:hdrincl
+28001EA88:t2:A3:tcp,A6:syncnt
+28001EAA0:lH28001EE00|H28001DFE0
+28001EAB0:lH28001EE18|H28001DDD0
+28001EAC0:t2:A4:ipv6,A8:flowinfo
+28001EAD8:t2:A2:ip,AC:mtu_discover
+28001EAF0:t2:A6:socket,A8:peek_off
+28001EB08:t2:A2:ip,AE:multicast_loop
+28001EB20:t2:A2:ip,AC:multicast_if
+28001EB38:t2:A4:ipv6,AC:multicast_if
+28001EB50:t2:A4:ipv6,AA:auth_level
+28001EB68:t2:A4:IPV6,A11:esp_network_level
+28001EB80:lH28001EE30|H28001EB90
+28001EB90:t2:A6:socket,I4097
+28001EBA8:lH28001EE48|H28001D5B0
+28001EBB8:lH28001EE60|A9:undefined
+28001EBC8:lH28001EE78|A9:undefined
+28001EBD8:t2:A6:socket,A8:peercred
+28001EBF0:t2:A3:TCP,AC:user_timeout
+28001EC08:t2:A4:ipv6,A7:dstopts
+28001EC20:t2:A2:IP,A8:recvopts
+28001EC38:t2:A4:IPV6,A7:recverr
+28001EC50:t2:A4:IPV6,AA:recvtclass
+28001EC68:t2:A2:IP,AC:mtu_discover
+28001EC80:t2:A3:tcp,A6:nopush
+28001EC98:t2:A2:ip,A7:recverr
+28001ECB0:t2:A3:TCP,A4:info
+28001ECC8:t2:A6:socket,A6:linger
+28001ECE0:t2:A2:ip,AC:block_source
+28001ECF8:t2:A2:IP,AF:drop_membership
+28001ED10:t2:A2:IP,AB:transparent
+28001ED28:t2:A4:IPV6,AB:leave_group
+28001ED40:t2:A4:ipv6,AE:multicast_loop
+28001ED58:t2:A3:tcp,AA:congestion
+28001ED70:t2:A4:IPV6,AA:pktoptions
+28001ED88:t2:A4:ipv6,A11:esp_network_level
+28001EDA0:t2:A4:ipv6,AC:router_alert
+28001EDB8:t2:A3:TCP,A6:md5sig
+28001EDD0:t2:A2:ip,A8:recvopts
+28001EDE8:t2:A4:ipv6,A3:mtu
+28001EE00:t2:A4:IPV6,AC:multicast_if
+28001EE18:t2:A2:ip,A16:drop_source_membership
+28001EE30:t2:A6:socket,A6:sndbuf
+28001EE48:t2:A2:ip,A6:recvif
+28001EE60:t2:A6:socket,A5:error
+28001EE78:t2:A6:socket,AC:acceptfilter
+280093128:t2:H280093140,A9:undefined
+280093140:t2:AD:logger_config,H280093158
+280093158:t2:A10:$handler_config$,A6:simple
+28007FBD8:t2:AC:global_group,H28007FBF0
+28007FBF0:t9:A5:gconf,A9:undefined,AD:nonode@nohost,N,A6:normal,N,A3:all,N,A7:no_conf
+280017DC0:t2:H280017DD8,H280017DF0
+280017DD8:t2:AB:prim_socket,A9:protocols
+280017DF0:Mh1A6:10:H280017E80,H280017EF0,H280017F68,H280017FD0,H280018040,H2800180A8,H280018120,H280018188,H2800181D8,H280018248,H2800182C0,H280018330,H2800183A0,H280018418,H280018480,H2800184F0
+280017E80:MnD:H280018568,H280018588,H2800185A0,H2800185D0,H2800185F0,H280018608,H280018620,H280018638,H280018648,H280018658,H280018668,H280018680,H2800186A0
+280017EF0:MnE:H2800186B8,H2800186D0,H2800186E8,H280018710,H280018720,H280018750,H280018760,H280018778,H280018798,H2800187A8,H2800187B8,H2800187D8,H2800187F0,H280018800
+280017F68:MnC:H280018810,H280018820,H280018840,H280018868,H280018880,H280018890,H2800188A8,H2800188C0,H2800188E0,H2800188F8,H280018920,H280018930
+280017FD0:MnD:H280018948,H280018958,H280018978,H280018998,H2800189B0,H2800189D0,H2800189E8,H2800189F8,H280018A10,H280018A30,H280018A40,H280018A50,H280018A70
+280018040:MnC:H280018A88,H280018AA0,H280018AB8,H280018AD8,H280018AE8,H280018AF8,H280018B18,H280018B30,H280018B40,H280018B70,H280018BA0,H280018BB8
+2800180A8:MnE:H280018BE0,H280018BF8,H280018C20,H280018C48,H280018C70,H280018C80,H280018C90,H280018CA8,H280018CB8,H280018CD0,H280018CE8,H280018D10,H280018D30,H280018D48
+280018120:MnC:H280018D68,H280018D88,H280018DA8,H280018DB8,H280018DD8,H280018DE8,H280018DF8,H280018E08,H280018E20,H280018E38,H280018E68,H280018E80
+280018188:Mn9:H280018EB0,H280018EC0,H280018ED8,H280018EF0,H280018F00,H280018F10,H280018F30,H280018F48,H280018F60
+2800181D8:MnD:H280018F88,H280018F98,H280018FA8,H280018FC0,H280018FE0,H280019008,H280019038,H280019048,H280019060,H280019078,H280019088,H280019098,H2800190A8
+280018248:MnE:H2800190B8,H2800190D8,H2800190E8,H2800190F8,H280019108,H280019128,H280019138,H280019150,H280019160,H280019178,H280019198,H2800191A8,H2800191B8,H2800191D0
+2800182C0:MnD:H2800191E0,H2800191F8,H280019220,H280019250,H280019268,H280019290,H2800192A8,H2800192C8,H2800192D8,H2800192E8,H2800192F8,H280019310,H280019328
+280018330:MnD:H280019338,H280019350,H280019380,H280019390,H2800193C0,H2800193E0,H2800193F8,H280019418,H280019428,H280019448,H280019468,H280019480,H280019498
+2800183A0:MnE:H2800194C8,H2800194E0,H280019500,H280019518,H280019530,H280019548,H280019558,H280019578,H2800195A8,H2800195E8,H280019600,H280019618,H280019630,H280019650
+280018418:MnC:H280019660,H280019678,H280019688,H2800196B8,H2800196D0,H2800196E0,H2800196F8,H280019710,H280019730,H280019750,H280019760,H280019770
+280018480:MnD:H280019780,H280019798,H2800197A8,H2800197C8,H2800197E8,H280019818,H280019830,H280019860,H280019870,H280019880,H2800198B0,H2800198E0,H280019910
+2800184F0:MnE:H280019930,H280019950,H280019968,H280019980,H280019990,H2800199A8,H2800199C0,H2800199D0,H2800199F8,H280019A10,H280019A30,H280019A50,H280019A60,H280019A80
+280018568:Mn3:H280019A90,H280019AA0,H280019AD0
+280018588:Mn2:H280019AE0,H280019AF0
+2800185A0:lI50|H2800185B0
+2800185B0:lA3:esp|H2800185C0
+2800185C0:lA3:ESP|N
+2800185D0:Mn3:H280019B00,H280019B30,H280019B40
+2800185F0:Mn2:H280019B50,H280019B80
+280018608:Mn2:H280019BB0,H280019BC0
+280018620:Mn2:H280019BD0,H280019BE0
+280018638:lA3:mux|I18
+280018648:lA3:pvp|I75
+280018658:lA3:rvd|I66
+280018668:Mn2:H280019BF0,H280019C20
+280018680:Mn3:H280019C30,H280019C40,H280019C50
+2800186A0:Mn2:H280019C80,H280019C90
+2800186B8:Mn2:H280019CA0,H280019CB0
+2800186D0:Mn2:H280019CC0,H280019CF0
+2800186E8:Mn4:H280019D00,H280019D10,H280019D20,H280019D30
+280018710:lA5:manet|I138
+280018720:lI64|H280018730
+280018730:lA9:sat-expak|H280018740
+280018740:lA9:SAT-EXPAK|N
+280018750:lA6:MOBILE|I55
+280018760:Mn2:H280019D60,H280019D70
+280018778:Mn3:H280019DA0,H280019DB0,H280019DC0
+280018798:lA4:IGMP|I2
+2800187A8:lAB:SECURE-VMTP|I82
+2800187B8:Mn3:H280019DD0,H280019E00,H280019E10
+2800187D8:Mn2:H280019E40,H280019E50
+2800187F0:lA2:ah|I51
+280018800:lAA:br-sat-mon|I76
+280018810:lA4:IDPR|I35
+280018820:Mn3:H280019E60,H280019E70,H280019EA0
+280018840:Mn4:H280019EB0,H280019EC0,H280019EF0,H280019F00
+280018868:Mn2:H280019F30,H280019F40
+280018880:Mn1:H280019F50
+280018890:Mn2:H280019F68,H280019F78
+2800188A8:Mn2:H280019FA8,H280019FB8
+2800188C0:Mn3:H280019FE8,H28001A018,H28001A028
+2800188E0:Mn2:H28001A058,H28001A088
+2800188F8:Mn4:H28001A098,H28001A0A8,H28001A0B8,H28001A0C8
+280018920:lA3:hmp|I20
+280018930:Mn2:H28001A0E0,H28001A110
+280018948:Mn1:H28001A140
+280018958:Mn3:H28001A150,H28001A180,H28001A190
+280018978:Mn3:H28001A1C0,H28001A1D0,H28001A200
+280018998:Mn2:H28001A230,H28001A240
+2800189B0:Mn3:H28001A250,H28001A280,H28001A290
+2800189D0:Mn2:H28001A2A0,H28001A2B8
+2800189E8:lA3:TCF|I87
+2800189F8:Mn2:H28001A2C8,H28001A2F8
+280018A10:Mn3:H28001A328,H28001A338,H28001A348
+280018A30:lA3:xtp|I36
+280018A40:lA5:ENCAP|I98
+280018A50:Mn3:H28001A360,H28001A370,H28001A388
+280018A70:Mn2:H28001A3B8,H28001A3C8
+280018A88:Mn2:H28001A3D8,H28001A408
+280018AA0:Mn2:H28001A438,H28001A468
+280018AB8:Mn3:H28001A498,H28001A4A8,H28001A4D8
+280018AD8:lA3:BNA|I49
+280018AE8:lA3:TCP|I6
+280018AF8:Mn3:H28001A4E8,H28001A518,H28001A528
+280018B18:Mn2:H28001A538,H28001A548
+280018B30:lA7:MFE-NSP|I31
+280018B40:lI106|H280018B50
+280018B50:lA3:qnx|H280018B60
+280018B60:lA3:QNX|N
+280018B70:lI9|H280018B80
+280018B80:lA3:igp|H280018B90
+280018B90:lA3:IGP|N
+280018BA0:Mn2:H28001A558,H28001A588
+280018BB8:Mn4:H28001A598,H28001A5A8,H28001A5D8,H28001A5E8
+280018BE0:Mn2:H28001A5F8,H28001A628
+280018BF8:Mn4:H28001A638,H28001A648,H28001A658,H28001A668
+280018C20:Mn4:H28001A678,H28001A688,H28001A6B8,H28001A6C8
+280018C48:Mn4:H28001A6D8,H28001A6E8,H28001A6F8,H28001A728
+280018C70:lA4:vmtp|I81
+280018C80:lA9:idpr-cmtp|I38
+280018C90:Mn2:H28001A738,H28001A768
+280018CA8:lA7:iso-tp4|I29
+280018CB8:Mn2:H28001A798,H28001A7A8
+280018CD0:Mn2:H28001A7B8,H28001A7C8
+280018CE8:Mn4:H28001A7F8,H28001A808,H28001A820,H28001A830
+280018D10:Mn3:H28001A860,H28001A870,H28001A8A0
+280018D30:Mn2:H28001A8D0,H28001A8E0
+280018D48:Mn3:H28001A910,H28001A920,H28001A930
+280018D68:Mn3:H28001A940,H28001A958,H28001A970
+280018D88:Mn3:H28001A980,H28001A990,H28001A9A0
+280018DA8:lA3:UTI|I120
+280018DB8:Mn3:H28001A9B8,H28001A9C8,H28001A9F8
+280018DD8:lAB:compaq-peer|I110
+280018DE8:lA9:IPV6-ICMP|I58
+280018DF8:lA5:chaos|I16
+280018E08:Mn2:H28001AA08,H28001AA38
+280018E20:Mn2:H28001AA48,H28001AA78
+280018E38:lI142|H280018E48
+280018E48:lA4:rohc|H280018E58
+280018E58:lA4:ROHC|N
+280018E68:Mn2:H28001AAA8,H28001AAD8
+280018E80:lI56|H280018E90
+280018E90:lA4:tlsp|H280018EA0
+280018EA0:lA4:TLSP|N
+280018EB0:lA3:tcp|I6
+280018EC0:Mn2:H28001AB08,H28001AB18
+280018ED8:Mn2:H28001AB28,H28001AB38
+280018EF0:lAB:Compaq-Peer|I110
+280018F00:lAF:Mobility-Header|I135
+280018F10:Mn3:H28001AB48,H28001AB58,H28001AB68
+280018F30:Mn2:H28001AB78,H28001AB88
+280018F48:Mn2:H28001AB98,H28001ABA8
+280018F60:Mn4:H28001ABB8,H28001ABE8,H28001AC00,H28001AC30
+280018F88:Mn1:H28001AC40
+280018F98:lA4:IRTP|I28
+280018FA8:Mn2:H28001AC58,H28001AC68
+280018FC0:Mn3:H28001AC78,H28001AC88,H28001AC98
+280018FE0:Mn4:H28001ACA8,H28001ACD8,H28001ACE8,H28001ACF8
+280019008:lI45|H280019018
+280019018:lA4:idrp|H280019028
+280019028:lA4:IDRP|N
+280019038:lA4:ROHC|I142
+280019048:Mn2:H28001AD08,H28001AD18
+280019060:Mn2:H28001AD48,H28001AD58
+280019078:Mn1:H28001AD70
+280019088:lA3:RVD|I66
+280019098:lA7:mfe-nsp|I31
+2800190A8:lA4:PNNI|I102
+2800190B8:Mn3:H28001AD88,H28001AD98,H28001ADA8
+2800190D8:lA4:tlsp|I56
+2800190E8:lA3:CBT|I7
+2800190F8:Mn1:H28001ADB8
+280019108:Mn3:H28001ADD0,H28001ADE0,H28001AE10
+280019128:lA3:DGP|I86
+280019138:Mn2:H28001AE20,H28001AE30
+280019150:lA6:ipcomp|I108
+280019160:Mn2:H28001AE60,H28001AE70
+280019178:Mn3:H28001AE88,H28001AE98,H28001AEC8
+280019198:lA4:sdrp|I42
+2800191A8:Mn1:H28001AEF8
+2800191B8:Mn2:H28001AF10,H28001AF20
+2800191D0:lA3:mtp|I92
+2800191E0:Mn2:H28001AF50,H28001AF80
+2800191F8:Mn4:H28001AF90,H28001AFC0,H28001AFD8,H28001B008
+280019220:lI2|H280019230
+280019230:lA4:igmp|H280019240
+280019240:lA4:IGMP|N
+280019250:Mn2:H28001B018,H28001B030
+280019268:Mn4:H28001B048,H28001B078,H28001B0A8,H28001B0B8
+280019290:Mn2:H28001B0E8,H28001B0F8
+2800192A8:Mn3:H28001B108,H28001B118,H28001B128
+2800192C8:lA6:I-NLSP|I52
+2800192D8:lA4:VISA|I70
+2800192E8:lA4:larp|I91
+2800192F8:Mn2:H28001B140,H28001B170
+280019310:Mn2:H28001B1A0,H28001B1B0
+280019328:lA4:IPV6|I41
+280019338:Mn2:H28001B1E0,H28001B210
+280019350:lI32|H280019360
+280019360:lA9:merit-inp|H280019370
+280019370:lA9:MERIT-INP|N
+280019380:lA4:idrp|I45
+280019390:Mn5:H28001B220,H28001B230,H28001B240,H28001B250,H28001B260
+2800193C0:Mn3:H28001B270,H28001B280,H28001B2B0
+2800193E0:Mn2:H28001B2F0,H28001B320
+2800193F8:Mn3:H28001B330,H28001B340,H28001B370
+280019418:lA7:bbn-rcc|I10
+280019428:Mn3:H28001B380,H28001B390,H28001B3C0
+280019448:Mn3:H28001B3F0,H28001B400,H28001B430
+280019468:Mn2:H28001B440,H28001B450
+280019480:Mn2:H28001B460,H28001B490
+280019498:lI30|H2800194A8
+2800194A8:lA6:netblt|H2800194B8
+2800194B8:lA6:NETBLT|N
+2800194C8:Mn2:H28001B4A0,H28001B4D0
+2800194E0:Mn3:H28001B500,H28001B510,H28001B540
+280019500:Mn2:H28001B550,H28001B560
+280019518:Mn2:H28001B570,H28001B580
+280019530:Mn2:H28001B5B0,H28001B5C0
+280019548:lA9:MERIT-INP|I32
+280019558:Mn3:H28001B5D0,H28001B5E0,H28001B610
+280019578:lI6|H280019588
+280019588:lA3:tcp|H280019598
+280019598:lA3:TCP|N
+2800195A8:lI112|H2800195B8
+2800195B8:lA4:carp|H2800195C8
+2800195C8:lA4:vrrp|H2800195D8
+2800195D8:lA4:CARP|N
+2800195E8:Mn2:H28001B620,H28001B650
+280019600:Mn2:H28001B680,H28001B6B0
+280019618:Mn2:H28001B6C0,H28001B6D0
+280019630:Mn3:H28001B6E0,H28001B710,H28001B720
+280019650:lA5:EMCON|I14
+280019660:Mn2:H28001B750,H28001B760
+280019678:lA6:leaf-1|I25
+280019688:lI116|H280019698
+280019698:lA3:ddx|H2800196A8
+2800196A8:lA3:DDX|N
+2800196B8:Mn2:H28001B770,H28001B7A0
+2800196D0:lA3:QNX|I106
+2800196E0:Mn2:H28001B7B0,H28001B7E0
+2800196F8:Mn2:H28001B7F0,H28001B820
+280019710:Mn3:H28001B830,H28001B840,H28001B850
+280019730:Mn3:H28001B860,H28001B890,H28001B8C0
+280019750:lA7:OSPFIGP|I89
+280019760:lA4:skip|I57
+280019770:Mn1:H28001B8D0
+280019780:Mn2:H28001B8E8,H28001B8F8
+280019798:lA3:smp|I121
+2800197A8:Mn3:H28001B908,H28001B938,H28001B968
+2800197C8:Mn3:H28001B978,H28001B990,H28001B9A8
+2800197E8:lI52|H2800197F8
+2800197F8:lA6:i-nlsp|H280019808
+280019808:lA6:I-NLSP|N
+280019818:Mn2:H28001B9B8,H28001B9E8
+280019830:lI49|H280019840
+280019840:lA3:bna|H280019850
+280019850:lA3:BNA|N
+280019860:lA3:ddx|I116
+280019870:lAA:BR-SAT-MON|I76
+280019880:lI38|H280019890
+280019890:lA9:idpr-cmtp|H2800198A0
+2800198A0:lA9:IDPR-CMTP|N
+2800198B0:lI134|H2800198C0
+2800198C0:lAF:rsvp-e2e-ignore|H2800198D0
+2800198D0:lAF:RSVP-E2E-IGNORE|N
+2800198E0:lI118|H2800198F0
+2800198F0:lA3:stp|H280019900
+280019900:lA3:STP|N
+280019910:Mn3:H28001B9F8,H28001BA08,H28001BA18
+280019930:Mn3:H28001BA48,H28001BA58,H28001BA88
+280019950:Mn2:H28001BAB8,H28001BAC8
+280019968:Mn2:H28001BAF8,H28001BB08
+280019980:lA5:VINES|I83
+280019990:Mn2:H28001BB18,H28001BB48
+2800199A8:Mn2:H28001BB58,H28001BB88
+2800199C0:lA5:swipe|I53
+2800199D0:Mn4:H28001BBB8,H28001BBE8,H28001BBF8,H28001BC28
+2800199F8:Mn2:H28001BC58,H28001BC68
+280019A10:Mn3:H28001BC78,H28001BC88,H28001BC98
+280019A30:Mn3:H28001BCA8,H28001BCB8,H28001BCC8
+280019A50:lA5:ax.25|I93
+280019A60:Mn3:H28001BCD8,H28001BCE8,H28001BCF8
+280019A80:lAA:ipv6-nonxt|I59
+280019A90:lA3:pup|I12
+280019AA0:lI65|H280019AB0
+280019AB0:lA9:kryptolan|H280019AC0
+280019AC0:lA9:KRYPTOLAN|N
+280019AD0:lA5:crudp|I127
+280019AE0:lA3:MUX|I18
+280019AF0:lA4:GMTP|I100
+280019B00:lI36|H280019B10
+280019B10:lA3:xtp|H280019B20
+280019B20:lA3:XTP|N
+280019B30:lA4:crtp|I126
+280019B40:lA3:gre|I47
+280019B50:lI137|H280019B60
+280019B60:lAA:mpls-in-ip|H280019B70
+280019B70:lAA:MPLS-IN-IP|N
+280019B80:lI4|H280019B90
+280019B90:lA7:ipencap|H280019BA0
+280019BA0:lA8:IP-ENCAP|N
+280019BB0:lA7:xns-idp|I22
+280019BC0:lA3:ddp|I37
+280019BD0:lA9:IPV6-OPTS|I60
+280019BE0:lA5:AX.25|I93
+280019BF0:lI126|H280019C00
+280019C00:lA4:crtp|H280019C10
+280019C10:lA4:CRTP|N
+280019C20:lA4:pnni|I102
+280019C30:lA7:ipencap|I4
+280019C40:lA4:gmtp|I100
+280019C50:lI136|H280019C60
+280019C60:lA7:udplite|H280019C70
+280019C70:lA7:UDPLite|N
+280019C80:lAA:nsfnet-igp|I85
+280019C90:lA3:egp|I8
+280019CA0:lA3:SPS|I130
+280019CB0:lA5:CRUDP|I127
+280019CC0:lI25|H280019CD0
+280019CD0:lA6:leaf-1|H280019CE0
+280019CE0:lA6:LEAF-1|N
+280019CF0:lA3:udp|I17
+280019D00:lA2:IL|I40
+280019D10:lA4:RSVP|I46
+280019D20:lA4:MICP|I95
+280019D30:lI39|H280019D40
+280019D40:lA4:tp++|H280019D50
+280019D50:lA4:TP++|N
+280019D60:lA3:PGM|I113
+280019D70:lI109|H280019D80
+280019D80:lA3:snp|H280019D90
+280019D90:lA3:SNP|N
+280019DA0:lA4:cftp|I62
+280019DB0:lA7:trunk-1|I23
+280019DC0:lA3:stp|I118
+280019DD0:lI95|H280019DE0
+280019DE0:lA4:micp|H280019DF0
+280019DF0:lA4:MICP|N
+280019E00:lA4:irtp|I28
+280019E10:lI101|H280019E20
+280019E20:lA4:ifmp|H280019E30
+280019E30:lA4:IFMP|N
+280019E40:lA3:uti|I120
+280019E50:lA4:SCTP|I132
+280019E60:lA4:fire|I125
+280019E70:lI130|H280019E80
+280019E80:lA3:sps|H280019E90
+280019E90:lA3:SPS|N
+280019EA0:lA4:IPLT|I129
+280019EB0:lA9:ipv6-frag|I44
+280019EC0:lI131|H280019ED0
+280019ED0:lA4:pipe|H280019EE0
+280019EE0:lA4:PIPE|N
+280019EF0:lA6:LEAF-1|I25
+280019F00:lI62|H280019F10
+280019F10:lA4:cftp|H280019F20
+280019F20:lA4:CFTP|N
+280019F30:lA4:rsvp|I46
+280019F40:lA4:IDRP|I45
+280019F50:Mn2:H28001BD08,H28001BD38
+280019F68:lA2:ip|I0
+280019F78:lI141|H280019F88
+280019F88:lA4:wesp|H280019F98
+280019F98:lA4:WESP|N
+280019FA8:lA4:IPIP|I94
+280019FB8:lI132|H280019FC8
+280019FC8:lA4:sctp|H280019FD8
+280019FD8:lA4:SCTP|N
+280019FE8:lI43|H280019FF8
+280019FF8:lAA:ipv6-route|H28001A008
+28001A008:lAA:IPV6-ROUTE|N
+28001A018:lA6:mobile|I55
+28001A028:lI105|H28001A038
+28001A038:lA4:scps|H28001A048
+28001A048:lA4:SCPS|N
+28001A058:lI59|H28001A068
+28001A068:lAA:ipv6-nonxt|H28001A078
+28001A078:lAA:IPV6-NONXT|N
+28001A088:lA3:A/N|I107
+28001A098:lA3:igp|I9
+28001A0A8:lA4:CFTP|I62
+28001A0B8:lA7:trunk-2|I24
+28001A0C8:Mn2:H28001BD48,H28001BD78
+28001A0E0:lI87|H28001A0F0
+28001A0F0:lA3:tcf|H28001A100
+28001A100:lA3:TCF|N
+28001A110:lI51|H28001A120
+28001A120:lA2:ah|H28001A130
+28001A130:lA2:AH|N
+28001A140:Mn1:H28001BDA8
+28001A150:lI110|H28001A160
+28001A160:lAB:compaq-peer|H28001A170
+28001A170:lAB:Compaq-Peer|N
+28001A180:lA4:CARP|I112
+28001A190:lI1|H28001A1A0
+28001A1A0:lA4:icmp|H28001A1B0
+28001A1B0:lA4:ICMP|N
+28001A1C0:lA3:HMP|I20
+28001A1D0:lI107|H28001A1E0
+28001A1E0:lA3:a/n|H28001A1F0
+28001A1F0:lA3:A/N|N
+28001A200:lI128|H28001A210
+28001A210:lA8:sscopmce|H28001A220
+28001A220:lA8:SSCOPMCE|N
+28001A230:lA6:scc-sp|I96
+28001A240:lA8:SSCOPMCE|I128
+28001A250:lI70|H28001A260
+28001A260:lA4:visa|H28001A270
+28001A270:lA4:VISA|N
+28001A280:lA4:icmp|I1
+28001A290:lA6:iso-ip|I80
+28001A2A0:Mn2:H28001BDC0,H28001BDF0
+28001A2B8:lA3:XTP|I36
+28001A2C8:lI46|H28001A2D8
+28001A2D8:lA4:rsvp|H28001A2E8
+28001A2E8:lA4:RSVP|N
+28001A2F8:lI77|H28001A308
+28001A308:lA6:sun-nd|H28001A318
+28001A318:lA6:SUN-ND|N
+28001A328:lA3:snp|I109
+28001A338:lA4:NARP|I54
+28001A348:Mn2:H28001BE00,H28001BE30
+28001A360:lA4:iplt|I129
+28001A370:Mn2:H28001BE60,H28001BE70
+28001A388:lI10|H28001A398
+28001A398:lA7:bbn-rcc|H28001A3A8
+28001A3A8:lAB:BBN-RCC-MON|N
+28001A3B8:lA9:kryptolan|I65
+28001A3C8:lA6:leaf-2|I26
+28001A3D8:lI124|H28001A3E8
+28001A3E8:lA4:isis|H28001A3F8
+28001A3F8:lA4:ISIS|N
+28001A408:lI48|H28001A418
+28001A418:lA3:dsr|H28001A428
+28001A428:lA3:DSR|N
+28001A438:lI103|H28001A448
+28001A448:lA3:pim|H28001A458
+28001A458:lA3:PIM|N
+28001A468:lI7|H28001A478
+28001A478:lA3:cbt|H28001A488
+28001A488:lA3:CBT|N
+28001A498:lA4:VMTP|I81
+28001A4A8:lI138|H28001A4B8
+28001A4B8:lA5:manet|H28001A4C8
+28001A4C8:lA5:MANET|N
+28001A4D8:lA4:WESP|I141
+28001A4E8:lI71|H28001A4F8
+28001A4F8:lA4:ipcv|H28001A508
+28001A508:lA4:IPCV|N
+28001A518:lA3:ggp|I3
+28001A528:lA4:tp++|I39
+28001A538:lA3:rdp|I27
+28001A548:lA3:IGP|I9
+28001A558:lI258|H28001A568
+28001A568:lA6:divert|H28001A578
+28001A578:lA6:DIVERT|N
+28001A588:lA3:PTP|I123
+28001A598:lA6:wb-mon|I78
+28001A5A8:lI11|H28001A5B8
+28001A5B8:lA3:nvp|H28001A5C8
+28001A5C8:lA6:NVP-II|N
+28001A5D8:lA5:argus|I13
+28001A5E8:lA4:xnet|I15
+28001A5F8:lI12|H28001A608
+28001A608:lA3:pup|H28001A618
+28001A618:lA3:PUP|N
+28001A628:lA4:ifmp|I101
+28001A638:lA3:3pc|I34
+28001A648:lA6:DIVERT|I258
+28001A658:lA3:PUP|I12
+28001A668:lAF:mobility-header|I135
+28001A678:lA4:idpr|I35
+28001A688:lI28|H28001A698
+28001A698:lA4:irtp|H28001A6A8
+28001A6A8:lA4:IRTP|N
+28001A6B8:lAB:secure-vmtp|I82
+28001A6C8:lA3:prm|I21
+28001A6D8:lA3:EGP|I8
+28001A6E8:lA3:cbt|I7
+28001A6F8:lI47|H28001A708
+28001A708:lA3:gre|H28001A718
+28001A718:lA3:GRE|N
+28001A728:lAA:sprite-rpc|I90
+28001A738:lI89|H28001A748
+28001A748:lA4:ospf|H28001A758
+28001A758:lA7:OSPFIGP|N
+28001A768:lI24|H28001A778
+28001A778:lA7:trunk-2|H28001A788
+28001A788:lA7:TRUNK-2|N
+28001A798:lA2:IP|I0
+28001A7A8:lA4:ICMP|I1
+28001A7B8:lA5:MANET|I138
+28001A7C8:lI13|H28001A7D8
+28001A7D8:lA5:argus|H28001A7E8
+28001A7E8:lA5:ARGUS|N
+28001A7F8:lA6:pfsync|I240
+28001A808:Mn2:H28001BE80,H28001BE90
+28001A820:lA6:SUN-ND|I77
+28001A830:lI94|H28001A840
+28001A840:lA4:ipip|H28001A850
+28001A850:lA4:IPIP|N
+28001A860:lA3:tcf|I87
+28001A870:lI3|H28001A880
+28001A880:lA3:ggp|H28001A890
+28001A890:lA3:GGP|N
+28001A8A0:lI18|H28001A8B0
+28001A8B0:lA3:mux|H28001A8C0
+28001A8C0:lA3:MUX|N
+28001A8D0:lA4:l2tp|I115
+28001A8E0:lI113|H28001A8F0
+28001A8F0:lA3:pgm|H28001A900
+28001A900:lA3:PGM|N
+28001A910:lA3:SMP|I121
+28001A920:lA8:wb-expak|I79
+28001A930:lA7:SAT-MON|I69
+28001A940:Mn2:H28001BEA0,H28001BEB0
+28001A958:Mn2:H28001BEC0,H28001BED0
+28001A970:lA9:KRYPTOLAN|I65
+28001A980:lA7:udplite|I136
+28001A990:lA3:DDP|I37
+28001A9A0:Mn2:H28001BEE0,H28001BEF0
+28001A9B8:lA3:TTP|I84
+28001A9C8:lI29|H28001A9D8
+28001A9D8:lA7:iso-tp4|H28001A9E8
+28001A9E8:lA7:ISO-TP4|N
+28001A9F8:lA2:AH|I51
+28001AA08:lI72|H28001AA18
+28001AA18:lA4:cpnx|H28001AA28
+28001AA28:lA4:CPNX|N
+28001AA38:lA4:LARP|I91
+28001AA48:lI53|H28001AA58
+28001AA58:lA5:swipe|H28001AA68
+28001AA68:lA5:SWIPE|N
+28001AA78:lI135|H28001AA88
+28001AA88:lAF:mobility-header|H28001AA98
+28001AA98:lAF:Mobility-Header|N
+28001AAA8:lI69|H28001AAB8
+28001AAB8:lA7:sat-mon|H28001AAC8
+28001AAC8:lA7:SAT-MON|N
+28001AAD8:lI120|H28001AAE8
+28001AAE8:lA3:uti|H28001AAF8
+28001AAF8:lA3:UTI|N
+28001AB08:lAA:IPV6-ROUTE|I43
+28001AB18:lA4:carp|I112
+28001AB28:lA7:UDPLite|I136
+28001AB38:lA4:ARIS|I104
+28001AB48:lAA:MPLS-IN-IP|I137
+28001AB58:lA7:XNS-IDP|I22
+28001AB68:lA3:sps|I130
+28001AB78:lA7:TRUNK-1|I23
+28001AB88:lA4:IATP|I117
+28001AB98:lA4:igmp|I2
+28001ABA8:lA3:ptp|I123
+28001ABB8:lI42|H28001ABC8
+28001ABC8:lA4:sdrp|H28001ABD8
+28001ABD8:lA4:SDRP|N
+28001ABE8:Mn2:H28001BF00,H28001BF10
+28001AC00:lI76|H28001AC10
+28001AC10:lAA:br-sat-mon|H28001AC20
+28001AC20:lAA:BR-SAT-MON|N
+28001AC30:lAA:IPV6-NONXT|I59
+28001AC40:Mn2:H28001BF20,H28001BF30
+28001AC58:lA4:L2TP|I115
+28001AC68:lA3:WSN|I74
+28001AC78:lA3:GRE|I47
+28001AC88:lA4:vrrp|I112
+28001AC98:lA6:divert|I258
+28001ACA8:lI98|H28001ACB8
+28001ACB8:lA5:encap|H28001ACC8
+28001ACC8:lA5:ENCAP|N
+28001ACD8:lA6:i-nlsp|I52
+28001ACE8:lA4:sctp|I132
+28001ACF8:lA5:encap|I98
+28001AD08:lA4:visa|I70
+28001AD18:lI26|H28001AD28
+28001AD28:lA6:leaf-2|H28001AD38
+28001AD38:lA6:LEAF-2|N
+28001AD48:lA4:pipe|I131
+28001AD58:Mn2:H28001BF60,H28001BF70
+28001AD70:Mn2:H28001BF80,H28001BF90
+28001AD88:lA2:SM|I122
+28001AD98:lA5:eigrp|I88
+28001ADA8:lAF:rsvp-e2e-ignore|I134
+28001ADB8:Mn2:H28001BFA0,H28001BFB0
+28001ADD0:lA3:GGP|I3
+28001ADE0:lI108|H28001ADF0
+28001ADF0:lA6:ipcomp|H28001AE00
+28001AE00:lA6:IPComp|N
+28001AE10:lA4:micp|I95
+28001AE20:lA4:FIRE|I125
+28001AE30:lI133|H28001AE40
+28001AE40:lA2:fc|H28001AE50
+28001AE50:lA2:FC|N
+28001AE60:lA3:ST2|I5
+28001AE70:Mn2:H28001BFC0,H28001BFF0
+28001AE88:lA6:NVP-II|I11
+28001AE98:lI44|H28001AEA8
+28001AEA8:lA9:ipv6-frag|H28001AEB8
+28001AEB8:lA9:IPV6-FRAG|N
+28001AEC8:lI19|H28001AED8
+28001AED8:lA3:dcn|H28001AEE8
+28001AEE8:lA8:DCN-MEAS|N
+28001AEF8:Mn2:H28001C000,H28001C010
+28001AF10:lA3:3PC|I34
+28001AF20:lI79|H28001AF30
+28001AF30:lA8:wb-expak|H28001AF40
+28001AF40:lA8:WB-EXPAK|N
+28001AF50:lI0|H28001AF60
+28001AF60:lA2:ip|H28001AF70
+28001AF70:lA2:IP|N
+28001AF80:lA9:sat-expak|I64
+28001AF90:lI100|H28001AFA0
+28001AFA0:lA4:gmtp|H28001AFB0
+28001AFB0:lA4:GMTP|N
+28001AFC0:Mn2:H28001C040,H28001C070
+28001AFD8:lI139|H28001AFE8
+28001AFE8:lA3:hip|H28001AFF8
+28001AFF8:lA3:HIP|N
+28001B008:lA4:rohc|I142
+28001B018:Mn2:H28001C080,H28001C090
+28001B030:Mn2:H28001C0A0,H28001C0B0
+28001B048:lI104|H28001B058
+28001B058:lA4:aris|H28001B068
+28001B068:lA4:ARIS|N
+28001B078:lI60|H28001B088
+28001B088:lA9:ipv6-opts|H28001B098
+28001B098:lA9:IPV6-OPTS|N
+28001B0A8:lA3:pgm|I113
+28001B0B8:lI33|H28001B0C8
+28001B0C8:lA4:dccp|H28001B0D8
+28001B0D8:lA4:DCCP|N
+28001B0E8:lA5:emcon|I14
+28001B0F8:lA3:MTP|I92
+28001B108:lA4:ipv6|I41
+28001B118:lA8:WB-EXPAK|I79
+28001B128:Mn2:H28001C0E0,H28001C0F0
+28001B140:lI88|H28001B150
+28001B150:lA5:eigrp|H28001B160
+28001B160:lA5:EIGRP|N
+28001B170:lI96|H28001B180
+28001B180:lA6:scc-sp|H28001B190
+28001B190:lA6:SCC-SP|N
+28001B1A0:lA4:iatp|I117
+28001B1B0:lI21|H28001B1C0
+28001B1C0:lA3:prm|H28001B1D0
+28001B1D0:lA3:PRM|N
+28001B1E0:lI73|H28001B1F0
+28001B1F0:lA4:cphb|H28001B200
+28001B200:lA4:CPHB|N
+28001B210:lA4:PIPE|I131
+28001B220:lA5:CHAOS|I16
+28001B230:lA9:ipv6-opts|I60
+28001B240:lA7:ETHERIP|I97
+28001B250:lA7:etherip|I97
+28001B260:lA3:ttp|I84
+28001B270:lA5:vines|I83
+28001B280:lI121|H28001B290
+28001B290:lA3:smp|H28001B2A0
+28001B2A0:lA3:SMP|N
+28001B2B0:lI58|H28001B2C0
+28001B2C0:lA9:ipv6-icmp|H28001B2D0
+28001B2D0:lA5:icmp6|H28001B2E0
+28001B2E0:lA9:IPV6-ICMP|N
+28001B2F0:lI117|H28001B300
+28001B300:lA4:iatp|H28001B310
+28001B310:lA4:IATP|N
+28001B320:lA4:SCPS|I105
+28001B330:lAB:BBN-RCC-MON|I10
+28001B340:lI20|H28001B350
+28001B350:lA3:hmp|H28001B360
+28001B360:lA3:HMP|N
+28001B370:lA4:ISIS|I124
+28001B380:lA3:HIP|I139
+28001B390:lI17|H28001B3A0
+28001B3A0:lA3:udp|H28001B3B0
+28001B3B0:lA3:UDP|N
+28001B3C0:lI82|H28001B3D0
+28001B3D0:lAB:secure-vmtp|H28001B3E0
+28001B3E0:lAB:SECURE-VMTP|N
+28001B3F0:lA5:SHIM6|I140
+28001B400:lI74|H28001B410
+28001B410:lA3:wsn|H28001B420
+28001B420:lA3:WSN|N
+28001B430:lA4:IPCV|I71
+28001B440:lA9:IPX-in-IP|I111
+28001B450:lA4:scps|I105
+28001B460:lI119|H28001B470
+28001B470:lA3:srp|H28001B480
+28001B480:lA3:SRP|N
+28001B490:lA6:SCC-SP|I96
+28001B4A0:lI140|H28001B4B0
+28001B4B0:lA5:shim6|H28001B4C0
+28001B4C0:lA5:SHIM6|N
+28001B4D0:lI90|H28001B4E0
+28001B4E0:lAA:sprite-rpc|H28001B4F0
+28001B4F0:lAA:Sprite-RPC|N
+28001B500:lA3:dsr|I48
+28001B510:lI14|H28001B520
+28001B520:lA5:emcon|H28001B530
+28001B530:lA5:EMCON|N
+28001B540:lA4:wesp|I141
+28001B550:lA6:NETBLT|I30
+28001B560:lA7:ISO-TP4|I29
+28001B570:lA3:esp|I50
+28001B580:lI5|H28001B590
+28001B590:lA3:st2|H28001B5A0
+28001B5A0:lA3:ST2|N
+28001B5B0:lA3:srp|I119
+28001B5C0:lA5:EIGRP|I88
+28001B5D0:lA4:TP++|I39
+28001B5E0:lI67|H28001B5F0
+28001B5F0:lA4:ippc|H28001B600
+28001B600:lA4:IPPC|N
+28001B610:lA9:ipx-in-ip|I111
+28001B620:lI102|H28001B630
+28001B630:lA4:pnni|H28001B640
+28001B640:lA4:PNNI|N
+28001B650:lI55|H28001B660
+28001B660:lA6:mobile|H28001B670
+28001B670:lA6:MOBILE|N
+28001B680:lI97|H28001B690
+28001B690:lA7:etherip|H28001B6A0
+28001B6A0:lA7:ETHERIP|N
+28001B6B0:lA3:dcn|I19
+28001B6C0:lA4:CPHB|I73
+28001B6D0:lA2:il|I40
+28001B6E0:lI123|H28001B6F0
+28001B6F0:lA3:ptp|H28001B700
+28001B700:lA3:PTP|N
+28001B710:lAA:Sprite-RPC|I90
+28001B720:lI125|H28001B730
+28001B730:lA4:fire|H28001B740
+28001B740:lA4:FIRE|N
+28001B750:lA8:DCN-MEAS|I19
+28001B760:lAA:mpls-in-ip|I137
+28001B770:lI66|H28001B780
+28001B780:lA3:rvd|H28001B790
+28001B790:lA3:RVD|N
+28001B7A0:lA4:CRTP|I126
+28001B7B0:lI91|H28001B7C0
+28001B7C0:lA4:larp|H28001B7D0
+28001B7D0:lA4:LARP|N
+28001B7E0:lA7:sat-mon|I69
+28001B7F0:lI129|H28001B800
+28001B800:lA4:iplt|H28001B810
+28001B810:lA4:IPLT|N
+28001B820:lA3:UDP|I17
+28001B830:lA2:sm|I122
+28001B840:lA5:SWIPE|I53
+28001B850:lA4:IPPC|I67
+28001B860:lI80|H28001B870
+28001B870:lA6:iso-ip|H28001B880
+28001B880:lA6:ISO-IP|N
+28001B890:lI75|H28001B8A0
+28001B8A0:lA3:pvp|H28001B8B0
+28001B8B0:lA3:PVP|N
+28001B8C0:lA3:STP|I118
+28001B8D0:Mn2:H28001C100,H28001C130
+28001B8E8:lA6:IPComp|I108
+28001B8F8:lA3:nvp|I11
+28001B908:lI41|H28001B918
+28001B918:lA4:ipv6|H28001B928
+28001B928:lA4:IPV6|N
+28001B938:lI37|H28001B948
+28001B948:lA3:ddp|H28001B958
+28001B958:lA3:DDP|N
+28001B968:lA4:CPNX|I72
+28001B978:Mn2:H28001C140,H28001C150
+28001B990:Mn2:H28001C180,H28001C190
+28001B9A8:lA4:ipip|I94
+28001B9B8:lI27|H28001B9C8
+28001B9C8:lA3:rdp|H28001B9D8
+28001B9D8:lA3:RDP|N
+28001B9E8:lA3:PIM|I103
+28001B9F8:lA4:isis|I124
+28001BA08:lA5:icmp6|I58
+28001BA18:lI240|H28001BA28
+28001BA28:lA6:pfsync|H28001BA38
+28001BA38:lA6:PFSYNC|N
+28001BA48:lA3:DSR|I48
+28001BA58:lI83|H28001BA68
+28001BA68:lA5:vines|H28001BA78
+28001BA78:lA5:VINES|N
+28001BA88:lI34|H28001BA98
+28001BA98:lA3:3pc|H28001BAA8
+28001BAA8:lA3:3PC|N
+28001BAB8:lA2:FC|I133
+28001BAC8:lI86|H28001BAD8
+28001BAD8:lA3:dgp|H28001BAE8
+28001BAE8:lA3:DGP|N
+28001BAF8:lA4:narp|I54
+28001BB08:lA6:netblt|I30
+28001BB18:lI16|H28001BB28
+28001BB28:lA5:chaos|H28001BB38
+28001BB38:lA5:CHAOS|N
+28001BB48:lA4:SDRP|I42
+28001BB58:lI31|H28001BB68
+28001BB68:lA7:mfe-nsp|H28001BB78
+28001BB78:lA7:MFE-NSP|N
+28001BB88:lI15|H28001BB98
+28001BB98:lA4:xnet|H28001BBA8
+28001BBA8:lA4:XNET|N
+28001BBB8:lI78|H28001BBC8
+28001BBC8:lA6:wb-mon|H28001BBD8
+28001BBD8:lA6:WB-MON|N
+28001BBE8:lA3:PVP|I75
+28001BBF8:lI93|H28001BC08
+28001BC08:lA5:ax.25|H28001BC18
+28001BC18:lA5:AX.25|N
+28001BC28:lI122|H28001BC38
+28001BC38:lA2:sm|H28001BC48
+28001BC48:lA2:SM|N
+28001BC58:lA4:ipcv|I71
+28001BC68:lAA:NSFNET-IGP|I85
+28001BC78:lA5:ARGUS|I13
+28001BC88:lA4:IFMP|I101
+28001BC98:lA3:wsn|I74
+28001BCA8:lA3:a/n|I107
+28001BCB8:lA9:IPV6-FRAG|I44
+28001BCC8:lA4:aris|I104
+28001BCD8:lA3:DDX|I116
+28001BCE8:lA3:RDP|I27
+28001BCF8:lA3:bna|I49
+28001BD08:lI54|H28001BD18
+28001BD18:lA4:narp|H28001BD28
+28001BD28:lA4:NARP|N
+28001BD38:lA4:ospf|I89
+28001BD48:lI85|H28001BD58
+28001BD58:lAA:nsfnet-igp|H28001BD68
+28001BD68:lAA:NSFNET-IGP|N
+28001BD78:lI40|H28001BD88
+28001BD88:lA2:il|H28001BD98
+28001BD98:lA2:IL|N
+28001BDA8:Mn2:H28001C1A0,H28001C1B0
+28001BDC0:lI127|H28001BDD0
+28001BDD0:lA5:crudp|H28001BDE0
+28001BDE0:lA5:CRUDP|N
+28001BDF0:lA3:pim|I103
+28001BE00:lI92|H28001BE10
+28001BE10:lA3:mtp|H28001BE20
+28001BE20:lA3:MTP|N
+28001BE30:lI23|H28001BE40
+28001BE40:lA7:trunk-1|H28001BE50
+28001BE50:lA7:TRUNK-1|N
+28001BE60:lAA:ipv6-route|I43
+28001BE70:lA7:TRUNK-2|I24
+28001BE80:lA6:sun-nd|I77
+28001BE90:lA4:dccp|I33
+28001BEA0:lA3:SNP|I109
+28001BEB0:lA3:ESP|I50
+28001BEC0:lA3:hip|I139
+28001BED0:lA9:SAT-EXPAK|I64
+28001BEE0:lA6:ISO-IP|I80
+28001BEF0:lA4:cphb|I73
+28001BF00:lA3:SRP|I119
+28001BF10:lAF:RSVP-E2E-IGNORE|I134
+28001BF20:lA6:WB-MON|I78
+28001BF30:lI111|H28001BF40
+28001BF40:lA9:ipx-in-ip|H28001BF50
+28001BF50:lA9:IPX-in-IP|N
+28001BF60:lA8:IP-ENCAP|I4
+28001BF70:lA8:sscopmce|I128
+28001BF80:lA3:st2|I5
+28001BF90:lA4:ippc|I67
+28001BFA0:lA4:TLSP|I56
+28001BFB0:lA9:IDPR-CMTP|I38
+28001BFC0:lI22|H28001BFD0
+28001BFD0:lA7:xns-idp|H28001BFE0
+28001BFE0:lA7:XNS-IDP|N
+28001BFF0:lA4:SKIP|I57
+28001C000:lA4:cpnx|I72
+28001C010:lI84|H28001C020
+28001C020:lA3:ttp|H28001C030
+28001C030:lA3:TTP|N
+28001C040:lI35|H28001C050
+28001C050:lA4:idpr|H28001C060
+28001C060:lA4:IDPR|N
+28001C070:lA5:shim6|I140
+28001C080:lA9:ipv6-icmp|I58
+28001C090:lA4:DCCP|I33
+28001C0A0:lA6:LEAF-2|I26
+28001C0B0:lI57|H28001C0C0
+28001C0C0:lA4:skip|H28001C0D0
+28001C0D0:lA4:SKIP|N
+28001C0E0:lA6:PFSYNC|I240
+28001C0F0:lA3:PRM|I21
+28001C100:lI81|H28001C110
+28001C110:lA4:vmtp|H28001C120
+28001C120:lA4:VMTP|N
+28001C130:lA3:qnx|I106
+28001C140:lA9:merit-inp|I32
+28001C150:lI115|H28001C160
+28001C160:lA4:l2tp|H28001C170
+28001C170:lA4:L2TP|N
+28001C180:lA3:dgp|I86
+28001C190:lA4:XNET|I15
+28001C1A0:lA2:fc|I133
+28001C1B0:lI8|H28001C1C0
+28001C1C0:lA3:egp|H28001C1D0
+28001C1D0:lA3:EGP|N
+2800BB848:t2:H2800BB860,I23
+2800BB860:t2:AD:logger_config,AA:ssl_logger
+28001F238:t2:H28001F250,H28001F268
+28001F250:t2:AB:prim_socket,A9:msg_flags
+28001F268:MfB:H28001F2D8:I0,I16,I4,I0,I0,I32,I8,I0,I524288,I1,I2
+28001F2D8:tB:A4:more,A5:trunc,A9:dontroute,AC:cmsg_cloexec,A7:confirm,A6:ctrunc,A3:eor,A8:errqueue,A8:nosignal,A3:oob,A4:peek
+280068258:t2:H280068270,H280068288
+280068270:t2:AC:erl_features,AD:feature_specs
+280068288:Mf1:H2800682A8:H2800682B8
+2800682A8:t1:AA:maybe_expr
+2800682B8:Mf6:H280068300:H280068AD8,AC:experimental,A9:extension,H2800688B8,H280068348,I25
+280068300:t6:A5:short,A6:status,A4:type,AB:description,A8:keywords,AC:experimental
+280068338:lA4:else|N
+280068348:lA5:maybe|H280068338
+280068358:lI46|N
+280068368:lI103|H280068358
+280068378:lI110|H280068368
+280068388:lI105|H280068378
+280068398:lI108|H280068388
+2800683A8:lI100|H280068398
+2800683B8:lI110|H2800683A8
+2800683C8:lI97|H2800683B8
+2800683D8:lI104|H2800683C8
+2800683E8:lI32|H2800683D8
+2800683F8:lI114|H2800683E8
+280068408:lI111|H2800683F8
+280068418:lI114|H280068408
+280068428:lI114|H280068418
+280068438:lI101|H280068428
+280068448:lI32|H280068438
+280068458:lI100|H280068448
+280068468:lI101|H280068458
+280068478:lI115|H280068468
+280068488:lI97|H280068478
+280068498:lI98|H280068488
+2800684A8:lI32|H280068498
+2800684B8:lI101|H2800684A8
+2800684C8:lI117|H2800684B8
+2800684D8:lI108|H2800684C8
+2800684E8:lI97|H2800684D8
+2800684F8:lI86|H2800684E8
+280068508:lI32|H2800684F8
+280068518:lI45|H280068508
+280068528:lI45|H280068518
+280068538:lI32|H280068528
+280068548:lI57|H280068538
+280068558:lI52|H280068548
+280068568:lI80|H280068558
+280068578:lI69|H280068568
+280068588:lI69|H280068578
+280068598:lI32|H280068588
+2800685A8:lI110|H280068598
+2800685B8:lI105|H2800685A8
+2800685C8:lI32|H2800685B8
+2800685D8:lI100|H2800685C8
+2800685E8:lI101|H2800685D8
+2800685F8:lI115|H2800685E8
+280068608:lI111|H2800685F8
+280068618:lI112|H280068608
+280068628:lI111|H280068618
+280068638:lI114|H280068628
+280068648:lI112|H280068638
+280068658:lI32|H280068648
+280068668:lI110|H280068658
+280068678:lI111|H280068668
+280068688:lI105|H280068678
+280068698:lI115|H280068688
+2800686A8:lI115|H280068698
+2800686B8:lI101|H2800686A8
+2800686C8:lI114|H2800686B8
+2800686D8:lI112|H2800686C8
+2800686E8:lI120|H2800686D8
+2800686F8:lI101|H2800686E8
+280068708:lI32|H2800686F8
+280068718:lI101|H280068708
+280068728:lI98|H280068718
+280068738:lI121|H280068728
+280068748:lI97|H280068738
+280068758:lI109|H280068748
+280068768:lI32|H280068758
+280068778:lI101|H280068768
+280068788:lI104|H280068778
+280068798:lI116|H280068788
+2800687A8:lI32|H280068798
+2800687B8:lI102|H2800687A8
+2800687C8:lI111|H2800687B8
+2800687D8:lI32|H2800687C8
+2800687E8:lI110|H2800687D8
+2800687F8:lI111|H2800687E8
+280068808:lI105|H2800687F8
+280068818:lI116|H280068808
+280068828:lI97|H280068818
+280068838:lI116|H280068828
+280068848:lI110|H280068838
+280068858:lI101|H280068848
+280068868:lI109|H280068858
+280068878:lI101|H280068868
+280068888:lI108|H280068878
+280068898:lI112|H280068888
+2800688A8:lI109|H280068898
+2800688B8:lI73|H2800688A8
+2800688C8:lI41|N
+2800688D8:lI57|H2800688C8
+2800688E8:lI52|H2800688D8
+2800688F8:lI80|H2800688E8
+280068908:lI69|H2800688F8
+280068918:lI69|H280068908
+280068928:lI40|H280068918
+280068938:lI32|H280068928
+280068948:lI103|H280068938
+280068958:lI110|H280068948
+280068968:lI105|H280068958
+280068978:lI108|H280068968
+280068988:lI100|H280068978
+280068998:lI110|H280068988
+2800689A8:lI97|H280068998
+2800689B8:lI104|H2800689A8
+2800689C8:lI32|H2800689B8
+2800689D8:lI114|H2800689C8
+2800689E8:lI111|H2800689D8
+2800689F8:lI114|H2800689E8
+280068A08:lI114|H2800689F8
+280068A18:lI101|H280068A08
+280068A28:lI32|H280068A18
+280068A38:lI100|H280068A28
+280068A48:lI101|H280068A38
+280068A58:lI115|H280068A48
+280068A68:lI97|H280068A58
+280068A78:lI98|H280068A68
+280068A88:lI32|H280068A78
+280068A98:lI101|H280068A88
+280068AA8:lI117|H280068A98
+280068AB8:lI108|H280068AA8
+280068AC8:lI97|H280068AB8
+280068AD8:lI86|H280068AC8
+280068B48:t2:H280068B60,N
+280068B60:t2:AC:erl_features,A8:keywords
+28001EEA8:t2:H28001EEC0,H28001EED8
+28001EEC0:t2:AB:prim_socket,AE:ioctl_requests
+28001EED8:MfC:H28001EF50:I2149607696,I3223349537,I3223349539,I3222038820,I3223349538,I3223349521,I3223349555,I3223349541,I2149607692,I2149607699,I2149607694,I2149607732
+28001EF50:tC:A8:sifflags,A7:gifaddr,AA:gifbrdaddr,A7:gifconf,AA:gifdstaddr,A8:gifflags,A6:gifmtu,AA:gifnetmask,A7:sifaddr,AA:sifbrdaddr,AA:sifdstaddr,A6:sifmtu
+2800BB7E8:t2:H2800BB800,I7
+2800BB800:t2:AD:logger_config,H2800BB818
+2800BB818:t2:A10:$handler_config$,AB:ssl_handler
+2800BB7A0:t2:H2800BB7B8,A5:async
+2800BB7B8:t2:AA:logger_olp,A18:logger_std_h_ssl_handler
+2800711B0:t2:A12:rex_nodes_observer,H2800711C8
+2800711C8:E23:g1oAA3cNbm9ub2RlQG5vaG9zdAAAAAAAALAE+vYAAd/g02c=
+28001EFD0:t2:H28001EFE8,H28001F000
+28001EFE8:t2:AB:prim_socket,AB:ioctl_flags
+28001F000:Mf20:H28001F118:I0,I64,I4,I2,I8,I1,I32768,I0,I512,I0,I0,I0,I0,I0,I0,I0,I4096,I8192,I16384,I0,I0,I128,I32,I1024,I16,I0,I0,I256,I0,I2048,I0,I0
+28001F118:t20:A7:monitor,A7:running,A5:debug,A9:broadcast,A8:loopback,A2:up,A9:multicast,A7:nogroup,A8:allmulti,A9:automedia,AA:cantconfig,A7:dormant,A5:dying,A7:dynamic,A4:echo,AA:knowsepoch,A5:link0,A5:link1,A5:link2,A8:lower_up,A6:master,A5:noarp,AA:notrailers,A7:oactive,AB:pointopoint,A7:portsel,A8:ppromisc,A7:promisc,A8:renaming,A7:simplex,A5:slave,A9:staticarp
+28005B250:t2:H28005B268,I5
+28005B268:t2:AD:logger_config,A10:$primary_config$
+28006A4A0:t2:H28006A4B8,I5
+28006A4B8:t2:AD:logger_config,A11:supervisor_bridge
+28008F5B0:t2:H28008F5C8,A5:async
+28008F5C8:t2:AA:logger_olp,AC:logger_proxy
+280068BD8:t2:H280068BF0,I5
+280068BF0:t2:AD:logger_config,AA:supervisor
+280068B90:t2:H280068BA8,A4:true
+280068BA8:t2:AC:erl_features,A9:init_done
+280068B00:t2:H280068B18,N
+280068B18:t2:AC:erl_features,A10:enabled_features
+28005B298:t2:H28005B2B0,I5
+28005B2B0:t2:AD:logger_config,A16:application_controller
+=binary:1309301C0
+9C:XlsbwptdW1tcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcZFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxkXSsoPzo7Wy1hLXpBLVpcZFwvIyYuOj0/JUB+X10qKSopPwcpfCg/Oig/OlxkezEsNH0oPzo7XGR7MCw0fSkqKT9bXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkp
+=binary:130931BD0
+15E:RVJDUF4BAAAQCAAAAQAAAP//////////AAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMBGhtuAAAACAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAABuAAAAAAgDAIgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAABigwCNgwCHkoMALpKDACcdO24AAAAAaOD/p////4f+//9HAAAAAAAAAAAAAAAAAAAAAGR5ACd3AFBuAAAAAAAA/wP+//8H/v//BwAAAAAAAAAAAAAAAAAAAABrkoMAJx07bgAAAABo4P+n////h/7//0cAAAAAAAAAAAAAAAAAAAAAYnkAJ3gAfh0HeACHdwBDgwA9koMAFQdbAAMHkoMACR07WwAEB3kACXgAFW4AAAAAAAD/c/7/HQTIfz5CAAAAAAAAAAAAAAAAAAAAAHgAPXgA0HgBGgA=
+=atoms
+glee_unit_assert_match
+glee_unit_assert_equal
+glee_unit_assert_not_equal
+expected
+'-erlang_error_to_unified/3-fun-0-'
+'-format_reason/4-fun-0-'
+'-format_reason/4-fun-1-'
+'-format_reason/4-fun-2-'
+'-format_reason/4-fun-3-'
+'-format_reason/4-fun-4-'
+'-format_reason/4-fun-5-'
+module_and_test_run
+'-create_test_report/1-fun-0-'
+'-create_test_report/1-fun-1-'
+'-create_test_report/1-fun-2-'
+'-create_test_report/1-fun-3-'
+'-create_test_report/1-fun-4-'
+'-create_test_report/1-fun-5-'
+'-create_test_report/1-fun-6-'
+align_table
+'showtime@internal@reports@table'
+ignored_style
+failed_style
+passed_style
+function_style
+error_style
+align_left_overflow
+stacktrace_style
+align_right
+align_left
+content
+styled_content
+format_reason
+got_highlight
+expected_highlight
+'showtime@internal@reports@compare'
+not_style
+'showtime@internal@reports@styles'
+gleam_error_to_unified
+unified_error
+erlang_error_to_unified
+'-part1/1-fun-2-'
+'-find_best_joker_substitution/1-fun-0-'
+'-find_best_joker_substitution/1-fun-1-'
+'-part2/1-fun-0-'
+'-part2/1-fun-2-'
+get_input
+get_part
+find_best_joker_substitution
+compare_hands
+compare_top_card
+classify_hand
+card_counts
+hand
+parse_hand
+card_rank
+two_pair
+three_of_a_kind
+one_pair
+high_card
+full_house
+four_of_a_kind
+five_of_a_kind
+hand_rank
+be_false_meta
+be_false
+be_true_meta
+be_true
+fail_meta
+be_error_meta
+be_error
+be_ok_meta
+be_ok
+not_equal_meta
+equal_meta
+evaluate
+'-run_test/4-fun-0-'
+'-run_test/4-fun-1-'
+reason_line
+expression
+'-run_test/4-fun-2-'
+trace_module
+'-run_test/4-fun-3-'
+'-map_extra_info_list/1-fun-0-'
+num
+arg_list
+map_arity
+map_extra_info_list
+erlang_exception
+trace_list
+erlang_error
+generic_exception
+gleam_assert
+not_eq
+assert_equal
+assert_match
+assert_not_equal
+assertNotEqual
+assertMatch
+assertEqual
+test_function_return
+test
+capture_done
+stop_output_capture
+capture_output
+start_output_capture
+'-run_test_suite/4-fun-0-'
+showtime_ffi
+run_test
+example
+part1
+'-part1_test/0-fun-0-'
+part2
+'-part2_test/0-fun-0-'
+part2_test
+'showtime@tests@should'
+part1_test
+'-optional/1-fun-0-'
+'-any/1-fun-0-'
+'-decode1/2-fun-0-'
+'-push_path/2-fun-0-'
+'-result/2-fun-3-'
+'-result/2-fun-2-'
+'-result/2-fun-1-'
+'-result/2-fun-0-'
+'-result/2-fun-4-'
+'-result/2-fun-5-'
+'-list/1-fun-0-'
+'-list/1-fun-1-'
+'-list/1-fun-2-'
+'-map_errors/2-fun-0-'
+'-decode_string/1-fun-0-'
+'-decode_string/1-fun-1-'
+'-field/2-fun-0-'
+'-field/2-fun-1-'
+'-field/2-fun-2-'
+'-optional_field/2-fun-0-'
+'-optional_field/2-fun-1-'
+'-optional_field/2-fun-2-'
+'-element/2-fun-0-'
+'-element/2-fun-1-'
+'-element/2-fun-2-'
+'-element/2-fun-3-'
+'-tuple_errors/2-fun-0-'
+'-tuple2/2-fun-0-'
+'-tuple2/2-fun-1-'
+'-tuple3/3-fun-0-'
+'-tuple3/3-fun-1-'
+'-tuple4/4-fun-0-'
+'-tuple4/4-fun-1-'
+'-tuple5/5-fun-0-'
+'-tuple5/5-fun-1-'
+'-tuple6/6-fun-0-'
+'-tuple6/6-fun-1-'
+'-dict/2-fun-4-'
+'-dict/2-fun-2-'
+'-dict/2-fun-1-'
+'-dict/2-fun-3-'
+'-dict/2-fun-5-'
+'-dict/2-fun-0-'
+'-dict/2-fun-6-'
+'-dict/2-fun-7-'
+'-decode2/3-fun-0-'
+'-decode3/4-fun-0-'
+'-decode4/5-fun-0-'
+'-decode5/6-fun-0-'
+'-decode6/7-fun-0-'
+'-decode7/8-fun-0-'
+'-decode8/9-fun-0-'
+'-decode9/10-fun-0-'
+decode9
+decode8
+decode7
+decode6
+decode5
+decode4
+decode3
+decode2
+tuple6
+tuple5
+tuple4
+tuple3
+tuple2
+tuple_errors
+optional_field
+decode_string
+map_errors
+push_path
+decode1
+all_errors
+at_least_decode_tuple_error
+optional
+shallow_list
+put_expected
+bit_string
+bit_array
+'-do_wildcard/3-lc$^0/1-0-'
+'-do_wildcard_4/3-lc$^1/1-1-'
+'-do_wildcard_4/3-lc$^0/1-0-'
+'-compile_alt/2-lc$^0/1-0-'
+'-keep_dir_search_rules/1-lc$^0/1-0-'
+'-keep_suffix_search_rules/1-lc$^0/1-0-'
+'-add_local_search/1-fun-0-'
+climb
+safe_relative_path_1
+find_regular_file
+try_dir_rule
+try_dir_rules
+add_local_search
+try_suffix_rules
+find_file
+asn1_source_search_rules
+c_source_search_rules
+erl_source_search_rules
+basic_source_search_rules
+default_search_rules
+source_search_rules
+get_search_rules
+keep_suffix_search_rules
+keep_dir_search_rules
+eval_list_dir
+eval_read_link_info
+eval_read_file_info
+do_exists
+wrap_escapes
+convert_escapes
+compile_alt
+compile_range
+compile_charset1
+compile_charset
+missing_delimiter
+escaped
+compile_part_to_sep
+compile_part
+compile_join
+compile_wildcard_3
+is_literal_pattern
+compile_wildcard_2
+cwd
+compiled_wildcard
+compile_wildcard
+do_list_dir
+do_alt
+do_star
+do_double_star
+prepare_base
+will_always_match
+star
+question
+alt
+match_part
+do_wildcard_4
+double_star
+do_wildcard_3
+do_wildcard_2
+do_wildcard_1
+do_wildcard
+do_file_size
+do_last_modified
+do_fold_files2
+do_fold_files1
+do_fold_files
+do_is_regular
+do_is_file
+do_is_dir
+file_size
+last_modified
+fold_files
+is_regular
+badpattern
+'-do_all/2-fun-0-'
+'-do_values/2-fun-0-'
+do_values
+to_result
+is_none
+is_some
+do_all
+panic
+not_utf8
+'-do_copy_directory/2-fun-1-'
+'-do_copy_directory/2-fun-0-'
+'-do_copy_directory/2-fun-2-'
+'-do_copy_directory/2-fun-3-'
+'-get_files/1-fun-0-'
+'-get_files/1-fun-3-'
+'-get_files/1-fun-5-'
+'-copy_directory/2-fun-0-'
+'-rename_directory/2-fun-0-'
+rename_file
+copy_file
+rename_directory
+copy_directory
+create_dir_all
+create_directory_all
+get_files
+do_copy_directory
+create_file
+create_directory
+append_bits
+write_bits
+read_bits
+cast_error
+'gleam@bit_array'
+do_read
+do_write
+simplifile_erl
+do_append
+start_test
+completed_test_run
+ongoing_test_run
+end_test
+'-collect_modules_in_folder/3-fun-0-'
+'-collect_modules_in_folder/3-fun-1-'
+test_module
+'-collect_modules_in_folder/3-fun-2-'
+'-collect_modules_in_folder/3-fun-3-'
+'-collect_modules_in_folder/3-fun-4-'
+'-collect_modules_in_folder/3-fun-5-'
+'-collect_test_functions/1-fun-0-'
+'-collect_test_functions/1-fun-1-'
+'-collect_test_functions/1-fun-2-'
+test_function
+'-collect_test_functions/1-fun-3-'
+test_suite
+unsafe_coerce
+read_directory
+collect_modules_in_folder
+get_module_prefix
+end_test_suite
+start_test_suite
+'-start/5-fun-0-'
+'-start/5-fun-1-'
+'-start/5-fun-2-'
+'-debug_cmd/2-lc$^0/1-0-'
+'-get_log/1-lc$^0/1-0-'
+'-nlog_new/2-fun-0-'
+nlog_get
+nlog_put
+nlog_new
+print_log
+get_debug2
+remove_debug
+install_debug
+stat
+no_statistics
+start_time
+current_time
+messages_in
+messages_out
+get_stat
+init_stat
+do_change_code
+unknown_debug
+debug_cmd
+do_replace_state
+callback_failed
+do_get_state
+suspend_loop_hib
+terminating
+send_system_msg
+install
+no_debug
+log_to_file
+replace_state
+failed_to_connect
+local_node_is_not_alive
+atom_not_loaded
+'-list_directory/1-lc$^0/1-0-'
+'-get_all_env/0-fun-0-'
+'-map_selector/2-fun-0-'
+'-map_selector/2-fun-1-'
+process_down
+selector
+free_bsd
+windows_nt
+os_family
+recursive_delete
+delete_directory
+list_directory
+make_directory
+delete_file
+append_file
+posix_result
+link_info
+exdev
+etxtbsy
+estale
+esrch
+espipe
+erofs
+erange
+epipe
+eperm
+eopnotsupp
+enotblk
+enosys
+enostr
+enosr
+enospc
+enomem
+enolink
+enolck
+enodev
+enobufs
+enfile
+emultihop
+emlink
+eloop
+eisdir
+eio
+eintr
+eftype
+efbig
+eexist
+edquot
+edeadlock
+edeadlk
+ebadmsg
+eacces
+no_access
+file_info_result
+unknown_application
+errored
+thrown
+classify
+atom_from_dynamic
+atom_from_string
+call_timeout
+exit_message
+'-selecting_trapped_exits/2-fun-0-'
+'-selecting/3-fun-0-'
+'-receive/2-fun-0-'
+'-selecting_record2/3-fun-0-'
+'-selecting_record3/3-fun-0-'
+'-selecting_record4/3-fun-0-'
+'-selecting_record5/3-fun-0-'
+'-selecting_record6/3-fun-0-'
+'-selecting_record7/3-fun-0-'
+'-selecting_record8/3-fun-0-'
+'-try_call/3-fun-0-'
+callee_down
+'-try_call/3-fun-1-'
+process_named
+named
+unregister_process
+register_process
+trap_exits
+send_abnormal_exit
+send_exit
+timer_not_found
+try_call
+demonitor_process
+process_monitor
+sleep_forever
+anything
+selecting_record8
+selecting_record7
+selecting_record6
+selecting_record5
+selecting_record4
+selecting_record2
+insert_selector_handler
+selecting_trapped_exits
+flush_messages
+select_forever
+subject
+init_timeout
+convert_system_message
+gleam_otp_external
+'-receive_message/1-fun-0-'
+'-init_selector/2-fun-0-'
+'-init_selector/2-fun-1-'
+'-start_spec/1-fun-0-'
+'-start_spec/1-fun-1-'
+'-start_spec/1-fun-2-'
+init_failed
+init_crashed
+selecting_process_down
+monitor_process
+to_erlang_start_result
+abnormal
+failed
+subject_owner
+ready
+initialise_actor
+map_selector
+init_selector
+status_info
+from
+'gleam@dynamic'
+process_status_info
+merge_selector
+selecting_anything
+receive_message
+selecting_record3
+selecting_system_messages
+exit_process
+with_selector
+create_test_report
+'showtime@internal@reports@formatter'
+'showtime@internal@common@common_event_handler'
+'-start/0-fun-1-'
+'-start/0-fun-2-'
+event_handler_message
+'-start/0-fun-3-'
+selecting
+new_selector
+new_subject
+'gleam@erlang@process'
+'gleam@otp@actor'
+is_equal
+prepend_builder
+'-pretty_print_cause/1-fun-0-'
+line_print
+pretty_print_cause
+not_assigned
+surrogate
+spacing_combining
+enclosing
+non_spacing
+decimal
+letter
+connector
+dash
+punctuation
+currency
+paragraph
+space
+separator
+noBreak
+fraction
+vertical
+small
+medial
+isolated
+wide
+narrow
+font
+square
+circle
+'-inlined-class/1-'
+'-canonical_order_2/2-lc$^0/1-0-'
+is_wide_cp
+subcat_letter
+zs
+zp
+zl
+so
+sk
+sc
+ps
+po
+pi
+pf
+pe
+pd
+pc
+mn
+me
+lu
+lo
+ll
+cs
+co
+cn
+cf
+cc
+cat_translate
+unicode_table
+case_table
+nolist
+compose_pair
+gc_h_lv_lvt
+gc_h_T
+gc_h_V
+gc_h_L
+gc_regional
+is_ext_pict
+gc_ext_pict_zwj
+gc_ext_pict
+zwj
+is_extend
+gc_extend2
+gc_extend
+is_control
+gc_prepend
+gc_1
+cp_no_binl
+binary_found
+cp_no_bin
+cpl_1_cont3
+cpl_1_cont2
+cpl_1_cont
+cpl_cont3
+cpl_cont2
+cpl_cont
+cpl
+is_whitespace
+compose_compat_many
+compose_compat
+compose_compat_0
+compose_many
+decompose_compat_1
+decompose_compat
+canonical_order_2
+canonical_order_1
+canonical_order
+decompose_1
+decompose
+lookup_category
+spec_version
+lower
+get_case
+compat
+ccc
+'-inlined-rev/1-'
+'-inlined-append/2-'
+'-titlecase/1-lbc$^0/2-0-'
+'-to_lower/1-lc$^0/1-0-'
+'-to_upper/1-lc$^0/1-0-'
+'-join/2-lc$^0/1-0-'
+to_upper_char
+to_lower_char
+sub_string
+centre
+r_pad
+l_pad
+strip_right
+strip_left
+s_word
+sub_word
+w_count
+words
+copies
+tokens_multiple_2
+tokens_multiple_1
+tokens_single_2
+tokens_single_1
+substr2
+substr1
+cspan
+span
+l_prefix
+rstr
+str
+rchr
+bin_search_str_2
+bin_search_str_1
+bin_search_str
+bin_search_inv_n
+bin_search_inv_1
+bin_search_inv
+bin_search_loop
+bin_pattern
+search_cp
+search_pattern
+bin_search
+cp_prefix_1
+cp_prefix
+add_non_empty
+find_r
+find_l
+lexeme_skip
+nth_lexeme_m
+lexeme_pick
+lexemes_m
+prefix_1
+take_tc
+take_t
+take_lc
+take_l
+trim_t
+trim_ts
+trim_l
+trim_ls
+casefold_bin
+casefold_list
+lowercase_bin
+lowercase_list
+uppercase_bin
+uppercase_list
+slice_bin
+slice_list
+slice_trail
+slice_lb
+slice_l
+slice_l0
+reverse_b
+reverse_1
+equal_norm_nocase
+equal_norm
+equal_nocase
+equal_1
+length_b
+length_1
+cp
+next_codepoint
+nth_lexeme
+to_number
+to_integer
+casefold
+titlecase
+whitespace
+split_string
+not_a_utf8_string
+'-decode_option/2-fun-0-'
+'-compile_regex/2-lc$^0/1-0-'
+'-regex_matches/2-fun-0-'
+'-regex_scan/2-fun-0-'
+'-parse_query/1-fun-0-'
+'-inspect/1-fun-4-'
+'-inspect/1-lc$^1/1-1-'
+'-inspect/1-lc$^0/1-0-'
+base16_decode
+inspect_maybe_utf8_string
+append_segment
+inspect_bit_array
+improper
+inspect_list
+inspect_maybe_gleam_atom
+proper
+println_error
+maps_get_or
+maps_get_optional
+check_utf8
+is_hex_digit
+percent_ok
+percent_decode
+percent_encode
+dissect_query
+wrap_list
+base_decode64
+regex_scan
+regex_matches
+regex_submatches
+regex_split
+regex_check
+compile_error
+compile_regex
+bit_array_int_from_u32
+bit_array_int_to_u32
+bit_array_slice
+bit_array_concat
+string_invalid_utf8
+string_pad
+decode_result
+decode_option
+decode_tuple6
+decode_tuple5
+decode_tuple4
+decode_tuple3
+decode_tuple2
+decode_tuple
+tuple_get
+size_of_tuple
+decode_field
+decode_list
+decode_bool
+decode_float
+decode_int
+decode_bit_array
+decode_map
+classify_dynamic
+decode_error
+decode_error_msg
+iodata_append
+capitalise
+to_option
+utf_codepoint_to_int
+utf_codepoint
+utf_codepoint_list_to_string
+from_utf_codepoints
+to_utf_codepoints
+do_to_utf_codepoints
+do_to_utf_codepoints_impl
+do_to_graphemes
+string_pop_grapheme
+pop_grapheme
+trim_right
+do_trim_right
+trim_left
+do_trim_left
+do_trim
+pad_left
+padding
+do_join
+'gleam@iterator'
+do_split_once
+string_ends_with
+ends_with
+string_starts_with
+contains_string
+drop_right
+crop_string
+crop
+less_than
+from_string
+do_reverse
+'-compose/2-fun-0-'
+'-curry2/1-fun-0-'
+'-curry2/1-fun-1-'
+'-curry3/1-fun-0-'
+'-curry3/1-fun-1-'
+'-curry3/1-fun-2-'
+'-curry4/1-fun-0-'
+'-curry4/1-fun-1-'
+'-curry4/1-fun-2-'
+'-curry4/1-fun-3-'
+'-curry5/1-fun-0-'
+'-curry5/1-fun-1-'
+'-curry5/1-fun-2-'
+'-curry5/1-fun-3-'
+'-curry5/1-fun-4-'
+'-curry6/1-fun-0-'
+'-curry6/1-fun-1-'
+'-curry6/1-fun-2-'
+'-curry6/1-fun-3-'
+'-curry6/1-fun-4-'
+'-curry6/1-fun-5-'
+'-flip/1-fun-0-'
+'-constant/1-fun-0-'
+apply3
+apply2
+apply1
+tap
+identity
+flip
+curry6
+curry5
+curry4
+curry3
+curry2
+compose
+'-nil_error/1-fun-0-'
+'-all/1-fun-0-'
+'-values/1-fun-0-'
+try_recover
+lazy_or
+nil_error
+unwrap_both
+unwrap_error
+is_error
+loosely_equals
+loosely_compare
+ceiling
+float_to_string
+parse_float
+invalid_base
+bitwise_shift_right
+bitwise_shift_left
+bitwise_exclusive_or
+bitwise_or
+bitwise_not
+bitwise_and
+floor_divide
+modulo
+remainder
+undigits
+do_undigits
+digits
+do_digits
+do_product
+do_sum
+negate
+is_odd
+is_even
+clamp
+square_root
+to_base36
+to_base8
+to_base2
+to_base_string
+int_from_base_string
+base_parse
+parse_int
+absolute_value
+'-hex_string_to_int/1-fun-0-'
+power
+'-hex_string_to_int/1-fun-1-'
+'-hex_string_to_int/1-fun-2-'
+'-rgba_to_hsla/4-fun-0-'
+'-rgba_to_hsla/4-fun-1-'
+'-from_rgb255/3-fun-0-'
+'-from_rgb255/3-fun-2-'
+'-from_rgb255/3-fun-4-'
+'-from_rgb/3-fun-0-'
+'-from_rgb/3-fun-1-'
+'-from_rgb/3-fun-2-'
+'-from_rgba/4-fun-0-'
+'-from_rgba/4-fun-1-'
+'-from_rgba/4-fun-2-'
+'-from_rgba/4-fun-3-'
+'-from_hsla/4-fun-0-'
+'-from_hsla/4-fun-1-'
+'-from_hsla/4-fun-2-'
+'-from_hsla/4-fun-3-'
+'-from_rgb_hex_string/1-fun-0-'
+'-from_rgba_hex_string/1-fun-0-'
+'-to_css_rgba_string/1-fun-0-'
+multiply
+'-to_css_rgba_string/1-fun-1-'
+to_rgb_hex_string
+to_base16
+to_rgba_hex_string
+to_rgba_hex
+to_css_rgba_string
+to_hsla
+rgba
+hsla
+to_rgba
+from_rgba_hex_string
+from_rgba_hex
+from_rgb_hex_string
+from_rgb_hex
+from_hsl
+from_hsla
+from_rgba
+from_rgb
+to_float
+then
+divide
+rgba_to_hsla
+hsla_to_rgba
+hex_string_to_int
+hue_to_rgb
+valid_colour_value
+'-do_add/3-fun-1-'
+'-flags/2-fun-0-'
+'-global_flags/2-fun-0-'
+command_input
+'-execute_root/4-fun-0-'
+'-usage_help/3-fun-0-'
+'-cmd_help/4-fun-0-'
+'-cmd_help/4-fun-1-'
+'-cmd_help/4-fun-2-'
+'-cmd_help/4-fun-4-'
+'-execute/2-fun-0-'
+starts_with
+'-execute/2-fun-1-'
+add_command_from_stub
+constant
+'gleam@function'
+pretty_print
+println
+'gleam@io'
+run_and_handle
+execute
+do_execute
+lazy_unwrap
+cmd_help
+append_builder
+from_strings
+'gleam@string_builder'
+unwrap
+usage_help
+to_rgb_hex
+italic
+underline
+bold
+'gleam_community@ansi'
+heading_style
+subcommands_help
+subcommand_help
+wrap_with_space
+help_flag
+sanitize_path
+is_not_empty
+pretty_help
+from_rgb255
+'gleam_community@colour'
+execute_root
+global_flags
+global_flag_tuple
+global_flag
+flag_tuple
+command_node
+empty_command
+with_name
+without_pretty_help
+with_config
+do_fold
+from_result
+'gleam@option'
+map_values
+has_key
+'-from_list/1-fun-0-'
+'-fold/3-fun-0-'
+'-filter/2-fun-0-'
+order
+is_ok
+'-one_of/1-fun-0-'
+'-one_of/1-fun-1-'
+'-none_of/1-fun-0-'
+'-none_of/1-fun-1-'
+'-each/1-fun-0-'
+none_of
+'gleam@set'
+'-string/0-fun-1-'
+'-string/0-fun-0-'
+'-string_list/0-fun-1-'
+'-string_list/0-fun-0-'
+'-attempt/2-fun-0-'
+'-wrap_with_constraint/2-fun-0-'
+'-construct_value/3-fun-0-'
+'-compute_flag/2-fun-12-'
+'-compute_flag/2-fun-13-'
+'-compute_flag/2-fun-10-'
+'-compute_flag/2-fun-11-'
+'-compute_flag/2-fun-8-'
+'-compute_flag/2-fun-9-'
+'-compute_flag/2-fun-6-'
+'-compute_flag/2-fun-7-'
+'-compute_flag/2-fun-4-'
+'-compute_flag/2-fun-5-'
+'-compute_flag/2-fun-2-'
+'-compute_flag/2-fun-3-'
+'-compute_flag/2-fun-0-'
+'-compute_flag/2-fun-1-'
+'-int/0-fun-1-'
+'-int/0-fun-0-'
+'-int_list/0-fun-1-'
+'-int_list/0-fun-0-'
+'-float/0-fun-1-'
+'-float/0-fun-0-'
+'-float_list/0-fun-1-'
+'-float_list/0-fun-0-'
+'-bool/0-fun-1-'
+'-bool/0-fun-0-'
+'-update_flag_value/2-fun-1-'
+'-update_flag_value/2-fun-0-'
+map_error
+'-update_flag_value/2-fun-2-'
+'-attempt_toggle_flag/2-fun-2-'
+get_floats
+get_floats_value
+get_float
+get_float_value
+get_strings_value
+get_string_value
+get_bool_value
+get_ints
+get_ints_value
+get_int
+get_int_value
+split_once
+drop_left
+update_flags
+attempt_toggle_flag
+update_flag_value
+replace_error
+flags_help
+flag_help
+flag_type_help
+float_list
+undefined_flag_err
+no_value_flag_err
+layer
+layer_invalid_flag
+li
+b
+compute_flag
+construct_value
+flag_not_provided_error
+access_type_error
+'gleam@map'
+build_map
+wrap_with_constraint
+attempt
+flag_builder
+length_mismatch
+'-update_group/1-fun-0-'
+'-map_fold/3-fun-0-'
+'-unique/1-fun-0-'
+'-key_find/2-fun-0-'
+'-key_filter/2-fun-0-'
+'-key_pop/2-fun-0-'
+'-permutations/1-fun-0-'
+'-permutations/1-fun-1-'
+'-permutations/1-fun-2-'
+'-last/1-fun-0-'
+'-combinations/2-fun-0-'
+'-combinations/2-fun-1-'
+'-do_combination_pairs/1-fun-0-'
+'-transpose/1-fun-0-'
+'-transpose/1-fun-1-'
+'-do_shuffle_by_pair_indexes/1-fun-0-'
+'gleam@float'
+'-shuffle/1-fun-0-'
+shuffle
+do_shuffle_by_pair_indexes
+do_shuffle_pair_unwrap
+interleave
+transpose
+combination_pairs
+do_combination_pairs
+combinations
+do_scan
+reduce
+sized_chunk
+do_sized_chunk
+do_chunk
+take_while
+do_take_while
+drop_while
+window_by_2
+window
+do_window
+permutations
+do_partition
+try_each
+each
+key_set
+key_pop
+pop_map
+do_pop_map
+pop
+do_pop
+key_filter
+key_find
+split_while
+do_split_while
+do_split
+repeat
+do_repeat
+compare
+'gleam@int'
+tail_recursive_range
+merge_sort
+merge_down
+merge_up
+intersperse
+do_intersperse
+do_unzip
+strict_zip
+do_zip
+find_map
+fold_until
+try_fold
+index_fold
+do_index_fold
+fold_right
+map_second
+'gleam@pair'
+map_fold
+'gleam@dict'
+flat_map
+do_concat
+reverse_and_prepend
+prepend
+do_take
+try_map
+do_try_map
+index_map
+do_index_map
+map2
+do_map2
+do_map
+filter_map
+do_filter_map
+do_filter
+update_group
+rest
+contains
+'-binary_to_term/1-fun-0-'
+'-unsafe_binary_to_term/1-fun-0-'
+priv_directory
+make_reference
+unsafe_binary_to_term
+rescue
+erlang_timestamp
+gleam_erlang_ffi
+collect_test_functions
+run_test_suite
+'showtime@internal@erlang@runner'
+some
+'-mk_runner/2-fun-0-'
+'gleam@string'
+'-mk_runner/2-fun-1-'
+mixed
+'-mk_runner/2-fun-2-'
+'-start_with_args/2-fun-0-'
+end_test_run
+'gleam@list'
+collect_modules
+'showtime@internal@erlang@discover'
+start_test_run
+'showtime@internal@erlang@module_handler'
+'showtime@internal@erlang@event_handler'
+'-main/0-fun-0-'
+start_arguments
+'gleam@erlang'
+with_pretty_help
+default_pretty_help
+one_of
+'glint@flag@constraint'
+string_list
+start_with_args
+let_assert
+gleam_error
+get_string
+'gleam@result'
+get_strings
+'glint@flag'
+mk_runner
+showtime
+already_listening
+register_listener
+lookup_listener
+dtls_listeners_spec
+dtls_connection_sup_dist
+dtls_connection_child_spec
+ssl_upgrade_server_session_cache_sup_dist
+ssl_unknown_listener
+tls_server_session_ticket_sup_dist
+sup_name
+ssl_listen_tracker_sup_dist
+tracker_name
+ssl_upgrade_server_session_child_spec
+ssl_server_session_child_spec
+tls_server_session_child_spec
+listen_options_tracker_child_spec
+tls_dist_connection_sup
+start_child_dist
+server_instance_child_spec
+tls_connection_child_spec
+dtls_sup_child_spec
+tls_sup_child_spec
+update_data_lock
+collect_invalid_tickets
+remove_ticket
+obfuscate_ticket_age
+ticket_data
+psk_identity
+verify_ticket_sni
+last_elem
+get_max_early_data
+iterate_tickets
+do_find_ticket
+inital_state
+remove_invalid_tickets
+update_ticket
+unlock_tickets
+store_ticket
+remove_tickets
+lock_tickets
+get_tickets
+find_ticket
+client_ssl_otp_session_cache
+cache_name
+'-init_certs_keys/3-fun-0-'
+'-prio_ecdsa/1-lc$^0/1-0-'
+namedCurves
+'-prio_ecdsa/1-fun-1-'
+privat_key
+'-prio_rsa_pss/1-fun-0-'
+'-prio_rsa/1-fun-0-'
+'-prio_dsa/1-fun-0-'
+'-init_private_key/3-lc$^0/1-0-'
+'-dh_file/2-lc$^0/1-0-'
+session_cb_opts
+session_cache_client_max
+session_cache_server_max
+max_session_cache_size
+client_session_cb_init_args
+server_session_cb_init_args
+dhfile
+dh_file
+asn1_NOVALUE
+modp2048_generator
+modp2048_prime
+'DHParameter'
+dh
+init_diffie_hellman
+'EcpkParameters'
+asn1_OPENTYPE
+'PrivateKeyInfo_privateKeyAlgorithm'
+'PrivateKeyInfo'
+pem_entry_decode
+password
+keyfile
+invalid_key_id
+key_id
+init_private_key
+init_certificate_file
+certfile
+init_certificates
+cacertfile
+crl_cache
+init_cacerts
+init_manager_name
+internal_active_n
+get_internal_active_n
+server_session_ticket_max_early_data
+get_max_early_data_size
+server_session_ticket_store_size
+get_ticket_store_size
+server_session_ticket_lifetime
+get_ticket_lifetime
+prio_dsa
+prio_rsa
+pkix_hash_type
+'HashAlgorithm'
+prio_params_1
+prio_rsa_pss
+using_curve
+ecc_curves
+prio_ecdsa
+prio_eddsa
+prioritize_groups
+dss
+engine
+rsa_pss_pss
+'RSASSA-PSS-params'
+ecdsa
+eddsa
+namedCurve
+'ECPrivateKey'
+dsa
+'DSAPrivateKey'
+rsa
+'RSAPrivateKey'
+group_pairs
+private_key
+certs
+key
+init_cert_key_pair
+certs_keys
+init_certs_keys
+dh_params
+cert_key_alts
+erl_dist
+load_mitigation
+no_longer_defined
+exists_equivalent
+register_unique_session
+do_register_session
+client_register_session
+client_register_unique_session
+session_validation
+init_session_validator
+start_session_validator
+valid_session
+validate_session
+session_cache
+pem_cache
+fileref_db_handle
+crl_db_info
+cert_db_ref
+cert_db_handle
+validate_sessions
+lifetime
+pre_1_3_session_opts
+client
+delete_crls
+insert_crls
+invalidate_session
+unique
+register_session
+clean_cert_db
+cache_pem_file
+connection_init
+ssl_manager_dist
+'-remove_cert_entries/2-inlined-0-'
+'-refresh_trusted_certs/2-inlined-0-'
+'-remove/1-fun-0-'
+'-lookup_trusted_cert/4-lc$^0/1-0-'
+'-refresh_trusted_certs/2-fun-0-'
+'-extract_trusted_certs/1-lc$^0/1-0-'
+'-lookup/2-fun-0-'
+'-lookup/2-lc$^1/1-1-'
+'-add_certs_from_der/3-fun-0-'
+'-add_certs_from_der/3-lc$^1/1-0-'
+'-certs_from_der/1-lc$^1/1-1-'
+'-certs_from_der/1-lc$^0/1-0-'
+'-add_certs_from_pem/3-fun-0-'
+not_encrypted
+'Certificate'
+'-add_certs_from_pem/3-lc$^1/1-0-'
+'-add_crls/3-lc$^0/1-1-'
+'-add_crls/3-lc$^1/1-0-'
+'-remove_crls/2-lc$^0/1-1-'
+'-remove_crls/2-lc$^1/1-0-'
+'-remove_cert_entries/2-fun-0-'
+remove_cert_entries
+insert_cert_entries
+insert_delete_lists
+update_certs
+'TBSCertList'
+der_decode
+'CertificateList'
+crl_issuer
+rm_crls
+remove_crls
+add_crls
+new_trusted_cert_entry
+pkix_decode_cert
+decoded
+pkix_normalize_name
+'OTPTBSCertificate'
+'OTPCertificate'
+cert
+decode_cert
+add_cert
+add_certs_from_pem
+certs_from_der
+add_certs_from_der
+remove_certs
+init_ref_db
+db_size
+not_cached
+ref_count
+select_certentries_by_ref
+remove_trusted_certs
+decode_pem_file
+pem_decode
+der_otp
+extract_trusted_certs
+refresh
+file_to_certificats
+refresh_trusted_certs
+der
+add_trusted_certs
+extracted
+lookup_trusted_cert
+ssl_otp_crl_issuer_mapping
+ssl_otp_crl_cache
+ssl_otp_ca_ref_file_mapping
+ssl_otp_ca_file_ref
+ssl_otp_cacertificate_db
+ssl_manager_type
+bypass_pem_cache
+bypass_cache
+ssl_pem_cache_clean
+pem_check_interval
+pem_cache_validate
+init_pem_cache_validator
+start_pem_cache_validator
+refresh_trusted_db
+clear_pem_cache
+create_pem_cache
+invalidate_pem
+unconditionally_clear_pem_cache
+cache_pem
+start_link_dist
+ssl_pem_cache_dist
+client_session_ticket_lifetime
+client_session_ticket_store_size
+ticket_store_spec
+session_and_cert_manager_child_spec
+pem_cache_child_spec
+session_lifetime
+session_cb_init_args
+session_cb
+manager_opts
+ssl_admin_child_spec
+logger_h_common_logger_std_h_ssl_handler_restarting
+logger_std_h_ssl_handler
+asn1_certificates
+verify_data
+request_update
+exchange_keys
+certificate_list
+certificate_request_context
+status_type
+hashsign_algorithm
+algorithm
+protocol_version
+certificate_authorities
+hashsign_algorithms
+certificate_types
+hashsign
+params_bin
+ticket
+ticket_nonce
+ticket_age_add
+ticket_lifetime
+compression_method
+cipher_suite
+server_version
+compression_methods
+client_version
+'-parse_cipher_suites/1-lc$^0/1-0-'
+format_uknown_cipher_suite
+number_to_hex
+prepend_eighths_hex
+prepend_hex
+prepend_row
+prepend_first_row
+update_row
+calculate_padding
+end_row
+row_prefix
+leading
+convert_to_hex
+msg_type
+tls_record_version
+header_prefix_tls_record
+format_tls_record
+header_prefix
+server_hello_selected_version
+get_server_version
+client_hello_versions
+get_client_version
+suite_map_to_str
+suite_bin_to_map
+format_cipher
+parse_cipher_suites
+server_hello_done
+hello_request
+end_of_early_data
+server_key_exchange
+key_update
+encrypted_extensions
+client_key_exchange
+certificate
+hello_verify_request
+certificate_verify_1_3
+certificate_verify
+certificate_status
+certificate_request_1_3
+certificate_1_3
+certificate_request
+server_key_params
+new_session_ticket
+server_hello
+client_hello
+parse_handshake
+format_handshake
+build_tls_record
+own_alert_format
+alert_format
+role
+statename
+own
+alerter
+direction
+handshake
+outbound
+inbound
+stop_logger
+filter_non_ssl
+ssl_handler
+start_logger
+asn1db
+asn1_ns
+asn1rt_nif
+'PKCS-FRAME'
+'OTP-PUB-KEY'
+pubkey_os_cacerts
+pubkey_ocsp
+pubkey_crl
+pubkey_cert_records
+pubkey_cert
+pubkey_ssh
+pubkey_pbe
+pubkey_pem
+rand_cache_size
+fips_mode
+crypto_ec_curves
+ssl_connection_sup
+ssl_admin_sup
+ssl_sup
+ssl_app
+ssl_trace
+ssl_logger
+ssl_crl_hash_dir
+ssl_crl_cache_api
+ssl_crl_cache
+ssl_crl
+ssl_certificate
+ssl_pkix_db
+ssl_pem_cache
+ssl_manager
+ssl_upgrade_server_session_cache_sup
+ssl_server_session_cache_sup
+ssl_server_session_cache_db
+ssl_server_session_cache
+ssl_client_session_cache_db
+ssl_session
+tls_dist_server_sup
+tls_dist_sup
+ssl_dist_admin_sup
+ssl_dist_connection_sup
+ssl_dist_sup
+inet6_tls_dist
+inet_tls_dist
+tls_client_ticket_store
+tls_bloom_filter
+ssl_listen_tracker_sup
+ssl_alert
+ssl_srp_primes
+ssl_cipher_format
+ssl_cipher
+ssl_record
+ssl_handshake
+ssl_gen_statem
+ssl_config
+tls_dtls_connection
+ssl_session_cache_api
+dtls_server_session_cache_sup
+dtls_server_sup
+dtls_sup
+dtls_listener_sup
+dtls_packet_demux
+dtls_gen_connection
+dtls_connection_sup
+dtls_v1
+dtls_socket
+dtls_record
+dtls_handshake
+dtls_connection
+ssl_dh_groups
+tls_dyn_connection_sup
+tls_sup
+tls_server_session_ticket
+tls_server_session_ticket_sup
+tls_server_sup
+tls_sender
+tls_gen_connection
+tls_connection_sup
+tls_v1
+tls_socket
+tls_record_1_3
+tls_record
+tls_handshake_1_3
+tls_handshake
+tls_gen_connection_1_3
+tls_server_connection_1_3
+tls_client_connection_1_3
+tls_connection
+bad_descriptor
+get_fd
+ip_comm
+socket_type
+listen_loop
+listen_init
+listen_owner
+start_listen
+socket_start_failed
+mk_tuple_list
+httpd_child_spec_nolisten
+httpd_child_spec_listen
+bind_address
+could_not_consult_proplist_file
+validate_properties
+proplist_file
+httpd_config
+valid_options
+accept_timeout
+'-lookup_cookies/3-fun-0-'
+'-parse_set_cookies/2-lc$^0/1-0-'
+'-parse_set_cookies/2-lc$^1/1-1-'
+'-parse_set_cookie_attributes/1-lc$^0/1-0-'
+'-accept_cookies/3-fun-0-'
+image_of
+path_sort
+valid_cookies
+is_cookie_expired
+cookie_expires
+accept_domain
+accept_path
+accept_cookie
+accept_cookies
+skip_right_most_slash
+path_default
+domain_default
+datetime_to_gregorian_seconds
+convert_netscapecookie_date
+cookie_attributes
+parse_set_cookie_attribute
+parse_set_cookie_attributes
+substr
+parse_set_cookie
+parse_set_cookies
+chr
+is_set_cookie_valid
+add_domain
+cookie_to_string
+cookies_to_string
+merge_domain_parts
+lookup_domain_cookies
+is_hostname
+lookup_cookies
+session_cookies
+headers
+request_path
+request_host
+http_cookie
+maybe_dets_close
+failed_open_file
+cookie_db
+httpc_manager__cookie_db
+httpc_manager__session_cookie_db
+httpc_manager__handler_db
+httpc_manager__session_db
+do_print_trace
+print_trace
+do_print_inets_trace
+print_inets_trace
+format_timestamp
+closed_file
+handle_trace
+hopefully_traced
+error_to_exit
+ctp
+change_pattern
+bad_level
+make_pattern
+set_level
+stop_trace
+valid_trace_service
+do_enable
+trace_port
+enable2
+invalid_service
+'API_violation'
+'-which_sessions2/1-lc$^0/1-0-'
+'-which_sessions2/1-lc$^1/1-1-'
+'-which_sessions2/1-lc$^2/1-2-'
+'-code_change/3-fun-1-'
+'-code_change/3-fun-0-'
+'-get_manager_info/1-lc$^0/1-0-'
+'-get_handler_info/1-lc$^0/1-0-'
+'-get_handler_info/1-lc$^1/1-1-'
+'-select_session/2-lc$^0/1-0-'
+tp
+tpl
+handle_verbose
+get_unix_socket_opts
+get_socket_opts
+get_verbose
+get_port
+get_ipfamily
+get_cookies
+get_max_sessions
+get_keep_alive_timeout
+get_max_keep_alive_length
+get_max_pipeline_length
+get_pipeline_timeout
+get_https_proxy
+get_proxy
+scheme_default_port
+unexpected
+maybe_error
+uri_parse
+make_db_name
+handler_db_name
+session_cookie_db_name
+cookie_db_name
+session_db_name
+do_store_cookies
+handle_cookies
+generate_request_id
+is_inets_manager
+pipeline_or_keep_alive
+no_session
+no_connection
+host_port
+candidates
+is_idempotent
+select_session
+start_handler
+convert_options
+get_handler_info
+sort_handlers2
+sort_handlers
+sessions
+get_manager_info
+update_session_table
+upgrade_from_pre_5_8_1
+downgrade_to_pre_5_8_1
+close_db
+request_id
+option_items
+url
+open_db
+do_init
+pipeline
+keep_alive
+session_type
+which_session_info
+non_session
+bad_session
+good_session
+which_sessions_order
+which_sessions2
+session_is
+delete_session
+pos
+update_session
+session_id
+lookup_session
+session
+insert_session
+request_done
+redirect_request
+retry_or_redirect_request
+retry_request
+no_such_service
+invalid_field
+invalid_value
+headers_error
+http_request_h
+streaming_error
+field
+no_scheme
+return_map
+service_not_available
+verify_peer
+inets_not_started
+invalid_method
+invalid_request
+patch
+post
+'-services/0-lc$^0/1-0-'
+'-service_info/1-lc$^0/1-0-'
+to_lower
+'-handle_request/9-lc$^0/1-0-'
+eof_body
+'-mk_chunkify_fun/1-fun-0-'
+'-http_options/3-fun-0-'
+to_upper
+'-http_options_default/0-fun-0-'
+'-http_options_default/0-fun-1-'
+essl
+'-http_options_default/0-fun-2-'
+'-http_options_default/0-fun-3-'
+'-http_options_default/0-fun-4-'
+'-http_options_default/0-fun-5-'
+'-boolfun/0-fun-0-'
+'-request_options_defaults/0-fun-0-'
+'-request_options_defaults/0-fun-1-'
+'-request_options_defaults/0-fun-2-'
+'-request_options_defaults/0-fun-3-'
+'-request_options/3-fun-0-'
+bad_body_generator
+check_body_gen
+child_name
+child_name2info
+header_parse
+validate_headers
+header_record
+validate_unix_socket
+validate_verbose
+validate_socket_opts
+validate_port
+validate_ip
+validate_ipfamily
+inet6fb4
+validate_ipv6
+validate_cookies
+validate_max_pipeline_length
+validate_pipeline_timeout
+validate_max_keep_alive_length
+validate_keep_alive_timeout
+validate_max_sessions
+validate_https_proxy
+validate_proxy
+not_an_option
+pipeline_timeout
+max_sessions
+max_pipeline_length
+max_keep_alive_length
+keep_alive_timeout
+https_proxy
+ipfamily
+validate_ipfamily_unix_socket
+bad_options_combo
+request_options_sanity_check
+request_options
+request_options_defaults
+boolfun
+autoredirect
+proxy_auth
+url_encode
+connect_timeout
+http_options_default
+value_lazy
+http_options
+headers_as_is
+body_format
+maybe_format_body
+full_result
+return_answer
+saved_to_file
+handle_answer
+mk_chunkify_fun
+ensure_chunked_encoding
+bad_scheme
+scheme_to_atom
+add_question_mark
+bad_body
+normalize_host
+maybe_add_brackets
+userinfo
+ipv6_host_with_brackets
+unix_socket
+socket_opts
+receiver
+chunkify
+normalize_and_parse_url
+service_info
+stand_alone
+start_standalone
+stream_next
+reset_cookies
+which_sessions
+report_event
+which_cookies
+cookie_header
+default_port
+cookies
+recompose
+parse_failed
+store_cookies
+cacerts
+cacerts_get
+customize_hostname_check
+pkix_verify_hostname_match_fun
+ssl_verify_host_options
+set_option
+cancel_request
+check_request
+do_request
+profile_name
+no_profile
+stop_child
+data_dir
+child_specs
+only_session_cookies
+'-children/0-lc$^0/1-0-'
+'-children/0-lc$^1/1-1-'
+default_profile
+is_httpc
+is_httpd
+httpd_child_spec
+httpc_child_spec
+children
+get_services
+runtime_dependencies
+mod_trace
+mod_security_server
+mod_security
+mod_responsecontrol
+mod_range
+mod_log
+mod_head
+mod_get
+mod_esi
+mod_disk_log
+mod_dir
+mod_cgi
+mod_auth_server
+mod_auth_plain
+mod_auth_mnesia
+mod_auth_dets
+mod_auth
+mod_alias
+mod_actions
+httpd_sup
+httpd_socket
+httpd_script_env
+httpd_response
+httpd_request_handler
+httpd_request
+httpd_misc_sup
+httpd_manager
+httpd_logger
+httpd_log
+httpd_instance_sup
+httpd_file
+httpd_example
+httpd_esi
+httpd_custom_api
+httpd_custom
+httpd_connection_sup
+httpd_cgi
+httpd_acceptor_sup
+httpd_acceptor
+http_util
+http_transport
+http_chunk
+httpc_cookie
+httpc_sup
+httpc_response
+httpc_request
+httpc_profile_sup
+httpc_manager
+httpc_handler_sup
+httpc_handler
+httpc
+inets_lib
+inets_trace
+inets_service
+inets_app
+inets_sup
+inets
+gleam_community_colour
+tom
+snag
+glint
+gleam_otp
+gleam_httpc
+gleam_http
+gleam_community_ansi
+gap
+'day7@solve'
+'day7@day7_test'
+simplifile
+gleeunit
+gleam_stdlib
+gleam_erlang
+adglent
+'-open/1-fun-0-'
+'-fake_reader/1-fun-0-'
+'-reader/2-fun-0-'
+'-com_enc_end/1-lc$^0/1-0-'
+'-keep_ftr_keywords/0-fun-0-'
+'-keep_ftr_keywords/0-fun-1-'
+'-predef_macros/2-lc$^0/1-0-'
+'-predef_macros/2-lc$^1/1-1-'
+'-ftr_macro/1-fun-0-'
+'-ftr_macro/1-fun-1-'
+'-wait_request/1-lc$^0/1-0-'
+'-eval_if/2-fun-0-'
+'-interpret_file_attr/3-fun-0-'
+interpret_file_attr
+interpret_file_attribute
+line1
+start_loc
+add_line
+expand_var1
+expand_var
+wait_epp_reply
+epp_reply
+var_or_atom
+find_mismatch
+coalesce_strings
+stringify
+stringify1
+token_src
+comma
+classify_token_1
+classify_token
+update_fun_name_1
+update_fun_name
+expand_arg
+expand_macro
+macro_arg
+count_args
+store_arg
+macro_args
+bind_args
+'FUNCTION_NAME'
+'FUNCTION_ARITY'
+get_macro_uses
+check_uses
+expand_macro1
+expand_macros
+check_macro_arg
+macro_expansion
+macro_pars_end
+macro_pars_cont
+macro_pars
+skip_elif
+skip_else
+skip_toks
+scan_file1
+scan_endif
+scan_elif
+to_conses
+defined
+rewrite_expr
+assert_guard_expr
+eval_if
+scan_if
+scan_else
+is_macro_defined
+scan_ifndef
+scan_ifdef
+lib
+scan_include_lib1
+scan_include_lib
+expand_lib_dir
+scan_include1
+scan_include
+scan_undef
+macro_ref
+macro_uses
+scan_define_cont
+scan_define_2
+scan_define_1
+scan_define
+update_features
+scan_feature
+scan_err_warn
+'BASE_MODULE_STRING'
+'BASE_MODULE'
+scan_extends
+'MODULE_STRING'
+'MODULE'
+scan_module_1
+extends
+scan_module
+leave_prefix
+in_prefix
+include_lib
+ifndef
+ifdef
+endif
+elif
+define
+scan_toks
+leave_file
+enter_file_reply
+enter_file2
+enter_file
+wait_req_skip
+wait_req_scan
+close_file
+epp_request
+wait_request
+user_predef
+ftr_macro
+'FILE'
+'LINE'
+'MACHINE'
+'OTP_RELEASE'
+'FEATURE_AVAILABLE'
+'FEATURE_ENABLED'
+predef_macros
+keep_ftr_keywords
+source_name
+init_server
+not_typed
+normalize_typed_record_fields
+com_encoding
+com_enc_end
+com_enc
+com_space
+com_sep
+com_oding
+com_c
+com
+com_nl
+read_encoding_from_file
+fake_reader
+in_comment_only
+read_encoding
+encoding_to_string
+features
+get_features
+premature_end
+missing_parenthesis
+missing_comma
+ftr_after_prefix
+elif_after_else
+cannot_parse
+redefine_predef
+redefine
+mismatch
+illegal_function_usage
+illegal_function
+duplicated_argument
+arg_error
+'NYI'
+circular
+macro_defs
+includes
+macros
+print_stack_frame
+stack_filter
+print_error
+main
+aoc2023
+'X'
+'-predefined_functions/1-lc$^0/1-0-'
+'-predefined_functions/1-lc$^1/1-1-'
+'-predefined_functions/1-lc$^2/1-2-'
+'-predefined_functions/1-lc$^3/1-3-'
+'-get_optional_callbacks/1-lc$^0/1-0-'
+'-module_predef_func_beh_info/2-lc$^0/1-0-'
+module_predef_funcs_mod_info
+make_list
+module_predef_func_beh_info
+get_optional_callbacks
+predefined_functions
+add_predefined_functions
+pos_integer
+nonempty_string
+nonempty_maybe_improper_list
+nonempty_improper_list
+nonempty_bitstring
+nonempty_binary
+non_neg_integer
+neg_integer
+maybe_improper_list
+iolist
+identifier
+byte
+bitsize
+send_op
+list_op
+comp_op
+bool_op
+new_type_test
+stream_state
+retired_ecb_cipher_aliases
+retired_ctr_cipher_aliases
+retired_cfb_cipher_aliases
+retired_cbc_cipher_aliases
+hmac_state
+user_info
+uri
+query
+fragment
+default_scheme_port_number
+node_cookie
+cookie
+local_time_to_universal_time
+rehash
+is_module_native
+literal_value
+is_literal_list
+is_literal
+get_anno
+stream_init
+stream_encrypt
+stream_decrypt
+rand_uniform
+poly1305
+next_iv
+hmac_update
+hmac_init
+hmac_final_n
+hmac_final
+hmac
+crypto_dyn_iv_update
+crypto_dyn_iv_init
+cmac
+block_encrypt
+block_decrypt
+stop_clear
+lclose
+inc_wrap_file
+accessible_logs
+modify_line
+get_attributes
+get_attribute
+token_info
+set_attribute
+attributes_info
+hash
+get_stacktrace
+safe_relative_path
+find_src
+stop_service
+start_service
+scheme_defaults
+parse_query
+make_integer
+is_directory
+custom_clean
+check_enum
+integer_to_hexlist
+hexlist_to_integer
+ssh_hostkey_fingerprint
+ssh_encode
+ssh_decode
+safe_multi_server_call
+ssl_accept
+negotiated_next_protocol
+connection_info
+cipher_suites
+get_debug
+enableYearChange
+wxCalendarCtrl
+public_key
+os_mon_mib
+httpd_util
+httpd_conf
+httpd
+http_uri
+ftp
+erts_alloc_config
+dbg
+ct_slave
+asn1ct
+intersection1
+aoc2023_test
+is_settable
+anno_info
+simplify
+reset_simplify
+set_anno
+set_record
+set_line
+is_string
+is_filename
+is_anno2
+is_anno1
+new_location
+'aoc2023@@main'
+'-inlined-new_column/2-'
+'-inlined-incr_column/2-'
+'-options/1-fun-1-'
+'-remove_digit_separators/2-lc$^0/1-0-'
+let
+cond
+f_reserved_word
+nl_tabs
+spcs
+nl_spcs
+scan_error
+tok3
+tok2
+scan_check1
+scan_check
+comment
+scan_comment
+scan_comment_fun
+skip_comment
+skip_comment_fun
+float_end
+scan_exponent
+scan_exponent_sign
+scan_fraction
+scan_based_int
+remove_digit_separators
+with_underscore
+scan_number
+caret_char_code
+escape_char
+scan_hex_end
+scan_hex
+scan_escape
+scan_string1
+scan_string_col
+scan_string_no_col
+scan_string0
+scan_qatom
+char_error
+scan_string
+scan_char
+scan_white_space
+scan_white_space_fun
+skip_white_space
+skip_white_space_fun
+scan_tabs
+scan_tabs_fun
+scan_spcs
+scan_spcs_fun
+newline_end
+scan_nl_white_space
+scan_nl_white_space_fun
+scan_nl_tabs
+scan_nl_tabs_fun
+scan_nl_spcs
+scan_nl_spcs_fun
+scan_newline
+scan_dot
+scan_name
+scan_variable
+scan_variable_fun
+scan_atom
+scan_atom_fun
+not_character
+'&'
+'@'
+'\\'
+'^'
+'`'
+'~'
+white_space
+no_underscore
+scan1
+string1
+tokens1
+expand_opt
+reserved_word_fun
+ssa_checks
+compiler_internal
+text_fun
+return_white_spaces
+return_comments
+string_thing
+category
+erl_scan_continuation
+no_col
+illegal
+'-open_1/3-fun-0-'
+match_binary
+match_writable
+match_delayed
+compressed_one
+match_compressed
+add_unless_matched
+add_implicit_modes
+open_layer
+open_1
+reverse_pairs
+append_list
+fetch_keys
+no_source
+'-c/2-fun-0-'
+'-c/5-fun-0-'
+'-format_docs/1-fun-0-'
+'-lc/1-fun-0-'
+'-lc_batch/1-lc$^0/1-0-'
+'-i/1-fun-0-'
+'-all_procs/0-fun-0-'
+'-m/0-fun-0-'
+'-lm/0-lc$^0/1-0-'
+'-nregs/0-fun-0-'
+'-all_regs/0-lc$^0/1-0-'
+'-print_node_regs/1-fun-0-'
+'-print_node_regs/1-fun-1-'
+appcall
+parsetools
+yecc
+y
+tools
+xref
+xm
+seconds_to_daystime
+get_uptime
+uptime
+max_length
+ls_print
+ls
+pwd
+portformat
+portline
+procformat
+procline
+portinfo
+pwhereis
+pids_and_ports
+print_node_regs
+all_regs
+regs
+nregs
+split_print_exports
+print_exports
+get_compile_info
+get_compile_options
+print_md5
+print_object_file
+bi
+f_p_e
+lm
+mm
+mformat
+bt
+all_procs
+iformat
+mfa_string
+'more (y/n)? (y) '
+paged_output
+less
+ni
+l
+nc
+d
+split_def
+'@o'
+'@i'
+'@d'
+lc_batch
+output_generated
+purge_and_load
+src_suffix
+from_opt
+from_core
+from_asm
+is_from_opt
+is_outdir_opt
+ensure_outdir
+ensure_from
+report_warnings
+compile_and_load
+safe_recompile
+find_beam_1
+find_beam
+source
+find_source
+old_options
+format_docs
+render_callback
+hcb
+render_type
+ht
+unknown_format
+render
+outdir
+help
+logger_h_common_logger_std_h_default_restarting
+logger_std_h_default
+handler_busy
+cancel_repeated_filesync
+set_repeated_filesync
+check_common_config
+string_to_binary
+formatter_crashed
+try_format
+formatter_error
+caught
+do_log_to_binary
+log_to_binary
+log_handler_info
+restart_impossible
+rep_sync_tref
+repeated_filesync
+last_op
+handler_state
+ctrl_sync_count
+olp
+file_ctrl_process_not_started
+'-fix_modes/1-lc$^0/1-0-'
+'-fix_modes/1-fun-1-'
+'-file_ctrl_start/2-fun-0-'
+error_notify
+maybe_notify_error
+decompress_data
+decompress_file
+compress_data
+compress_file
+rot_file_name
+rotate_files
+rotate_file
+maybe_rotate_file
+maybe_update_compress
+maybe_remove_archives
+curr_size
+rotation
+update_rotation
+sync_dev
+write_to_dev
+could_not_create_dir_for_file
+could_not_reopen_file
+ensure_open
+ensure_file
+maybe_ensure_file
+file_ctrl_loop
+open_failed
+dev
+file_ctrl_init
+file_ctrl_call
+file_ctrl_filesync
+file_write
+file_ctrl_stop
+file_ctrl_start
+delayed_write_close
+close_log_file
+write_res
+sync_res
+last_check
+inode
+handler_name
+open_log_file
+write_failed
+config_changed
+delayed_write
+fix_modes
+no_repeat
+filesync_repeat_interval
+fix_file_opts
+merge_default_config
+normalize_config
+modes
+max_no_files
+max_no_bytes
+file_check
+compress_on_rotate
+check_h_config
+file_ctrl_pid
+filesync
+'-format/2-fun-0-'
+'-check_template/1-fun-0-'
+check_timezone
+check_offset
+check_template
+check_limit
+invalid_formatter_template
+do_check_config
+offset_to_utc
+utc_log
+get_utc_config
+utc_to_offset
+get_offset
+get_depth
+get_max_size
+default_template
+add_default_template
+add_default_config
+month
+error_logger_notice_header
+add_legacy_title
+maybe_add_legacy_header
+timestamp_to_datetimemicro
+system_time_to_rfc3339
+time_designator
+format_time
+get_first
+get_last
+chardata_to_list
+limit_depth
+reformat
+chars_limit_to_opts
+format_msg
+linearize_template
+template
+resource
+cleanup
+pong
+ping
+'-wait_nodes/2-fun-0-'
+sync_nodes_optional
+get_sync_optional_nodes
+sync_nodes_mandatory
+get_sync_mandatory_nodes
+sync_nodes_timeout
+get_sync_timeout
+get_sync_data
+check_up
+mandatory_nodes_down
+wait_nodes
+sync_nodes
+'__not_used'
+dist_ac_took_control
+go
+'-start_interval_loop/5-fun-0-'
+remove_timer
+schedule_interval_timer
+interval_loop
+start_interval_loop
+maybe_req
+req
+hms
+hours
+minutes
+now_diff
+tc
+interval
+send_interval
+apply_repeatedly
+apply_interval
+kill_after
+send_local
+apply_once
+instant
+logger_proxy_logger_proxy_restarting
+cond_lowercase
+flat_trunc
+prefixed_integer
+unprefixed_integer
+string_field
+limit_field
+limit_cdata_to_chars
+cdata_to_chars
+final
+limit_iolist_to_chars
+iolist_to_chars
+float_data
+signbit
+abs_float_f
+float_f
+fwrite_f
+float_exp
+float_man
+abs_float_e
+float_e
+fwrite_e
+column
+base
+uniconv
+control_limited
+control_small
+decr_pc
+build_limited
+not_small
+build_small
+w
+count_small
+collect_cc
+field_value
+field_width
+modifiers
+collect_cseq
+collect
+print_maps_order
+print_strings
+print_encoding
+print_pad_char
+print_precision
+print_field_width
+control_char
+pad_char
+precision
+strings
+width
+wrap
+quiet
+'-to_drop/0-lc$^0/1-0-'
+show
+show_custom_provider_faulty_add_return
+'$#erlang-history-custom-return'
+show_custom_provider_faulty_load_return
+'$#erlang-history-custom-crash'
+show_custom_provider_crash
+'$#erlang-history-size'
+show_size_warning
+'$#erlang-history-unexpected-close'
+show_unexpected_close_warning
+'$#erlang-history-unexpected-return'
+show_unexpected_warning
+'$#erlang-history-invalid-file'
+show_invalid_file_warning
+'$#erlang-history-invalid-chunk-warn'
+show_invalid_chunk_warning
+'$#erlang-history-rename-warn'
+show_rename_warning
+shell_history_drop
+to_drop
+shell_history_path
+find_path
+'$#erlang-history-disable'
+disable_history
+'$#erlang-history-upgrade'
+upgrade_version
+'$#erlang-history-resize-result'
+new_size_too_small
+change_size
+'$#erlang-history-resize-attempt'
+resize_log
+'$#erlang-history-report-repairs'
+report_repairs
+shell_history_file_bytes
+find_wrap_values
+disk_log_info
+'$#erlang-history-invalid-header'
+not_a_log_file
+invalid_index_file
+'$#erlang-history-file-error'
+'$#erlang-history-arg-mismatch'
+handle_open_error
+maybe_drop_header
+maybe_resize_log
+read_full_log
+ensure_dir
+ensure_path
+log_options
+open_log_no_size
+open_log
+init_running
+is_user
+shell_history
+history_status
+open_new_log
+repair_log
+wait_for_kernel_safe_sup
+no_such_log
+need_repair
+name_already_open
+invalid_header
+repair
+arg_mismatch
+badbytes
+recovered
+'$#group_history'
+'-write/2-fun-0-'
+chars_length
+test_limit_bitstring
+test_limit_map_assoc
+test_limit_map_body
+test_limit_map
+test_limit_tuple
+test_limit_tail
+test_limit
+limit_bitstring
+limit_map_assoc
+limit_map_body
+limit_map
+limit_tuple
+limit_tail
+limit
+binrev
+collect_line_list
+collect_line_bin
+collect_chars_list
+collect_chars1
+count_and_find_utf8
+printable_latin1_list
+deep_unicode_char_list
+deep_latin1_char_list
+write_char_as_latin1
+write_latin1_char
+write_unicode_char
+string_char
+write_string1
+unicode_as_latin1
+write_string_as_latin1
+write_latin1_string
+write_unicode_string
+unicode_as_unicode
+name_char
+name_chars
+reserved_word
+quote_atom
+write_possibly_quoted_atom
+tsub
+write_binary_body
+write_binary
+write_map_assoc
+write_map_body
+write_map
+write_ref
+write_port
+write_tuple
+write_tail
+fwrite_g
+write1
+intermediate
+maps_order
+add_modifier
+do_format_prompt
+indentation
+test_modules_loaded
+build_text
+unscan
+unscan_format
+scan
+'-edit_line1/2-lc$^0/1-0-'
+'-over_word/3-lc$^0/1-0-'
+'-chars_before/1-lc$^0/1-0-'
+'-current_line/1-fun-0-'
+cp_len
+gc_len
+current_chars
+length_after
+length_before
+chars_before
+multi_line_prompt
+erase_inp
+over_paren_auto
+over_paren
+word_char
+over_non_word
+over_word2
+over_word1
+until_quote
+over_word
+skip_up
+skip_down
+do_op
+insert_search
+kill_line
+transpose_char
+backward_kill_word
+yank
+auto_blink
+beginning_of_expression
+backward_line
+backward_word
+forward_line
+forward_word
+forward_char
+kill_word
+backward_char
+end_of_line
+beginning_of_line
+transpose_word
+yank_pop
+clear_line
+forward_delete_char
+backward_delete_char
+key_map
+ctlu
+prefix_arg
+redraw
+end_of_expression
+tab_expand_full
+tab_expand
+search_meta_left_sq_bracket
+search_meta
+new_line_finish
+new_line
+meta_o
+meta_meta
+meta_csi
+ctlx
+csi
+edit
+kill_buffer
+'-normalize_expand_fun/2-fun-0-'
+'-get_line1/5-lc$^3/1-0-'
+'-get_line1/5-lc$^4/1-1-'
+format_prompt
+prompt_bytes
+edit_password
+get_password1
+get_password_line
+search_down_stack
+search_up_stack
+save_line_buffer
+pad_stack
+get_all_lines
+get_lines
+save_line
+down_stack
+up_stack
+stack
+new_stack
+get_line_timeout
+remainder_after_nl
+get_chars_echo_off1
+get_chars_echo_off
+get_line_echo_off1
+get_line_echo_off
+more_data
+redraw_line
+search_result
+search_found
+search_cancel
+number_matches
+format_matches
+search_quit
+expand_full
+search_quit_prompt
+edit_line1
+to_graphemes
+meta_left_sq_bracket
+prompt
+erase_line
+get_line1
+interrupted
+get_chars_n_loop
+current_line
+get_chars_loop
+get_chars_line
+get_chars_n
+get_password_chars
+terminal
+normalize_expand_fun
+send_drv_reqs
+send_drv
+collect_chars
+get_tty_geometry
+exit_shell
+driver_id
+start_shell1
+whereis_shell
+unicode_state
+read_mode
+line_buffer
+convert_binaries
+bc_req
+default_output
+default_input
+execute_request
+parse_erl_form
+scan_erl_form
+scan_erl_exprs
+fread
+conv_reason
+get_password
+sig
+ebadf
+canon
+'-handle_request/2-lc$^0/1-0-'
+'-handle_request/2-lc$^1/1-1-'
+'-in_view/1-lc$^0/1-0-'
+'-in_view/1-lc$^1/1-1-'
+'-in_view/1-lc$^3/1-2-'
+'-in_view/1-lc$^2/1-3-'
+'-cols_multiline/4-lc$^0/1-0-'
+'-npwcwidthstring/1-lc$^0/1-0-'
+'-characters_to_output/1-fun-0-'
+'-characters_to_buffer/1-fun-0-'
+'-binary_to_latin1/1-lc$^0/1-0-'
+tty_read_signal
+tgoto_nif
+tgetstr_nif
+tgetflag_nif
+tgetnum_nif
+tgetent_nif
+tgoto
+tgetstr
+tgetflag
+tgetnum
+tgetent
+wcswidth
+sizeof_wchar
+wcwidth
+isprint
+tty_window_size
+tty_encoding
+tty_select
+setlocale
+tty_set
+tty_init
+tty_create
+encode
+char_to_latin1
+binary_to_latin1
+is_usascii
+to_latin1
+ansi_sgr
+ansi
+insert_buf
+characters_to_buffer
+characters_to_output
+xnfix
+is_wide
+not_printable
+npwcwidth
+next_grapheme
+npwcwidthstring
+update_geometry
+cols
+cols_multiline
+split_cols_multiline
+cols_after_cursor
+in_view
+right
+left
+move_cursor
+split_cols
+last_or_empty
+unhandled_request
+both
+redraw_prompt_pre_deleted
+writer_loop
+user_drv_writer
+reader_loop
+user_drv_reader
+winch
+cont
+reader_stop
+reader
+writer
+init_term
+standard_io_encoding
+primitive
+state_name
+should_not_have_arrived_here_but_instead_in
+'-inlined-loop_state_enter/9-'
+'-format_log_single/2-fun-0-'
+'-list_timeouts/1-lc$^0/1-0-'
+list_timeouts
+limit_client_info
+terminate_sys_debug
+bad_reply_action_from_state_function
+do_reply_then_terminate
+reply_then_terminate
+bad_return_from_callback_mode
+state_enter
+callback_mode_result
+get_callback_mode
+parse_timeout_opts_abs
+loop_done
+loop_timeouts_update
+loop_timeouts_cancel
+loop_timeouts_register
+loop_timeouts_start
+loop_timeouts
+loop_next_events
+loop_state_change
+loop_keep_state
+loop_state_transition
+loop_actions_next_event_bad
+loop_actions_next_event
+loop_actions_reply
+bad_action_from_state_function
+state_timeout
+pop_callback_module
+bad_state_enter_action_from_state_function
+push_callback_module
+change_callback_module
+loop_actions_list
+loop_actions
+bad_return_from_state_function
+repeat_state_and_data
+repeat_state
+bad_state_enter_return_from_state_function
+stop_and_reply
+loop_state_callback_result
+handle_event_function
+loop_state_callback
+loop_event
+loop_receive_result
+t0q
+loop_receive
+loop_hibernate
+wakeup_from_hibernate
+event_string
+insert_timeout
+consume
+sys_debug
+timeouts
+postponed
+bad_return_from_init
+init_result
+params
+replies
+dirty_timeout
+clean_timeout
+postpone
+'-gr_list/1-inlined-0-'
+'-init_local_shell/2-fun-0-'
+'-group_opts/1-fun-1-'
+'-group_opts/1-fun-0-'
+'-gr_list/1-fun-0-'
+gr_list
+gr_cur_index
+gr_cur_pid
+gr_del_pid
+gr_set_num
+gr_set_cur
+gr_add_cur
+gr_get_info
+gr
+gr_get_num
+gr_new_group
+gr_new
+handle_req
+mktemp
+disable_reader
+is_file
+delete_line
+delete_after_cursor
+beep
+move
+move_rel
+move_line
+delete_chars
+insert_over
+expand_with_trim
+put_expand_no_trim
+put_expand
+insert_chars_over
+insert_chars
+putc_raw
+putc
+redraw_prompt
+move_combo
+expand_below
+below
+shell_expand_location
+expand_fun
+group_opts
+list_commands
+unknown_group
+j
+r
+h
+'?'
+switch_cmd
+blink
+edit_line
+jcl
+shell_esc
+more_chars
+activate
+new_prompt
+ctrl_c
+contains_ctrl_g_or_ctrl_c
+put_chars_sync
+die
+enable_reader
+chomp
+window_size
+tty_geometry
+get_unicode_state
+get_terminal_state
+interrupt
+switch_loop
+ctrl_g
+editor_data
+editor
+handle_signal
+open_editor
+keep_state
+set_unicode_state
+keep_state_and_data
+reinit
+next_state
+init_shell
+init_local_shell
+shell_slogan
+init_remote_shell
+init_noshell
+exit_on_remote_shell_error
+handles
+init_standard_error
+old
+next_event
+isatty
+stdin
+state_functions
+callback_mode
+'tty_sl -c -e'
+current_group
+whereis_group
+start_shell
+remsh
+initial_shell
+oldshell
+nouser
+noinput
+get_user
+wait_for_user_p
+start_user
+relay1
+start_relay
+'-inlined-result/4-'
+'-receive_response/3-anonymous-0-'
+'-reqids_to_list/1-fun-0-'
+mcall_map_replies
+mcall_abandon
+mcall_result
+mcall_receive_replies
+local_call
+mcall_send_requests
+mcall_send_request
+mcall_local_call
+expired
+time_left
+call_abandon
+trim_stack_aux
+use_all
+nonexisting
+call_result
+multicast_send_requests
+'no global_groups definiton'
+illegal_function_call
+global_group_not_runnig
+not_boolean
+'-handle_call/3-inlined-1-'
+'-init/1-fun-1-'
+'-initial_group_setup/3-fun-0-'
+'-initial_group_setup/3-fun-1-'
+'-schedule_conf_changed_checks/3-fun-0-'
+'-make_group_conf/2-lc$^0/1-0-'
+'-disconnect_nodes/2-fun-0-'
+'-force_nodedown/2-fun-0-'
+force_nodedown
+disconnect_nodes
+check_exit_ggc
+check_exit_where
+check_exit_send
+not_found_ignored
+check_exit_reg
+check_exit
+safesend_nc
+not_own_group
+safesend
+send_monitor
+delete_all
+global_group_check_dispatcher
+lookup_group_conf
+alive_state_change_group_conf
+make_group_conf
+new_group_conf
+fetch_new_group_conf
+grp_tuple
+'node defined twice'
+no_name
+config_scan
+removing_node_state_of_member_node
+node_state
+conf_changed_check
+handle_erpc_response
+schedule_conf_changed_checks
+log_sync_error
+nodeup_conf_check
+continue_handle_info
+find_name
+registered_names_res
+find_name_res
+send_res
+config_ok
+illegal_message
+own_group_name
+own_group_nodes
+synced_nodes
+no_contact
+other_groups
+monitoring
+conf_check
+gconf
+names
+names_test
+whereis_test
+test3844zty
+not_agreed
+sync_error
+agreed
+no_conf
+'invalid global_groups definition'
+initial_group_setup
+global_group_check
+whereis_name_test
+send_test
+registered_names_test
+ng_add_check
+own_nodes
+do_start_link
+no_epmd
+net_sup_dynamic
+'-intersect_with/3-fun-0-'
+'-merge_with/3-fun-0-'
+'-iterator/2-fun-1-'
+'-iterator/2-fun-0-'
+try_next
+is_iterator_valid_1
+is_iterator_valid
+error_type_merge_intersect
+error_type_two_maps
+groups_from_list_2
+groups_from_list_1
+groups_from_list
+with_1
+reversed
+ordered
+filter_1
+to_list_internal
+to_list_from_iterator
+merge_with_1
+intersect_with_iterate
+intersect_with_small_map_first
+intersect_with
+intersect_combiner_v2
+intersect_combiner_v1
+intersect
+'-inlined-get_52/1-'
+'-inlined-exsss_next/1-'
+'-inlined-exsp_next/1-'
+'-inlined-exs1024_next/1-'
+'-inlined-exrop_next/1-'
+'-exs1024_jump/6-fun-0-'
+float2str
+make_float
+bc64
+normal_fi
+format_jumpconst58_value
+format_jumcons58_matches
+format_jumpconst58
+xorzip_sr
+polyjump
+splitmix64_next
+seed64
+seed58
+seed_nz
+seed64_nz
+seed58_nz
+hash58
+mwc59_seed
+mwc59_float
+mwc59_value
+mwc59_value32
+mwc59
+zero_seed
+non_integer_seed
+too_many_seed_integers
+dummy_seed
+dummy_next
+dummy_uniform
+exrop_jump
+exrop_uniform
+exrop_next
+exrop_seed
+exro928_jump_2pow20
+exro928_jump_2pow512
+exro928_jump
+exro928ss_uniform
+exro928_next_state
+exro928_next
+exro928ss_next
+exro928_seed
+exs1024_jump
+exs1024_next
+exs1024_calc
+exs1024_gen1024
+exs1024_seed
+exsp_jump
+exsplus_jump
+exsss_uniform
+exsp_uniform
+exsss_next
+exsp_next
+exsss_seed
+exsplus_seed
+exs64_next
+exs64_seed
+exsp
+exs64
+exs1024s
+exs1024
+exrop
+exro928ss
+dummy
+mk_alg
+seed_get
+seed_put
+normal_s
+jump
+bytes_r
+bytes_s
+uniform_real_s
+uniform_real
+uniform_n
+uniform_s
+exsss
+default_seed
+seed_s
+export_seed_s
+rand_seed
+export_seed
+weak_low_bits
+uniform_range
+invalid_key
+bad_node
+ok_pending
+nok_pending
+already_pending
+publish_type
+'-merge_opts/2-inlined-0-'
+'-monitor_nodes/2-fun-0-'
+invalid_option
+'-terminate/2-fun-1-'
+'-restart_distr/1-fun-0-'
+'-split_node/1-fun-0-'
+'-setopts_new_1/3-fun-0-'
+'-setopts_new_1/3-fun-1-'
+'-merge_opts/2-fun-0-'
+opts_node
+merge_opts
+dist_nodelay
+inet_dist_listen_options
+inet_dist_connect_options
+setopts_new_1
+setopts_on_listen
+send_owner_request
+setopts_new
+handle_async_response
+return_call
+getnode
+nformat
+fetch
+fmt_address
+display_info
+print_info
+restart_ticker
+all_atoms
+reply_waiting1
+reply_waiting
+multi_receive
+multi_info
+get_nodes_info
+get_node_info
+net_setuptime
+connecttime
+set_node
+proto_error
+register_error
+duplicate_name
+start_protos_listen
+wrap_creation
+next_creation
+strong_rand_bytes
+create_creation
+sync_cookie
+start_protos_no_listen
+start_protos
+hidden_argument
+dist_listen_argument
+epmd_module
+childspecs
+proto_dist
+protocol_childspecs
+valid_name_head
+validate_hostname
+create_hostpart
+hostname_not_allowed
+create_name
+init_node
+get_proto_mod
+unsupported_address_type
+select_mod
+setup_check
+net_address
+setup
+spawn_func
+bye
+aux_ticker1
+aux_ticker
+start_aux_ticker
+ticker_loop
+get_nodes_up_normal
+disconnect_ctrlr
+do_disconnect
+mk_monitor_nodes_error
+unknown_options
+bad_option_value
+check_options
+option_value_mismatch
+check_opt
+restart_distr_do
+restart_distr
+delete_connection
+up_nodedown
+up_pending_nodedown
+pending_nodedown
+delete_ctrlr
+delete_owner
+get_conn
+restarter_exit
+ticker_exit
+pending_own_exit
+dist_ctrlr_exit
+conn_own_exit
+accept_exit
+listen_exit
+do_handle_exit
+generate_node_name
+ensure_node_name
+transition_period_end
+aux_tick
+wait_pending
+is_pending
+inconsistency
+remarked
+remark
+accept_pending_nok
+accept_pending
+inserted
+registered_send
+badcookie
+unsupported_protocol
+controller
+accept_connection
+name_type
+static
+ongoing_change_to
+is_auth
+change_initiated
+tick_change
+shorter
+longer
+not_implemented
+no_link
+up_pending
+do_explicit_connect
+dist_auto_connect
+do_auto_connect_2
+barred_connection
+do_auto_connect_1
+tick
+sys_dist
+ticker
+clean_halt
+dist_listen
+make_init_opts
+nodistribution
+name_domain
+retry_request_maybe
+passive_connect_monitor
+hidden_connect_node
+connect_node
+publish
+publish_on_node
+ticktime_res
+ticktime
+get_net_ticktime
+new_ticktime
+set_net_ticktime
+verbose
+nodes_info
+node_info
+nodename
+allowed
+kernel_apply
+'$4'
+'-make_node_vsn_list/2-inlined-0-'
+'-do_ops/5-inlined-5-'
+'-do_ops/5-inlined-2-'
+'-delete_lock/2-inlined-0-'
+'-register_name/3-fun-0-'
+'-check_dupname/2-lc$^0/1-0-'
+'-unregister_name/1-fun-0-'
+'-re_register_name/3-fun-0-'
+'-register_name_external/3-fun-0-'
+'-handle_info/2-fun-0-'
+'-handle_info/2-fun-1-'
+'-delete_node_resources/2-fun-0-'
+'-check_replies/3-lc$^0/1-0-'
+'-resolved/5-fun-0-'
+'-resolved/5-fun-1-'
+'-resolved/5-fun-2-'
+'-resolved/5-fun-3-'
+'-resolved/5-fun-4-'
+'-resolved/5-fun-5-'
+'-start_resolver/2-fun-0-'
+'-do_ops/5-lc$^1/1-1-'
+'-do_ops/5-lc$^0/1-0-'
+'-do_ops/5-fun-2-'
+'-do_ops/5-lc$^3/1-3-'
+'-do_ops/5-lc$^4/1-4-'
+'-do_ops/5-fun-5-'
+'-do_ops/5-lc$^6/1-6-'
+'-do_ops/5-fun-7-'
+'-sync_others/1-fun-0-'
+'-sync_others/1-fun-1-'
+'-del_name/2-lc$^1/1-1-'
+'-del_name/2-lc$^0/1-0-'
+'-init_the_locker_fun/1-fun-0-'
+'-exclude_known/2-lc$^0/1-0-'
+'-delete_lock/2-fun-0-'
+'-pid_locks/1-fun-0-'
+'-pid_locks/1-lc$^1/1-1-'
+'-gns_volatile_multicast/5-fun-0-'
+'-node_list/1-fun-0-'
+'-make_node_vsn_list/2-fun-0-'
+'-mk_known_list/2-fun-0-'
+'-mk_known_list/2-fun-1-'
+'-add_to_known/2-fun-0-'
+'-send_again/1-fun-0-'
+'-start_sync/2-fun-0-'
+'-sync_init/2-fun-0-'
+'-sync_loop/2-fun-0-'
+'-start_the_registrar/0-fun-0-'
+allow_tuple_fun
+unexpected_message
+loop_the_registrar
+start_the_registrar
+get_own_nodes_with_errors
+get_own_nodes
+check_sync_nodes
+synced
+sync_loop
+sync_init
+start_sync
+new_node_name
+change_our_node_name
+send_again
+exsplus
+random_sleep
+get_names
+remove_lost_connection_info
+save_lost_connection_info
+get_lost_connection_info
+mk_known_list
+make_node_vsn_list
+node_list
+node_vsn
+is_node_potentially_known
+gns_volatile_multicast
+gns_volatile_send
+inform_connection_loss
+removing
+handle_nodedown
+new_resolver
+no_longer_a_pid
+handle_nodeup
+ref_is_locking
+pid_locks
+delete_lock
+pid_is_locking
+unlink_pid
+dounlink_ext
+dolink_ext
+notify_all_name
+global_name_conflict
+random_notify_name
+random_exit_name
+minmax
+resolve_it
+exchange_names
+reset_node_state
+send_cancel_connect_message
+send_cancel_connect
+kill_resolver
+cancel_locker
+split_node
+is_node_local
+add_node
+remove_node2
+remove_node
+find_node_tag2
+find_node_tag
+the_boss
+delete_global_lock
+call_fun
+wait_cancel_lock
+lock_is_set_wait_cancel
+lock_is_set_true_received
+exclude_known
+random_element
+update_locker_known
+locker_failed
+locker_succeeded
+lock_rejected
+locker_trace
+delete_nonode
+lock_nodes_safely
+locker_lock_id
+send_lock_set
+select_node
+get_locker
+get_state_reply
+remove_from_known
+do_trace
+no_fun
+him
+the_locker_message_wait_cancel
+the_locker_message
+loop_the_locker
+init_the_locker_fun
+start_the_locker
+delete_global_name
+delete_global_name2
+delete_global_name_keep_pid
+del_name
+extra_info
+lock_still_set
+insert_global_name
+sync_other
+global_connect_retries
+sync_others
+do_ops
+rem_lock
+remove_lock
+handle_del_lock
+is_lock_set
+is_global_lock_set
+ins_lock
+insert_lock
+can_set_lock
+handle_set_lock
+ins_name_ext
+ins_name
+resend_pre_connect
+resolver
+start_resolver
+do_whereis
+cancel_resolved_locker
+ops
+added
+add_to_known
+lock
+resolve
+wait_lock
+lock_id
+restart_connect
+pre_connect
+his_the_locker
+locker
+prot_vsn
+check_replies
+local_lock_check
+set_lock_on_nodes
+lock_on_known_nodes
+set_lock_known
+send_high_level_trace
+wait_high_level_trace
+delete_node_resources
+delete_node_resource_info
+save_node_resource_info
+nodes_changed
+high_level_trace
+extra_nodedown
+registrar_died
+locker_died
+not_connected
+group_configured
+trace_message
+group_nodeup
+group_nodedown
+cancel_connect
+init_connect_ack
+ignore_node
+remove_connection
+async_disconnect
+participant
+lost_connection
+in_sync
+async_del_name
+async_del_lock
+lock_is_set
+init_connect
+sync_tag_his
+exit_resolver
+lock_set
+exchange_ops
+new_nodes
+save_ops
+sync_tag_my
+resolved
+high_level_trace_stop
+high_level_trace_start
+high_level_trace_get
+get_synced
+get_protocol_version
+get_names_ext
+get_known
+trans_all_known
+register_ext
+creation_extension
+uniform
+seed
+conf
+invalid_parameter_value
+connect_all
+no_trace
+global_node_resources
+global_lost_connections
+global_pid_ids
+global_names_ext
+global_locks
+aborted
+trans
+del_lock
+set_lock
+unregister_name_external
+register_name_external
+global_names
+registered_names
+re_register_name
+global_multi_name_action
+global_pid_names
+check_dupname
+registrar
+execute_cast
+'-handle_cast/2-fun-0-'
+'-proxy_user/0-fun-0-'
+'-start_nodes_observer/0-fun-0-'
+rex_nodes_observer
+'-start_nodes_observer/0-fun-1-'
+'-do_srv_call/3-fun-0-'
+'-eval_everywhere/4-fun-0-'
+'-parallel_eval/1-lc$^0/1-0-'
+'-cnode_call_group_leader_start/1-fun-0-'
+cnode_call_group_leader_start
+cnode_call_group_leader_state
+cnode_call_group_leader_init
+rex_stdout
+cnode_call_group_leader_put_chars
+cnode_call_group_leader_multi_request
+cnode_call_group_leader_request
+cnode_call_group_leader_loop
+pinfo
+build_args
+pmap
+map_nodes
+parallel_eval
+no_response
+response
+nb_yield
+async_call
+rec_nodes
+multi_server_call
+rpcmulticallify
+multicall
+send_nodes
+eval_everywhere
+rpc_check
+rpc_check_t
+do_srv_call
+signal
+exception
+rpcify_exception
+nodes_observer_loop
+start_nodes_observer
+proxy_user_flush
+proxy_user_loop
+rex_proxy_user
+proxy_user
+set_group_leader
+trim_stack
+is_arg_error
+execute_call
+features_reply
+features_request
+nonexisting_name
+sbcast
+send_stdout_to_caller
+block_call
+nodes_observer
+'-services/2-fun-0-'
+'-rpc/2-fun-0-'
+'-hosts/2-fun-0-'
+'-resolv/2-fun-0-'
+'-host_conf_linux/2-fun-0-'
+'-host_conf_freebsd/2-fun-0-'
+'-host_conf_bsdos/2-fun-0-'
+'-nsswitch_conf/2-fun-0-'
+'-protocols/2-fun-0-'
+'-netmasks/2-fun-0-'
+'-networks/2-fun-0-'
+split_mid_comma
+split_comma
+split_end
+split_mid
+dig_to_hex
+dig_to_dec
+separate
+ntoa_done
+hex_to_int
+dec16
+hex
+ipv6_addr_done
+ipv6_addr_scope
+ipv6_addr
+ipv4_field
+ipv4strict_addr
+strip0
+is_dom2
+is_dom_ldh
+is_dom1
+port_proto
+parse_cs
+parse_fd
+networks
+netmasks
+delete_options
+noname
+services
+eafnosupport
+'-setopts/2-lc$^0/1-0-'
+'-getopts/2-lc$^0/1-0-'
+'-getifaddrs/1-fun-0-'
+'-getifaddrs/0-fun-0-'
+'-getiflist/1-fun-0-'
+'-getiflist/0-fun-0-'
+'-ifget/2-fun-0-'
+'-ifget/2-fun-1-'
+'-ifset/2-fun-0-'
+'-ifset/2-fun-1-'
+'-getif/0-fun-0-'
+'-getif/1-fun-0-'
+'-getif/1-fun-1-'
+'-gethostname/0-fun-0-'
+'-bindx/3-lc$^1/1-1-'
+'-ii/3-fun-0-'
+'-ii/3-lc$^1/1-0-'
+'-ii/3-fun-2-'
+'-info_lines/3-lc$^0/1-0-'
+'-i_line/3-lc$^0/1-0-'
+'-h_line/1-lc$^0/1-0-'
+'-port_list/1-fun-0-'
+ensure_sockaddr
+lock_socket
+udp_sync_input
+tcp_sync_input
+tcp_controlling_process
+tcp_close
+exbadseq
+exbadport
+port_list
+sctp_sockets
+udp_sockets
+tcp_sockets
+fmt_port
+enotconn
+fmt_addr
+fmt_status3
+fmt_status2
+fmt_compat_status_merge
+fmt_compat_status
+fmt_status
+which_packet_type
+sent
+local_address
+foreign_address
+upper
+hh_field
+h_field
+h_line
+i_line
+info_lines
+smax
+ii
+change_bindx_0_port
+set_bindx_port
+open_setopts
+open_opts
+open_fd
+gethostbyaddr_tm_native
+gethostbyaddr_self
+gethostbyname_string
+gethostbyname_self
+gethostbyname_tm_native
+formerr
+wins
+getaddrs_tm
+binary2filename
+filename2binary
+add_opt
+sctp_opt_ifaddr
+sctp_opt
+sctp_opts
+sctp_options
+gen_udp_module
+udp_module_1
+udp_add
+udp_opt
+gen_tcp_module
+tcp_module_1
+list_add
+backlog
+list_opt
+listen_opts
+inet_default_listen_options
+listen_options
+con_add
+ifaddr
+con_opt
+connect_opts
+inet_default_connect_options
+connect_options
+stats
+ipv4_mapped_ipv6_address
+strict_address
+parse_strict_address
+ipv6strict_address
+parse_ipv6strict_address
+ipv4strict_address
+parse_ipv4strict_address
+ipv6_address
+parse_ipv6_address
+parse_ipv4_address
+getaddrs
+getaddr_tm
+getll
+is_ip_address
+is_ipv6_address
+is_ipv4_address
+pi_replace
+states
+socket_to_list
+gethostbyaddr_tm
+nostring
+gethostbyname_tm
+popf
+pushf
+withsocket
+getif
+udp_closed
+optuniquify
+udp_controlling_process
+udp_close
+open_bind
+udp_opts
+translate_ip
+getaddr
+getserv
+bad_encoding
+on
+'-init/0-inlined-0-'
+'-set_hostname/1-fun-0-'
+'-load_hosts/2-fun-0-'
+'-win32_load1/3-fun-0-'
+'-win32_load1/3-fun-1-'
+scan_inetrc
+parse_inetrc_skip_line
+parse_inetrc
+inet_warnings
+try_get_rc
+inetrc
+read_inetrc
+valid_type
+extract_cfg_files1
+extract_cfg_files
+read_rc
+win32_get_strings
+split_line
+win32_split_line
+win32_load1
+change_key
+nt
+win32_load_from_registry
+load_hosts
+load_resolv
+set_search_dom
+inet_dns_when_nis
+add_dns_lookup
+host_conf_bsdos
+host_conf_freebsd
+host_conf_linux
+nsswitch_conf
+sunos
+netbsd
+freebsd
+'bsd/os'
+do_load_resolv
+nonames
+shortnames
+sname
+erl_dist_mode
+gethostbyname
+'-add_hosts/1-fun-0-'
+'-res_cache_answer/1-lc$^0/1-0-'
+'-res_filter_rrs/2-lc$^0/1-0-'
+'-res_lookup_fun/1-lc$^0/1-0-'
+'-res_lookup_fun/1-fun-1-'
+'-handle_call/3-lc$^2/1-0-'
+chars
+'-do_add_host/5-lc$^0/1-0-'
+'-do_add_host/5-fun-1-'
+'-do_add_host/5-lc$^3/1-1-'
+'-do_add_host/5-lc$^2/1-2-'
+'-do_del_host/3-lc$^0/1-0-'
+'-add_ip_bynms/5-fun-0-'
+'-del_ip_bynms/4-fun-0-'
+'-load_hosts_list/3-lc$^0/1-0-'
+'-load_hosts_list/3-lc$^1/1-1-'
+'-rc_opt_req/1-lc$^0/1-0-'
+'-do_add_rrs/4-lc$^1/1-1-'
+'-do_add_rrs/4-lc$^0/1-0-'
+'-lookup_cache_data/2-lc$^0/1-0-'
+'-match_rr/6-lc$^0/1-0-'
+'-match_rr/6-lc$^1/1-1-'
+'-lists_subtract/2-fun-0-'
+handle_take_socket_type
+handle_put_socket_type
+lists_nth
+lists_keydelete
+lists_subtract
+lists_delete
+delete_oldest
+alloc_entry
+delete_expired
+stop_timer
+init_timer
+stripdot_1
+stripdot
+eq_domains
+rfc_4343_lc
+tolower
+match_rr
+lookup_cache_data
+times
+do_add_rrs
+is_reqname
+is_res_set
+set_socks_methods
+rc_reqname
+clear_search
+clear_ns
+replace_search
+replace_ns
+rc_opt_req
+handle_calls
+handle_rc_list
+ets_clean_map_keys
+load_hosts_list_byname
+load_hosts_list_byaddr
+load_hosts_list
+inet_family
+del_ip_bynms
+add_ip_bynms
+do_del_host
+do_add_host
+handle_update_file
+handle_set_file
+refresh_timeout
+set_resolv_conf_tm
+set_hosts_file_tm
+load_hosts_file
+res_hosts_file_info
+res_resolv_conf_info
+listreplace
+reset_db
+inet_sockets
+inet_hosts_file_byname
+inet_hosts_byname
+inet_cache
+inet_backend
+take_socket_type
+put_socket_type
+lookup_socket
+unregister_socket
+nxdomain
+ent_gethostbyaddr
+res_gethostbyaddr
+ptr
+gethostbyaddr
+cname
+resolve_cnames
+res_lookup_fun
+res_filter_rrs
+hostent
+aaaa
+make_hostent
+dns_rec
+res_hostent_by_domain
+hostent_by_domain
+get_searchlist
+getbysearch
+dots
+getbyname
+add_rrs
+res_cache_answer
+del_rr
+dns_rr
+add_rr
+db_get
+res_update
+res_hosts_file_tm
+res_update_hosts
+res_resolv_conf_tm
+res_update_conf
+hostname
+noproxy
+methods
+socks_option
+res_check_search
+res_check_ns
+res_check_list
+res_check_option_absfile
+visible_string
+res_check_option
+res_dnssec_ok
+res_recurse
+resolv_conf_name
+nameserver
+hosts_file_name
+alt_nameserver
+res_optname
+res_set
+res_id
+next_id
+res_option
+get_rc_hosts
+get_rc_ns
+get_rc_noproxy
+res_alt_ns
+cache_refresh_interval
+res_res_dnssec_ok
+res_domain
+res_edns
+inet_hosts_byaddr
+res_hosts_file
+res_inet6
+res_lookup
+res_ns
+res_resolv_conf
+res_retry
+res_search
+res_servfail_retry_timeout
+res_timeout
+res_udp_payload_size
+res_usevc
+socks5_server
+socks5_port
+socks5_noproxy
+socks5_methods
+cache_size
+cache_refresh
+get_rc
+valid_lookup
+dns
+nis
+nisplus
+yp
+translate_lookup
+add_rc_list
+add_rc_bin
+add_rc
+sctp_module
+set_sctp_module
+udp_module
+set_udp_module
+tcp_module
+set_tcp_module
+set_cache_refresh
+set_cache_size
+del_socks_noproxy
+add_socks_noproxy
+del_socks_methods
+add_socks_methods
+set_socks_port
+set_socks_server
+inet_hosts_file_byaddr
+get_hosts_file
+hosts_file
+set_hosts_file
+resolv_conf
+set_resolv_conf
+dnssec_ok
+set_dnssec_ok
+udp_payload_size
+set_udp_payload_size
+edns
+set_edns
+usevc
+set_usevc
+set_inet6
+servfail_retry_timeout
+set_servfail_retry_timeout
+retry
+set_retry
+set_timeout
+recurse
+set_recurse
+set_lookup
+set_domain
+set_hostname
+del_search
+ins_search
+add_search
+del_alt_ns
+ins_alt_ns
+alt_nameservers
+add_alt_ns
+del_ns
+ins
+ins_ns
+nameservers
+listop
+add_ns
+clear_hosts
+del_host
+add_host
+add_hosts
+resolv
+add_resolv
+badcall
+format_child_log_error_single
+format_child_log_progress_single
+terminate_pid
+no_stderror
+standard_error_sup
+'-start_port/1-fun-0-'
+'-do_setopts/1-fun-0-'
+'-wrap_characters_to_binary/3-lc$^0/1-0-'
+wrap_characters_to_binary
+send_port
+put_port
+io_requests
+rows
+columns
+get_geometry
+do_io_request
+get_fd_geometry
+onlcr
+server
+start_port
+beam_flatten
+beam_ssa_recv
+beam_types
+beam_listing
+v3_core
+beam_ssa_lint
+core_scan
+sys_messages
+beam_ssa_check
+beam_ssa_codegen
+beam_ssa_dead
+beam_a
+beam_call_types
+sys_core_prepare
+beam_validator
+beam_bounds
+beam_digraph
+beam_ssa_type
+beam_ssa_bc_size
+core_lint
+beam_block
+core_pp
+beam_ssa_bsm
+beam_ssa_throw
+beam_ssa_alias
+beam_kernel_to_ssa
+beam_dict
+sys_pre_attributes
+core_lib
+cerl_trees
+sys_core_fold
+beam_ssa_opt
+v3_kernel
+sys_core_fold_lists
+beam_ssa_private_append
+erl_bifs
+beam_ssa_pre_codegen
+beam_ssa_share
+beam_ssa_bool
+rec_env
+beam_clean
+beam_ssa
+sys_core_alias
+cerl_clauses
+cerl_inline
+sys_core_bsm
+sys_core_inline
+cerl
+beam_utils
+beam_opcodes
+beam_jump
+v3_kernel_pp
+beam_ssa_pp
+beam_trim
+core_parse
+beam_disasm
+beam_z
+beam_asm
+rejected_ftr
+permanent_ftr
+until
+while
+experimental_ftr_2
+ifn
+experimental_ftr_1
+unless
+approved_ftr_2
+approved_ftr_1
+init_done
+maybe_expr
+'-init_features/0-inlined-3-'
+'-init_features/0-inlined-2-'
+'-configurable/0-lc$^0/1-0-'
+'-long/1-lc$^0/1-0-'
+'-long/1-lc$^1/1-1-'
+'-history/2-fun-0-'
+'-history/2-fun-1-'
+'-nqTeX/1-fun-0-'
+'-keyword_fun/2-fun-0-'
+'-add_feature_fun/2-fun-0-'
+'-remove_feature_fun/2-fun-0-'
+'-feature_error/1-fun-0-'
+'-feature_error/1-fun-1-'
+'-format_error/1-F/1-0-'
+'-init_features/0-fun-0-'
+'enable-feature'
+'disable-feature'
+'-init_features/0-fun-1-'
+'-init_features/0-fun-2-'
+'-init_features/0-fun-3-'
+'-init_features/0-fun-4-'
+'-init_features/0-fun-5-'
+'-collect_features/1-lc$^0/1-0-'
+test_features
+add_ftr
+feature
+collect_features
+features_in
+set_keywords
+enabled_features
+ensure_init
+init_specs
+init_features
+incorrect_features
+feature_error
+configurable_features
+remove_features_fun
+add_features_fun
+remove_feature_fun
+add_feature_fun
+invalid_features
+not_configurable
+enable
+disable
+keyword_fun
+invalid_feature
+adjust
+nqTeX
+rejected
+experimental
+approved
+history
+long
+is_configurable
+is_valid
+feature_specs
+'-characters_to_binary_int/3-fun-0-'
+'-i_trans/1-fun-0-'
+'-i_trans_chk/1-fun-0-'
+'-o_trans/1-fun-7-'
+'-o_trans/1-fun-8-'
+'-o_trans/1-fun-3-'
+'-o_trans/1-fun-4-'
+'-o_trans/1-fun-1-'
+'-o_trans/1-fun-2-'
+'-o_trans/1-fun-0-'
+'-o_trans/1-fun-9-'
+'-o_trans/1-fun-10-'
+'-o_trans/1-fun-5-'
+'-o_trans/1-fun-6-'
+error_type
+do_i_utf32_little
+do_i_utf32_big
+do_i_utf16_little
+do_i_utf16_big
+do_i_utf8
+do_i_utf32_little_chk
+do_i_utf32_big_chk
+do_i_utf16_little_chk
+do_i_utf16_big_chk
+do_i_utf8_chk
+do_o_binary2
+do_o_binary
+o_trans
+i_trans_chk
+i_trans
+ml_map
+fake_stacktrace
+do_characters_to_list
+prepend_row_to_acc
+acc_to_binary
+characters_to_nfkc_binary
+nfkc
+characters_to_nfkc_list
+characters_to_nfc_binary
+nfc
+characters_to_nfkd_binary
+nfkd
+characters_to_nfkd_list
+characters_to_nfd_binary
+nfd
+characters_to_nfd_list
+encoding_to_bom
+bom_to_encoding
+no_conversion_needed
+'-getenv/0-lc$^0/1-0-'
+flush_exit
+flush_until_down
+validate3
+validate2
+validate1
+mk_cmd
+get_option
+max_size
+do_cmd
+cmd
+extensions
+reverse_element
+split_path
+can_be_full_name
+verify_executable
+find_executable1
+iterator_1_from
+iterator_1
+take_1
+take_any
+from_orddict
+enter
+update_1
+get_1
+is_defined_1
+lookup_1
+fold_1
+is_set
+is_subset_2
+is_subset_1
+is_subset
+difference_2
+difference_1
+difference
+is_disjoint_1
+is_disjoint
+intersection_list
+intersection_2
+intersection_1
+union_list
+balance_revlist_1
+balance_revlist
+push
+union_2
+union_1
+mk_set
+iterator_from
+to_list_1
+largest_1
+largest
+take_largest1
+take_largest
+smallest_1
+smallest
+take_smallest1
+take_smallest
+delete_1
+delete_any
+del_element
+from_ordset
+balance_list_1
+balance_list
+balance
+key_exists
+insert_1
+is_member_1
+singleton
+nonono
+'-encode_hex1/2-lbc$^0/2-0-'
+'-decode_hex1/1-lbc$^0/2-0-'
+decode_hex2
+decode_hex1
+decode_hex
+encode_hex2
+encode_hex1
+lowercase
+uppercase
+encode_hex
+insert_replaced
+get_opts_replace
+splitat
+do_insert
+do_replace
+bin_to_list
+no_debug_info
+'-md5/1-lc$^0/1-0-'
+'-diff_directories/2-fun-0-'
+'-beam_files/1-lc$^0/1-0-'
+'-strip_fils/2-lc$^0/1-0-'
+'-read_all_but_useless_chunks/1-lc$^0/1-0-'
+'-read_all_chunks/1-lc$^0/1-0-'
+'-scan_beam/4-lc$^0/1-0-'
+'-attributes/2-fun-0-'
+'-attributes/2-lc$^1/1-0-'
+'-anno_from_forms/1-lc$^0/1-0-'
+'-try_load_crypto_fun/1-fun-0-'
+'-try_load_crypto_fun/1-fun-1-'
+alt_lookup_key
+try_load_crypto_fun
+f_p_s
+crypto_key_fun_from_file_1
+crypto_key_fun_from_file
+call_crypto_server_1
+beam_lib__crypto_key_server
+call_crypto_server
+get_crypto_key
+start_crypto
+restore_typed_record_fields
+anno_from_forms
+abstract_v2
+abstract_v1
+old_anno_from_term
+crypto_one_time
+crypto
+des_ede3_cbc
+decrypt_chunk
+mandatory_chunks
+md5_chunks
+significant_chunks
+assert_directory
+maybe_uncompress
+beam_filename
+read_all
+bb
+extract_atom
+extract_atoms
+ensure_atoms
+symbol
+symbols1
+symbols
+locals
+labeled_locals
+labeled_exports
+indexed_imports
+imports
+chunk_name_to_id
+compile_info
+chunk_to_data
+erlang_v1
+debug_info_v1
+atom_chunk
+abst_chunk
+chunks_to_data
+del_chunk
+get_data
+get_atom_data
+scan_beam2
+scan_beam1
+scan_beam
+atoms
+check_chunks
+beam_symbols
+allow_missing_chunks
+read_chunk_data
+read_all_chunks
+filter_funtab_1
+filter_funtab
+filter_significant_chunks
+read_significant_chunks
+is_useless_chunk
+read_all_but_useless_chunks
+build_chunks
+strip_file
+strip_fils
+strip_rel
+cmp_lists
+cmp_files
+wildcard
+beam_files
+compare_files
+restriction
+image
+symmetric_partition
+compare_dirs
+diff_only
+diff_directories
+read_info
+build_module
+des3_cbc
+make_crypto_key
+clear_crypto_key_fun
+crypto_key_fun
+exists
+different_chunks
+not_a_directory
+not_a_beam_file
+chunks_different
+unknown_chunk
+modules_different
+missing_backend
+key_missing_or_invalid
+invalid_chunk
+invalid_beam_file
+chunk_too_big
+strip_release
+strip_files
+strip
+diff_dirs
+cmp_dirs
+cmp
+all_chunks
+ignored
+cannot_detach_with_standard_io
+'-init/1-fun-0-'
+'-verify_args/1-lc$^0/1-0-'
+'-verify_args/1-lc$^1/1-1-'
+'-encode_port_data/1-lbc$^0/2-0-'
+'-maybe_listen/1-lc$^0/1-0-'
+'-maybe_listen/1-lc$^1/1-1-'
+ntoa
+'-command_line/2-lc$^0/1-0-'
+'-parse_args/1-lc$^0/1-0-'
+'-start_peer_channel_handler/0-fun-3-'
+'-start_peer_channel_handler/0-lc$^5/1-2-'
+'-start_peer_channel_handler/0-fun-4-'
+parse_address
+'-start_peer_channel_handler/0-lc$^0/1-0-'
+'-start_peer_channel_handler/0-fun-1-'
+'-start_peer_channel_handler/0-lc$^2/1-1-'
+'-handle_peer_alternative/3-fun-0-'
+'-do_call/4-fun-0-'
+handle_port_alternative
+handle_peer_alternative
+io_server_loop
+loop_connect
+tcp_init
+io_server
+origin_link
+relay
+peer_detached
+start_peer_channel_handler
+peer_channel_terminated
+loop_supervision
+peer_supervision_connect_timeout
+peer_sup_connect_channel
+peer_channel_connect_timeout
+peer_sup_state
+channel_connect
+peer_supervision
+start_orphan_supervision
+init_supervision
+start_supervision
+notify_started
+default_erts
+unquote
+parse_args
+maybe_otp_test_suite
+find_executable
+encode_to_string
+command_line
+longnames
+name_arg
+prefer_localhost
+maybe_listen
+boot_complete
+handle_port_binary
+decode_port_data
+encode_port_data
+peer_to_origin
+origin_to_peer
+forward_request
+handle_alternative_data
+peer_down
+maybe_stop
+node_name
+boot_failed
+wait_boot
+make_notify_ref
+invalid_arg
+not_alive
+detached
+char_list
+exec
+verify_args
+force_disconnect_node
+wait_disconnected
+deadline
+register_socket
+get_node
+cover
+booting
+peer_state
+connection
+post_process_args
+get_state
+random_name
+'-compact/1-lc$^0/1-0-'
+'-substitute_aliases/2-lc$^0/1-0-'
+'-substitute_negations/2-lc$^0/1-0-'
+'-expand/2-lc$^0/1-0-'
+'-split/2-lc$^0/1-0-'
+'-split/2-lc$^1/1-1-'
+'-to_map/1-fun-0-'
+from_map
+to_map
+negations
+aliases
+apply_stages
+key_uniq_1
+key_uniq
+expand_3
+expand_2
+expand_1
+expand_0
+expand
+substitute_negations_1
+substitute_aliases_1
+substitute_aliases
+get_bool
+append_values
+get_all_values
+lookup_all
+property
+lait
+liat
+daeh
+snoc
+tail
+delete_with_rear
+delete_with_front
+delete_with_r
+delete_with
+delete_rear
+delete_front
+delete_r
+filtermap_r
+filter_r
+filter_f
+split_r1_to_f2
+split_f1_to_r2
+drop_r
+peek_r
+get_r
+out_r
+in_r
+is_empty
+is_queue
+'-set_restart_flag/1-fun-0-'
+reply_return
+noreply_return
+'$no_default_return'
+try_callback_call
+maybe_notify_mode_change
+set_mode
+overload_levels_ok
+flush_load
+kill_if_choked
+limit_burst
+check_load
+reset_restart_flag
+set_restart_flag
+overload_kill_qlen
+overload_kill_mem_size
+overload_kill_enable
+burst_limit_window_time
+burst_limit_max_count
+do_check_opts
+invalid_olp_levels
+invalid_olp_config
+check_opts
+do_load
+apply_after
+overload_kill_restart_after
+reset_state
+mode_ref
+last_qlen
+last_load_ts
+cb_state
+burst_win_ts
+burst_msg_count
+olp_ref
+result
+restart_failed
+get_opts
+'$olp_load'
+log_failed
+try_log
+flushed
+drop
+mode_change
+overloaded
+handle_load
+get_ref
+system_logger
+sync_mode_qlen
+flush_qlen
+drop_mode_qlen
+burst_limit_enable
+get_default_opts
+child_spec
+no_state
+get_pid
+'-limit_report/2-lc$^0/1-0-'
+'-format_log_multi/2-fun-0-'
+'-format_log_state/2-lc$^0/1-0-'
+format_log_state
+format_client_log
+format_client_log_single
+format_server_log_single
+limit_client_report
+dead
+client_stacktrace
+client_info
+catch_result
+handle_common_reply
+try_terminate
+try_handle_call
+try_handle_cast
+try_handle_info
+handle_continue
+try_handle_continue
+try_dispatch
+do_send
+create_callback_cache
+callback_cache
+mc_cancel_timer
+mc_recv_tmo
+mc_recv
+mc_send
+multi_call
+do_abcast
+abcast
+'$gen_cast'
+cast_msg
+do_cast
+'$gen_call'
+'-inlined-level_to_int/1-'
+'-set/3-lc$^0/1-0-'
+'-set_module_level/2-lc$^0/1-0-'
+'-unset_module_level/1-lc$^0/1-1-'
+'-unset_module_level/1-lc$^1/1-0-'
+'-get_module_level/0-lc$^0/1-0-'
+'$handler_config$'
+'$primary_config$'
+'$proxy_config$'
+table_key
+int_to_level
+less_or_equal_level
+on_match
+filter_remote_gl
+filter_progress
+filter_level
+filter_domain
+neq
+lteq
+gteq
+not_equal
+equal
+simple_handler_process_dead
+handler_process_name_already_exists
+'-adding_handler/1-fun-0-'
+'-replay_buffer/1-F/1-0-'
+'-do_log/2-fun-0-'
+'-display/1-lc$^0/1-0-'
+'-display_report/1-fun-0-'
+'-display_report/1-fun-1-'
+display_report
+display_date
+display_log
+drop_msg
+replay_buffer
+dropped
+buffer_size
+update_buffer
+rich
+no_log_file
+allready_have_logfile
+'-tty/1-fun-0-'
+error_logger_format_depth
+error_logger_tty_true
+error_logger_tty_false
+logfile
+which_report_handlers
+delete_report_handler
+add_report_handler
+scan_format
+report_to_format
+maybe_add_domain
+get_report_cb
+std_warning
+fix_warning_type
+fix_warning_tag
+maybe_map_warnings
+register_handler
+stop_error
+report_problem
+send_shutdown
+check_callback
+check_system
+get_heart_cmd
+send_heart_cmd
+send_heart_beat
+do_cycle_port_program
+check_schedulers
+validate_options
+no_reboot_shutdown
+port_terminated
+bad_cmd
+bad_options
+wait_ack
+bad_heart_flag
+check_start_heart
+get_heart_timeouts
+port_problem
+start_portprogram
+wait
+cycle
+get_options
+set_options
+clear_callback
+get_callback
+set_callback
+clear_cmd
+get_cmd
+set_cmd
+no_heart
+wait_for_init_ack
+bad_name
+bad_directory
+'-try_finish_module_2/5-inlined-0-'
+'-start_link/1-fun-0-'
+'-init/3-fun-0-'
+'-init/3-lc$^1/1-0-'
+'-get_user_lib_dirs_1/1-lc$^0/1-0-'
+'-handle_call/3-lc$^1/1-1-'
+'-handle_call/3-lc$^0/1-0-'
+'-choose_bundles/1-lc$^0/1-0-'
+'-choose_bundles/1-lc$^1/1-1-'
+'-vsn_to_num/1-lc$^0/1-0-'
+'-is_numstr/1-fun-0-'
+'-cache_path/1-lc$^0/1-0-'
+'-exclude/2-lc$^0/1-0-'
+'-set_path/5-lc$^0/1-0-'
+'-try_archive_subdirs/3-fun-0-'
+'-stick_dir/3-fun-1-'
+'-stick_dir/3-fun-0-'
+'-try_finish_module/6-fun-1-'
+'-try_finish_module/6-fun-0-'
+on_load_failure
+'-try_finish_module_2/5-fun-0-'
+'-finish_loading/3-fun-3-'
+'-finish_loading/3-fun-2-'
+'-finish_loading/3-fun-1-'
+'-finish_loading/3-fun-0-'
+'-finish_loading_ensure/2-lc$^0/1-0-'
+pending_on_load
+'-abort_if_pending_on_load/2-lc$^0/1-0-'
+sticky_directory
+'-abort_if_sticky/2-lc$^0/1-0-'
+'-do_finish_loading/2-lc$^0/1-0-'
+'-do_finish_loading/2-lc$^1/1-2-'
+'-do_finish_loading/2-lc$^2/1-1-'
+'-handle_on_load/5-fun-0-'
+'-finish_on_load/3-lc$^0/1-0-'
+'-finish_on_load_report/2-fun-0-'
+finish_on_load_report
+finish_on_load_2
+finish_on_load_1
+finish_on_load
+handle_pending_on_load_1
+handle_pending_on_load
+handle_on_load
+do_finish_loading
+abort_if_sticky
+abort_if_pending_on_load
+finish_loading_ensure
+with_cache
+mod_to_bin
+try_finish_module_2
+try_finish_module_1
+try_finish_module
+get_mods
+sticky
+'bad request to code'
+priv
+do_dir
+lookup_name
+delete_name_dir
+delete_name
+replace_name
+del_ebin_1
+del_ebin
+check_pars
+replace_path1
+insert_old_shadowed
+del_path1
+try_archive_subdirs
+archive_subdirs
+do_insert_name
+insert_name
+insert_dir
+init_namedb
+code_names
+create_namedb
+maybe_update
+do_add
+do_check_path
+check_path
+split_base
+discard_after_hyphen
+get_name_from_splitted
+get_name
+get_arg
+add_pa_pz
+merge_path1
+merge_path
+strip_path
+exclude_pa_pz
+cache_boot_paths
+do_cache_path
+cache_path
+'-zip/3-lc$^0/1-1-'
+'-zip/3-lc$^1/1-0-'
+add_loader_path
+try_ebin_dirs
+'-zip3/4-lc$^0/1-2-'
+'-zip3/4-lc$^1/1-1-'
+'-zip3/4-lc$^2/1-0-'
+choose
+'-zipwith/4-lc$^0/1-1-'
+'-zipwith/4-lc$^1/1-0-'
+split2
+'-zipwith3/5-lc$^0/1-2-'
+split1
+'-zipwith3/5-lc$^1/1-1-'
+'-zipwith3/5-lc$^2/1-0-'
+'-filter/2-lc$^0/1-0-'
+is_numstr
+is_vsn
+vsn_to_num
+create_bundle
+uniq_2
+choose_bundles
+uniq_1
+rufmerge2_2
+rufmerge2_1
+ufmerge2_2
+ufmerge2_1
+rufmergel
+ufmergel
+ufsplit_2
+ufsplit_1_1
+ufsplit_1
+rfmerge2_2
+rfmerge2_1
+fmerge2_2
+unknown_system_msg
+fmerge2_1
+change_code
+rfmergel
+fmergel
+fsplit_2_1
+fsplit_2
+fsplit_1_1
+do_sys_cmd
+suspend_loop
+fsplit_1
+gen_reply
+rukeymerge2_2
+rukeymerge2_1
+ukeymerge2_2
+code_call
+split_paths
+get_user_lib_dirs_1
+get_user_lib_dirs
+ukeymerge2_1
+rukeymerge3_21_3
+rukeymerge3_12_3
+rukeymerge3_2
+rukeymerge3_1
+ukeymerge3_21_3
+ukeymerge3_12_3
+ukeymerge3_2
+ukeymerge3_1
+rukeymergel
+ukeymergel
+ukeysplit_2
+ukeysplit_1_1
+ukeysplit_1
+rkeymerge2_2
+rkeymerge2_1
+keymerge2_2
+keymerge2_1
+rkeymerge3_21_3
+rkeymerge3_12_3
+rkeymerge3_2
+rkeymerge3_1
+keymerge3_21_3
+keymerge3_12_3
+keymerge3_2
+keymerge3_1
+rkeymergel
+keymergel
+keysplit_2_1
+keysplit_2
+keysplit_1_1
+keysplit_1
+rumerge2_2
+rumerge2_1
+umerge2_2
+umerge2_1
+rumerge3_21_3
+rumerge3_12_3
+rumerge3_2
+rumerge3_1
+umerge3_21_3
+umerge3_12_3
+umerge3_2
+umerge3_1
+rumergel
+umergel
+usplit_2_1
+desc
+usplit_2
+usplit_1_1
+asc
+usplit_1
+rmerge2_2
+rmerge2_1
+merge2_2
+merge2_1
+rmerge3_21_3
+rmerge3_12_3
+rmerge3_2
+rmerge3_1
+merge3_21_3
+merge3_12_3
+merge3_2
+merge3_1
+rmergel
+mergel
+split_2_1
+split_2
+split_1_1
+split_1
+join_prepend
+splitwith_1
+search_1
+dropwhile_1
+takewhile_1
+mapfoldr_1
+mapfoldr
+mapfoldl_1
+foreach_1
+filtermap_1
+filtermap
+partition_1
+foldr_1
+foldl_1
+flatmap_1
+map_1
+any_1
+all_1
+rumerge3
+umerge3
+rumerge_1
+rumerge
+umerge_1
+usort_1
+rmerge_1
+merge_1
+enumerate_1
+enumerate
+keymap
+rukeymerge_1
+rukeymerge
+ukeymerge_1
+ukeymerge
+ukeysort_1
+ukeysort
+rkeymerge_1
+rkeymerge
+keymerge_1
+keymerge
+keysort_1
+keystore2
+keyreplace3
+keydelete3
+flatlength
+thing_to_list
+rmerge
+rmerge3
+merge3
+sort_1
+zipwith3
+zipwith
+unzip3
+zip3
+pad
+sublist_2
+sublist
+sum
+seq_loop
+seq
+droplast
+suffix
+prefix
+nthtail_1
+nth_1
+module_not_found
+'-format_status/2-inlined-0-'
+'-do_unlink/2-fun-0-'
+parent_terminated
+'-terminate_supervised/4-fun-0-'
+'-system_code_change/4-fun-0-'
+'-system_get_state/1-lc$^0/1-0-'
+'-system_replace_state/2-lc$^0/1-0-'
+'-report_error/5-fun-0-'
+'-report_error/5-fun-1-'
+'-report_error/5-fun-2-'
+'-the_handlers/1-lc$^0/1-0-'
+'-get_modules/1-lc$^0/1-0-'
+'-format_status/2-fun-0-'
+items
+get_log
+stop_handlers
+the_handlers
+'function not exported'
+'module could not be loaded'
+fix_reason
+no_handle_info
+last_message
+report_error
+gen_event_EXIT
+report_terminate
+server_call_update
+server_call
+new_handler
+do_swap
+server_update
+server_notify
+swapped
+split_and_terminate
+s_s_h
+server_swap_handler
+server_delete_handler
+server_add_sup_handler
+server_add_handler
+print_event
+system_replace_state
+system_get_state
+system_code_change
+system_terminate
+system_continue
+terminate_supervised
+do_unlink
+terminate_server
+handle_event
+handle_debug
+handle_system_msg
+decode_msg
+fetch_msg
+wake_hib
+call1
+which_handlers
+swap_sup_handler
+swap_handler
+delete_handler
+sync_notify
+add_sup_handler
+nolink
+'no callback module'
+'-terminate/2-lc$^0/1-0-'
+'-kill_children/1-fun-0-'
+exit_after
+set_timer
+kill_all_procs_1
+kill_all_procs
+kill_children
+terminate_child_i
+get_child_i
+prep_stop
+loop_it
+start_supervisor
+start_the_app
+start_it_new
+start_it_old
+bad_keys
+relay_to_group_leader
+terminate_loop
+main_loop
+init_loop
+legacy_header
+'-get_handler_config/0-lc$^0/1-0-'
+'-get_module_level/1-lc$^0/1-0-'
+'-print_filters/3-lc$^0/1-0-'
+'-print_handlers/2-lc$^0/1-0-'
+'-print_custom/3-lc$^0/1-0-'
+'-print_module_levels/2-lc$^0/1-0-'
+'-reconfigure/0-lc$^0/1-0-'
+'-internal_init_logger/0-lc$^0/1-0-'
+'-internal_init_logger/0-lc$^1/1-1-'
+'-add_handlers/2-fun-0-'
+'-get_primary_filters/1-lc$^0/1-0-'
+'-get_primary_filters/1-fun-1-'
+'-get_proxy_opts/1-lc$^0/1-0-'
+proc_meta
+log_remote
+deatomize
+tid
+do_log_allowed
+log_fun_allowed
+do_log
+get_logger_env
+get_default_handler_filters
+standard_io
+init_default_config
+multiple_proxies
+get_proxy_opts
+multiple_filters
+get_primary_filters
+get_primary_filter_default
+logger_default_metadata
+logger_metadata
+get_primary_metadata
+get_logger_level
+tty
+get_logger_type
+module_level
+check_logger_config
+setup_handler
+bad_proxy_config
+init_kernel_handlers
+bad_config
+reconfigure
+print_module_levels
+print_custom
+print_handlers
+print_filters
+i_modules
+i_proxy
+i_handlers
+i_primary
+module_levels
+get_config
+unset_process_metadata
+get_process_metadata
+update_process_metadata
+'$logger_metadata$'
+set_process_metadata
+lt
+gt
+level_to_int
+eq
+compare_levels
+get_module_level
+unset_application_level
+set_application_level
+get_proxy_config
+get_handler_ids
+filter_config
+get_handler_config
+get_primary_config
+update_proxy_config
+update_handler_config
+update_primary_config
+set_proxy_config
+set_handler_config
+set_primary_config
+remove_handler_filter
+remove_primary_filter
+add_handler_filter
+add_primary_filter
+printable_unicode_list
+string_p1
+string_p
+format_term_list
+format_otp_report
+distribution_not_changed
+kernel_safe_sup
+global_groups
+is_gg_changed
+global_groups_added
+global_groups_removed
+global_groups_changed
+do_global_groups_change
+is_dist_changed
+distribution_changed
+do_distribution_change
+start_compile_server
+start_pg
+start_disk_log
+boot_server_slaves
+get_boot_args
+start_boot_server
+start_dist_ac
+start_distribution
+supervision_child_spec
+add_handlers
+internal_init_logger
+'-build_typed_attribute/2-fun-0-'
+'-build_typed_attribute/2-fun-1-'
+'-attribute_farity_list/1-lc$^0/1-0-'
+'-attribute_farity_map/1-lc$^0/1-0-'
+'-check_clauses/3-lc$^0/1-0-'
+'-first_anno/1-fun-0-'
+'-last_anno/1-fun-0-'
+'-enc_func/1-fun-2-'
+'-enc_func/1-fun-1-'
+'-enc_func/1-fun-0-'
+'-abstract/3-lc$^0/1-0-'
+'-abstract_map_fields/3-lc$^0/1-0-'
+'-map_anno/2-fun-0-'
+'-fold_anno/3-fun-0-'
+'-new_anno/1-fun-0-'
+'-anno_to_term/1-fun-0-'
+from_term
+'-anno_from_term/1-fun-0-'
+yeccgoto_typed_record_fields
+yeccgoto_typed_exprs
+yeccgoto_typed_expr
+yeccgoto_typed_attr_val
+yeccgoto_type_spec
+yeccgoto_type_sigs
+yeccgoto_type_sig
+yeccgoto_type_guards
+yeccgoto_type_guard
+yeccgoto_type
+yeccgoto_tuple
+yeccgoto_try_opt_stacktrace
+yeccgoto_try_expr
+yeccgoto_try_clauses
+yeccgoto_try_clause
+yeccgoto_try_catch
+yeccgoto_top_types
+yeccgoto_top_type
+yeccgoto_tail
+yeccgoto_strings
+yeccgoto_ssa_check_when_clauses
+yeccgoto_ssa_check_when_clause
+yeccgoto_ssa_check_pats
+yeccgoto_ssa_check_pat
+yeccgoto_ssa_check_map_key_tuple_elements
+yeccgoto_ssa_check_map_key_list
+yeccgoto_ssa_check_map_key_elements
+yeccgoto_ssa_check_map_key_element
+yeccgoto_ssa_check_map_key
+yeccgoto_ssa_check_list_lit_ls
+yeccgoto_ssa_check_list_lit
+yeccgoto_ssa_check_fun_ref
+yeccgoto_ssa_check_exprs
+yeccgoto_ssa_check_expr
+yeccgoto_ssa_check_clause_args_ls
+yeccgoto_ssa_check_clause_args
+yeccgoto_ssa_check_binary_lit_rest
+yeccgoto_ssa_check_binary_lit_bytes_ls
+yeccgoto_ssa_check_binary_lit
+yeccgoto_ssa_check_args
+yeccgoto_ssa_check_anno_clauses
+yeccgoto_ssa_check_anno_clause
+yeccgoto_ssa_check_anno
+yeccgoto_spec_fun
+yeccgoto_record_tuple
+yeccgoto_record_pat_expr
+yeccgoto_record_fields
+yeccgoto_record_field
+yeccgoto_record_expr
+yeccgoto_receive_expr
+yeccgoto_prefix_op
+yeccgoto_pat_exprs
+yeccgoto_pat_expr_max
+yeccgoto_pat_expr
+yeccgoto_pat_argument_list
+yeccgoto_opt_bit_type_list
+yeccgoto_opt_bit_size_expr
+yeccgoto_mult_op
+yeccgoto_maybe_match_exprs
+yeccgoto_maybe_match
+yeccgoto_maybe_expr
+yeccgoto_map_tuple
+yeccgoto_map_pat_expr
+yeccgoto_map_pair_types
+yeccgoto_map_pair_type
+yeccgoto_map_key
+yeccgoto_map_fields
+yeccgoto_map_field_exact
+yeccgoto_map_field_assoc
+yeccgoto_map_field
+yeccgoto_map_expr
+yeccgoto_map_comprehension
+yeccgoto_list_op
+yeccgoto_list_comprehension
+yeccgoto_list
+yeccgoto_lc_exprs
+yeccgoto_lc_expr
+yeccgoto_integer_or_var
+yeccgoto_if_expr
+yeccgoto_if_clauses
+yeccgoto_if_clause
+yeccgoto_guard
+yeccgoto_function_clauses
+yeccgoto_function_clause
+yeccgoto_function_call
+yeccgoto_function
+yeccgoto_fun_type
+yeccgoto_fun_expr
+yeccgoto_fun_clauses
+yeccgoto_fun_clause
+yeccgoto_form
+yeccgoto_field_types
+yeccgoto_field_type
+yeccgoto_exprs
+yeccgoto_expr_remote
+yeccgoto_expr_max
+yeccgoto_expr
+yeccgoto_cr_clauses
+yeccgoto_cr_clause
+yeccgoto_comp_op
+yeccgoto_clause_guard
+yeccgoto_clause_body_exprs
+yeccgoto_clause_body
+yeccgoto_clause_args
+yeccgoto_case_expr
+yeccgoto_bit_type_list
+yeccgoto_bit_type
+yeccgoto_bit_size_expr
+yeccgoto_bit_expr
+yeccgoto_binary_type
+yeccgoto_binary_comprehension
+yeccgoto_binary
+yeccgoto_bin_unit_type
+yeccgoto_bin_elements
+yeccgoto_bin_element
+yeccgoto_bin_base_type
+yeccgoto_attribute
+yeccgoto_attr_val
+yeccgoto_atomic
+yeccgoto_atom_or_var
+yeccgoto_argument_list
+yeccgoto_add_op
+yeccpars2_680
+yeccpars2_679
+yeccpars2_678
+yeccpars2_677
+yeccpars2_676
+yeccpars2_674
+yeccpars2_673
+yeccpars2_672
+yeccpars2_671
+yeccpars2_670
+yeccpars2_668
+yeccpars2_667
+yeccpars2_664
+yeccpars2_663
+yeccpars2_662
+yeccpars2_660
+yeccpars2_659
+yeccpars2_658
+yeccpars2_656
+yeccpars2_655
+yeccpars2_654
+yeccpars2_652
+yeccpars2_651
+yeccpars2_650
+yeccpars2_649
+yeccpars2_648
+yeccpars2_647
+yeccpars2_646
+yeccpars2_644
+yeccpars2_642
+yeccpars2_641
+yeccpars2_639
+yeccpars2_637
+yeccpars2_636
+yeccpars2_635
+yeccpars2_634
+yeccpars2_633
+yeccpars2_632
+yeccpars2_630
+yeccpars2_628
+yeccpars2_627
+yeccpars2_625
+yeccpars2_624
+yeccpars2_623
+yeccpars2_622
+yeccpars2_621
+yeccpars2_619
+yeccpars2_618
+yeccpars2_617
+yeccpars2_616
+yeccpars2_615
+yeccpars2_614
+yeccpars2_613
+yeccpars2_610
+yeccpars2_609
+yeccpars2_607
+yeccpars2_606
+yeccpars2_605
+yeccpars2_604
+yeccpars2_603
+yeccpars2_602
+yeccpars2_601
+yeccpars2_600
+yeccpars2_599
+yeccpars2_597
+yeccpars2_595
+yeccpars2_594
+yeccpars2_593
+yeccpars2_592
+yeccpars2_591
+yeccpars2_590
+yeccpars2_589
+yeccpars2_588
+yeccpars2_587
+yeccpars2_586
+yeccpars2_585
+yeccpars2_584
+yeccpars2_580
+yeccpars2_579
+yeccpars2_577
+yeccpars2_576
+yeccpars2_575
+yeccpars2_574
+yeccpars2_573
+yeccpars2_572
+yeccpars2_571
+nonempty_list
+yeccpars2_570
+yeccpars2_569
+yeccpars2_568
+yeccpars2_567
+yeccpars2_566
+yeccpars2_565
+yeccpars2_564
+yeccpars2_563
+yeccpars2_562
+yeccpars2_561
+yeccpars2_560
+yeccpars2_559
+yeccpars2_558
+yeccpars2_557
+yeccpars2_556
+yeccpars2_555
+yeccpars2_554
+yeccpars2_553
+yeccpars2_552
+yeccpars2_551
+yeccpars2_550
+yeccpars2_548
+yeccpars2_547
+yeccpars2_546
+yeccpars2_545
+yeccpars2_544
+yeccpars2_543
+yeccpars2_542
+yeccpars2_541
+yeccpars2_540
+yeccpars2_539
+yeccpars2_538
+yeccpars2_537
+yeccpars2_536
+yeccpars2_535
+yeccpars2_534
+yeccpars2_533
+yeccpars2_532
+yeccpars2_531
+yeccpars2_530
+yeccpars2_529
+yeccpars2_cont_528
+yeccpars2_528
+yeccpars2_527
+yeccpars2_526
+yeccpars2_525
+yeccpars2_523
+yeccpars2_522
+yeccpars2_521
+yeccpars2_520
+yeccpars2_519
+yeccpars2_518
+yeccpars2_516
+yeccpars2_515
+yeccpars2_514
+yeccpars2_512
+yeccpars2_511
+yeccpars2_510
+yeccpars2_508
+yeccpars2_507
+yeccpars2_506
+yeccpars2_505
+yeccpars2_504
+yeccpars2_503
+yeccpars2_502
+yeccpars2_500
+yeccpars2_499
+yeccpars2_498
+yeccpars2_497
+yeccpars2_496
+yeccpars2_495
+yeccpars2_494
+yeccpars2_493
+yeccpars2_492
+yeccpars2_491
+yeccpars2_490
+yeccpars2_489
+yeccpars2_488
+yeccpars2_487
+yeccpars2_486
+yeccpars2_485
+yeccpars2_484
+yeccpars2_483
+yeccpars2_481
+yeccpars2_480
+yeccpars2_479
+yeccpars2_477
+yeccpars2_476
+yeccpars2_474
+yeccpars2_473
+yeccpars2_472
+yeccpars2_471
+yeccpars2_470
+yeccpars2_468
+yeccpars2_466
+yeccpars2_465
+yeccpars2_464
+yeccpars2_463
+yeccpars2_462
+yeccpars2_461
+yeccpars2_460
+yeccpars2_459
+yeccpars2_458
+yeccpars2_457
+yeccpars2_456
+yeccpars2_454
+yeccpars2_453
+yeccpars2_452
+yeccpars2_451
+yeccpars2_450
+yeccpars2_449
+yeccpars2_448
+yeccpars2_447
+yeccpars2_446
+yeccpars2_445
+yeccpars2_444
+yeccpars2_443
+yeccpars2_442
+yeccpars2_441
+yeccpars2_439
+yeccpars2_437
+yeccpars2_436
+yeccpars2_435
+yeccpars2_434
+yeccpars2_433
+yeccpars2_432
+yeccpars2_431
+yeccpars2_430
+yeccpars2_429
+yeccpars2_427
+yeccpars2_426
+yeccpars2_425
+yeccpars2_424
+yeccpars2_423
+yeccpars2_422
+yeccpars2_420
+yeccpars2_419
+yeccpars2_417
+yeccpars2_416
+yeccpars2_415
+yeccpars2_413
+yeccpars2_412
+yeccpars2_411
+yeccpars2_410
+yeccpars2_409
+yeccpars2_408
+yeccpars2_407
+yeccpars2_406
+yeccpars2_405
+yeccpars2_404
+yeccpars2_403
+yeccpars2_402
+yeccpars2_400
+yeccpars2_398
+yeccpars2_397
+yeccpars2_395
+yeccpars2_393
+'<='
+yeccpars2_391
+yeccpars2_390
+yeccpars2_389
+yeccpars2_388
+yeccpars2_387
+yeccpars2_386
+yeccpars2_383
+yeccpars2_381
+yeccpars2_380
+yeccpars2_379
+yeccpars2_378
+yeccpars2_377
+yeccpars2_376
+yeccpars2_375
+yeccpars2_373
+yeccpars2_372
+yeccpars2_371
+yeccpars2_369
+yeccpars2_367
+yeccpars2_366
+yeccpars2_365
+yeccpars2_364
+yeccpars2_363
+yeccpars2_362
+yeccpars2_361
+yeccpars2_360
+yeccpars2_359
+yeccpars2_358
+yeccpars2_357
+yeccpars2_356
+yeccpars2_355
+yeccpars2_353
+yeccpars2_352
+yeccpars2_351
+yeccpars2_350
+yeccpars2_349
+yeccpars2_348
+yeccpars2_347
+yeccpars2_346
+yeccpars2_345
+yeccpars2_343
+yeccpars2_341
+yeccpars2_340
+yeccpars2_339
+yeccpars2_338
+yeccpars2_337
+yeccpars2_335
+yeccpars2_333
+yeccpars2_332
+yeccpars2_329
+yeccpars2_328
+yeccpars2_327
+yeccpars2_326
+yeccpars2_325
+yeccpars2_323
+yeccpars2_321
+yeccpars2_320
+yeccpars2_cont_319
+yeccpars2_319
+yeccpars2_317
+yeccpars2_316
+yeccpars2_315
+yeccpars2_314
+yeccpars2_313
+yeccpars2_312
+yeccpars2_310
+yeccpars2_308
+yeccpars2_306
+yeccpars2_304
+yeccpars2_303
+yeccpars2_301
+yeccpars2_299
+yeccpars2_298
+yeccpars2_297
+yeccpars2_296
+yeccpars2_295
+yeccpars2_294
+yeccpars2_292
+yeccpars2_287
+yeccpars2_286
+yeccpars2_284
+yeccpars2_283
+yeccpars2_282
+yeccpars2_281
+yeccpars2_280
+yeccpars2_279
+yeccpars2_278
+'||'
+end
+'?='
+'<-'
+':='
+yeccpars2_277
+yeccpars2_276
+yeccpars2_275
+pass
+yeccpars2_274
+yeccpars2_273
+yeccpars2_271
+yeccpars2_270
+yeccpars2_269
+yeccpars2_268
+yeccpars2_267
+yeccpars2_266
+yeccpars2_265
+yeccpars2_264
+yeccpars2_263
+yeccpars2_262
+yeccpars2_261
+yeccpars2_260
+yeccpars2_259
+yeccpars2_257
+yeccpars2_256
+yeccpars2_255
+yeccpars2_253
+yeccpars2_251
+yeccpars2_250
+yeccpars2_249
+yeccpars2_248
+yeccpars2_246
+yeccpars2_245
+yeccpars2_244
+yeccpars2_243
+yeccpars2_242
+yeccpars2_241
+yeccpars2_240
+yeccpars2_239
+yeccpars2_238
+yeccpars2_237
+yeccpars2_235
+yeccpars2_233
+yeccpars2_232
+yeccpars2_231
+yeccpars2_230
+yeccpars2_229
+yeccpars2_228
+yeccpars2_227
+yeccpars2_224
+yeccpars2_223
+yeccpars2_222
+yeccpars2_221
+yeccpars2_220
+yeccpars2_219
+yeccpars2_218
+yeccpars2_217
+yeccpars2_216
+yeccpars2_215
+yeccpars2_214
+yeccpars2_213
+yeccpars2_212
+yeccpars2_211
+yeccpars2_210
+yeccpars2_209
+yeccpars2_208
+yeccpars2_207
+yeccpars2_206
+yeccpars2_205
+yeccpars2_cont_204
+yeccpars2_204
+yeccpars2_203
+yeccpars2_202
+yeccpars2_201
+yeccpars2_200
+yeccpars2_199
+yeccpars2_198
+yeccpars2_197
+yeccpars2_196
+yeccpars2_195
+yeccpars2_194
+yeccpars2_193
+yeccpars2_192
+yeccpars2_191
+yeccpars2_190
+yeccpars2_189
+yeccpars2_188
+yeccpars2_187
+yeccpars2_186
+yeccpars2_185
+yeccpars2_184
+yeccpars2_183
+float_epsilon
+yeccpars2_182
+yeccpars2_181
+yeccpars2_180
+local_fun
+yeccpars2_179
+external_fun
+yeccpars2_178
+yeccpars2_177
+yeccpars2_176
+yeccpars2_175
+yeccpars2_174
+yeccpars2_173
+yeccpars2_172
+yeccpars2_171
+yeccpars2_170
+yeccpars2_169
+yeccpars2_168
+yeccpars2_167
+yeccpars2_166
+yeccpars2_165
+yeccpars2_164
+yeccpars2_163
+yeccpars2_162
+yeccpars2_161
+yeccpars2_160
+yeccpars2_159
+yeccpars2_158
+yeccpars2_157
+yeccpars2_156
+yeccpars2_155
+yeccpars2_154
+yeccpars2_153
+yeccpars2_152
+yeccpars2_151
+yeccpars2_150
+yeccpars2_149
+yeccpars2_cont_148
+yeccpars2_148
+yeccpars2_147
+yeccpars2_146
+yeccpars2_145
+yeccpars2_144
+yeccpars2_143
+yeccpars2_142
+yeccpars2_141
+yeccpars2_140
+yeccpars2_139
+yeccpars2_138
+yeccpars2_137
+yeccpars2_136
+'...'
+yeccpars2_135
+yeccpars2_134
+yeccpars2_133
+yeccpars2_132
+yeccpars2_131
+yeccpars2_130
+'%ssa%'
+yeccpars2_128
+yeccpars2_127
+yeccpars2_126
+yeccpars2_125
+yeccpars2_124
+yeccpars2_123
+yeccpars2_122
+yeccpars2_121
+yeccpars2_119
+yeccpars2_118
+yeccpars2_117
+yeccpars2_115
+yeccpars2_113
+yeccpars2_112
+yeccpars2_111
+yeccpars2_110
+yeccpars2_109
+yeccpars2_108
+yeccpars2_107
+yeccpars2_105
+yeccpars2_104
+yeccpars2_103
+yeccpars2_102
+yeccpars2_101
+yeccpars2_100
+yeccpars2_99
+yeccpars2_97
+yeccpars2_96
+yeccpars2_95
+yeccpars2_94
+yeccpars2_93
+yeccpars2_92
+yeccpars2_91
+yeccpars2_90
+yeccpars2_87
+yeccpars2_83
+yeccpars2_82
+yeccpars2_80
+yeccpars2_79
+yeccpars2_78
+yeccpars2_76
+yeccpars2_74
+of
+yeccpars2_73
+yeccpars2_72
+yeccpars2_71
+after
+yeccpars2_69
+yeccpars2_66
+yeccpars2_59
+yeccpars2_58
+yeccpars2_57
+yeccpars2_56
+yeccpars2_55
+yeccpars2_54
+yeccpars2_53
+yeccpars2_52
+yeccpars2_51
+yeccpars2_50
+yeccpars2_49
+yeccpars2_48
+yeccpars2_47
+yeccpars2_46
+yeccpars2_45
+yeccpars2_44
+yeccpars2_43
+yeccpars2_42
+yeccpars2_41
+yeccpars2_40
+yeccpars2_39
+yeccpars2_38
+yeccpars2_37
+yeccpars2_36
+yeccpars2_35
+yeccpars2_34
+yeccpars2_33
+yeccpars2_32
+yeccpars2_31
+yeccpars2_30
+yeccpars2_29
+yeccpars2_28
+begin
+yeccpars2_cont_27
+'>>'
+yeccpars2_27
+yeccpars2_26
+yeccpars2_25
+yeccpars2_24
+yeccpars2_22
+yeccpars2_21
+yeccpars2_20
+yeccpars2_19
+yeccpars2_18
+yeccpars2_17
+yeccpars2_16
+yeccpars2_15
+yeccpars2_14
+yeccpars2_13
+yeccpars2_12
+yeccpars2_11
+yeccpars2_cont_10
+'<<'
+yeccpars2_10
+when
+yeccpars2_9
+yeccpars2_8
+yeccpars2_7
+yeccpars2_6
+yeccpars2_5
+yeccpars2_4
+yeccpars2_3
+';'
+yeccpars2_2
+yeccpars2_1
+yeccpars2_0
+missing_state_in_action_table
+yeccpars2
+write_char
+write_string
+reserved_symbol
+yecctoken2string1
+yecctoken2string
+yecctoken_location
+yecctoken_to_string
+yeccerror
+yecctoken_end_location
+yecc_end
+'$end'
+no_func
+yeccpars1
+state_is_unknown
+missing_in_goto_table
+yecc_error_type
+yecc_bug
+yeccpars0
+return_error
+deep_char_list
+no_location
+parse_and_scan
+parse
+check_expr
+add_anno_check
+build_ssa_check_label
+modify_anno1
+anno_from_term
+new_anno
+mapfold_anno
+fold_anno
+type_preop_prec
+'::'
+'..'
+type_inop_prec
+max_prec
+func_prec
+preop_prec
+'='
+inop_prec
+tokens_tuple
+'|'
+','
+tokens_tail
+']'
+'}'
+'{'
+'['
+'=>'
+abstract_byte
+abstract_map_fields
+abstract_tuple_list
+not_string
+abstract_list
+enc_func
+abstract
+loc_lte
+find_anno
+set_location
+end_location
+last_anno
+first_location
+ret_abstr_err
+ret_err
+build_try
+check_clauses
+build_fun
+build_function
+typed
+record_fields
+record_tuple
+farity_list
+error_bad_decl
+attribute_farity_map
+attribute_farity_list
+attribute_farity
+var_list
+build_attribute
+abstract2
+type_tag
+build_bin_type
+build_gen_type
+lift_unions
+build_constraint
+is_subtype
+build_compat_constraint
+find_arity_from_specs
+build_type_spec
+typed_record
+build_typed_attribute
+'('
+')'
+'->'
+parse_form
+std_info
+open_file
+'$3'
+'-add_env/2-inlined-0-'
+'-start/1-fun-0-'
+'-get_all_env/1-fun-0-'
+keystore
+'-handle_call/3-lc$^3/1-0-'
+'-terminate/2-fun-0-'
+'-load/2-fun-0-'
+'-unload/2-fun-0-'
+'-check_start_cond/4-fun-0-'
+'-start_appl/3-fun-0-'
+'-prim_parse/2-fun-0-'
+'-do_change_apps/3-fun-0-'
+'-do_change_apps/3-fun-1-'
+'-get_cmd_env/1-fun-0-'
+'-add_env/2-fun-0-'
+'-do_config_diff/3-fun-0-'
+'-conf_param_to_conf/1-fun-0-'
+'-config_param_to_list/1-lc$^0/1-0-'
+'-check_conf/0-fun-1-'
+'-read_fd_until_end_and_close/3-Read/4-0-'
+'-read_fd_until_end_and_close/3-fun-1-'
+'-read_fd_until_end_and_close/3-GetResult/0-1-'
+'-reply_to_requester/3-fun-0-'
+default_encoding
+read_encoding_from_binary
+file_binary_to_list
+test_make_apps
+test_do_change_appl
+test_change_apps
+update_permissions
+reply_to_requester
+info_exited
+started_at
+info_started
+config_error
+strip_comment
+only_ws
+reader_ref
+read_fd_until_end_and_close
+parse_file
+scan_file
+read_from_file_descriptor
+load_file_descriptor
+check_conf_sys
+check_conf
+config_param_to_list
+invalid_file_desc
+characters_to_nfc_list
+configfd
+conf_param_to_conf
+do_config_diff
+application_not_found
+module_not_defined
+do_config_change
+do_prep_config_change
+check_user
+del_env
+add_env
+get_env_key
+merge_app_env
+change_app_env
+merge_env
+get_env_i
+handle_make_term_error
+make_term
+conv
+get_cmd_env
+get_opt
+do_change_appl
+is_loaded_app
+do_change_apps
+invalid_name
+badstartspec
+invalid_options
+make_appl_i
+parse_term
+prim_parse
+prim_consult
+make_appl
+bad_application
+get_restart_type
+nd
+keyreplaceadd
+ksd
+keysearchdelete
+stop_appl
+start_appl
+init_starter
+spawn_starter
+check_start_cond
+do_load_application
+maybe_load_application
+'-separate_error_info/1-fun-0-'
+'-format_link_reports/4-lc$^0/1-0-'
+'-format_exception/5-fun-0-'
+'-pp_fun/2-fun-0-'
+nl
+modifier
+chars_limit_opt
+part_separator
+report_separator
+format_tag
+pp_fun
+write_atom
+write_atom_as_latin1
+format_exception
+format_rep
+format_report
+format_link_report
+format_link_reports
+splitwith
+separate_error_info
+format_own_report
+do_format
+badrpc
+proc_info
+get_my_name
+translate_process_info
+get_process_info
+no_trap
+adjacents
+visit
+max_neighbours
+neighbours
+get_initial_call
+make_neighbour_report
+neighbour
+make_neighbour_reports1
+linked_info
+get_dictionary
+clean_dict
+cleaned_dict
+get_cleaned_dictionary
+receive_messages
+get_process_messages
+get_messages
+ancestors
+get_ancestors
+my_info_1
+my_info
+crash_report
+trans_init
+raw_init_call
+raw_initial_call
+translate_initial_call
+make_dummy_args
+await_DOWN
+kill_flush_EXIT
+flush_EXIT
+sync_start_monitor
+nack
+sync_start
+exit_reason
+exit_p
+init_p_do_apply
+wake_up
+spawn_mon
+init_p
+get_loaded
+del_cntrl
+ac_application_run
+notify_cntrl_started
+cntrl
+shutdown_func
+application_terminated
+keyreplace
+ac_application_not_run
+stop_it
+not_running
+failover
+ac_start_application_reply
+ac_load_application_reply
+ac_change_application_req
+application_start_failure
+handle_application_started
+application_started
+loading
+start_p_false
+zf
+ac_load_application_req
+not_started
+ac_application_stopped
+ac_application_unloaded
+permissions
+ac_start_application_req
+persistent
+check_distributed
+distributed
+check_para_value
+check_para
+check_conf_data
+'load error'
+enter_loop
+'$initial_call'
+appl_data
+appl
+start_phases
+'$2'
+'$1'
+config_change
+prep_config_change
+change_application_data
+control_application
+ac_tab
+bad_environment_value
+ack
+':'
+badexpr
+binary_comprehension
+bitlevel_binaries
+'-merge_bindings/4-inlined-0-'
+'-match_fun/2-inlined-0-'
+'-expr/6-RF/20-22-'
+'-expr/6-RF/19-21-'
+'-expr/6-RF/18-20-'
+'-expr/6-RF/17-19-'
+'-expr/6-RF/16-18-'
+'-expr/6-RF/15-17-'
+'-expr/6-RF/14-16-'
+'-expr/6-RF/13-15-'
+'-expr/6-RF/12-14-'
+'-expr/6-RF/11-13-'
+'-expr/6-RF/10-12-'
+'-expr/6-RF/9-11-'
+'-expr/6-RF/8-10-'
+'-expr/6-RF/7-9-'
+'-expr/6-RF/6-8-'
+'-expr/6-RF/5-7-'
+'-expr/6-RF/4-6-'
+'-expr/6-RF/3-5-'
+'-expr/6-RF/2-4-'
+'-expr/6-RF/1-3-'
+'-expr/6-RF/0-2-'
+'-expr/6-fun-0-'
+'-expr/6-fun-44-'
+'-expr/6-fun-45-'
+'-expr/6-fun-22-'
+'-expr/6-fun-21-'
+'-expr/6-fun-20-'
+'-expr/6-fun-19-'
+'-expr/6-fun-18-'
+'-expr/6-fun-17-'
+'-expr/6-fun-16-'
+'-expr/6-fun-15-'
+'-expr/6-fun-14-'
+'-expr/6-fun-13-'
+'-expr/6-fun-12-'
+'-expr/6-fun-11-'
+'-expr/6-fun-10-'
+'-expr/6-fun-9-'
+'-expr/6-fun-8-'
+'-expr/6-fun-7-'
+'-expr/6-fun-6-'
+'-expr/6-fun-5-'
+'-expr/6-fun-4-'
+'-expr/6-fun-3-'
+'-expr/6-fun-2-'
+'-expr/6-fun-1-'
+is_anno
+'-find_maxline/1-fun-0-'
+'-fun_used_bindings/4-fun-0-'
+'-local_func/8-fun-0-'
+'-eval_lc1/7-fun-1-'
+'-eval_lc1/7-fun-0-'
+'-eval_bc1/7-fun-1-'
+'-eval_bc1/7-fun-0-'
+'-eval_mc1/7-fun-1-'
+'-eval_mc1/7-fun-0-'
+'-eval_generator/7-fun-0-'
+'-eval_b_generate/8-fun-0-'
+'-eval_b_generate/8-fun-1-'
+'-receive_clauses/8-fun-0-'
+'-match1/5-fun-0-'
+'-match1/5-fun-1-'
+'-match_fun/2-fun-0-'
+'-add_bindings/2-fun-0-'
+'-merge_bindings/4-fun-0-'
+'-merge_bindings/4-fun-1-'
+'-to_terms/1-lc$^0/1-0-'
+'-token_fixup/1-lc$^0/1-0-'
+'-reset_token_anno/1-lc$^0/1-0-'
+'-reset_expr_anno/1-lc$^0/1-0-'
+'-reset_anno/0-fun-0-'
+'-normalise/1-fun-1-'
+'-normalise/1-fun-0-'
+'-ev_expr/1-lc$^0/1-0-'
+anno
+all_white
+eval_str
+ev_expr
+eval_expr
+is_constant_expr
+normalise_list
+normalise
+extended_parse_term
+validate_tag
+fixup_mfa
+fixup_tag
+fixup_text
+fixup_ast
+reset_anno
+reset_expr_anno
+reset_token_anno
+string_fixup
+expr_fixup
+'Ref'
+'Port'
+'Fun'
+'.'
+'#'
+unscannable
+set_text
+token_fixup
+tokens_fixup
+extended_parse_exprs
+anno_to_term
+to_term
+to_terms
+filter_bindings
+merge_bindings
+add_bindings
+del_binding
+add_binding
+binding
+bindings
+match_list
+match_map
+match_tuple
+match_fun
+match_bits
+match1
+string_to_conses
+reference
+number
+expr_guard_test
+guard_expr
+guard0
+guard1
+match_clause
+receive_clauses
+case_clauses
+illegal_stacktrace_variable
+check_stacktrace_vars
+if_clauses
+eval_op
+eval_named_fun
+'-inside-an-interpreted-fun-'
+eval_fun
+ret_expr
+map_assoc
+map_exact
+eval_map_fields
+is_generator
+eval_filter
+eval_m_generate
+bin_gen
+eval_b_generate
+eval_generate
+eval_generator
+eval_mc1
+eval_mc
+eval_bc1
+eval_bc
+eval_lc1
+eval_lc
+no_env
+do_apply
+local_func2
+local_func
+unhide_calls
+f
+m
+hide_calls
+fun_used_bindings
+'$erl_eval_max_line'
+find_maxline
+apply_error
+expr_grp
+unbound
+not_ok
+transform_from_evaluator
+k
+v
+else_clause
+argument_limit
+undef_record
+named_fun_data
+check_command
+failure
+success
+maybe_match_exprs
+empty_fun_used_vars
+process_exited
+critical
+alert
+emergency
+got_unexpected_message
+no_domain
+super
+remote_gl
+'-handle_call/3-inlined-0-'
+'-set_module_level/2-fun-0-'
+'-unset_module_level/1-fun-0-'
+'-handle_call/3-fun-7-'
+'-handle_call/3-fun-6-'
+removing_handler
+'-handle_call/3-fun-3-'
+'-handle_call/3-fun-5-'
+'-handle_call/3-fun-4-'
+handler_not_added
+invalid_handler
+function_not_exported
+'-call_h_async/4-fun-0-'
+internal_log_event
+add_default_metadata
+diffs
+logger_process_exited
+call_h_reply
+call_h_async
+changing_config
+call_h
+illegal_config_change
+diff_maps
+check_config_change
+invalid_formatter
+callback_crashed
+check_formatter
+invalid_filter_default
+check_filter_default
+invalid_filters
+invalid_filter
+check_filters
+invalid_level
+check_level
+check_mod
+invalid_id
+check_id
+invalid_primary_config
+metadata
+check_config
+get_type
+sanity_check_1
+invalid_config
+sanity_check
+default_config
+keytake
+do_remove_filter
+do_add_filter
+attempting_syncronous_call_to_self
+async_req_reply
+formatter
+already_exist
+exist
+set_opts
+adding_handler
+simple
+create
+proxy
+get_default_config
+'$logger_cb_process'
+invalid_formatter_config
+update_formatter_config
+update_config
+change_config
+set_config
+unset_module_level
+not_a_list_of_modules
+set_module_level
+add_filter
+add_handler
+'-do_start/4-fun-0-'
+'-maybe_add_read_ahead/2-fun-0-'
+cbv
+cafu
+count_and_find
+read_size
+cast_binary
+cat
+do_setopts
+check_valid_opts
+unfold
+substitute_negations
+err_func
+continuation_location
+tokens
+invalid_unicode_error
+get_chars_apply
+get_chars_notempty
+get_chars_empty
+convert_enc
+collect_line
+io_request_loop
+requests
+get_until
+std_reply
+io_reply
+server_loop
+maybe_add_read_ahead
+valid_enc
+expand_encoding
+parse_options
+invalid_unicode
+info_report
+bad_combination
+shutdown_error
+start_error
+reached_max_restart_intensity
+title
+supervisor_report
+report_cb
+sasl
+child_terminated
+already_present
+n_objects
+read_only
+'-terminate_dynamic_children/1-inlined-0-'
+'-find_child_by_pid/2-inlined-0-'
+failed_to_start_child
+'-start_children/2-fun-0-'
+'-handle_call/3-fun-2-'
+'-handle_call/3-fun-0-'
+'-handle_call/3-fun-1-'
+'-do_auto_shutdown/2-fun-0-'
+'-terminate_children/2-fun-0-'
+'-terminate_dynamic_children/1-fun-0-'
+'-terminate_dynamic_children/1-fun-1-'
+'-wait_dynamic_children/5-fun-0-'
+'-find_child_by_pid/2-fun-0-'
+the
+'-set_pid/3-fun-0-'
+invalid_module
+a
+'-validMods/1-fun-0-'
+'-add_restart/3-fun-0-'
+'-dyn_fold/3-fun-0-'
+parse_transform
+transformed
+be
+should
+dyn_init
+real
+dyn_args
+dyn_exists
+called
+dyn_map
+transform_error
+dyn_fold
+mapsets
+dyn_store
+dyn_erase
+dyn_size
+single
+p
+format_child_log_single
+format_log_multi
+format_log_single
+limit_child_report
+limit_term
+errorContext
+limit_report
+single_line
+encoding
+depth
+unlimited
+chars_limit
+get_format_depth
+format_log
+report_progress
+nb_children
+mfargs
+restart_type
+child_type
+extract_child
+takewhile
+add_restart
+child_to_spec
+invalid_modules
+validMods
+invalid_shutdown
+validShutdown
+invalid_significant
+validSignificant
+invalid_restart_type
+validRestartType
+invalid_mfa
+validFunc
+validId
+invalid_child_type
+validChildType
+missing_id
+missing_start
+'-table/2-inlined-0-'
+do_check_childspec
+invalid_child_spec
+'-file2tab/2-inlined-1-'
+'-file2tab/2-inlined-0-'
+significant
+check_childspec
+log_terms
+'-tab2file/3-fun-1-'
+duplicate_child_name
+check_startspec
+blog_terms
+supname
+invalid_auto_shutdown
+'-tab2file/3-fun-0-'
+'-file2tab/2-fun-1-'
+validAutoShutdown
+invalid_period
+'-file2tab/2-fun-0-'
+'-table/2-fun-2-'
+validPeriod
+invalid_intensity
+'-table/2-fun-1-'
+'-table/2-fun-0-'
+validIntensity
+'-table/2-fun-3-'
+invalid_strategy
+validStrategy
+'-table/2-fun-4-'
+'-table/2-fun-5-'
+do_check_flags
+check_flags
+'-table/2-fun-6-'
+'-table/2-fun-7-'
+auto_shutdown
+intensity
+'-table/2-fun-8-'
+'-table/2-lc$^10/1-2-'
+period
+'-table/2-lc$^9/1-1-'
+strategy
+'-table/2-fun-11-'
+set_flags
+init_state
+'-qlc_next/2-fun-0-'
+'-qlc_prev/2-fun-0-'
+children_any1
+children_any
+'-qlc_select/1-fun-0-'
+'-hform/6-lc$^0/1-0-'
+children_fold
+children_to_list
+re_match
+print_re_num
+children_map
+re_display
+remove_child
+update_with
+re_search
+slice
+set_pid
+get_dynamic_child
+do_display_item
+find_child_by_pid
+do_display_items
+do_display
+find_dynamic_child
+print_number
+find_child_and_args
+find_child
+split_ids
+split_child
+trailing
+del_child
+nonl
+do_save_child
+save_child
+line_string
+wait_dynamic_children
+choice
+terminate_dynamic_children
+'(c)ontinue (q)uit (p)Digits (k)ill /Regexp -->'
+'-basenameb/2-lc$^0/1-0-'
+'-unix_splitb/1-lc$^0/1-0-'
+'EOT (q)uit (p)Digits (k)ill /Regexp -->'
+unlink_flush
+'-win32_splitb/1-lc$^3/1-4-'
+eot
+display_items
+'-win32_splitb/1-lc$^1/1-3-'
+brutal_kill
+'-win32_splitb/1-lc$^0/1-2-'
+'-win32_splitb/1-lc$^2/1-1-'
+pad_right
+do_terminate
+terminate_children
+'-win32_splitb/1-lc$^4/1-0-'
+hform
+'-basedir/3-lc$^0/1-0-'
+cast
+restart_multiple_children
+is_reg
+try_again
+rest_for_one
+prinfo2
+prinfo
+one_for_one
+one_for_all
+validate_bin
+tabs
+mem
+i
+fail
+do_auto_shutdown
+listify
+validate_char
+validate_list
+default_option
+keydelete
+validate
+traverse
+basedir_os_type
+qlc_select
+qlc_prev
+basedir_join_home
+handle_start_child
+qlc_next
+noappdata
+basedir_windows_appdata
+basedir_windows
+num_of_objects
+update_chsp
+basedir_darwin
+lexemes
+is_unique_objects
+update_childspec1
+is_sorted_key
+table_info
+update_childspec
+pre_fun
+bad_flags
+user_data
+user_config
+invalid_type
+post_fun
+info_fun
+basedir_linux
+basedir_from_os
+format_fun
+key_equality
+lookup_fun
+author
+basedir_name_from_opts
+try_again_restart
+basedir_os_from_opts
+last_prev
+first_next
+site_data
+site_config
+count_child
+specs
+windows
+tabfile_info
+supervisors
+linux
+user_log
+cannot_create_table
+create_tab
+user_cache
+basedir
+load_table
+workers
+worker
+filename_string_to_binary
+scan_for_endinfo
+md5_and_convert
+do_flatten
+restarting
+major_version
+filetab_options
+major_os_type
+separators
+do_start_child_i
+child
+replace
+do_start_child
+win32_nativename
+nativename
+start_children
+win32_split
+get_header_data
+chunk
+wrap_chunk
+unix_split
+bad_start_spec
+bchunk
+wrap_bchunk
+init_dynamic
+win32_splitb
+start_spec
+fix_driveletter
+verify_header_mandatory
+unix_splitb
+rootname2
+maybe_remove_dirsep
+join1b
+init_children
+supervisor_data
+simple_one_for_one
+count_mandatory
+join1
+verify
+parse_f2t_opts
+bad_size
+invalid_object_count
+checksum_error
+dirjoin1
+dirjoin
+fstrip
+do_read_and_verify
+get_callback_module
+check_childspecs2
+read_error
+unsupported_file_version
+never
+any_significant
+all_significant
+repaired
+file2tab
+check_childspecs1
+skip_prefix
+object_count
+md5sum
+basename1
+parse_ft_info_options
+check_childspecs
+count_children
+malformed_option
+unknown_option
+which_children
+get_childspec
+basenameb
+parse_ft_options
+terminate_child
+delete_child
+restart_child
+win_basenameb
+absname_join
+start_child
+md5terms
+ft_options_to_list
+dump_file
+eaccess
+extended_info
+badtab
+tab2file
+tab2list
+match_delete
+init_table_sub
+end_of_input
+init_table_continue
+init_table
+test_ms
+from_ets
+to_dets
+to_ets
+from_dets
+do_foldr
+transform_from_shell
+fun_data
+fun2ms
+repair_continuation
+match_spec_run
+select_delete
+delete_all_objects
+receive_all
+only_loaded
+'-inlined-behaviour_info/1-'
+'-ensure_all_started/3-lc$^0/1-0-'
+'-wait_all_enqueued/3-lc$^0/1-0-'
+get_appl_name
+start_type
+get_child
+get_master
+get_supervisor
+get_application_module
+get_application
+get_pid_all_key
+get_all_key
+get_pid_key
+get_key
+get_pid_all_env
+get_all_env
+get_pid_env
+get_env
+unset_env
+set_env
+loaded_applications
+which_applications
+stop_application
+distributed_application
+permit_only_loaded_application
+permit_application
+permit
+takeover_application
+takeover
+start_boot_application
+ensure_started
+wait_all_enqueued
+deadlock
+wait_one_enqueued
+start_application_request
+enqueue_dag_leaves
+concurrent_dag_start
+start_application
+enqueue_or_start_app
+is_running
+enqueue_or_start
+concurrent
+temporary
+ensure_all_started
+unload_application
+load_application
+load1
+fields
+overlapping_contract
+no_missing_return
+missing_return
+no_extra_return
+extra_return
+no_underspecs
+underspecs
+overspecs
+specdiffs
+no_missing_calls
+race_conditions
+error_handling
+unmatched_returns
+no_undefined_callbacks
+no_behaviours
+no_unknown
+no_contracts
+no_fail_call
+no_opaque
+no_fun_app
+no_improper_lists
+no_unused
+no_return
+func
+item
+'-removed_fa/4-inlined-0-'
+'-pattern_map/4-inlined-0-'
+'-pattern_list/4-inlined-0-'
+'-pattern_fields/6-inlined-0-'
+'-is_gexpr/2-inlined-0-'
+'-import/3-inlined-0-'
+'-icrt_export/5-inlined-3-'
+'-icrt_export/5-inlined-2-'
+'-icrt_export/5-inlined-1-'
+'-icrt_export/5-inlined-0-'
+'-gexpr_list/3-inlined-0-'
+'-func_location_warning/3-inlined-0-'
+'-func_location_error/3-inlined-0-'
+'-fun_clauses1/3-inlined-0-'
+'-expr_list/3-inlined-0-'
+'-export_type/3-inlined-0-'
+'-export/3-inlined-0-'
+'-depr_fa/4-inlined-0-'
+'-def_fields/3-inlined-0-'
+'-check_unused_types_1/2-inlined-1-'
+'-check_undefined_types/1-inlined-2-'
+'-check_type_2/3-inlined-1-'
+'-check_specs_without_function/1-inlined-0-'
+'-check_local_opaque_types/1-inlined-0-'
+'-check_fields/6-inlined-0-'
+'-check_dialyzer_attribute/2-inlined-6-'
+'-bool_option/4-fun-0-'
+'-value_option/3-fun-0-'
+'-value_option/7-fun-0-'
+'-format_mfa/1-lc$^0/1-0-'
+'-exprs_opt/3-fun-0-'
+'-used_vars/2-fun-0-'
+'-compiler_options/1-lc$^0/1-0-'
+'-start/2-lc$^0/1-0-'
+'-start/2-lc$^1/1-1-'
+'-pack_errors/1-fun-0-'
+'-pack_errors/1-fun-1-'
+'-pack_errors/1-fun-2-'
+'-pack_warnings/1-lc$^2/1-1-'
+'-pack_warnings/1-lc$^1/1-0-'
+'-pack_warnings/1-lc$^0/1-2-'
+'-includes_qlc_hrl/2-lc$^0/1-0-'
+'-set_file/2-lc$^0/1-0-'
+'-anno_set_file/2-fun-0-'
+'-bif_clashes/2-lc$^0/1-0-'
+'-not_deprecated/2-lc$^2/1-2-'
+'-not_deprecated/2-lc$^1/1-1-'
+'-not_deprecated/2-lc$^0/1-0-'
+'-not_deprecated/2-lc$^4/1-4-'
+'-not_deprecated/2-lc$^3/1-3-'
+'-not_deprecated/2-lc$^5/1-5-'
+'-not_deprecated/2-fun-6-'
+'-not_removed/2-lc$^2/1-2-'
+'-not_removed/2-lc$^1/1-1-'
+'-not_removed/2-lc$^0/1-0-'
+'-not_removed/2-lc$^4/1-4-'
+'-not_removed/2-lc$^3/1-3-'
+'-not_removed/2-fun-5-'
+'-disallowed_compile_flags/2-lc$^1/1-1-'
+'-disallowed_compile_flags/2-lc$^0/1-0-'
+'-disallowed_compile_flags/2-lc$^3/1-3-'
+'-disallowed_compile_flags/2-lc$^2/1-2-'
+bad_filter
+'-behaviour_check/2-lc$^0/1-0-'
+'-behaviour_check/2-fun-1-'
+'-behaviour_check/2-lc$^2/1-1-'
+'-behaviour_missing_callbacks/2-fun-0-'
+no_elements
+'-behaviour_conflicting/2-fun-0-'
+'-check_deprecated/2-lc$^2/1-2-'
+'-check_deprecated/2-lc$^1/1-1-'
+'-check_deprecated/2-lc$^0/1-0-'
+'-check_deprecated/2-fun-3-'
+'-depr_fa/4-fun-0-'
+'-check_removed/2-lc$^2/1-2-'
+'-check_removed/2-lc$^1/1-1-'
+'-check_removed/2-lc$^0/1-0-'
+'-check_removed/2-fun-3-'
+'-removed_fa/4-fun-0-'
+'-check_imports/2-lc$^1/1-1-'
+'-check_imports/2-lc$^0/1-0-'
+'-check_imports/2-lc$^3/1-3-'
+'-check_imports/2-lc$^2/1-2-'
+'-check_unused_functions/2-lc$^0/1-0-'
+'-check_unused_functions/2-lc$^2/1-2-'
+'-check_unused_functions/2-lc$^1/1-1-'
+'-check_undefined_functions/1-fun-0-'
+'-check_undefined_types/1-lc$^0/1-0-'
+'-check_undefined_types/1-fun-1-'
+'-check_undefined_types/1-fun-2-'
+'-check_option_functions/4-lc$^2/1-2-'
+'-check_option_functions/4-lc$^1/1-1-'
+'-check_option_functions/4-lc$^0/1-0-'
+'-check_option_functions/4-lc$^3/1-3-'
+'-check_option_functions/4-lc$^4/1-4-'
+'-check_nifs/2-lc$^1/1-1-'
+'-check_nifs/2-lc$^0/1-0-'
+'-check_nifs/2-lc$^2/1-2-'
+'-nowarn_function/2-lc$^1/1-1-'
+'-nowarn_function/2-lc$^0/1-0-'
+'-func_location_warning/3-fun-0-'
+'-func_location_error/3-fun-0-'
+'-check_untyped_records/2-fun-0-'
+'-check_untyped_records/2-lc$^1/1-0-'
+'-check_untyped_records/2-fun-2-'
+'-check_unused_records/2-lc$^0/1-0-'
+'-check_unused_records/2-lc$^3/1-3-'
+'-check_unused_records/2-lc$^2/1-2-'
+'-check_unused_records/2-lc$^1/1-1-'
+'-check_unused_records/2-fun-4-'
+'-check_unused_records/2-fun-5-'
+'-check_unused_records/2-lc$^6/1-5-'
+'-check_unused_records/2-fun-7-'
+'-check_callback_information/1-fun-0-'
+'-check_callback_information/1-fun-1-'
+'-export/3-fun-0-'
+'-export_type/3-fun-0-'
+'-import/3-fun-0-'
+'-check_imports/3-fun-0-'
+store
+'-add_imports/3-fun-0-'
+'-clauses/2-fun-0-'
+'-pattern/4-fun-0-'
+'-pattern_list/4-fun-0-'
+map_key
+'-pattern_map/4-fun-0-'
+'-pattern_bin/4-fun-0-'
+'-good_string_size_type/2-fun-0-'
+'-expr_bin/4-fun-0-'
+'-gexpr/3-fun-3-'
+'-gexpr/3-fun-4-'
+'-gexpr/3-fun-2-'
+'-gexpr_list/3-fun-0-'
+'-is_guard_test/1-fun-0-'
+'-is_guard_test/2-fun-0-'
+'-is_guard_test/3-fun-0-'
+'-is_guard_test/3-fun-1-'
+'-is_guard_expr/1-fun-0-'
+'-is_gexpr/2-fun-0-'
+'-is_gexpr_list/2-fun-0-'
+'-is_gexpr_fields/4-fun-0-'
+'-expr/3-fun-5-'
+'-expr/3-fun-4-'
+'-expr/3-fun-3-'
+'-expr/3-fun-2-'
+'-expr_list/3-fun-0-'
+'-record_def/4-lc$^0/1-0-'
+'-def_fields/3-fun-0-'
+'-normalise_fields/1-fun-0-'
+'-check_fields/6-fun-0-'
+'-pattern_fields/6-fun-0-'
+'-pattern_fields/6-fun-1-'
+'-init_fields/3-lc$^0/1-0-'
+'-type_def/6-fun-0-'
+'-warn_redefined_builtin_type/3-lc$^1/1-1-'
+'-warn_redefined_builtin_type/3-lc$^0/1-0-'
+'-check_type/2-fun-0-'
+'-check_type_2/3-fun-5-'
+'-check_type_2/3-fun-1-'
+'-check_type_2/3-fun-2-'
+'-check_type_2/3-fun-3-'
+merge_with
+'-check_type_2/3-fun-4-'
+'-check_type_2/3-fun-0-'
+'-check_record_types/5-fun-0-'
+'-remove_non_visible/1-lc$^0/1-0-'
+'-any_control_characters/1-fun-0-'
+constraint
+'-check_specs/4-lc$^0/1-0-'
+'-check_specs_without_function/1-fun-0-'
+'-add_missing_spec_warnings/3-lc$^0/1-0-'
+'-add_missing_spec_warnings/3-lc$^2/1-2-'
+'-add_missing_spec_warnings/3-lc$^1/1-1-'
+'-add_missing_spec_warnings/3-fun-3-'
+'-check_unused_types_1/2-lc$^0/1-0-'
+'-check_unused_types_1/2-fun-1-'
+'-reached_types/1-lc$^1/1-1-'
+'-reached_types/1-lc$^0/1-0-'
+'-reached_types/1-lc$^2/1-2-'
+'-initially_reached_types/1-lc$^0/1-0-'
+'-check_local_opaque_types/1-fun-0-'
+'-check_dialyzer_attribute/2-lc$^4/1-2-'
+'-check_dialyzer_attribute/2-lc$^1/1-4-'
+'-check_dialyzer_attribute/2-lc$^0/1-3-'
+'-check_dialyzer_attribute/2-lc$^3/1-1-'
+'-check_dialyzer_attribute/2-lc$^2/1-0-'
+'-check_dialyzer_attribute/2-fun-5-'
+'-check_dialyzer_attribute/2-fun-6-'
+'-check_dialyzer_attribute/2-fun-7-'
+'-icrt_clauses/3-fun-0-'
+'-catch_clauses/3-fun-0-'
+'-icrt_export/5-fun-0-'
+'-icrt_export/5-fun-1-'
+'-icrt_export/5-fun-2-'
+'-icrt_export/5-fun-3-'
+'-icrt_export/5-fun-4-'
+'-is_guard_test2_info/1-fun-0-'
+'-fun_clauses/3-lc$^0/1-0-'
+'-fun_clauses1/3-fun-0-'
+'-shadow_vars/4-fun-0-'
+'-unused_vars/3-fun-0-'
+'-warn_unused_vars/3-fun-0-'
+'-warn_unused_vars/3-fun-1-'
+'-warn_unused_vars/3-fun-2-'
+'-vtupdate/2-fun-0-'
+'-vtunsafe/3-lc$^0/1-0-'
+'-vtmerge/2-fun-0-'
+'-vtmerge/1-fun-0-'
+'-vtmerge_pat/3-fun-0-'
+matched
+'-vtmerge_pat/3-fun-1-'
+'-vtnew/2-fun-0-'
+'-vtold/2-fun-0-'
+'-vt_no_unsafe/1-lc$^0/1-0-'
+'-vt_no_unused/1-lc$^0/1-0-'
+'-copy_expr/2-fun-0-'
+'-feature_keywords/0-fun-0-'
+keywords
+'-feature_keywords/0-fun-1-'
+'-canonicalize_string/1-fun-0-'
+'-local_functions/1-lc$^0/1-0-'
+'-auto_import_suppressed/1-lc$^0/1-0-'
+'-auto_import_suppressed/1-lc$^1/1-1-'
+maps_prepend
+no_guard_bif_clash
+bif_clash_specifically_disabled
+is_autoimport_suppressed
+no_auto_import
+auto_import_suppressed
+is_imported_from_erlang
+is_imported_function
+is_local_function
+local_functions
+control_type
+is_modifier
+intersection
+check_modifiers_1
+check_modifiers
+extract_modifiers
+extract_sequence_digits
+extract_sequence
+extract_sequences
+check_format_string
+args_length
+args_list
+arguments
+check_format_4
+check_format_3
+no_argument_list
+check_format_2a
+warn
+check_format_2
+foldr
+canonicalize_string
+check_format_1
+fwrite
+is_format_function
+format_function
+text
+configurable
+feature_keywords
+test_overriden_by_local
+old_type_test
+obsolete_type
+add_removed_warning
+obsolete
+q
+check_qlc_hrl
+is_inline_opt
+check_nif_inline
+check_load_nif
+check_remote_function
+has_wildcard_field
+check_record_info_call
+copy_expr
+vt_no_unused
+vt_no_unsafe
+vtold
+vtsubtract
+vtnew
+merge_used
+merge_state
+merge_annos
+vtmerge_pat
+vtmerge
+vtunsafe
+vtupdate
+check_old_unused_vars
+check_unused_vars
+do_expr_var
+expr_var
+pat_binsize_var
+warn_underscore_match_pat_1
+warn_underscore_match_pat
+pat_var
+fun_clause
+fun_clauses1
+fun_clauses
+bitstring
+bits
+bytes
+handle_bitstring_gen_pat
+comprehension_pattern
+handle_generator
+is_guard_test2_info
+m_generate
+generate
+b_generate
+lc_quals
+comprehension_expr
+handle_comprehension
+dropwhile
+icrt_export
+stacktrace
+taint_stack_var
+catch_clause
+catch_clauses
+icrt_clause
+icrt_clauses
+try_clauses
+is_module_dialyzer_option
+is_function_dialyzer_option
+check_dialyzer_attribute
+check_local_opaque_types
+initially_reached_types
+reachable
+family_to_digraph
+rel2fam
+reached_types
+check_unused_types_1
+check_unused_types
+add_missing_spec_warnings
+exported
+check_functions_without_spec
+check_specs_without_function
+set_generated
+nowarn
+bounded_fun
+check_specs
+any_control_characters
+remove_non_visible
+latin1_char_list
+check_module_name
+is_fa
+is_fa_list
+optional_cbs
+callback_decl
+spec_decl
+obsolete_builtin_type
+is_obsolete_builtin_type
+is_type
+is_default_type
+used_type
+field_type
+check_record_types
+seen_multiple
+seen_once_union
+seen_once
+remote_type
+ann_type
+range
+user_type
+typed_record_field
+check_type_2
+check_type_1
+check_type
+no_auto_import_types
+typeinfo
+type_def
+find_field
+exist_field
+update_fields
+ginit_fields
+init_fields
+pattern_fields
+pattern_field
+check_field
+check_fields
+used_record
+check_record
+exist_record
+normalise_fields
+def_fields
+product
+record_def
+is_valid_call
+warn_invalid_call
+is_valid_record
+warn_invalid_record
+map_fields
+check_assoc_fields
+record_expr
+expr_list
+if
+fun
+catch
+old_bif
+record_info
+else
+'named fun'
+unused
+first_anno
+named_fun
+mc
+maybe_match
+maybe
+lc
+case
+bc
+try
+ssa_check_when
+expr
+is_gexpr_fields
+map_field_exact
+map_field_assoc
+is_map_fields
+is_gexpr_list
+comp
+arith
+op_type
+is_gexpr_op
+is_gexpr
+is_guard_expr
+is_guard_test2
+is_guard_test
+gexpr_list
+bif
+guard_bif
+record_field
+gexpr
+type_test
+guard_test2
+guard_test
+guard_tests
+elemtype_check
+bittype
+bit_size_check
+set_bit_type
+bit_type
+expr_bin
+is_bit_size_illegal
+pat_bit_size
+pat_bit_expr
+good_string_size_type
+pattern_element_1
+bin_element
+pattern_element
+pattern_bin
+pattern_map
+arith_op
+is_pattern_expr_1
+partial_eval
+is_pattern_expr
+check_multi_field_init
+pattern_list
+var
+tuple
+bin
+record_index
+char
+cons
+op
+pattern
+head
+clause
+clauses
+function_check_max_args
+define_function
+call_function
+check_on_load
+imported
+add_imports
+is_member
+check_callback_information
+check_unused_records
+check_untyped_records
+func_location_error
+func_location_warning
+nowarn_function
+check_nifs
+check_option_functions
+check_bif_clashes
+check_undefined_types
+drestriction
+from_external
+check_undefined_functions
+add_element
+reached_functions
+initially_reached
+union
+check_unused_functions
+inline
+check_inlines
+check_imports
+ignore_predefined_funcs
+removed_desc
+otp_doc_vsn
+generated
+removed_fa
+removed_cat
+check_removed
+deprecated_desc
+next_version
+next_major_release
+eventually
+deprecated_flag
+depr_fa
+depr_cat
+check_deprecated
+behaviour_add_conflict
+behaviour_add_conflicts
+to_external
+family_specification
+relation_to_family
+converse
+family_to_relation
+relation
+behaviour_conflicting
+behaviour_missing_callbacks
+callbacks
+behaviour_callbacks
+all_behaviour_callbacks
+behaviour_check
+check_behaviour
+post_traversal_check
+disallowed_compile_flags
+not_removed
+not_deprecated
+bif_clashes
+dialyzer
+function_state
+optional_callbacks
+opaque
+import
+export_type
+export
+callback
+behaviour
+behavior
+attribute_state
+start_state
+form
+map_anno
+anno_set_file
+set_file
+set_form_file
+eval_file_attr
+eval_file_attribute
+includes_qlc_hrl
+pre_scan
+forms
+location
+loc
+add_lint_warning
+add_warning
+add_lint_error
+bin_seg_size
+add_error
+pack_warnings
+mapfoldl
+pack_errors
+return_status
+is_warn_enabled
+guard
+usage
+nowarn_format
+warn_format
+is_element
+unused_vars
+underscore_match
+export_vars
+shadow_vars
+bif_clash
+deprecated_function
+'-all_available/2-lc$^0/1-0-'
+missing_spec_all
+keyword_warning
+rootname
+'-all_available/2-fun-1-'
+redefined_builtin_type
+'-all_available/2-F/2-1-'
+warn_singleton_typevar
+nowarn_singleton_typevar
+on_load_not_allowed
+'-prepare_loading_3/1-lc$^0/1-0-'
+warn_redefined_builtin_type
+nowarn_redefined_builtin_type
+'-partition_on_load/1-fun-0-'
+warn_keywords
+nowarn_keywords
+'-load_mods/1-fun-0-'
+'-load_bins/1-fun-0-'
+warn_nif_inline
+nowarn_nif_inline
+'-do_par_fun/2-lc$^0/1-0-'
+'-do_par_fun/2-fun-1-'
+warn_removed
+nowarn_removed
+warn_missing_spec_all
+'-do_par_fun_each/3-fun-0-'
+nowarn_missing_spec_all
+warn_missing_spec
+nowarn_missing_spec
+warn_untyped_record
+nowarn_untyped_record
+warn_obsolete_guard
+nowarn_obsolete_guard
+'-load_code_server_prerequisites/0-lc$^0/1-0-'
+warn_deprecated_type
+nowarn_deprecated_type
+eep48
+debug_info
+warn_deprecated_function
+nowarn_deprecated_function
+'-get_doc/2-fun-0-'
+warn_unused_record
+'-get_type_docs_from_ast/1-fun-0-'
+nowarn_unused_record
+warn_bif_clash
+'-get_function_docs_from_ast/1-fun-0-'
+nowarn_bif_clash
+warn_unused_type
+spec
+'-get_function_docs_from_ast/2-fun-0-'
+nowarn_unused_type
+warn_unused_function
+'-set_primary_archive/4-lc$^0/1-0-'
+'-module_status/0-lc$^0/1-0-'
+nowarn_unused_function
+'-module_status/1-lc$^0/1-0-'
+warn_unused_import
+nowarn_unused_import
+'-modified_modules/0-lc$^0/1-0-'
+warn_shadow_vars
+nowarn_shadow_vars
+warn_export_vars
+path_files
+modified_modules
+do_beam_file_md5
+nowarn_export_vars
+beam_file_md5
+warn_export_all
+module_changed_on_disk
+nowarn_export_all
+modified
+warn_underscore_match
+nowarn_underscore_match
+cover_compiled
+module_status
+warn_unused_vars
+nowarn_unused_vars
+warning_report
+compiler_options
+lint
+cache_warning
+used_vars
+code_path_cache
+maybe_warn_for_cache
+exprs_opt
+nthtail
+has_ext
+filter2
+pseudolocals
+get_line
+format_where
+decorate
+build
+format_mna
+format_mf
+search
+clash
+format_mfa
+gen_type_paren_1
+gen_type_paren
+get_function_docs_from_ast
+signature
+utf_bittype_size_or_unit
+unsized_binary_not_at_end
+unsized_binary_in_bin_gen_pattern
+undefined_module
+flatmap
+get_type_docs_from_ast
+typed_literal_string
+spec_wrong_arity
+no_abstract_code
+docs_v1
+redefine_module
+raw_abstract_v1
+pmod_unsupported
+abstract_code
+get_doc_chunk_from_ast
+'-del_dir_r/1-fun-0-'
+old_abstract_code
+'-socket_send/1-fun-0-'
+dirname
+non_latin1_module_unsupported
+'-gen_tcp_send/1-fun-0-'
+non_integer_bitsize
+missing_chunk
+file_reply
+no_load_nif
+nif_inline
+chunks
+get_doc_chunk
+is_dir
+multiple_on_loads
+invalid_record
+file_request
+invalid_call
+check_args
+erts
+illegal_record_info
+check_and_call
+sources
+get_doc
+illegal_pattern
+illegal_map_key
+illegal_map_construction
+non_existing
+where_is_file
+illegal_guard_expr
+illegal_expr
+which
+macro_log
+character
+illegal_bitsize
+'-call/4-fun-0-'
+'-send_request/3-fun-0-'
+export_all
+mode_list
+'-receive_response/3-fun-0-'
+make_binary
+empty_module_name
+disallowed_nowarn_bif_clash
+'-stop/3-fun-0-'
+start_get_mode
+file_name_1
+ctrl_chars_in_module_name
+do_s
+compiler
+callback_wrong_arity
+'$status'
+format_status
+blank_module_name
+file_name
+format_status_header
+bittype_unit
+do_stick_dirs
+fname_join
+bad_multi_field_init
+wildcard_in_update
+nostick
+debug_options
+path_open_first
+maybe_stick_dirs
+variable_in_record_def
+hibernate_after
+spawn_opts
+could_not_find_registered_name
+load_code_server_prerequisites
+unused_var
+unused_type
+name_to_pid
+process_was_not_started_by_proc_lib
+unused_record
+eval_stream2
+parse_erl_exprs
+unused_import
+'$ancestors'
+get_parent
+process_not_registered_globally
+eval_stream
+good
+unused_function
+set_encoding
+process_not_registered
+untyped_record
+bad
+process_not_registered_via
+undefined_type
+do_par_recv
+consult_stream
+sendfile_send
+get_proc_name
+do_par_fun_each
+undefined_record
+sendfile_fallback_int
+do_par_fun
+undefined_on_load
+undefined_nif
+unregister_name
+undefined_callback
+sendfile_fallback
+do_par
+undefined_bittype
+undefined_behaviour_callbacks
+gen_tcp_send
+load_bins
+load_mods
+register_name
+socket_send
+undefined_behaviour
+verify_prepared
+unbound_var
+whereis_name
+type_syntax
+partition
+partition_on_load
+too_many_arguments
+prepare_check_uniq_1
+where
+stacktrace_guard
+'$inet'
+stacktrace_bound
+prepare_check_uniq
+via
+get_value
+spec_fun_undefined
+singleton_typevar
+prepare_loading_3
+chunk_size
+redefine_type
+prepare_loading_2
+do_for_proc
+redefine_spec
+change_time
+change_group
+redefine_record
+do_prepare_loading
+to_list
+partition_load
+reqids_to_list
+change_owner
+redefine_optional_callback
+redefine_old_bif_import
+change_mode
+'$prepared$'
+reqids_add
+redefine_import
+redefine_function
+atomic_load
+reqids_size
+reqids_new
+redefine_callback
+prepare_ensure
+path_open
+redefine_builtin_type
+ensure_modules_loaded_2
+path_script
+redefine_bif_import
+flush_responses
+usort
+obsolete_guard_overridden
+path_eval
+ensure_modules_loaded_1
+obsolete_guard
+collection_result
+not_exported_opaque
+ensure_modules_loaded
+replace_path
+missing_spec
+missing_qlc_hrl
+no_reply
+del_paths
+del_path
+path_consult
+consult
+add_pathsa
+check_response
+match_underscore_var_pat
+match_underscore_var
+add_pathsz
+receive_response
+no_request
+add_paths
+invalid_removed
+ipread_s32bu_p32bu_2
+wait_response
+invalid_deprecated
+ipread_s32bu_p32bu_int
+add_patha
+illegal_guard_local_call
+'@wait_response_recv_opt'
+do_send_request
+add_pathz
+illegal_bitsize_local_call
+ill_defined_optional_callbacks
+ill_defined_behaviour_callbacks
+add_path
+send_request
+copy_opened_int
+duplicated_export_type
+copy_int
+duplicated_export
+define_import
+call_to_redefined_old_bif
+call_to_redefined_bif
+nocache
+pwrite_int
+behaviour_info
+is_sticky
+put_chars
+bad_removed
+unstick_mod
+calling_self
+bad_on_load_arity
+stick_mod
+pread_int
+do_call
+unstick_dir
+bad_on_load
+stick_dir
+bad_nowarn_unused_function
+init_it2
+init_fail
+priv_dir
+bad_nowarn_bif_clash
+bad_module
+compiler_dir
+dir
+get_chars
+bad_inline
+monitor_return
+lib_dir
+start_monitor
+bad_export_type
+bad_dialyzer_option
+root_dir
+init_it
+bad_dialyzer_attribute
+bad_deprecated
+ram
+extension
+umerge
+bad_callback
+raw_write_file_info
+raw_read_file_info
+bad_bitsize
+do_spawn
+do_write_file
+attribute
+unsafe_var
+undefined_field
+undefined_behaviour_func
+get_mode
+all_available
+shadowed_var
+renamed_type
+removed_type
+get_object_code
+del_dir_r
+redefine_field
+is_loaded
+int_list
+future_feature
+modp
+field_name_is_variable
+exported_var
+removed
+load_binary
+deprecated_type
+'$handle_undefined_function'
+call_undefined_function_handler
+deprecated_builtin_type
+bittype_mismatch
+stub_function
+concat
+basename
+load_abs
+sync_ensure_on_load
+conflicting_behaviours
+value_option
+pid2name
+terminated
+undefined_script
+bool_option
+load_file
+try_decompress
+module_md5_1
+module_md5
+get_chunk_1
+get_chunk
+raise_undef_exception
+mfa
+remove_handler_failed
+filter_stacktrace
+filter
+removed_failing_filter
+remove_filter
+handle_filter_failed
+bad_return_value
+do_apply_filters
+filter_default
+apply_filters
+handler
+log_event
+internal_log
+removed_failing_handler
+do_internal_log
+allow
+remove_handler
+without
+call_handlers
+handlers
+filters
+log_allowed
+'-do_start_slave/3-fun-1-'
+'-do_start_slave/3-fun-0-'
+relay_loop
+already_started
+relay_start
+do_start_slave
+no_master
+do_start
+code_change
+handle_info
+handle_cast
+noreply
+stopped
+handle_call
+format_error
+erlangrc
+start_boot
+applications_loaded
+pool_master
+take_over_monitor
+rsh_starter
+timer_server
+stdlib
+load
+init_kernel_started
+mod
+maxP
+maxT
+shell_docs_ansi
+prevent_overlapping_partitions
+net_ticktime
+net_tickintensity
+logger_sasl_compatible
+notice
+logger_level
+included_applications
+optional_applications
+applications
+ddll_server
+os_server
+rex
+net_sup
+kernel_sup
+fixtable_server
+file_server_2
+boot_server
+modules
+vsn
+start_link
+modules_loaded
+win32reg
+uri_string
+unicode_util
+sys
+supervisor_bridge
+sofs
+shell_docs
+shell_default
+shell
+sets
+rand
+queue
+qlc_pt
+qlc
+proplists
+pool
+peer
+otp_internal
+ordsets
+orddict
+ms_transform
+log_mf_h
+io_lib_pretty
+io_lib_fread
+io_lib_format
+gen_statem
+gen_fsm
+gb_trees
+gb_sets
+filelib
+file_sorter
+eval_bits
+escript
+error_logger_tty_h
+error_logger_file_h
+erl_tar
+erl_pp
+erl_posix_msg
+erl_internal
+erl_features
+erl_expand_records
+erl_error
+erl_compile
+erl_bits
+erl_abstract_code
+epp
+edlin_type_suggestion
+edlin_expand
+edlin_context
+edlin
+digraph_utils
+digraph
+dict
+dets_v9
+dets_utils
+dets_sup
+dets_server
+dets
+calendar
+c
+beam_lib
+base64
+array
+argparse
+wrap_log_reader
+user_sup
+user_drv
+rpc
+raw_file_io_list
+raw_file_io_inflate
+raw_file_io_delayed
+raw_file_io_deflate
+raw_file_io_compressed
+raw_file_io
+ram_file
+pg2
+pg
+net_adm
+logger_sup
+logger_std_h
+logger_proxy
+logger_olp
+logger_handler_watcher
+logger_h_common
+logger_formatter
+logger_disk_log_h
+local_udp
+local_tcp
+kernel_config
+inet_udp
+inet_tcp_dist
+inet_tcp
+inet_sctp
+inet_res
+inet_parse
+inet_hosts
+inet_gethost_native
+inet_epmd_socket
+inet_epmd_dist
+inet_dns
+inet_db
+inet_config
+inet6_udp
+inet6_tcp_dist
+inet6_tcp
+inet6_sctp
+group_history
+group
+global_search
+global_group
+gen_udp_socket
+gen_udp
+gen_tcp_socket
+gen_tcp
+gen_sctp
+erpc
+erl_signal_handler
+erl_reply
+erl_epmd
+erl_distribution
+erl_compile_server
+erl_boot_server
+dist_util
+dist_ac
+disk_log_sup
+disk_log_server
+disk_log_1
+disk_log
+application_starter
+supervisor
+proc_lib
+logger_simple_h
+logger_config
+logger_backend
+logger_filters
+gen_server
+gen_event
+gen
+file_io_server
+file_server
+erl_lint
+code_server
+application_master
+application_controller
+application
+preloaded
+noshell
+home
+progname
+net
+no_uniconde_traslation
+no_function
+no_data
+not_enough_memory
+invalid_parameter
+invalid_flags
+invalid_data
+insufficient_buffer
+esystem
+esocktype
+eservice
+eoverflow
+enxio
+enoname
+enodata
+enametoolong
+emem
+efault
+efamily
+efail
+ebadflags
+eaddrfamily
+can_not_complete
+address_not_associated
+zone_indices
+wwanpp2
+wwanpp
+well_known
+valid_lifetime
+unreachable
+unicast_addrs
+unchanged
+transient
+testing
+tentative
+suffix_origin
+speed
+software_loopback
+service
+router_advertisement
+register_adapter_suffix
+receive_only
+reasm_size
+prefix_origin
+prefixes
+preferred_lifetime
+preferred
+ppp
+phys_addr
+out_qlen
+out_errors
+out_discards
+out_nucast_pkts
+out_ucast_pkts
+out_octets
+oper_status
+operational
+on_link_prefix_length
+numericserv
+numerichost
+no_multicast
+not_present
+non_operational
+nofqdn
+netbios_over_tcpip_enabled
+name_info
+namereqd
+multicast_addrs
+mask
+manual
+lower_layer_down
+link_layer_address
+lease_lifetime
+last_change
+iso88025_tokenring
+ipv6_other_stateful_config
+ipv6_managed_address_config_supported
+ipv6_index
+ipv6_enabled
+ipv4_enabled
+in_unknown_protos
+in_errors
+in_discards
+in_nucast_pkts
+in_ucast_pkts
+in_octets
+internal_oper_status
+ieee80216_wman
+ieee80211
+idn
+friendly_name
+fddi
+ethernet_csmacd
+duplicate
+dns_suffix
+dns_server_addrs
+dns_eligible
+disconnected
+ddns_enabled
+dhcp_v4_enabled
+dhcp
+description
+deprecated
+dad_state
+bcast_addr
+anycast_addrs
+admin_status
+address_info
+divert
+'DIVERT'
+pfsync
+'PFSYNC'
+rohc
+'ROHC'
+wesp
+'WESP'
+shim6
+'SHIM6'
+hip
+'HIP'
+manet
+'MANET'
+'mpls-in-ip'
+'MPLS-IN-IP'
+udplite
+'UDPLite'
+'mobility-header'
+'Mobility-Header'
+'rsvp-e2e-ignore'
+'RSVP-E2E-IGNORE'
+fc
+'FC'
+'SCTP'
+pipe
+'PIPE'
+sps
+'SPS'
+iplt
+'IPLT'
+sscopmce
+'SSCOPMCE'
+crudp
+'CRUDP'
+crtp
+'CRTP'
+fire
+'FIRE'
+isis
+'ISIS'
+ptp
+'PTP'
+sm
+'SM'
+smp
+'SMP'
+uti
+'UTI'
+srp
+'SRP'
+stp
+'STP'
+iatp
+'IATP'
+ddx
+'DDX'
+l2tp
+'L2TP'
+pgm
+'PGM'
+carp
+vrrp
+'CARP'
+'ipx-in-ip'
+'IPX-in-IP'
+'compaq-peer'
+'Compaq-Peer'
+snp
+'SNP'
+ipcomp
+'IPComp'
+'a/n'
+'A/N'
+qnx
+'QNX'
+scps
+'SCPS'
+aris
+'ARIS'
+pim
+'PIM'
+pnni
+'PNNI'
+ifmp
+'IFMP'
+gmtp
+'GMTP'
+encap
+'ENCAP'
+etherip
+'ETHERIP'
+'scc-sp'
+'SCC-SP'
+micp
+'MICP'
+'IPIP'
+'ax.25'
+'AX.25'
+mtp
+'MTP'
+larp
+'LARP'
+'sprite-rpc'
+'Sprite-RPC'
+ospf
+'OSPFIGP'
+eigrp
+'EIGRP'
+tcf
+'TCF'
+dgp
+'DGP'
+'nsfnet-igp'
+'NSFNET-IGP'
+ttp
+'TTP'
+vines
+'VINES'
+'secure-vmtp'
+'SECURE-VMTP'
+vmtp
+'VMTP'
+'iso-ip'
+'ISO-IP'
+'wb-expak'
+'WB-EXPAK'
+'wb-mon'
+'WB-MON'
+'sun-nd'
+'SUN-ND'
+'br-sat-mon'
+'BR-SAT-MON'
+pvp
+'PVP'
+wsn
+'WSN'
+cphb
+'CPHB'
+cpnx
+'CPNX'
+ipcv
+'IPCV'
+visa
+'VISA'
+'sat-mon'
+'SAT-MON'
+ippc
+'IPPC'
+rvd
+'RVD'
+kryptolan
+'KRYPTOLAN'
+'sat-expak'
+'SAT-EXPAK'
+cftp
+'CFTP'
+'ipv6-opts'
+'IPV6-OPTS'
+'ipv6-nonxt'
+'IPV6-NONXT'
+'ipv6-icmp'
+'IPV6-ICMP'
+'SKIP'
+tlsp
+'TLSP'
+mobile
+'MOBILE'
+narp
+'NARP'
+swipe
+'SWIPE'
+'i-nlsp'
+'I-NLSP'
+ah
+'AH'
+esp
+'ESP'
+bna
+'BNA'
+dsr
+'DSR'
+gre
+'GRE'
+rsvp
+'RSVP'
+idrp
+'IDRP'
+'ipv6-frag'
+'IPV6-FRAG'
+'ipv6-route'
+'IPV6-ROUTE'
+sdrp
+'SDRP'
+'IPV6'
+il
+'IL'
+'tp++'
+'TP++'
+'idpr-cmtp'
+'IDPR-CMTP'
+ddp
+'DDP'
+xtp
+'XTP'
+idpr
+'IDPR'
+'3pc'
+'3PC'
+dccp
+'DCCP'
+'merit-inp'
+'MERIT-INP'
+'mfe-nsp'
+'MFE-NSP'
+netblt
+'NETBLT'
+'iso-tp4'
+'ISO-TP4'
+irtp
+'IRTP'
+rdp
+'RDP'
+'leaf-2'
+'LEAF-2'
+'leaf-1'
+'LEAF-1'
+'trunk-2'
+'TRUNK-2'
+'trunk-1'
+'TRUNK-1'
+'xns-idp'
+'XNS-IDP'
+prm
+'PRM'
+hmp
+'HMP'
+dcn
+'DCN-MEAS'
+mux
+'MUX'
+'UDP'
+'CHAOS'
+xnet
+'XNET'
+emcon
+'EMCON'
+argus
+'ARGUS'
+'PUP'
+nvp
+'NVP-II'
+'bbn-rcc'
+'BBN-RCC-MON'
+igp
+'IGP'
+'EGP'
+cbt
+'CBT'
+'TCP'
+st2
+'ST2'
+ipencap
+'IP-ENCAP'
+ggp
+'GGP'
+'IGMP'
+'ICMP'
+'IP'
+sockets
+select_write
+select_read
+eagain
+create_accept_socket
+zero
+write_waits
+write_tries
+write_pkg
+write_fails
+write_byte
+v6only
+void
+use_min_mtu
+use_ext_recvinfo
+user_timeout
+usec
+update_connect_context
+update_accept_context
+unknown
+unicast_hops
+unblock_source
+txqlen
+tunnel6
+tunnel
+transparent
+throughput
+syncnt
+staticarp
+spec_dst
+sndtimeo
+sndlowat
+sndbufforce
+slen
+slave
+simplex
+set_peer_primary_addr
+setfib
+sendsrcaddr
+sendfile_waits
+sendfile_tries
+sendfile_pkg_max
+sendfile_pkg
+sendfile_max
+sendfile_fails
+sendfile_byte
+select_sent
+select_failed
+sec
+rxq_ovfl
+rtoinfo
+rthdr
+router_alert
+rights
+retopts
+reset_streams
+renaming
+reliability
+recvpktinfo
+recvorigdstaddr
+recvopts
+recvif
+recvhoplimit
+recverr
+recvdstaddr
+read_tries
+read_pkg
+read_fails
+read_byte
+rdm
+rcvtimeo
+rcvlowat
+rcvbufforce
+pup
+pronet
+promisc
+primary_addr
+ppromisc
+portsel
+portrange
+pointopoint
+pkttype
+pktinfo
+peercred
+peer_auth_chunks
+peer_addr_params
+peek
+passcred
+partial_delivery_point
+outgoing
+otherhost
+origdstaddr
+oobinline
+oob
+oactive
+num_unknown_cmds
+num_unexpected_writes
+num_unexpected_reads
+num_unexpected_connects
+num_unexpected_accepts
+num_threads
+num_general_errors
+not_bound
+notrailers
+nosignal
+noopt
+nodefrag
+noarp
+nlen
+netrom
+multicast_hops
+multicast_all
+mtu_discover
+msfilter
+minttl
+mincost
+metricom
+mem_start
+mem_end
+md5sig
+maxseg
+maxburst
+master
+mark
+lower_up
+lowdelay
+local_auth_chunks
+localtlk
+link2
+link1
+link0
+leave_group
+knowsepoch
+kernel
+keepintvl
+keepidle
+keepcnt
+join_group
+i_want_mapped_v4_addr
+irq
+ipv6
+ipip
+ipcomp_level
+ip
+integer_range
+initmsg
+infiniband
+implink
+igmp
+ifindex
+ieee1394
+ieee802
+icmp6
+icmp
+host
+hopopts
+hoplimit
+hmac_ident
+hdrincl
+hatype
+get_peer_addr_info
+get_overlapped_result
+frelay
+freebind
+fragment_interleave
+fastroute
+faith
+explicit_eor
+events
+eui64
+esp_trans_level
+esp_network_level
+errqueue
+eor
+egp
+eether
+echo
+dynamic
+dying
+dup
+dstopts
+drop_source_membership
+dormant
+dontfrag
+dma
+dlci
+disable_fragments
+delayed_ack_time
+default_send_params
+data_size
+ctrunc
+credentials
+cork
+context
+congestion
+confirm
+completion_status
+cmsg_cloexec
+checksum
+chaos
+cantconfig
+cancelled
+busy_poll
+block_source
+bindtodevice
+base_addr
+bad_data
+ax25
+automedia
+autoclose
+auth_level
+auth_key
+auth_delete_key
+auth_chunk
+auth_asconf
+auth_active_key
+authhdr
+atm
+associnfo
+arcnet
+appletlk
+already
+allmulti
+alen
+add_source_membership
+add_socket
+addrform
+adaption_layer
+acc_waits
+acc_tries
+acc_fails
+acc_success
+acceptfilter
+acceptconn
+zerocopy
+wstates
+write_pkg_max
+want
+txtime
+txstatus
+time_exceeded
+sourceaddr
+socket_level
+slist
+siftxqlen
+sifnetmask
+sifmtu
+sifdstaddr
+sifbrdaddr
+sifaddr
+send_failure
+sender_dry
+selected
+rstates
+remote
+reject_route
+read_waits
+read_pkg_max
+probe
+port_unreach
+policy_fail
+pkt_toobig
+peer_rwnd
+peer_error
+partial_delivery
+otp_socket_option
+origin
+onoff
+offender
+num_writers
+num_tstreams
+num_tseqpkgs
+num_tdgrams
+num_sockets
+num_readers
+num_pudp
+num_ptcp
+num_psctp
+num_pip
+number_peer_destinations
+num_outstreams
+num_dlocal
+num_dinet6
+num_dinet
+num_cnt_bits
+num_acceptors
+null
+not_neighbour
+noroute
+nogroup
+net_unreach
+net_unknown
+multiaddr
+missing
+asocmaxrxt
+max_instreams
+max_init_timeo
+max_attempts
+local_rwnd
+listening
+io_num_threads
+io_backend
+iov_max
+interface
+initial
+include
+in6_sockaddr
+in4_sockaddr
+how
+host_unreach
+host_unknown
+giftxqlen
+gifnetmask
+gifname
+gifmtu
+gifmap
+gifindex
+gifhwaddr
+gifflags
+gifdstaddr
+gifconf
+gifbrdaddr
+gifaddr
+frag_needed
+exclude
+eei
+dtor
+dont
+do
+dest_unreach
+data_io
+ctype
+counter_wrap
+cookie_life
+closing
+bufsz
+boolean
+authentication
+assoc_id
+association
+adm_prohibited
+address
+addr_unreach
+adaptation_layer
+symlink
+device
+no_reuse
+dont_need
+will_need
+random
+skip_type_check
+gc_buffer
+out_of_memory
+acquired
+lock_order_violation
+trace_ts
+gc_zlib
+unknown_error
+version_error
+buf_error
+mem_error
+stream_error
+stream_end
+already_initialized
+not_initialized
+sub_get
+handle_sys_task
+handle_incoming_signals
+done
+erts_dirty_process_signal_handler
+send_copy_req
+send_copy_reqs
+check_send_copy_req
+switch_area
+not_handled_message
+working
+idle
+msg_loop
+nif_not_loaded
+ets_info_binary_iter
+ets_info_binary_error
+sched_wall_time
+kernel_refc
+find_lac
+code_purger
+literal_area_collector
+set_code_and_literal_cleaner_prio
+'@flush_monitor_messages_refopt'
+mc_refill
+is_map_iter
+mc_iterator
+get_cpc_opts
+mseg_alloc
+gcopt
+allow_gc
+'-inlined-error_with_inherited_info/3-'
+ensure_tracer_module_loaded
+gc_info
+schedulers
+receive_allocator
+insert_info
+instance
+insert_instance
+mk_res_list
+get_alloc_info
+process_table
+module_table
+module_refs
+loaded_code
+fun_table
+external_alloc
+export_table
+export_list
+ets_misc
+atom_table
+atom_space
+aa_mem_data
+receive_emd
+fix_alloc
+au_mem_data
+sbcs
+mbcs_pool
+mbcs
+au_mem_current
+au_mem_blocks_1
+blocks
+au_mem_blocks
+acc_blocks_size
+ets_alloc
+eheap_alloc
+binary_alloc
+au_mem_acc
+au_mem_fix
+fix_types
+fix_proc
+proc
+msg_ref
+ll_ptimer
+hl_ptimer
+bif_timer
+accessor_bif_timer
+get_fix_proc
+get_memval
+memory_1
+rvrs
+processor_node
+cput_i2e_tag
+cput_i2e_tag_map
+cput_i2e
+cput_e2i
+logical
+thread
+processor
+core
+cput_e2i_clvl
+internal_cpu_topology
+get_cookie
+auth
+set_cookie
+passive_cnct
+send_nosuspend
+fun_info_1
+disconnect
+disconnect_node
+crasher
+new_stacktrace
+prepare_loading_1
+is_alive
+garbage_collect_message_area
+get_gc_opts
+stderr
+bad_option
+radix
+digits_per_small
+trim_zeroes
+get_sign
+combine_pairs
+combine
+segmentize_1
+segmentize
+big_binary_to_int
+clean
+'no server found'
+ebusy
+std_error
+error_report
+file_error
+invalid_current_directory
+'-prim_read_file_info/3-inlined-0-'
+'-prim_list_dir/2-inlined-0-'
+'-prim_get_file/2-inlined-0-'
+'-open_archive/4-inlined-0-'
+'-foldl_archive/3-inlined-0-'
+'-start/0-fun-0-'
+'-efile_get_mods_par/3-fun-0-'
+'-efile_gm_spawn_1/5-fun-0-'
+'-prim_get_file/2-fun-0-'
+'-prim_list_dir/2-fun-0-'
+'-prim_read_file_info/3-fun-0-'
+'-open_archive/4-fun-0-'
+'-ensure_virtual_dirs/6-fun-0-'
+'-ensure_virtual_dirs/6-fun-1-'
+'-foldl_archive/3-fun-0-'
+'-load_prim_archive/3-fun-0-'
+load_prim_archive
+real_path
+normalize
+win32_pathtype
+unix_pathtype
+pathtype
+absname_vr
+volumerelative
+relative
+absolute
+ipv4_addr
+ipv4_address
+ipv4_list
+is_prefix
+archive_split
+no_match
+string_match
+archive
+no_split
+name_split
+path_join
+path_split
+to_strs
+keyins
+keysort
+deep_member
+send_all
+win32
+is_basename
+clear_cache
+cache_new
+foldl_archive
+ensure_virtual_dirs
+open_archive
+cache
+apply_archive
+prim_get_cwd
+archive_read_file_info
+prim_read_file_info
+archive_list_dir
+prim_list_dir
+archive_get_file
+prim_get_file
+primary
+prim_set_primary_archive
+do_prim_purge_cache
+prim_purge_cache
+loader_debug
+prim_init
+port_error
+ll_close
+ll_open_set_bind
+ll_udp_open
+ll_tcp_connect
+udp_options
+tcp_timeout
+tcp_options
+inet_stop_port
+inet_get_cwd
+inet_read_link_info
+inet_read_file_info
+inet_list_dir
+inet_send_and_rcv
+inet_get_file_from_port1
+inet_get_file_from_port
+inet_timeout_handler
+inet_exit_port
+find_collect
+find_loop
+connect_master
+find_master
+bad_return
+gm_process
+gm_arch_get
+gm_get_mods
+efile_gm_get_1
+efile_gm_get
+efile_gm_spawn_1
+efile_gm_spawn
+efile_gm_recv
+efile_any_archives
+efile_get_mods_par
+handle_get_modules
+efile_timeout_handler
+efile_get_cwd
+efile_read_file_info
+efile_list_dir
+efile_set_primary_archive
+emfile
+efile_get_file_from_port3
+'prim_load port died'
+port_died
+efile_get_file_from_port2
+efile_get_file_from_port
+handle_timeout
+handle_exit
+handle_stop
+handle_get_cwd
+handle_read_link_info
+handle_read_file_info
+handle_list_dir
+handle_purge_archive_cache
+handle_set_primary_archive
+handle_get_file
+bad_state
+report
+enotdir
+enoent
+check_file_result
+purge_archive_cache
+set_primary_archive
+get_path
+init_ack
+noport
+efile
+start_efile
+hosts
+start_inet
+loader
+prim_state
+'-filter_fun/0-fun-0-'
+'-include_acc/3-fun-0-'
+'-get_cd_loop/11-fun-0-'
+'-get_cd_loop/11-fun-1-'
+'-get_cd_loop/11-fun-2-'
+pwrite_binary
+pwrite_iolist
+skipper
+skip_iolist
+splitter
+split_iolist
+local_file_header
+local_file_header_from_bin
+bad_cd_file_header
+cd_file_header
+cd_file_header_from_bin
+dos_date_time_to_datetime
+add_extra_info
+cd_file_header_to_file_info
+eocd
+eocd_and_comment_from_bin
+regular
+binary_io
+set_file_info
+prim_file_io
+find_eocd_header
+seek
+bad_eocd
+get_end_of_central_dir
+get_filename_from_b2
+bad_central_directory
+get_file_header
+get_cd_loop
+get_central_dir
+offset_over_z_data_descriptor
+unsupported_compression
+get_z_all
+bad_local_file_header
+bad_local_file_offset
+get_z_file
+get_zip_input
+lists_foldl
+include_acc
+illegal_filter
+primzip_file
+do_foldl
+foldl
+primzip
+do_open
+filter_fun_throw
+filter_fun
+prim_zip
+skip_unicast
+skip_multicast
+skip_friendly_name
+skip_dns_server
+skip_anycast
+include_wins_info
+include_tunnel_bindingorder
+include_prefix
+include_gateways
+include_all_interfaces
+include_all_compartments
+'-getaddrinfo/2-lc$^0/1-0-'
+nif_if_names
+nif_if_index2name
+nif_if_name2index
+nif_get_ip_address_table
+nif_get_interface_info
+nif_get_if_entry
+nif_get_adapters_addresses
+nif_getifaddrs
+nif_getaddrinfo
+nif_getnameinfo
+nif_gethostname
+if_names
+if_index2name
+if_name2index
+get_ip_address_table
+get_if_entry
+get_interface_info
+no_skips_no_includes
+no_skips_all_includes
+all_skips_no_includes
+all_skips_all_includes
+get_adapters_addresses
+getaddrinfo
+getnameinfo
+peek_off
+'-supports/2-inlined-0-'
+'-init/0-fun-0-'
+'-init/0-fun-1-'
+'-init/0-fun-2-'
+'-init/0-fun-3-'
+'-init/0-fun-4-'
+'-supports/1-fun-4-'
+'-supports/1-fun-3-'
+'-supports/1-fun-2-'
+'-supports/1-fun-1-'
+'-supports/1-fun-0-'
+'-supports/2-fun-0-'
+'-is_supported/2-fun-4-'
+'-is_supported/2-fun-3-'
+'-is_supported/2-fun-2-'
+'-is_supported/2-fun-1-'
+'-is_supported/2-fun-0-'
+'-bind/3-lc$^0/1-0-'
+'-enc_ioctl_flags/2-fun-0-'
+'-merge_sockaddr/2-fun-0-'
+'-enc_msg/1-fun-0-'
+'-enc_cmsgs/2-lc$^0/1-0-'
+level
+'-dec_cmsgs/2-lc$^0/1-0-'
+nif_cancel
+nif_ioctl
+nif_peername
+nif_sockname
+nif_getopt
+nif_setopt
+nif_shutdown
+nif_finalize_close
+nif_close
+nif_recvmsg
+nif_recvfrom
+nif_recv
+nif_sendfile
+nif_sendmsg
+nif_sendto
+nif_send
+nif_accept
+nif_listen
+nif_connect
+nif_bind
+nif_open
+nif_supports
+nif_command
+nif_info
+p_get
+p_put
+ioctl_flag
+invalid_ioctl_flag
+invalid_socket_option
+sndctrlbuf
+rcvctrlbuf
+rcvbuf
+iow
+controlling_process
+otp
+enc_sockopt
+dec_cmsgs
+enc_cmsgs
+enc_msg
+msg_flag
+enc_msg_flags
+enc_path
+merge_sockaddr
+enc_sockaddr
+enc_protocol
+enc_ioctl_flags
+enc_ioctl_request
+cancel
+sifflags
+ioctl_request
+ioctl
+value_spec
+getopt_native
+getopt_result
+socket_option
+setopt_common
+setopt_native
+finalize_close
+recvmsg
+improper_list
+element_not_binary
+invalid_iov
+rest_iov
+msg
+with
+ctrl
+sendmsg_invalid
+iov
+sendmsg_result
+completion
+nth
+domain
+get_is_supported
+p_get_is_supported
+is_supported
+is_supported_option
+fold
+supports
+protocol
+options_table
+protocols_table
+put_supports_table
+msg_flags
+ioctl_flags
+ioctl_requests
+options
+protocols
+socket_debug
+debug_filename
+use_registry
+registry
+unknown_monitor
+unknown_socket
+'-loop/1-fun-0-'
+'-do_which_sockets/2-lc$^0/1-0-'
+whoami
+user_size
+user_which_monitors
+user_update
+user_take
+user_lookup
+user_delete
+sock_which_monitors
+sock_update
+sock_take
+sock_lookup
+mon_size
+mon_update
+mon_take
+mon_lookup
+mon_delete
+do_cancel_monitor_socket
+nosock
+mon
+msocket
+do_monitor_socket
+do_which_sockets
+sock_size
+socket
+mk_down_msg
+error_msg
+mk_log_msg
+log_msg
+handle_unexpected_msg
+handle_monitored_by2
+handle_monitored_by
+handle_user_down_cleanup
+handle_user_down
+bad_request
+send_down
+handle_send_down
+user_sock_delete_update
+handle_delete_socket
+handle_add_socket
+sendfile_deferred_close
+'$socket'
+which_monitors
+number_of_monitors
+cancel_monitor
+which_sockets
+number_of
+socket_registry
+enqueue_nif
+enqueue_input_1
+enqueue_input
+bad_memlevel
+arg_mem
+bad_windowbits
+arg_bitsz
+bad_eos_behavior
+arg_eos_behavior
+bad_compression_method
+arg_method
+bad_compression_strategy
+rle
+huffman_only
+filtered
+arg_strategy
+bad_compression_level
+best_speed
+best_compression
+arg_level
+bad_flush_mode
+full
+arg_flush
+getStash_nif
+setStash_nif
+clearStash_nif
+empty
+restore_progress
+save_progress
+append_iolist
+dequeue_next_chunk
+dequeue_all_chunks_1
+dequeue_all_chunks
+gunzip
+gzip
+unzip
+zip
+data_error
+uncompress
+finish
+compress
+crc32_nif
+getBufSize_nif
+getBufSize
+setBufSize_nif
+setBufSize
+inflateEnd_nif
+inflateEnd
+safeInflate
+need_dictionary
+finished
+yield_inflateChunk
+inflateChunk
+inflate_opts
+inflate_nif
+exception_on_need_dict
+inflate
+inflateReset_nif
+inflateReset
+inflateGetDictionary_nif
+not_supported
+inflateGetDictionary
+inflateSetDictionary_nif
+inflateSetDictionary
+inflateInit_nif
+cut
+inflateInit
+deflateEnd_nif
+deflateEnd
+deflate_nif
+zlib_opts
+deflate_opts
+deflateParams_nif
+deflate
+deflateParams
+deflateReset_nif
+deflateReset
+deflateSetDictionary_nif
+deflateSetDictionary
+deflateInit_nif
+deflated
+deflateInit
+set_controller_nif
+set_controlling_process
+to_posix_seconds
+from_posix_seconds
+is_path_translatable
+decode_path
+encode_path
+proplist_get_value
+reverse_list
+altname_nif
+get_cwd_nif
+set_cwd_nif
+get_device_cwd_nif
+del_dir_nif
+del_file_nif
+make_dir_nif
+rename_nif
+make_soft_link_nif
+make_hard_link_nif
+read_info_nif
+read_link_nif
+list_dir_nif
+altname
+make_symlink
+make_link
+del_dir
+make_dir
+set_cwd
+get_dcwd
+file_info_convert_ctime
+file_info_convert_mtime
+universal
+file_info_convert_atime
+throw_on_error
+set_time_nif
+set_time
+set_permissions_nif
+set_permissions
+set_owner_nif
+set_owner
+write_file_info_1
+write_file_info
+posix
+adjust_times
+read_handle_info_1
+read_handle_info
+read_info_1
+read_link_info
+no_translation
+gl
+list_dir_convert
+list_dir_1
+list_dir_all
+list_dir
+translate_raw_name
+read_link_1
+read_link_all
+read_link
+write_file
+read_file_nif
+read_file
+read_handle_info_nif
+delayed_close_nif
+get_handle_nif
+truncate_nif
+allocate_nif
+advise_nif
+sync_nif
+seek_nif
+pwrite_nif
+pread_nif
+write_nif
+read_nif
+close_nif
+file_desc_to_ref_nif
+open_nif
+read_ahead
+fill_fd_option_map
+build_fd_data
+not_on_controlling_process
+get_fd_data
+reset_write_position
+get_handle
+ipread_s32bu_p32bu_nif
+ipread_s32bu_p32bu
+internal_get_nif_resource
+sequential
+pwrite_list
+pwrite_plain
+pwrite
+pread_list
+pread
+position_1
+bof
+cur
+datasync
+sync
+allocate
+advise
+truncate
+write_1
+read_line_1
+read_line
+read_1
+r_ahead_size
+r_buffer
+make_fd
+file_desc_to_ref
+copy_opened
+file_descriptor
+helper_loop
+bound
+connecting
+accepting
+multicast
+no_pointtopoint
+no_broadcast
+down
+up
+term
+ssl
+sctp_setadaptation
+sctp_assocparams
+addr_over
+unordered
+sctp_assoc_value
+sctp_event_subscribe
+sackdelay_disable
+sackdelay_enable
+pmtud_disable
+pmtud_enable
+hb_demand
+hb_disable
+hb_enable
+sctp_paddrparams
+sctp_prim
+sctp_setpeerprim
+sctp_paddrinfo
+eprotonosupport
+'-bindx/3-lc$^0/1-0-'
+'-type_value_2/2-fun-1-'
+'-type_value_2/2-fun-0-'
+'-enc_value_2/2-lc$^0/1-1-'
+'-enc_value_2/2-lc$^1/1-0-'
+ctl_cmd
+get_ip6
+get_ip4
+get_ip
+get_addr
+get_addrs
+ip6_loopback
+ip6_any
+ip6_to_bytes
+ip4_loopback
+ip4_any
+ip4_to_bytes
+utf8_to_characters
+tree
+ktree_keys
+ktree_update
+ktree_insert
+ktree_get
+is_defined
+ktree_is_defined
+ktree_empty
+len
+rev
+build_iflist
+build_ifaddrs_opts
+build_ifaddrs
+encode_ifname
+enc_time
+dec_status
+dec_stats
+decode_stats
+send_oct
+send_max
+send_cnt
+send_avg
+recv_oct
+recv_max
+recv_dvi
+recv_cnt
+recv_avg
+enc_stats
+encode_stats
+subs_empty_out_q
+dec_subs
+decode_subs
+enc_subs
+encode_subs
+encode_ifopt_val
+encode_ifopts
+decode_ifopts
+dec_ifopt
+enc_ifopt
+mtu
+dstaddr
+broadaddr
+type_ifopt
+merge_fields
+merge_options
+need_template
+multi
+dec
+dec_opt_val
+decode_opt_val
+enc_opts
+encode_opts
+once
+enc_opt_val
+encode_opt_val
+enum_name
+enum_val
+enum_names
+enum_vals
+borlist
+dec_value_tuple
+decode
+dec_value
+flowinfo
+scope_id
+enc_value_2
+enc_value_tuple
+enc_value_1
+enc_value_default
+enc_value
+family
+loopback
+uint8
+uint24
+uint16
+sockaddr
+sctp_assoc_id
+linkaddr
+ether
+bool8
+binary_or_uint
+enum
+bitenumlist
+type_value_2
+type_value_record
+type_value_tuple
+type_value_1
+type_value_default
+record
+type_value
+membership
+int
+uint
+mif
+opts
+type_opt_1
+type_opt
+dec_opt
+sndbuf
+show_econnreset
+send_timeout_close
+send_timeout
+sctp_status
+sctp_set_peer_primary_addr
+sctp_rtoinfo
+sctp_primary_addr
+sctp_peer_addr_params
+sctp_nodelay
+sctp_maxseg
+sctp_initmsg
+sctp_i_want_mapped_v4_addr
+sctp_get_peer_addr_info
+sctp_events
+sctp_disable_fragments
+sctp_delayed_ack_time
+sctp_autoclose
+sctp_associnfo
+sctp_adaptation_layer
+reuseport_lb
+reuseport
+reuseaddr
+recvttl
+recvtos
+recvtclass
+recbuf
+read_packets
+pktoptions
+nopush
+nodelay
+netns
+multicast_ttl
+multicast_loop
+multicast_if
+low_watermark
+low_msgq_watermark
+keepalive
+ipv6_v6only
+high_watermark
+high_msgq_watermark
+header
+exit_on_close
+exclusiveaddruse
+drop_membership
+dontroute
+deliver
+delay_send
+buffer
+bind_to_device
+add_membership
+enc_opt
+is_sockopt_val
+attach
+detach
+unrecv
+getservbyport1
+getservbyport
+getservbyname1
+getservbyname
+gethostname
+getstatus
+getprotocol
+gettype
+getindex
+ignorefd
+getfd
+getstat
+subscribe
+ifset
+ifget
+getiflist
+netmask
+broadcast
+pointtopoint
+getifaddrs_ifget
+hwaddr
+hwaddr_last
+comp_ifaddrs_3
+comp_ifaddrs_2
+comp_ifaddrs_flags
+comp_ifaddrs
+enotsup
+getifaddrs
+chgopts
+chgopt
+getopts
+getopt
+setopt
+socknames
+setsockname
+sockname
+sctp_assoc_change
+peernames
+setpeername
+peername
+recvfrom0
+recvfrom
+async_recv
+recv0
+recv
+sendfile_1
+sendfile_maybe_uncork
+sendfile_maybe_cork
+sctp_default_send_param
+sctp_sndrcvinfo
+sendmsg
+uint32
+do_sendto
+sendto
+peeloff
+listen
+async_accept
+accept_opts
+accept0
+accept
+connectx0
+addr_list
+connectx
+async_connect0
+async_connect
+connect0
+bindx_check_addrs
+bindx
+addr
+do_bind
+bind
+send_pend
+close_pend_loop
+close_port
+linger
+shutdown_1
+read_write
+drv2protocol
+sctp
+protocol2drv
+seqpacket
+dgram
+enc_type
+inet6
+enc_family
+bool
+fdopen
+prim_inet
+arg_reg_alloc
+prim_eval
+peek_head
+copying_read
+unlock
+try_lock
+find_byte_index
+wipe
+write
+read_iovec
+read
+shutdown_timeout
+not_allowed
+starting
+'-to_string/2-lc$^1/1-1-'
+'-to_string/2-lc$^0/1-0-'
+'-notify/1-fun-0-'
+'-get_pids/2-lc$^0/1-0-'
+'-do_boot/2-fun-0-'
+'-eval_script/2-fun-1-'
+'-eval_script/2-fun-2-'
+'-eval_script/2-fun-0-'
+'-load_modules/2-lc$^0/1-0-'
+'-load_modules/2-lc$^1/1-2-'
+'-load_modules/2-lc$^2/1-3-'
+'-load_modules/2-lc$^3/1-4-'
+'-load_modules/2-lc$^4/1-1-'
+prepared
+'-prepare_loading_fun/0-fun-0-'
+'-patch_path/2-lc$^0/1-0-'
+'-patch_dir/2-lc$^0/1-1-'
+'-patch_dir/2-lc$^1/1-0-'
+'-shutdown_timer/1-fun-0-'
+'-run_on_load_handlers/2-fun-0-'
+'-run_on_load_handler/2-fun-0-'
+standard_error
+format
+io_lib
+'-debug_profile_format_mfas/1-fun-0-'
+'-collect_loaded_mfas/0-lc$^1/1-0-'
+'-collect_loaded_mfas/0-lc$^0/1-1-'
+bad_generator
+'-collect_loaded_mfas/2-lc$^0/1-0-'
+collect_mfa
+collect_mfas
+all_loaded
+collect_loaded_mfas
+sort
+debug_profile_format_mfas
+snifs
+debug_profile_mfas
+debug_profile_stop
+debug_profile_start
+on_load_function_failed
+on_load_handler_returned_ok
+spawn_monitor
+run_on_load_handler
+running_on_load_handler
+on_load_loop
+on_load_handler_init
+start_on_load_handler_process
+run_on_load
+run_on_load_handlers
+archive_extension
+objfile_extension
+set_argument
+get_argument1
+to_strings
+get_flag_args
+get_flag_list
+get_flag
+update_flag
+get_args
+flag
+check
+start_extra_arg
+start_arg2
+start_arg
+eval_arg
+end_args
+arg
+parse_boot_args
+timer
+flush_timout
+shutdown_time
+shutdown_timer
+load_module
+do_load_module
+explain_add_head
+otp_release
+nofile
+explain_ensure_loaded_error
+exprs
+new_bindings
+erl_eval
+parse_exprs
+erl_parse
+erl_anno
+dot
+erl_scan
+start_it
+start_em
+start_in_kernel
+funny_splitwith
+funny_split
+directory
+file_info
+read_file_info
+patch_dir
+patch_path
+extract_var
+add_var
+fix_path
+make_path
+prepare_loading_fun
+load_rest
+load_failed
+get_modules
+load_modules
+'unexpected command in bootfile'
+kernel_load_completed
+primLoad
+preLoaded
+kernelProcess
+eval_script
+get_cwd
+script
+'bootfile format error'
+'cannot get bootfile'
+not_found
+get_boot
+pz
+pa
+path_flags
+bootfile
+invalid_boot_var_argument
+boot_var
+get_boot_vars_1
+get_boot_vars
+no_or_multiple_bindir_variables
+bindir
+check_bindir
+no_or_multiple_root_variables
+root
+get_root
+es
+init__boot__on_load_handler
+init_debug_flag
+init_debug
+path
+do_boot
+add_to_kernel
+set_path
+start_prim_loader
+kernel_pid
+terminate
+del
+sub
+do_unload
+logger_server
+unload
+kill_all_ports
+kill_em
+get_pids
+kill_all_pids
+resend
+shutdown_loop
+shutdown_kernel_pid
+get_kernelpid
+get_logger
+heart
+get_heart
+prepare_shutdown
+global_name_server
+global_prepare_shutdown
+shutdown_pids
+stop_heart
+clear_system
+do_restart
+do_stop
+stopping
+set_flag
+config
+stdout
+io_request
+user
+do_handle_msg
+new_state
+handle_msg
+loop
+new_kernelpid
+garb_boot_loop
+foreach
+get_file
+erl_prim_loader
+do_ensure_loaded
+progress
+boot_loop
+crash
+halt_string
+things_to_string
+flatten
+join
+printable_list
+to_string
+state
+relaxed
+strict
+code_path_choice
+map
+b2s
+b2a
+s
+eval
+prepare_run_args
+profile_boot
+stop_1
+is_bytelist
+reboot
+interactive
+embedded
+mode
+request
+wait_until_started
+notify_when_started
+make_permanent
+ensure_loaded
+fetch_loaded
+get_status
+bs2ss
+bs2as
+set_script_name
+absname
+filename
+get_script_name
+script_name
+script_id
+get_argument
+get_plain_arguments
+get_arguments
+set_configfd
+get_configfd
+done_in_microseconds
+debug
+'-start/2-fun-0-'
+'-restart/0-fun-0-'
+if_loaded
+fatal
+boot
+continue
+died
+test_progress
+do_test_hard_purge
+continued
+started
+do_test_soft_purge
+do_test_purge
+cpc_make_requests
+cpc_request
+cpc_sched_kill
+cpc_sched_kill_waiting
+cpc_list_rm
+cpc_handle_down
+cpc_reverse
+cpc_result
+cpc_receive
+cpc_kill
+cpc_static
+check_proc_code
+do_finish_after_on_load
+do_soft_purge
+do_purge
+check_requests
+soft_purge
+purge
+change_prio
+test_purge
+handle_request
+wait_for_request
+sleep
+other
+gc
+check_io
+aux
+prim_net
+prim_socket
+zlib
+prim_buffer
+prim_tty
+'TRACE'
+'DELETE'
+'PUT'
+'POST'
+'HEAD'
+'GET'
+'OPTIONS'
+'Proxy-Connection'
+'Keep-Alive'
+'Cookie'
+'X-Forwarded-For'
+'Set-Cookie2'
+'Set-Cookie'
+'Accept-Ranges'
+'Last-Modified'
+'Expires'
+'Etag'
+'Content-Type'
+'Content-Range'
+'Content-Md5'
+'Content-Location'
+'Content-Length'
+'Content-Language'
+'Content-Encoding'
+'Content-Base'
+'Allow'
+'Www-Authenticate'
+'Warning'
+'Vary'
+'Server'
+'Retry-After'
+'Public'
+'Proxy-Authenticate'
+'Location'
+'Age'
+'User-Agent'
+'Referer'
+'Range'
+'Proxy-Authorization'
+'Max-Forwards'
+'If-Unmodified-Since'
+'If-Range'
+'If-None-Match'
+'If-Match'
+'If-Modified-Since'
+'Host'
+'From'
+'Authorization'
+'Accept-Language'
+'Accept-Encoding'
+'Accept-Charset'
+'Accept'
+'Via'
+'Upgrade'
+'Transfer-Encoding'
+'Pragma'
+'Date'
+'Connection'
+'Cache-Control'
+process_low
+process_normal
+process_high
+process_max
+characters_to_list_trap_4
+characters_to_list_trap_3
+characters_to_list_trap_2
+characters_to_list_trap_1
+characters_to_utf8_trap
+md5_trap
+ram_file_drv
+udp_inet
+tcp_inet
+sendfile
+ttl
+tclass
+tos
+empty_out_q
+udp_error
+udp_passive
+tcp_error
+tcp_closed
+tcp_passive
+inet_reply
+inet_async
+udp
+tcp
+unspec
+inet
+spawn_forker
+vanilla
+delete_trap
+select_trap
+replace_trap
+count_trap
+select_delete_trap
+darwin
+unix
+erts_beamasm
+list_to_integer
+binary_to_integer
+from_keys
+unalias
+beamfile_module_md5
+beamfile_chunk
+prepare_loading
+get_creation
+abort_pending_connection
+ets_raw_next
+ets_raw_first
+ets_lookup_binary_info
+spawn_system_process
+counters_info
+counters_put
+counters_add
+counters_get
+counters_new
+compare_exchange
+exchange
+add_get
+add
+atomics
+atomics_new
+erase_persistent_terms
+persistent_term
+internal_select_delete
+internal_delete_all
+is_map_key
+map_get
+gather_carrier_info
+gather_alloc_histograms
+map_next
+new_connection
+get_dflags
+iolist_to_iovec
+set_signal
+fmod
+ceil
+floor
+has_prepared_code_on_load
+copy_shared
+size_shared
+split
+purge_module
+check_dirty_process_code
+is_process_executing_dirty
+map_info
+fun_info_mfa
+take
+cmp_term
+values
+update
+remove
+merge
+keys
+is_key
+from_list
+find
+maps
+map_size
+is_map
+inspect
+printable_range
+binary_to_float
+float_to_binary
+integer_to_binary
+delete_element
+insert_element
+finish_loading
+dt_append_vm_tag_data
+dt_prepend_vm_tag_data
+dt_restore_tag
+dt_spread_tag
+dt_get_tag_data
+dt_get_tag
+dt_put_tag
+posixtime_to_universaltime
+universaltime_to_posixtime
+check_old_code
+native_name_encoding
+file
+is_translatable
+internal_normalize_utf8
+internal_native2name
+internal_name2native
+prim_file
+nif_error
+decode_unsigned
+encode_unsigned
+referenced_byte_size
+list_to_bin
+part
+at
+longest_common_suffix
+longest_common_prefix
+matches
+compile_pattern
+binary_part
+finish_after_on_load
+call_on_load_function
+load_nif
+setopts
+give_away
+dflag_unicode_io
+binary_to_existing_atom
+binary_to_atom
+atom_to_binary
+bin_is_7bit
+characters_to_list
+characters_to_binary
+decode_packet
+update_element
+bitstring_to_list
+list_to_bitstring
+bit_size
+byte_size
+tuple_size
+is_bitstring
+list_to_existing_atom
+iolist_to_binary
+iolist_size
+make_fun
+string
+is_boolean
+get_module_info
+warning_map
+hibernate
+lcnt_clear
+lcnt_collect
+lcnt_control
+dirty
+interpreter_size
+instructions
+dist_ext_to_term
+set_internal_state
+get_internal_state
+flat_size
+same
+disassemble
+keyfind
+keysearch
+keymember
+reverse
+lists
+internal_run
+run
+format_error_int
+loaded_drivers
+try_unload
+try_load
+erl_ddll
+perf_counter
+getpid
+unsetenv
+putenv
+getenv
+os
+match_spec_run_r
+match_spec_compile
+select_replace
+select_reverse
+select_count
+select
+update_counter
+slot
+safe_fixtable
+rename
+insert_new
+insert
+prev
+next
+member
+match_object
+last
+lookup_element
+lookup
+is_compiled_ms
+delete_object
+delete
+internal_request_all
+match_spec_test
+is_record
+is_function
+is_binary
+is_reference
+is_port
+is_pid
+is_number
+is_integer
+is_float
+is_tuple
+is_list
+is_atom
+subtract
+append
+'!'
+is_builtin
+raise
+is_process_alive
+fun_to_list
+port_to_list
+ref_to_list
+system_profile
+system_monitor
+system_info
+system_flag
+append_element
+make_tuple
+read_timer
+cancel_timer
+send_after
+start_timer
+pow
+atan2
+sqrt
+log10
+log2
+log
+exp
+erfc
+erf
+atanh
+atan
+asinh
+asin
+acosh
+acos
+tanh
+tan
+sinh
+sin
+cosh
+cos
+math
+bump_reductions
+resume_process
+suspend_process
+seq_trace_print
+seq_trace_info
+seq_trace
+trace_delivered
+trace_info
+trace_pattern
+port_get_data
+port_set_data
+send_copy_request
+release_area_switch
+erts_literal_area_collector
+spawn_request_abandon
+no_aux_work_threads
+dist_spawn_request
+ets_super_user
+create_dist_channel
+dirty_process_handle_signals
+system_check
+is_system_process
+perf_counter_unit
+time_unit
+map_hashmap_children
+term_type
+map_to_tuple_keys
+check_process_code
+request_system_task
+port_connect
+port_close
+port_control
+port_command
+port_call
+port_info
+dist_ctrl_set_opt
+dist_ctrl_get_opt
+dist_ctrl_get_data_notification
+dist_ctrl_get_data
+dist_ctrl_input_handler
+dist_get_stat
+setnode
+spawn_opt
+whereis
+unlink
+universaltime_to_localtime
+universaltime
+tuple_to_list
+trunc
+tl
+time
+term_to_iovec
+term_to_binary
+statistics
+split_binary
+spawn_link
+spawn
+setelement
+self
+round
+registered
+put
+process_info
+process_flag
+pre_loaded
+pid_to_list
+open_port
+system_time
+monotonic_time
+now
+nodes
+monitor_node
+function_exported
+module_loaded
+md5_final
+md5_update
+md5_init
+unique_integer
+make_ref
+localtime_to_universaltime
+localtime
+list_to_tuple
+list_to_ref
+list_to_port
+list_to_pid
+list_to_float
+list_to_binary
+list_to_atom
+link
+length
+integer_to_list
+hd
+phash2
+phash
+halt
+get_keys
+get
+fun_info
+float_to_list
+float
+external_size
+exit_signal
+erase
+element
+display_string
+display
+delete_module
+date
+crc32_combine
+crc32
+binary_to_term
+binary_to_list
+atom_to_list
+adler32_combine
+adler32
+abs
+debug_hash_fixed_number_of_locks
+auto
+nifs
+yield
+yes
+x86
+xor
+write_concurrency
+wordsize
+warning_msg
+warning
+wall_clock
+waiting
+wait_release_literal_area_switch
+visible
+version
+value
+unsafe
+unload_cancelled
+unloaded_only
+unloaded
+unless_suspending
+unit
+uniq
+unblock_normal
+unblock
+utf32
+utf16
+utf8
+used
+use_stdio
+urun
+unregister
+unicode
+ungreedy
+undef
+explicit_unalias
+ucp
+ucompile
+type
+try_clause
+trim_all
+trim
+trap_exit
+tracer
+trace_status
+trace_control_word
+traced
+trace
+tpkt
+total_run_queue_lengths_all
+total_run_queue_lengths
+total_heap_size
+total_active_tasks_all
+total_active_tasks
+total
+timestamp
+'*'
+timeout_value
+time_offset
+threads
+thread_pool_size
+this
+term_to_binary_trap
+tag
+table_type
+table
+system_architecture
+system_version
+system_limit
+system_flag_scheduler_wall_time
+system
+suspending
+suspended
+suspend
+sunrm
+success_only
+strict_monotonic_timestamp
+strict_monotonic
+stream
+stop
+stderr_to_stdout
+status
+start
+stack_size
+ssl_tls
+spawned
+spawn_service
+spawn_request_yield
+spawn_request
+spawn_reply
+spawn_init
+spawn_driver
+spawn_executable
+skip
+size
+silent
+sigquit
+sigtstp
+sigsegv
+sigint
+sigstop
+sigalrm
+sigabrt
+sigchld
+sigill
+sigusr2
+sigusr1
+sigterm
+signed
+sighup
+shutdown
+short
+set_tcw_fake
+set_tcw
+set_seq_token
+set_on_spawn
+set_on_link
+set_on_first_spawn
+set_on_first_link
+set_cpu_topology
+set
+serial
+sequential_trace_token
+sequential_tracer
+sensitive
+send_to_non_existing_process
+send
+seconds
+second
+scope
+scientific
+scheme
+schedulers_online
+scheduler_wall_time_all
+scheduler_wall_time
+scheduler_id
+scheduler
+sbct
+save_calls
+safe
+runtime
+running_procs
+running_ports
+running
+runnable_procs
+runnable_ports
+runnable
+run_queue_lengths_all
+run_queue_lengths
+run_queue
+run_process
+reuse
+return_trace
+return_to_trace
+return_to
+return_from
+resume
+restart
+reset_seq_trace
+reset
+report_errors
+reply_tag
+reply_demonitor
+reply
+rem
+reload
+registered_name
+register
+refc
+reductions
+recent_size
+receive
+reason
+ready_output
+ready_input
+ready_error
+read_concurrency
+re_run_trap
+re_pattern
+re
+raw
+queue_size
+public
+ptab_list_continue
+protection
+protected
+profile
+proc_sig
+procs
+process_dump
+process_limit
+process_display
+process_count
+processes_used
+processes
+process
+private_append
+private
+priority
+print
+prepare_on_load
+prepare
+position
+positive
+port_op
+port_limit
+port_count
+ports
+port
+pid
+permanent
+pending_reload
+pending_purge_lambda
+pending_process
+pending_driver
+pending
+pause
+'++'
+'+'
+parent
+parallelism
+packet_size
+packet
+owner
+overlapped_io
+outstanding_system_requests_limit
+output
+out_exiting
+out_exited
+out
+os_version
+os_type
+os_pid
+orelse
+ordered_set
+or
+opt
+open_error
+open
+on_load
+on_heap
+old_heap_size
+old_heap_block_size
+ok
+offset
+off_heap
+nouse_stdio
+notsup
+notify
+notempty_atstart
+notempty
+noteol
+notbol
+notalive
+not_purged
+not_owner
+not_pending
+not_loaded_by_this_process
+not_loaded
+not_a_list
+not
+not_suspended
+no_start_optimize
+no_network
+no_integer
+no_float
+no_fail
+nosuspend
+normal_exit
+noproc
+noeol
+nodeup
+nodedown_reason
+nodedown
+node_type
+node
+noconnection
+noconnect
+no_auto_capture
+nomatch
+newline
+new_uniq
+new_ports
+new_processes
+new_index
+new
+never_utf
+net_kernel_terminated
+net_kernel
+'/='
+'=/='
+need_gc
+native_addresses
+native
+namelist
+named_table
+name
+nanosecond
+nano_seconds
+multiline
+multi_scheduling
+more
+monotonic_timestamp
+monotonic
+monitors
+monitor_nodes
+monitor
+monitored_by
+module_info
+module
+'--'
+'-'
+minor_version
+minor
+min_bin_vheap_size
+min_heap_size
+min
+millisecond
+milli_seconds
+microstate_accounting
+microsecond
+micro_seconds
+meta_match_spec
+meta
+merge_trap
+messages
+message_queue_len
+message_queue_data
+message
+memory_types
+memory_internal
+memory
+md5
+mbuf_size
+max_heap_size
+maximum
+max
+match_spec_result
+match_spec
+match_limit_recursion
+match_limit
+match
+major
+magic_ref
+machine
+'<'
+low
+long_schedule
+long_gc
+logger
+local
+load_failure
+load_cancelled
+loaded
+little
+list_to_binary_continue
+list
+links
+linked_in_driver
+line_length
+line_delimiter
+line
+lf
+'=<'
+ldflags
+latin1
+last_calls
+large_heap
+label
+known
+kill_ports
+killed
+kill
+keypos
+iovec
+iodata
+io
+iterator
+is_seq_trace
+is_constant
+invalid
+instruction_counts
+internal_error
+internal
+integer
+input
+initial_call
+init
+inherit
+info_trap
+info_msg
+info
+index
+inconsistent
+incomplete
+include_shared_binaries
+inactive
+in_exiting
+in
+ignore
+if_clause
+id
+httph_bin
+http_bin
+http_error
+http_eoh
+http_header
+http_request
+http_response
+https
+httph
+http
+high
+hide
+hidden
+heir
+heart_port
+heap_type
+heap_sizes
+heap_size
+heap_block_size
+have_dt_utag
+handle
+group_leader
+grun
+'>'
+global
+getting_unlinked
+getting_linked
+gather_system_check_result
+gather_sched_wall_time_result
+gather_microstate_accounting_result
+gather_io_bytes
+gather_gc_info_result
+get_tcw
+get_tail
+get_size
+get_seq_token
+get_internal_state_blocked
+get_all_trap
+generational
+'>='
+gc_minor_start
+gc_minor_end
+gc_max_heap_size
+gc_major_start
+gc_major_end
+garbage_collection_info
+garbage_collection
+garbage_collecting
+garbage_collect
+function_clause
+functions
+function
+fullsweep_after
+free
+format_cpu_topology
+format_bs_fail
+force
+flush_monitor_messages
+flush
+flags
+firstline
+first
+fd
+fcgi
+extra
+external
+extended
+exports
+exiting
+existing_ports
+existing_processes
+existing
+exited
+exit_status
+exclusive
+exception_trace
+exception_from
+exact_reductions
+'ETS-TRANSFER'
+ets_info_binary
+ets
+erts_internal
+erts_dflags
+erts_debug
+erts_code_purger
+error_only
+error_logger
+error_info
+error_handler
+erl_signal_server
+erlang
+erl_tracer
+erl_stdlib_errors
+erl_kernel_errors
+erl_init
+erl_erts_errors
+'=='
+'=:='
+eol
+eof
+ensure_exactly
+ensure_at_least
+env
+endian
+enabled
+enable_trace
+emulator
+emu_type
+emu_flavor
+einval
+dynamic_node_name
+dupnames
+duplicated
+duplicate_bag
+dsend_continue_trap
+driver_options
+driver
+dotall
+dollar_endonly
+'$_'
+'$$'
+dmonitor_node
+div
+'/'
+dist_spawn_init
+dist_data
+dist_ctrlr
+dist_ctrl_put_data
+dist_cmd
+dist
+discard
+disabled
+disable_trace
+dirty_nif_finalizer
+dirty_nif_exception
+dirty_io
+dirty_execution
+dirty_cpu_schedulers_online
+dirty_cpu
+dirty_bif_trap
+dirty_bif_result
+dirty_bif_exception
+dictionary
+deterministic
+demonitor
+delay_trap
+default
+decimals
+decentralized_counters
+debug_flags
+data
+current_stacktrace
+current_location
+current_function
+creation
+crlf
+cr
+cpu_timestamp
+cpu
+count
+counters
+copy_literals
+copy
+control
+continue_exit
+context_switches
+const
+connection_id
+connection_closed
+connected
+connect
+convert_time_unit
+config_h
+compressed
+complete
+compile
+compat_rel
+compact
+commandv
+command
+code
+closed
+close
+clock_service
+clear
+check_gc
+characters_to_list_int
+characters_to_binary_int
+'CHANGE'
+cflags
+cdr
+cd
+cause
+catchlevel
+caseless
+case_clause
+capture
+caller_line
+caller
+call_trace_return
+call_time
+call_memory
+call_error_handler
+call_count
+busy_port
+busy_limits_msgq
+busy_limits_port
+busy_dist_port
+busy
+build_type
+build_flavor
+bsr_unicode
+bsr_anycrlf
+bsr
+bsl
+breakpoint
+break_ignored
+bxor
+bor
+bnot
+bm
+blocked_normal
+blocked
+block_normal
+block
+binary_to_term_trap
+binary_to_list_continue
+binary_longest_suffix_trap
+binary_longest_prefix_trap
+binary_find_trap
+binary_copy_trap
+binary
+bif_return_trap
+bif_handle_signals_return
+big
+band
+bag
+bad_map_iterator
+badtype
+badopt
+badsig
+badrecord
+badmatch
+badmap
+badkey
+badfun
+badfile
+badarity
+badarith
+badarg
+backtrace_depth
+backtrace
+awaiting_unload
+awaiting_load
+await_sched_wall_time_modifications
+await_result
+await_proc_exit
+await_port_send_result
+await_microstate_accounting_modifications
+await_exit
+auto_connect
+attributes
+atom_used
+atom
+asynchronous
+async_dist
+async
+asn1
+arity
+arg0
+args
+apply
+anycrlf
+any
+andthen
+andalso
+and
+anchored
+amd64
+already_loaded
+already_exists
+allow_passive_connect
+alloc_util_allocators
+allocator_sizes
+allocator
+allocated_areas
+allocated
+alloc_sizes
+alloc_info
+all_names
+all_but_first
+all
+alive
+alias
+active_tasks_all
+active_tasks
+active
+access
+ac
+absoluteURI
+abs_path
+abort
+abandoned
+'EXIT'
+'UP'
+'DOWN'
+none
+no
+nil
+undefined_lambda
+undefined_function
+nocatch
+undefined
+exit
+error
+throw
+return
+call
+normal
+timeout
+infinity
+''
+'$end_of_table'
+'nonode@nohost'
+'_'
+true
+false
+=end
diff --git a/aoc2023/src/day1/input.txt b/aoc2023/src/day1/input.txt
new file mode 100644
index 0000000..6efe96c
--- /dev/null
+++ b/aoc2023/src/day1/input.txt
@@ -0,0 +1,1000 @@
+9dlvndqbddghpxc
+rtkrbtthree8sixfoureight6
+fdxrqmfxdkstpmcj7lmphgsmqqnmjrtwo3tcbc
+onetjcsmgk57nvmkvcvkdtqtsksgpchsfsjzkkmb
+six8threepvlxttc85two
+8five9ttqst2one2vz
+hbrmhsnjeight64dgdnvdbspk7ninetzbvjczqrj
+fourtwofivesix5
+3gksfourqf48
+7one1tnqxfvhmjvjzfive
+sevenmcjs3lmlmxmcgptwobjggfive6four
+seven8five3
+5sfknxsn5sevenfour446
+bxc5two67seven2
+jcsfivefive89seven85
+nine296
+seven5twoeight
+1eighttwo8jfnhmfivefivezdsxqxqsjkone
+foureight48sbkkvc17zbksgvcbb
+lnzgspccsn4cxqqdbkj
+qlxrxkpeight48xbgqnlkpkoneseven
+z7onetwonec
+7cns
+pnpfninefive79twoone7
+2hrqpjjjbn
+4gmlttgdzrhxbxnnine
+4sixfiveone76jctmjsxdh5jrkv
+3kvjmhpmglrdgmdnine
+four63sevensevenone
+jmz1eight4threej1
+four21zxksf9jxdvjmtn337
+msnronenine43three1threefrv
+rjfhd6eight4
+78blgveightfiveone7bnsfnrmxsmtwonemrb
+sixseven6four6
+mdjphcm9
+xsjmgdgqtwolg1nine45eight
+five2six85npdqxgrshdjs4
+jbbnine2ttrktc2hxpxfdxgf
+fngvqsgmjfmfslrmone2vtpsstpkhr2jmmxk
+f683glvfsdvnsghvrzcdmxnx81
+lqblzgj322kqfsjrbxgcgsct
+threeldfnrbstbxqdpxpkbztbp84eight
+sevensevenmthprqg9six
+qldknljthdjthreeklttd6six
+7eightcdqxcftbgbfbnvqfive
+gxjzhvkbcjhscdxhjdqxnhsevenxrdrjbcl5fvlvlxjjvb
+9sixqnine9jk9six
+zjtdbzr6njdgflrmpshxn
+rktpknvmjknb7threefourhdxhcdtgtkvone
+276lzxhone3two2
+82fivelppqzjq
+lchslxtwohslsztgps5pdssctclhdkqtwo
+2five8three9dnine8
+68jpnqldjgfnpcmvbxnszhz2252
+q32
+2sixtwo87
+hlmdvlrqlrjdshone3five
+fivetwo7
+xsdcktrone29
+eightfour9eighttwoxvhdth9lndg4
+two8jgddjhcj67eight
+8nrkrcrqhr21stqtvqn
+tvbonepzrrklninexmpxrlkcpgg9qgrkcjt
+6two5qjmoneclfhzhkxbntmvmdrc
+prhmt4xvlg
+3mghfgrhzkj5
+lq2lnrcj1pnlh
+sixqhfqrmf8fivenkkcqpgf85lone
+tlrlcbhdvd5
+three8seven
+thfns325threefpvlntfvrf
+twoblkldr2mmrsxpqxcms39seven6
+2mpcvttntg31mkznplfkbcgccsix
+2sbs
+828jnvjnbgrs1
+fhcglnxzss23bxfnpczvthree2
+7fhghprqvrbx1nxml2one32
+5fivethree7qrsixmcdveight6
+five4seven
+1cfcfdzfjphsevenmdvnzh
+qhmnleightbhbcntwojjfxpvlxt2spponenine
+fivelskzvzsix5xtqkfl1
+2jfgpmdncvpjmqcgvnzpqlstzgfdvfxrlscjkzczsf
+rzzplmzsfivetxbhcqnzdq4
+mvrvfour9eightseventhree
+7smrdqkrh8qlzc
+mpf2fivefivefivepgm
+1sixpkrdjlszgdnccnllfsevenksdkvqbxbpbblthqpzqf
+six91dxxdhrxcbmqpqm
+sevenfour8nine7
+one2hnfvh
+55jmqkqgvsgqcrzvmzqhone8twopsrtgmqrj
+xnfjxqlrsjmgk68kvpptczxhkxcvrpgctddjklrmhzjgtcjh
+seveng6two
+1threexrzqcrknhc3
+58qtpqqz58888cmhs
+pxvbhmczrvpnjnsrcdrnrjvzzpjnbgbxdseven6
+34two565
+four4six
+sqtxsjsix54
+four3xrxmrkn4nrcsmljqrninethreeone
+3six4bqddfivejnfrhnqqsgqhj
+gtbtrtzp8seveneight3seven4xzdnfrvzgn
+vggfdfvlrgvqqvjhkmxfsfbdpqfivexs16
+onegkvdhrfninerndk46nine
+5fiveeighthnrlzln
+threeqctjkpxjx39six89two2
+99ninecbzck
+nxqlhpgnine6pvrrpfjpssix6seven
+1dbrzjkckthm5sixsix
+fivefmfqcsj19nhnzg
+five91eightninecn
+7ljnl71eight7mzhzfht
+84sevenzrqvkxszdhg66
+jskktpm5mphd1
+boneightfournq6ndnqpdbm97five
+5twonine
+scqpkxrjtwo8foureight11
+3eight7brgqfivezpgclhfj
+zkfrsdgbmczlrzchvfql78ftsdqk8vmqccbn
+oneseven3kgdkjzkmq94
+sgtwo59kdmhbndzd
+threeone37
+mqxvrhmrpqnltvt9lrpplmttkhdvtln9
+onecxqvr48six2
+pjnx2eight7five
+two189one6gbqvllzb35
+psvxjhscstjfkbpxhbbb4zvdjbcdxqrqzqlzp
+n18hmhzrqjrpcxztwo
+6two46zblgrbmjcqbnxqcnbf
+7kxsjdqcmxrvmdtscvxgrnhrmrfour
+onedzeight8qfive2
+seven9bkjone2sixqnztq21
+fiveninesixfkzlsn8fivembfjnx4threetwonexb
+5zmxtcmzqqdthreetczccnxhkxrbntmfoursixjhhrsdxthree
+1four2xpkfgcn
+88trnvjtqsmseight8
+pbbpbfgsrst5five
+jvgvdseven2two
+962sixoneonectfgpknl8nine
+rkbnzz1l42eightflb4
+twoxfll2fourbjfjgxfbtk
+35fourtwo
+lq56ninefour1three
+77ztlmqxcxrj745
+nnvqrthreedt2eight6hvrlnpbts
+6five6225sixfnzzbh
+nine1three
+8xgdsdfgcfourlhn
+2three3ninelckpddbmdrfournine
+89zmvxnlrj7658kjdjchq
+pfhbgpb66twogpn7twobpvrbmmrvp
+8hgqmztnmhkcr6xrxrbhj
+6fivemnfcvvx8
+3mxpvgzq9ninebmlktwo
+thzhbsl49seventhree1bdxcrgjq
+rlcfour3ffkxxrhb
+rkj2eightfive
+xqncfnhkcqxqjgbsjhnrgm6
+ninefour52ninefourtworhsix
+lpzcmxt97mlkjhlcone
+two4qkmqgrpltkrdsctpnsqmbtptklprx6ncfpseven
+61shxgxdqqqzngnnzeightkhmgrxprb2sixjx
+9eightfour3one6seven
+eight4sixqjxdjnzmkfflpfmkf
+3bfc71
+14sevenfivezzmt8cpptl
+1sgrzdqdndsevenninembzvfive
+lxftrbfcqfoneeightrsdxlnp1x2jsgn2
+vlfcjfourmtxbcngpjvkcctvbgkgpvvqpsg1
+116five132seven
+eightpvfsfbfzjcdcvh8kbrcz357
+99two
+four6six
+fzzklmnxvfrhd62xmftbrhgsslrlqv
+5six55zbdlgc
+62nineone8qcglr1
+sddddseven55fourlpqzbgzfive5
+eighteight17
+nine98
+three9qqxgfpjfkeight81nine2
+twotwosevenvkzzhrpgninecqvf9
+lkhf5onexsrtwo
+8hfzvnzrd
+9threeninethreeseven
+onedpgjzsixxs4cg5jlvzcsbd
+fgmfive97
+4fivefourckthree
+nine1fivefour
+7qlchtvd
+tmtmtnxdpsvfour4621four6
+5qfvzh7seven
+fourfivebqnpzbg8three
+34kd9four5seven8three
+kcqcxzmnkdt5twojdggp
+4lvbfdpzjsdthreeldvkcbqrspktwo
+2nine93foursixnine5
+8tbpjgmxltwojlpbnsvqhsjfcjcfvcrjqppdb5seven
+8twodcpglrxcq23sixfour
+3sixvczzqsfive
+1three45jh54tbdvkj
+pdrzqxdtcnbrnine8zvffmrtwo11
+3eight54sksqfxhzcdfour
+7hsllsjtxtwo9jhjlhthreekdfssninetcjjrm
+9sgmnine1kjmhjthree
+nineseven9five
+ggdcphlstwoonethreeffgmrseven2xsbsf2
+75ssbccflrrf4lpmptcqjcmfbpklqc
+5six2threedvvlxdxsixvxxghpddn8pbnr
+tlbjnlxfxvnine4grhj71hnf6
+964eighteight4eight6t
+5qbmnsone1fourseventwo
+oneseven1five9two
+5fdpl37vklxpth672
+4czvrnxtlfiveseven74
+qdgqbsd5fourfive
+ddrqjnkbq87six2fourmtghdtvtl7
+zdldjnfxms692rbdfgvtsevenxzfjpnsf
+nsqtkbbfhn8threesix3fivefoursix6
+sfxjzhpqqslfourmpph44threetwo
+onefive3seven21
+9eight1sevenfive7nine
+7twonrthgr73vzb
+18onefourhxxm
+3xvboneightlb
+3ftqct9
+8five55
+4eightmzrlfjqqddffgmfl
+74mhzvktwolgpvrvnphc
+sixnine694ninetwo
+bzpnktvcqleight2
+5oneeight1five2dszthreedncqzmhc
+eightfrbmcblrghgmpkrdnh7fournzbvtrzvhchsix
+threethreeoneone6kbghfst
+4fiveonexfchmclqhqfive
+1t3nine
+57jclthreefourbtdgsggzh
+qpc9fhddthreefive
+9eightnine7cgpbbnine8
+88twoxbzjp6fmqlznzgpgdqmmnpmkvctm
+threelb9four168qpchgnfn
+4onekrlmslkd7five
+4jfxtsseven
+zsthvnxpf7
+656three
+453seven
+zxmr55hgnvtjbbqhfsxssjxzshcbkvsbzg1
+pbkffqzrbvxvqjfgkpmp5
+ninesix677lpqpgmc
+sixgmb67fzdhnnfk7
+jlgjbltbtwotwoeight9sixninevlngvvj
+xdxqdhps9sevenzmzdlnvsix3oneightj
+ninetwokpzvvqlgtcfx2
+dqmjchlbj7sevenfive
+61eight9kjmxclvdrdmvnthree
+8nine6three
+3ndpknone
+seven4one
+8dxljzpk8twoxfmhbqnmqeightdhxvpgxcnine5
+6five3seven
+rzgfivenxhpr6gxqflrskhjhvoneonegzbclk
+jrvjhkfv7sqnsz86five5skvvmspvjd3
+sevensix3c6llkmsmmssf3
+sevendf73eight74
+7bqbbvmq2krkbhlsh
+3dqq55eightcptwo
+2bjgfrgrtgnfour
+44xznjjvlhzclsix
+seven6rtzponeseven
+6ghvvkhrzvjzpxlbkonejlmrhq
+zgsxthree6
+3crzdvbnhtsgldjvbpsixbjmlxsv3vrzjtv
+xcpnbsevengpffknsv84sixsixseven
+four898xkqnhspbqmtcs
+5twonine
+six2ltwosix
+cnine22sixeightwost
+6lx63two
+fbqoneight3five
+rbtwone2eight8
+9fivezrsdfkdlqone1nthjvdlmxhqvj
+pmmfp8seven
+1qmttlsjpxjbsrzmbtlxqzfzvrs968
+fgdonexgvvnine5jsm
+rbgmbtwo9fsntcthreesix76
+fbrsxxshseven3gtv
+mkxfour66one9n
+eightnine1fivecsixlqds2
+lhxnxhfnmlmhxkcxndmnine1kfpb5eight
+6eight13rseven6
+hxcfone64ninesevenbgsnrqppqmnnineeightwof
+threebjpbtpzgx5mnthreensixoneightz
+bpdvfqlzthree2vvcmvzllqfbgjgp
+two926sixeightdsvdmnxthreetnqvktdbn
+bhntwonefourninejjcmlfphzpseven95
+prqoneightseven1nbcxnqjfourfivecmj2
+stwone1oneninevcrfzpfourfivetwo
+ztkknhjr9six8
+twomlvrzm934seveneight
+ntnn1bqgbxf13rqdqtcrbpeighttwo
+seven58ninemdqonecrkbdblone
+foursixthree1oneeightone62
+8385dhgcqjtrsixtwo8
+blpzxstwosevenqbdhkb8sfggkbdhx5rzftqsf
+mqbeightwoninefourlgcj9
+njvpkpvjpmvmbsrdgdvx7frrgvnfrmmrfrhqdtwothree8
+rtwonesxxone8tnine
+2xqgrqmone73five
+5ggzdxvptwonineeightdj
+svqhzhzbsmhljxeight7hljd
+one81kmnmpmfkseven
+9ninefourbvbpljb3nineqxnkgzgj
+sixfour7nvdfhnd
+24twoseven52
+425vqnhmrpxthreenine3bkjpvs
+8fzqqspdp6
+427five9zhbxpbr
+1qjnxxkgqhp
+eightxzthreelrbgfbvmrpmtgvrfgqmjlshbqv5
+onetwo4
+three194bfivevknbqxv
+1mjhplcvheightlnvn7two
+rmptjk5seventhreeonesevenkdxfkvdz
+threesix8kpmrvgkpsix
+fjfbx6eight3fourninesp
+six3nhonebtdzppnxkr
+xgtltdtwoninesix62szphpcmtv6
+fiveeight9seventhreesevengndgdfv
+ninetwosmcbfkvf5hvksvfbr3ssbntlk2
+qjrdlmone7tqrzlvfourvfbvtkjxfpkffdpjnine
+sevenfqnsnqt89five5
+16sevenxtdrtmdzrxhneightwot
+8ttreight4eight
+three9nine3832four
+fivesncggngss8qzfvj
+twotwo7sgtcgrmdnr545
+6xk7threejmgnqnsevenmczscqxqxfour
+twosix4eight
+kxm15two844eight
+twoeight5sevenfour
+five56three
+threekdjgcdd6one
+clchjoneeightrqgk8bdsdmzm
+twog546two6x
+5nine4bmhbtbksxreightoneightkg
+gjfkbsr1gvtvlnbzqrlfour
+one48vpone
+eightbcklnvtgvthreeninefivetmgtbjrqnn3
+nkclzcvbbq8nineznbtkntgndnine1xrg
+lqpfhmrlmg32xtddcfffdbxbjckvlzghpldfgvhfhdhr
+fourpkcppxtmqz5
+dvb6sixvhdrzzjk
+btwokhl99nine
+73rkgbsqgz7koneonemlhrbtxc
+eighthlqqt4onenine
+eight61oneightx
+ninebbtcjjlqkthreenfvbcc4three946
+ninepqtlffxvclgn7fqdhqbpmkkseveneighttwo
+bqzpfxntnkhhfkv98fhrqslfs9four
+4ktprrljbthreethreethree3blmddptfour
+5fourone
+9zhvgleightseven5nbcmscqms2two
+6czngsp895
+2threekrxmtfrr2ppfrzqkqgfoureightlf
+six8eight6seventxgl
+1one9
+3qpmrtzsvgkjxsevengzdkjkbbdltlrjkznbbkmpb
+sclxoneeightfoursfbfm4rbxssmgngfxrvcv
+fhctmnpxdrfivemndlr3sdp
+twoseven9sixlp
+962
+tsnsndjtrp27cbtsjdlkrqmtctxvxvnx
+5mnine
+7fgt6
+three1ninertghhbhbcnjdsknine
+two8ninefxcqmxdhtnmcmjvtds6fivebnm
+7phdp
+2hnszbksg
+4ninedcnjbcxnrmoneeight1
+hnsszlsx7414two4
+gmkrn9gcgmffrvbfivethreefive2seven
+2bknqdqmrxpfftptwo2vmqffgmzr
+dsvf3nv14zklptjnhv
+54nchsnpknkx
+oneone15
+onefvmxnzp575sixpxnpndqf
+6vqrzsbbxg3735
+twojbldk2hfqqzgone5
+onesixlzznvc8nineseven359
+6vjbr7
+nineone32nmkszsthreefpscxcqtwofour
+fv1zpqrxvdlzqmeighthhbbbzt
+cskvllzszxzk9
+7ninebrlggdzqk7ninelvddrtt1
+2fpttpbq6b7ninefour3five
+bsslmmmhfxc6
+lfjkdzdm9eightkbdhrkpcnzcftlggh
+rnineninelmbhfour88onevfzhcmneightwofp
+one59ktxrdrhc8six9
+86nxnfzzsixgmxxglvfivezmkdvmhjfzone
+9threefourfourrbxqpqbtbzxstwo
+3pvgtcxrfvthree39bjfivenxvbjone
+sixkmngfour3bfive
+6threehntsjhjpmqhl345
+fourjcnd49fivexqfbj
+ksmszhfive7rrphsxxhgm
+zqtdztkhveightninepnctbcgqsb6
+ninemlvzfcljfkeight1tppxrqtdzp2
+twotwoeightnine5frzk3
+lfvqtzbsix3
+four3bsgft28
+sixgksnkrmsix2rbjmfmnfzfiveeight
+vrtffvbtcmszfdc2sevenhvpfour8
+twopvgzmthree3
+xqffprzsrjqkcbsevenczlbc5
+4ninefournmvninetwommnrctqjhg
+27four
+fheightwod4
+38zkgvdpgjzqfivenlr7mdxd
+ninexxvninesevenfivedpzfgpbv5
+xjzgznvfsevensixthree3rgfqhkxbfp5vfrjcdncfkjk
+2kcbprjfhns68
+bndqgcmnine4qbzfgxmlffive
+ffctnxgtwobldqhsix8djfmdnpgmt
+fourseven91ninesevenpksgt3
+rninesznvtbq5zqmthzrcntskdthree7
+8eight7
+1hnlnp79
+1three3
+414ninevqrccrf6lmzqmsjc6
+15mpeightxmhxlxjmn
+ktdblrmqqxmktvqfour87
+1four121three56
+ldfdgfqkr22nxtsrsntlsevenxxrcclrhtl6five
+eightfourthree8pvlkkbmbrfnfr6
+8sixninefiveqcmjhpx
+2seveneight85lskjhn7
+31c3
+hpgmpmjmnk4twothree
+cqsxgbj23six11
+threesxzmgtvhhheight99xsix
+6jlpt6rnsprllqhgbvhtqtjvft217
+22onesevenfour4sevenseven
+sbnjszzkdleight6three
+3twofourdmrsqqtnzgng1two
+ldcvxqbsfqpgql9ngsbhfrmszhgvznnnjhnm5
+1oneseven28seven
+nsvhqtfivemjgcdqpbtwo1nine2
+six8dj
+zdoneight67fivesevencqlr
+xlzrkgjrhmszmkzlkkmrxjdnzrtlzssfpcxkbxvp6jghldhvr9
+8sevenbzbnnx
+vzrmcfvc9shkxfblfkf
+9twoshzmktntwo5nqp
+3fourvpdfs3eightword
+three24onesixgdzgkspgsjprjgn7eight
+4tz2sixsixqbqfsr4twonine
+twoq2eight
+rccxnvtqnhdlgzqfzcnrmqtjqonesix732
+seightwo8ninekndqrdtbfp
+cgnmrkcjvbgfmpbpjckhfrzrtnine2sevenfivesxhqk
+fourxsncktrjtpnine6ccbgpl
+1sixone5vkzxnhgdlbsevendtwo
+9jbnineppf7
+5foursixlrn5vdgdbvnfhg
+fivecrtwo8zbqrvjgpfivenine2
+ktvdhgvone6dbrvj5sqbr5
+bljtwonesixthree7dzdfrgqrkstwo4xvfmtsbpqjgxsgqcpc
+sixgg5
+vmrbqdqdrqtwo2onez
+onehlgrgndk9ninefsntwo1rnclttm
+4tqzjbhdhkm1
+nine1kffxzcrn189
+sbrxr9ninemqb8
+six528mslnf
+sdvthree7dfivenine918
+3kvzqqkonepmghblzvljnineone47twonesdf
+four9sevenfourjhmjjslqgd8
+3fkfmgqf6fourbldjfvbhr
+eighttxpddhsnzrkplzqc1ninezpvqgnhxzftwo
+56lsxmkfpghsqptvhmmmzhcmfdeightsix
+one72kdfdrtwothree8
+7kpgjhpnthree7
+37j2mtwo
+seven4mjponefivesdgncqm2gkklsqvthfeight
+mgckktt9six4eightwol
+4grzfdm499ninetbt
+tzmbtv84b
+xvzltd75dhpjckmpdrkgglskqrhd5
+cgnbhmdlj24
+7fivetpbtmone
+fivelpmbxvhktzkkonexsxktlzthgbgqkgcj94
+5sixhggcbrft
+43five7122tqlkhssczsr
+eight1seven3
+fourtwo134fourmzpxspr9
+snxjqnf8ctcnvjknghxpkpbrt2
+4qj2xtwoghknine
+1zjfivegtwotqgndnineg
+fjmmznxkrml7fiveninelfvkqtrg6
+8xjlqgqj395nineninefive
+dx47sixtwothdphj
+fivesevenxgsfb235cvgmspdgg6
+fivettfzvfg78dmzzdzcrt
+fpnvxp1
+seven24
+1three8oneeight
+7xglzsqrtb8fhgthmgdcdtwo
+seven8gdtfgd4fivepdq
+twosix1qtttvvstmqbrhh
+ptwomnjhlzjjkztwo4kdkgxv
+89zkvrhmrhdbmfourzdpss
+bfdsvnxflgqxgpzkmrptlvmvlkchjxrt67
+9mmhxsevennvvdngznine17twofive
+lszmqdmxz87mqbv51
+546sevenninencccndnr4
+nineeightsqgrpkrqlmzrlxm6hxchcjspnx
+8twoccdnbfive
+1ks98
+twothree6
+twoxsixtqdpp6dcclzgfvkv1
+16one7scvsgvmcdsixjtzszzrxdzzgv
+bjxzdsixkvqgjfzbbjnrtn212jplvrj4
+zb2three5cngqfczc1
+5fnine99zxvfourjgmn
+one634rteightfoureight1
+76gvcdfourgtbzdlltzsjnxqg
+ltmdrkqqnfour9eightpckdvbhlkvxlpdtp
+6two5kgncpnzkdsgnpspb
+three8vjninekbbnnfrdstprcmklrgpkfpmbs
+ckvvqjqzbpfhf52fivefivefour
+7ngxpdqptksix
+ftp2eight
+8lnmpbqldqstwo
+threetwo153644
+914
+plxjdxghsix17
+sevenonesevennine4three2seven
+7bvdgpghzhpeight512vxbnfqjctb
+xqptzkfive4xqbjzpqfkfspqv5kgqbdtfive
+bmltkhjsckhrc7two8nzdpkjjpnfive
+nnhppfvlhcmnmrjxhrbtzdflseventwojfprxmfn7
+fournfdtjtsbthree54fpzsq
+ninenineone5two
+8694twomgxxzfxr6
+sixeight75seventhreerpchfour8
+llv5
+skxcbfffgc6sixone
+3lhjbzbsg4lsfgpkmcz7vjxzbrshbseven
+4onecjlkpqdljd3five5
+eighttwo2mvdtvqpnonetvphxsk8
+15195one
+kdx9nine6qrnqrjxq59
+twolhjmbh4fivetwo6pdzbnzt
+pbvfour7
+tgxrsbk2
+hfournineone58sixthree9
+hmftwonesix5dhthkcnzqseventhreenineeightnine
+9jmmjclsnsdhhj
+hljjvctthreefourxsdlvsgtqj1335seven
+172
+2gbfpjff
+five5sevengvddnphnine
+sixeightfourssptsqlhzxonetfg2hkmrcpfzcz
+94csjjgl42three
+4bkxxv6
+pgdgoneqmhxfpnfqkrbkjeightbmjjlrnsc5
+nineninetwo55fvsxspzt
+32jqffghbqvfmjtjone78
+93eightfour6eight9eight1
+768jrdmfxgxpntx8nhpljjdx
+eight33zpvpggklseven4lcqsixthree
+fourgrmone4
+bcknine9qsevenrjhjeight
+5onevqm
+578mmqhhljtwo39mfnpmfqthree
+fivecmts43eightfdphfivejsx
+8vkqvl
+8oneone27fourseventwo
+jfsixfivethree3cmjtvkzhqkcksmljxxzbjd
+three6sixpdvtrnrtffltrs
+threeltvvfkcdqjtwo89two8j
+5sixeightfivesixjjmknrgd1qpsbpjrffjl
+eightrmgfkckxxxsvfclhtgcjthree3
+rnfbp8eightjv35eight
+2rrssqrfkvmq
+dcmghdmg6threetzsdx
+qzhfivefivejvbtncm2
+gcspvjnsevenqhmkngfivesix15jtpk
+bkmlmh5six1sixone2hgtlsix
+8rmjshdhm681vc
+sixtx32
+7fourtwo6
+xgrcxeightsevenzgmcllfjqn7
+553fivethreefour8nine
+one4mxbmct
+three6ninetwofour
+1bbbxqhhlmj651eightkfdqdgvh9three
+4414
+mnxsixone92
+61six8
+eight8mrcpfive1
+crsvmfivezbkzkqsix7mxjdgtsqbfvdbnlqtfiveoneightgj
+4dmzznftdbqj
+seven25
+fhlhpvphqvh8one1ffkq
+mboneighteightonefive1ninenineninetwonine
+82fiveonexc5
+97qbhvbqnmxtlpczsx
+nhgzzjkx5
+hgxlrk9
+8twonine9fivetdxmjqppxr
+onethree99sevenfourkzvd2
+sdqjfvbndzcthree1ftoneightkm
+5rcllqcxt
+threejdntvhsixsckfpndjzkeightsix3nlgpsvsfhk
+94fctwoxmczbkz
+4eight35tbqjxglldsevenxmthmmlhsix
+three125
+3njtlmxtbr4541ninedz7
+9ptzpzqrjmxlrmbfbpn9ss4sqcprfmcqg
+8dpmkdtvjxzjbddn7pvkxzskddrhcsjvthree7
+xxshbfcmf3cfdkeight
+six9ninefour472
+fourrvxfmjzd4five
+1fivesix
+twonine3six9
+nine8onethreethree
+foureighttwotwo7onethree
+9prtlnjptoneninefiveninefive
+cljqxpthqzdxpmmbvpjljjxhlhsql8kztpthreesevenoneights
+9sixtwonetfh
+kscmxpcqlthrmthcdhplpnqlq2
+fiveqjfvkmnineeightninefourtwo1
+one5sixeightfxkshmninethreeeight
+4nine4
+27
+ggtz73sixkgsjrtcxkb1
+qvxsgvrpbxqcgpb2fzmcvknkr99seven
+6eight8ksgdlxj638fivetcgb
+mmvc3fourrvbztjchbmqtxtgfrrqphninefive1
+3qzbzxsevenfivegrvtbckqcj
+eighttwokzpgl2hrvqlhkthreenine4
+8twoeighteightxtsbrseven
+nine5mghp7vpnvtpx2c
+hkxkmx5qnpjhtdfjfsix2xqqplvm5gmvjm
+69cgvzhvgjvl8
+threeblzj6three
+3bxpmnfbtpk5hcgqkbkqblznxgsdvklmtmqjxsxdcgqvmsprxrrnfchfbnd
+1fbrrcjgzzllmcbdrgmrcfsevenh
+58onezbp
+1bqfkmkk46cctvmstvhvrtwoone
+mmeightwo9sbjvleightdsevenseven
+9gdsqgflkvonetwo
+3lgpmxdgjtzx3two5foursixeightwomb
+dbkbeightfive9eighthxngnrbmp
+2cpkxggtrdsrh
+zsgcdcrlhlqdpone9eight17sixbbtzpmdf
+5rskkplgsbl9qqzfrzh67four4
+nine856threezgbhrzjcfour
+kqnnine87lflxddvtfb9lfjdknvgl8
+fsgtwo8zxvnfour7xxfnmqpzhzone4
+ddd9sixnsrpqmvvjh2xghxhm
+836
+nxglt36ljcbvgc16hxcbtqjz
+nine19fourhnvh7fgqklf11
+jkvsphrpmhbnfl2nhcflhsbks4
+7nine2dsgkmrzlrzptfpk672
+6vtmztrjdrbk
+4vgsshzzsrtwo
+ninexfjcxdcnxs7seventhree2
+hsvvqcqp97twommjjlclbtdjbxkveightwos
+threedlcvvseven3
+366xqfbhzfmqknine7
+jzrqqfouronehhrmkg4one5
+8xcbccrp141kmcsrdlgcdzpcb1nine
+59rdrphcgk
+fivetwoqmlk22eightfive
+qnsphtvfourtwojljxnvgrkk3slv6four
+13dfbnfnpsevennqtjthreethree6
+4dtncvsix34oneeighthpfouroneightv
+xdhqninefive88nine
+6hnnl8nineonehm7four
+sevenfournine8five2six
+vnczlzjqdtmdgsgxch94one3knlxjvqtrjlsx2
+twoeight14kkzrsqmgkhjb
+jhqrzxrhskngj9ninenjcnbdtjhjtdh
+2grrlxnlvthreernfghspmc
+two8hjbsevenfive5threenpgtnkftp
+d8sixfive1five7
+sixthree9
+sixspqf2gptcsrvlln9
+seven8nine
+nqeightwo7svvjqs75qgp3hpvn
+qrsixxffsdvvrf74five3
+5threeskqgcgprrjmcxksixtwo969
+bdbtlvlseven13fh
+2two1eightfour7jqdd
+three8ninefournffzbnbhkpjqh32
+sixqzmhnjttdnine41sevenpcxqkvr
+fivenine2fourseven2
+sixjjhrjbmvvngqd3three7ninekpneight
+11lttrkpcljbbrmponeightbb
+frxgkvgrjtsix84
+76eightonesix8fivenlfhkfgp
+fourpqlrklpnfljvpfkdklkgrjp1ninevfour
+1six75tr1
+cjdvxhmjvstninejccxrqhb1qkpmnzx8xfpp
+8sixfourone6pzlnczvlsmmp
+eightrkl37jqlvjjsbrtqsix6
+onesmrjvmrtlppm69857seven
+4rgsktnbone8sjxjzbrplnmfvkknpxqv
+tfteightwonsdffone8sixxdpeightseven
+639one2two
+smk55
+6cjbckhbtmkcgrvmp3
+rdnf9
+1jjkdspeighthteight37
+1gh3dcmhx4sixnphphhbpninevbqhs
+vpstbqtdmbvk9jstvtgzrdl
+91seventwo
+7sdpflkxfzfivethreenine
+gvgcrpphhbzghtbcv6
+vvnine5ddgzroneone
+5four6684one
+dmspptjjtwocr2one
+sixftzx6fdsfv
+5six8twotccbsdnpxg32tsix
+mfkdbdfournktdmgqnt4vqkzbzonekdqhbcmfgfiveone
+nine2476
+8rxd2eightninefourmd
+eight1hqfcqs4cpvpsqjfhptwo6six
+5z
+bqcj948nine6xmgnxmxnn
+two1lzdv65bhllvrc
+sevenvjkl3ninespltvdszvnfvzpcvrctphvp49
+4mzjxftf5eight
+fivehbrxcbgjhhxpzfn5lllsknk7six
+6n5ttwo166
+fqdfhc3
+6cph
+lzqqvnlkjv3sevenbdssvckmdm
+bbdpgpfsevenvzsix87
+754sznxkfb4npmjbv4one
+twothree984dsxsninefour
+kmpjgh71jhfrjgrpbd2d7
+27tgptfvcjnk2
+onefive497cdcktxcjfivezdrdhczbp
+79176threeseven1
+csseven1rmlbcpct
+1lzlz4tsngmgh
+zvxshddzg2eightpxkzfnvdfzeightseven
+ninesixnine93seven8
+1twofiveeightmfour
+six3cmbbbxbqr74flchvgjbr45
+7nine31two9dvsghkrjj
+five5four
+seveneightthreefourseventrgxdqclq2
+5dfgddsevenldmzckmvxjmk92fourdcpfgcrpd
+ninekbhrflzmgp3lqgxgszmzvndr47zcllcfg
+sqsixonefivekfvbfh66p
+bssrkdrrgsftlqjdz19
+bqcbhfive6
+jt3fivemdrnrvngsb1seven5
+svdninesbj11eight
+2phltdc
+1469sevenvksvlthqskfkx9
+7fcfivefourdbbvtnjbrc
+6seven4
+lrmfqtjkzfive69eight8
+zmngmr9ninenineninesh
+qrxvdxgtfour7one6
+eightmjpkgdtrp52shpcrtb
+54k7fournine
+7fdbshl6874
+jfjvrhccqrc1fourcrg96
+1sevenncqhkgtzmtncmxhflmfsxfsmsmqh
+79fourjmxfdbqnrsr
+sjthree6tcbp3x
+qvrzmdzfnpkkdcvone2lttcbzhhddbnlnhxgsblhtlvdcpnzjvvqszrthree
+ninedfxcz63two515
+48sevenvgznbsxzhfgzq19
+dxjbtzvtfn3five3
+five1gxfcfppffg74
+78ncrnhmv766nine
+two7qmgeightjhddgnineone
+jhttksbpbhzmgglfour7
+bloneight3ckvpkxtwozzxr1onethree
+mhmppdtvfonecrjzlktlnkpzdbqtvtwo4
+179tjchxninethreesix
+dpcfnsftnjbhlpcjrc8pbnnhtlrjzmmjk
+ninebn16one2crfour
+mfivesix8nine1zgpqpr
+eight44fourfivegfive
+2qhsltnzsfivervftmdm1hthcml
+sjoneightvrxctb9sixhkhmfivejm
+7threehdctsfqflggzkhpn
+seightfourkhpkprrcl6six
+fourkdff7
+57seven3four1r1gcjtckvn
+gmfdzgv7fivesix4nvlq3
+thp7
+xd5plhtvtgxmgkmhlr5nine
+7fourdf
+pnkjgdctpm2221four8pvnhxdtrvs
+hngtq27nineninesixeight
+2fivejpfbsqtx1fourseven
+19jpjsbljgz
+ninethree5twoeighttwoqponefive
+gklmbcj5mstwo8
+phbeightwo31jjzltcqzhklm26
+jtslpzsxh43
+drk7
+5dxcsvgqkmz
+jnrgv9
+nsttntwo6
+6qbfrlcfmmnqpmbbtqgdsjqndqfive
+2mgdjlpdsixfive6
+sevenfivesix6
+3nrfvb13onebsrclqnflppzchtp21
+dmpgdvfive7
+lpvqjzhvjoneghqxnvsixjxflzqj4
+onegqzxvnnfnlcffour2
+nsglbskbzd2drjzqhnq
+nine8seven
+rfspthhjbh92rseven1
+nine2ctjnb
+gzkgvtxjt8twoonefour
+tplxnlr8bfjklthree
+jqrxrtdvmj8fournmj
+6gxvglbcqkdsdcsl
+pzjk9ccbmkzmtsf
+qdzpknfhbsixczkrqbpfour76sevensbvltnjccjllng
+six1zrhqxzfivetwo
+xjhmfkvjgxtbgszmpd54jbsscgrninethree
+cndbtlq22
+fouronesevenzrrv7mhsvjtwokqbfvvrs5
+twoonefive59phkxdbndgch5seven
+8twoninethreeckdkd5
+9four6jfxnfgjvcrszrpsrkhh
+993psn4qdldmfnqsix4
+42tzxknj
+vvzpl8six
+8vpchdjxczsvjjqljnmpdeightone2seven
+fivenine51sixcdb
+dfkkvsone5kjzvqqc
+8seven8pxtrdrkqcqhdklgsixzxtjmtblzzcc
+ddvzsqnxd9xscsix4rvpsix
+75nsvxf9one88
+38ninetmmqx2
+sxjqgrdthree2vhpgrcdtqeight
+63kthndjc
+qgbdkfm56two6fourthree5
+five79
+jpb2seven7one7
+four5sbgbpzkjjkjhsvgksgjvfrsbpbdzgd2
+xlxpsixninextzlpbn6
+jzbvzlflf8twoeight
+4vjtr6eightninenjtvt
+3twonine3vmrgkjzkpfoursixtbcktpn
+six1fourbfhxlntrqfxxztmj4
+jrbhfourfour6jspsxkn2eight5four
+pcvjmdlnf15cfghpszt9
+4lxktgpvvq1sevenone9
+twosixhllhbxkbd2three
+veightwo3eightvrhseven89onelxvhqxkhm
+2sixfkdpcjcgcbgfzlbgblj
+457jtmdfdjcnine
+three64
+pqgjfseven4sevenoneslgeight
+91vcptwo1twonineone
+seven63fourzjpdmk1
+8fivetwofrbtm6f9five
+sevenchrtbctkgpnine65fourbhpqnchhlz6
+rkdqrbtdbj9bt41hklvlrbrcpx
+1three1gmdeighteightqbgsevenhljbpzbdtt
+srkbbkfcznine6nine6
+8kmzbjzsxtgr9drtbdl
+24six412smjfxscst
+9cktpshfdr5djvrngchrh176
+2mjknvteightmvsdgt8seventhree3mzfk
+vhldtk27two
+6three2ninepqnine
+2fourzbtqnclrtpsix2six94
+six6five
+one2eightppzmczmgsixnine
+15qljk7vchkfcfhkhmbjlkcfour
+99four
+dhrgkkbrnczkdt3n
+89211sevenhnbjbrxtk
+663rrbpnrknine911nine
+2ntffsix9
+4mdpcrvqfoursixqeight
+jbjjqkfive3jqnqhvkmtbddrdqxseven
+2gvrgdsxptwovfkpgdlmlhz34
+rqfrx82
+tworzlxeight66eight1five
+md1jgknfftttjbjz
+tctqctkone37cmpbslgpzh3
+3sixsixfpxg
+seven6bld42brzxr
+6two4seven9zpgb5
+nine13
+d68
+3lxvsgksbbtwo52eight3three8
+bpltlnlzc8
+seven2five1threedmkg
+hpkvhlkhknhjpq9tgpmnndgtlqjx1vkdkvtqhtwodrbr
+fourfivesxgpxhdvts7four5
+7frgrjkkrb1
+2threettvptwobjhmxvpsvmljtvnpkpsvr
+9fivelxtcbbn9xgtwohmmhnfhcknc
+fourqztfvd6gkhxnstjjxnbl69hzkghsjrd
+pspgqcjfcqdgq6xsgxrls
+threesix6lrfkmvjdfivetwo9
+kdjgpj54
+oneeightsevenfive1
+one4onefournine64
+45hhcpntsthreezl9hjdnnine
+17ninenineninegczplbj81
+31threetwosevencphdv
+5eightvsrzjmdbtqhhqtjfjrhllhbgzgzjzvdhddstxpp4
+pgghlbtsevenqxxjbnd14onetwo
+3ljgmcxnqgxcrfourfourtworjtwo
+eightseventhree59
+3nhsccljtzszftnqtfour5
+threefourthreeone3five
+3pzgzjv7tz
+qxgntksdr45tvnxfcjdnn
+5seven9threejdzrzdfcpgbnhrrmfkkskg2two
+38bjnlcjbeightfivefourqvtbvjsb9nine
+nmxqtzlpfngzlsnl9
+9eight8five3two1gsknxznbf9
+518jkqmprjlqcpdthreefive16
+6lzjznblrj3three
+f7blbxznlvgk
+37jtlrvlzhzronehn
+kpckhlcsbeight6
+8dfptmfourtwoeightfoursixonefive
+ninecdrxlgdkm7nineseventwotbbcgninekbxssd
+rrhkgmnsbxbhb2ccnncrbstjfbmnlbxsxbkr
+cflrvjtdsevenfivefive3sevensixeightseven
+41ninenrznrcpdqhxfglb
+gffivesixtqbbmzllvbnjnk2fivesix
+eight311seven
+52mpqbgktxhs359btkzqdfzvtrzmltxt
+onegxnk2rvnmdcmqvqvgkml34
+gfzeightwoeightrbvknvpt7
+1ct2
+zctqtxtgseven66zhslvvdninetwo
+54sixbfn8mxfkthf5
+9974seven9dclxbmfive
+onefour6mjtssrxjjsleight2foureight
+818sixsmmzsvbpl9two
+rjqnpzlp83qxlj
+sxqztv22
+8tsvhfszvj
+one5mninefour68
+three7threeone
+sevencnq2jdjvmlh5mqnnnrsqgppkfxjfjsevendrq
+8zmxbvgschsqxbk5lltxpseventhreevrhsvdkk
+seven2ngbqlxkjl27eighttjprz
+ccfskxtnqpqninevczrltkg18hmgjmqt
+npgtv4nine5lnqvglvdrxvqmc
+kvg4zrtpxnknbone
+threeeight1tsdcthree5zxrshttlsmseven9
+35448284
+6fiveqplkfftsj
+pldmrjhzhfiverlgntcckbqzjgth4gfddcrz
+6fivesix2
+eightksz6m6pneightnvpvvx
+1fourbqxtmbvzsfnrxqmvlbfzvdthree
+two43sixthree5one
+cqf2
+twoltseven8three64
+6fourprlhcc
+fgqoneightsevenqthreebksixgdqt93dm
+xjczd3sixseven5
+kfzgshnxqnptrckbrt2
+fourrrdcl624
+kvhfqspcpsxndjqlonesixthree24kdmqvone
+8eightfivetwo
+onesevenseven5fourlrkkqtfkrmdlsmd
+jffvtzkbjnkdtvfsfthree431lrpgmtv
+bbvsptrzbone4tfnpgrfourvsix
+4seventhreekmxsz335eight
+eightbrcv5
+two2eightbppsplzgcfournine5seven
+fourthree5kcdhqzeighteightkbzszgv8nine
+rgxrddnnbv7rkt
+8ffmvpcsvfoureightqpnzzjksgchnine9jlgjqb
+two9tfvjqsgqsixnine
+bzn4two
+sqlfeighteight6hjddxzcone2
+3fivekmfnqlctddfivelcthnine
+twodn8
+one5six913lbrcc
+foureightmppchbgz8lqbzqbjztwo7cksqxns
+zvhzgfpkhkone93nine \ No newline at end of file
diff --git a/aoc2023/src/day10/input.txt b/aoc2023/src/day10/input.txt
new file mode 100644
index 0000000..230e945
--- /dev/null
+++ b/aoc2023/src/day10/input.txt
@@ -0,0 +1,140 @@
+.F-7F-..|-F-|F---7J7FLF-7F|FJ-LJ.7--F7-|77.|7J.FFLF7-FJ7.J-7-|.J.7.F7L7..FF.|F--F--|J-FFJFL7F7-LJFF-.7F|7.FF|7FF7FL7L--F--77-7F7.7.-F-J.JFLF
+FF-.F|-FLJJ.77F|F|-J77|---.7JLJLFJF-|7.F-7-F7.FFJLJ|.LF7-.|L7.J7LJ.L7FLFF7J|.F|.LJ-|.|.L7F.LFJ.||||FF|FLL--|L-J7--J|J7L||FJ-JLJL-JJ.L7J-L|7J
+.|.FF7-LJ|.FJF-77|FJ|||-L|-L-FJ7F-|-LF-L7|FJL7J-F7FFF7FJ.J-.LJ.F|J7.LJ.|L.||L7JF|.7J7.7.|L-FJ7LL-JJ7FJ7.LL7J7LFJFLF--F|JF|-|.-JJJ7L7-||7F---
+FF-F7JF|FFF..L-|-|JF-JF7LJ7.F7--JLJ..LFFJ||F-J|F777L|-7J-7|7|7.FJ-77..LL--7|7F7F|-J|77.FL-7FL-JJ|7JL-L-|7F|7JJLF77L|-7|.FJ-L7|J.LL-FF7F-77|J
+F|...FFJLLJFFLJ|JJJ|.LL77-L7LJJ.|L|-|-FL7LJL7JF7JL|.|7||.LF|-|FJJF|F7FJ.FJ|LF||F7.-FFJ-LJ|FJ.L---J.|L.L77-JJ|7|||--L7|J-.F7|.F7F7|FJ|F|J-F..
+--F-L|J..L.F77.L7--JL.L|L7F|J..FJFF-J7|FL-7FJF77JF7J..JJ-FJL-JF|.FFJLJLFF-F-F||||7L|LFFJF-7.7FL|.LL7|FFJL7JFF7F|L|-JJJ|.FL-L777L-.7L7FF7.|7|
+F7J.|.L|7.J7|FL.|.|.L|7|J--7-7-L.F|J|F77|FJL-JL7-||L77LLF-J-|-F..FL7.F-LJ7FF7||||F77JLJLL.J7.L-JFF.LJL7-|L|FL-FJF77|.FF-LJ.||J.FF7|FLLJL7.FJ
+FJ|F|FFLJ7L-L77L|-FF.|LJF7-L-77.7-|-FJL7FJF7F-7L7||7L|...|-LLL|7FF.LFFF.LF7|LJLJLJ|-7|.|7..J----F77.JF-JL--7JLFJFLJF-7J.L77FF.L-J|LJJ.F|JFJ|
+J.L--77|.|7|L|7|J7|.FF|7||7-|||7|-J|L-7LJFJLJFL-J|L-7|-F-7.F7JFFF-7--7-F-J|L-7F7F-JFJL-FJ--J7FJ.J||J|F|7LFJ||-L--7-7JJ.F-7-7.FJ.L|J|||J.F7J7
+|F.F|.7-|JLF7|.J7-77JF7F777.LJ|7L..F|FL-7L7F7F7.FJF-J-7|J|-||J.FJFJ7F7JL-7L77||LJF-7..F|J.|.F.F7FFF.-F77.7F-F77-F77L|77..L-7-.L-7L-LLLJLLJL7
+F7FL77|FLFL|LF7|J-|FFJLJL---77LF7LF7F7F-JFJ|LJL7L7L7JJFJ-JFF--7L7|FFJ|7-LL7|FJL7FJFJ7-F7..F7F-J|F7J7J||J--7L|L7FJL77F-|F7|FF-7-|J|L|7|-JJ|FL
+F-JJL--|7|.L7-J|LLF7L--7F---J-||F||LJ||F-JFJF--JFJFJ77F77F7L7FJFJL7L7|F7F7||L7FJL7L7F7||J7||L7FJ|L7F7||77||-L7|L-7L-7JLJL7JJJ.|J||||FJ7--FF7
+F7..7JLL7FL.|-JJJL|L77|||77||7F-7FJF7LJL-7|FJF7FJFJJF7LF-JL-J|FJF-JFJLJ||LJ|J||F7|FJ|LJ|.L|L-J|L|FJ|||L7LFF-7||F7|F-J77LF7JJL|7.|JJ-.F-.|.FJ
+7---F7|.FJJF7777.|L7L7FJ|F7-F7|FJL-JL-7F-J||L||L7L--J|7L----7||FJ|FJF--JL-7L-JLJ|||7L-7L7.|F--JFJ|FJ||FJ-FL7||LJLJL-7L7L||JFFF77|JJ.LJ7FL-|J
+|F-7F--7FF7|J|FL.F|L7|L7||L7|||L7F7F7FJL7L||FJL7|F7F7|F----7||||F-JFJF-7F7L--7F-J|L7F7L7|FJL7F7|FJL7LJL77LFJLJF7F7F-JF77||7F7||7LL.-LJFFJF7|
+J7F-J7.F|J7JFJLJ7LF7||FJ||FJ||L7||||||F7|FJLJF-J||LJLJL---7LJLJ|L7FJJL7||L---JL-7L7||L-JLJF7||LJL7FJF--J77|F--JLJ|||FJL7||FJ||L7.FFJ.-J--L-7
+.L|JF77LJF-.JF-JLFJ|||L7|||FJ|FJ||LJ|||LJL7F-JF7|L7-FJ|F77|F7F-JFJL-7FJ|L-----7FJFJLJF7F-7|LJ|F--JL7L-7F7FJL---7|LJFJF7||||FJ|FJ.|7FL..|7|L|
+--L-F.J|.--J-J7F7L7LJL-JLJ||FJL7|L-7LJL7F7||LFJ|L7|F7|FJL7|||L7||F--JL7L-7F7F-JL7L-7FJLJFJ|F-JL-7F-JF-J||L7F--7L--7L7||LJLJL-J|F--777F-7-FFJ
+||L7-7JF7L-JF|F7F-JF7F-7F7LJL7||L7|L--7||LJ|FJFJJ|||L7L7FJLJ|FJFJL7JF7|F-J||L7F7L--J|F7|L-JL-7F-JL-7|FFJL-JL-7L---JFLJL7F-----J|F-J7--FLJLL7
+.LJL.LJL|-L-F7||L7FJLJF||L--7L7|FJF7F7|LJF-J|FJ|FJ|L7L7|L7F7||FJF-JFJLJL-7|L7LJL---7LJL--77F-JL7J.FJL7L--7F7FJ-F-7F7F7FJ|F7F7F-JL7L|-7J.--LL
+7JFJ77FF|-JL|||L7LJF7F7||F--JFJ||F||||L-7L7FJ|F7L7|L|FJ|FJ|||LJFJ|FJF----JL7L7F-7F7|F----JFJF--JJFJF-JF7FJ|LJF7|FJ||||L7||LJ||F--J7L-.||.F-J
+|LJ-L-J7JJJ.||L7L--JLJ|||L--7|FJ|FJ|||F7|FJL7||L7|L7|L7||FJ|L-7|F7L7|F-7F7FJFJL7LJLJL----7L7L7F7FJFJF7||L7L7L||||FJ||L7|LJF-J|L-7F-7|FFJLJ||
+|F-FLL7|...FJ|7L---7F-JLJF--J||FJL7LJ||LJ|F7|||FJL7||FJ|LJFJF7|LJL7|||FJ||L7L-7L7F7F7F---JL|FJ|||FJFJ|||JL7L7||||L7LJFJ|F-JF7|F-J|FJ----.F--
+7JFL77J.-F-L7|F7F7FJ|F-77L--7LJ|F-JF-JL-7||||LJ|F-J||L7L-7L-J|L-7FJ|LJL7||FJF7L7LJLJ||JF7F7|L7|LJL7|FJ||F-JFJ|||L7|F7L-JL--JLJL--J|JJ|7J.J||
+F-|F|F-7L|-FJLJLJLJFJ|FJF7F7|F-JL-7|JF77|||||F-JL-7||FJF7|F--JJFJL7L7F-J|||FJ|FJJF--JL-JLJ|L7|L-7FJ|L7||L-7L7|||FJLJL7F--7F7F7F---J77L-.--7J
+|--J-J7LFF-L------7|7|L7||||||F7LFJL7||FJLJ||L-7F7||||J|||L7F--JF-JFJ|F-J|||FLJF7L7F--7F--JFJ|F-JL7|FJ||F7L7||LJL7LF7|L-7||LJ|L----777L7LFJ.
+.FLJLLF-F-7F---7F7|L7L7||||||LJL7L-7|||L--7||F-J|LJLJ|FJ||FJL--7|F7|FJL7FJ|L-7L||7LJF-JL-7FJFJ|F7FJ|L-JLJ|FJLJF7FJFJLJF-JLJF-JF7F--J-|JF-L-J
+|-J.-7.LL7|L--7LJ||FJ.|LJLJ|L--7L--JLJL7F7|LJL7FL---7||FJ|L-7F-JLJLJL7FJ|L|F-JFJ|F-7|F7F-JL7|.||LJFL--7F7|L7F7|LJJL-7FJ7F7FL--J|L---7JF|FJLJ
+F7---F-F7||F7FJF7LJL-7L---7|FF7L----7F7LJLJF7FJF7LF-JLJ|7|F-JL-7F----JL7L-J|F7L7|L7|LJ|L-7FJL7||F-7F7J|||L-J|LJF7.F-JL--JL7F--7|F7F-J-JL-.L|
+L7.|.|.|LJLJ|L-J|F7F7L---7||FJ|F-7F7LJL7F-7|||FJL7L-7F-JFJL-7F7||F7|F7FJF--J||FJ|FJ|F-JF-J|F-J||L7LJL7LJL7F7L-7|L7L-7F7F7FJ|F-JLJLJLL|7L7|F7
+LJ7L-7FL7F-7|F--J|LJ|F--7LJ|L7|L7||L7LFJL7LJLJL-7|F-JL7LL7F-J|LJLJL7|LJFJ.F7||L7|L7|L-7L-7||F7||FJF--J|F7LJ|F-J|FJF7||LJLJ.||F7F7F7-F-7-L-JJ
+--77L-F-J|FJLJF7FJF-J|F-JF7L7||FJLJFJFJF7L7F7F-7||L-7FJF7||FFJF7F--J|F7L7FJ|||FJ|FJ|F7|F-J|||LJ|L7|F7F7||F7|L7FJ|FJ||L-7F-7|LJLJ|||.|FJF|FJ|
+J|.F--|F7|L--7|LJFL--JL--JL7|||L7F7L7L7|L-J||L7|||F7||FJ|||FJFJLJF7-LJ|FJL7|||L7|L7||||L-7||L-7L7||||||||||L7||FJL7||F-J|FJ|F--7LJL-JL-77..F
+LF-.LFLJ||F-7LJLF7JF7F7F---JLJL7LJ|FJFJL7F7||FJ||LJ|||L7|||L7|F7FJ|F7FJ|F7|LJL7|L7|||||F-J||F7|FJ|||LJ||LJL-J|||F7||||F7|L-JL7-|F-7F7F-JJ-FJ
+.F-7-7.LLJL7|||FJL-JLJ|L------7|7FJL7L-7|||||L7||F-J||J||||-|||||FJ|||FJ||L--7||FJ||||||F7|||||||||L-7|L-7F-7LJLJLJLJLJLJF7F7L7|L7||||-J..77
+FLF|7LFJ-|F|L7FJF7F7F7|7F7F7JFJL7L-7L-7||||||FJLJ|F7|L7|||L-J|||||FJ|||FJL7F7|LJ|FJ|||||||||||||FJL7FJ|F-JL7L7F-7F--7F7F7|LJL-J|FJLJLJ.L77JF
+F7FL|.||.LFJFJL-JLJLJ|L-JLJL7L-7L-7L-7||||LJ|L7F-J|LJFJ||L-7FJ||||L7|||L-7LJ||FFJ|7LJ|||||||||||L7J|L7LJF--JF||FJ|F7LJLJ||F7F7FJL-7.J.L.|L77
+LF.LJ-|-F-L7|F7F7JF7J|F7F-7FJF7L7FJF-JLJ||-FJFJ|F7|F-JFJ|F7|L7||||FJ|||F-JF-JL7L7|F7-||||||||LJ|FJFJFJF7L---7||L7LJL--7FJLJ|||L---JJ-JLFF|L-
+FF7.F.|.F7J||||||FJL-J|LJFJL-JL-JL7L---7LJFJFJFLJ||L7FJFJ|||FJ||||L7|||L-7|F7FJFJLJL7||||LJ|L-7|L7L7L7|L----JLJJL-----JL7F7LJL7F-7JL-J.FJJ-J
+FL|-JJ7F||FJLJLJ|L-7F7L7FJF----7F7L----JF-JFJF7F-J|L|L7L7|LJL7|LJL7||||F7|LJ|L7|F-7FJ||||F-JF-J|FJ||FJ|F---------------7|||F-7LJFJF-J|.F|FF|
+FJLFJ|F-JLJF---7|F-J|L7|L7|F7F7LJL-----7|F7|FJ|L-7L7|FJ|||F--JL-7FJ|||||LJF-JFJ||F|L7||||L7FJF-J|F-JL7||F--------------JLJLJF|F7L77F-7JJ|-LF
+L.L|F-L7F-7|F--JLJF-JLLJLLJ|LJL--7JF---JLJLJL7L--JFJ|L-7||L-7F7FJL7|||LJF-JF7L7|L7|FJLJ||F|L7L-7|L7F-JLJL--------------7F-7F-J||FJJL-J|7|7F|
+.F--|LFLJ-||L-7F-7|F7F7FF--JF7F-7L-JF7LF7JF-7L---7|FJF7|||F-J|||JFJ||L-7L-7||FJ|FJLJF-7||FJFJF-JL7LJ7F7|FF7F7F-7F7F----J|FJL--JLJ|LJ7.7FLJ-7
+LLL-J7L7L-LJF-J|FJ||LJL7|F--JLJFJF--JL7|L7|FJF---J|L-JLJLJ|F7||L7L7|L7FJF-J|||7|L---JFJ||L7L7|F-7|F--JL7FJLJ|L7LJ|L-----JL7-|77F-7-JFF-7-F7-
+|L|-JL|7|L|.L--JL7|L7F7|LJF---7L7L7F--J|FJ|L7L---7|F7F---7LJ||L7L7|L7|||L-7|||FJF---7|.LJ-|FJ|L7||L---7|L--7L-JF7L-------7L-7F7L7L7JLL-J--JJ
+7|F7|FJ77-F------J|LLJ|L--JF-7|J|FJL---JL-JFJFF7FJLJLJF7FJLFJ|F|FJL7||L7F-J|||L7L--7LJF7F-JL7L-JLJF---JL--7L---JL-------7L--J|||L7L7FLL|7LFJ
+7-FJLJ.F77L7F7F-7FJF--JF--7|FJL-J|F--7F---7L--J||F7F7FJ|L-7|FJFJL7FJ|L7|L7FJLJJL7F7L--J|L-7FJF7F7FJF--7F-7L---7F7F-7F-7FJF7F7||7FJFJ-.F-L7|7
+L|||.|-LL-|LJ||FJ|FL---JF-J||F7F7|L-7|L--7|F7F7|||||LJ-L7FJLJ-L7FJL7|FJ||||LF7F-J||F7F7|F-JL7|||LJFJFFJL7L-7F7LJ|L7||JLJFJLJLJL-JFJF|-L|FJJJ
+77|7-J-|FFL7FJ|L7L7|F---JF7|LJ||||F-J|F-7|||LJLJ|||L7JF7||F----J|F7LJL7|FJL7|LJF7|||||||L---J||L-7|F7L7FJF-J||F7L-JLJF7FJF-7F7F--JLJ|FFF-L|J
+LF7|F-7F-JFFL-JJ|FJFJF7F7|LJF-J|LJL-7|L7|||L---7||L7L7||LJL-7F-7LJL7F-J|L7FJ|F7|||||||||JF7LFJL7FLJ|L7LJFJF7|LJ|F7F7FJLJFJ.LJLJF77JL-7-F7.|.
+.LL-JJ.FJ7LLL-|LLJ-L-JLJ||F7L-7|F---JL-JLJ|F7F7||L7L7LJL--7FJ|-L7F-JL-7L7LJ7||LJ||||||||FJL7|F-JF-7L7|F7L-JLJF-J|LJLJF--JF7F7F7|L7.||JLL7-L7
+JF|J.L7|.7-LLF-7F7FF7F--J||L-7LJL--7LF7F7JLJLJLJL-J-|F----JL7|F-JL---7L7L--7||F-J|||LJLJL-7|||F7L7|FJ||L--7F-JF-JF---JF7FJ||||||FJ7|JFF7-J.7
+.LJJFLLL---|-L7LJ|FJ|L--7||F7L-----JFJLJL------7F7F7LJF---7FJ||F7F7F7L7L7F7||||F7|LJF-----JLJLJL-J|L7|L--7LJF7L7FJF-7-|||FJ|||||L7F7-|--J-F-
+|J.F|-JJJLF77FL-7|L7|F--J|LJL-7F7F-7|F--7F7F7F7LJLJL--JF--J|FJ|||||||FJF||LJ||||||F-JF----7F--7F-7L-JL7F7L--JL-JL7|FJFJLJL-JLJLJFJ||FL.|.-7L
+|7FJLF7L|F.L|7F7|L7|||F--JF---J||L7LJL77LJLJLJL7F-7F---JF7FJ|FJ||||||L7FJL7FJ|||LJL7FJF--7||F-J|LL---7||L---7F7F7LJL7L7F7F---7F7L-JL7J7FF7|J
+JJ-LF|-77.FF7FJ|L7LJ|LJF-7L-7F7|L-JF-7L-------7|L7||F7F7||L-JL7|||LJ|FJL7FJ|FJLJJF-J|FJF7LJ|L-7|F----JLJF--7LJLJ|F--JFJ|LJF7-LJL----J7L-FJ7J
+|-L-J.L|LJF||L7L7L-7L7FJFJF7LJ||F--JLL--------JL-J|LJLJLJL-7|L|||L77||JFJL7LJF---JF-JL7|L7FJF-J||F-7F7F-JF7L---7|L-7FJFJFFJ|F------7|F.|JLJ7
+L.LL7J-JFFFJ|-L7|F7L7|L7|FJL-7LJL--7L|F7F7JF--7F7FL7F-7F--7L-7LJL7L7||7L7FJ|-L7F-7L7F-J|FJL7L-7|LJ-LJ||F-JL----JL-7LJFJ-FJFJ|F--7F7|-J7F--J-
+|-F-||7F--JFJF-JLJL7||F||L--7L7F7F7L7FJ||L7|F-J||F7LJJLJF7L--JF7||FJ||7FJL-7.LLJJL7|L--J|F-JF-J|F7F7FJ|L-7F------7|F7L-7|FJFJL7J||LJ|7FJ|.LJ
+.JJ7LFLL7F7|JL--7F7LJL-JL-7-L7LJLJL-J|FJ|FJ|L--JLJL7F7F-JL----J|FJL7LJ-L7F-J7.LL-JLJF---JL7.L--J|LJ|L-JF7||F7F---JLJL7FJ||||F7L7|L7LL-J.JF|J
+|--7|.L.LJ|L-7F7LJL---7F7FJF7L-------JL-JL-JF------J||L7F------JL-7|J|LL|L-7-|F--FF-JF--7FJF---7L-7|F7FJLJ||LJF7F---7LJFJL-J||FJL7|||||F.FFF
+F.||-|7.F7L-7LJL7F7F7|LJ||-|L---7F7F7F7F---7L7F7F7LFJL-JL-----7J|.||L|7L|F7|-JJJ.LL--JF7LJLL--7L-7|||||F--JL7FJLJF--JF-JF-7FJLJJFJ|J77-7FL7J
+LJ-FFJJ.||F7L--7LJ|||F--JL7L7F-7LJLJ|||L-7LL-J|LJL7|F--7F-----J-L7LJ7-|JLJ||.LJ|F|LFF7||F77F-7L-7||LJLJ|F--7LJF-7L---JF7L7|L--7-L7|-FL---L-J
+7F-J|7.FJLJL-7FJF7LJLJF7F7L7LJFJF7F7LJ|F7L----JF-7LJL-7|L------7LFJ|.-JJLLLJ7L-7-F--JLJLJL-JFJF7|LJF--7|L-7|F7L7L-----J|FJL7F7L7.LJ7-7J|F|.L
+.|L|F-7L----7|L-JL7F7FJLJL7L7FL7|LJL-7|||F7F-7FJFJF-7FJL--7F---JFL7-7.F--|-JJFL.LL--7F-----7L-JLJF-JFFJ|F-JLJ|FJ|F-7F7-LJF7LJL7L77J|J7-77|.|
+L.|J|FJFF---J|F--7LJ|L7LF7L7|F7LJF7F7||||||L7|L7L7L7|L---7LJF--7F7J7FFJ7F7|J.|.|JLF7LJ7F7F7L7F7F7|F-7L-JL---7LJF7L7LJL--7|L--7|FJ-.F-JJFJF-J
+|.7|L7JFJF7F7LJF7L--JFJFJL-J|||F-JLJLJ||||L7||FJFJFJ|F7F-JF7L-7LJ|J7FF-J7|L--L77F-JL---JLJL-J|LJLJL7L7F-----JJFJL-JF-7F7LJF--JLJL|7|.FF--J-|
+J.LLJF7L-JLJL-7|L7F7FJFJF--7LJLJF--7F7LJLJ7LJ|L7L-J.LJ|L-7|L7FJF-J-7LJ-JL|L--77FL7F7F---7F7F7|F-7F7L7|L-----7FJF7F7|7LJL-7L---77F7LL-F7J7.F7
+L.|L-|L7F7JF--J|FJ||L7L7|F-JF7F-JF7LJL77F77F7L-JF--7F7L--JL7LJFJ||-L-J7.F-.|--7FFJ||L7F-J|||||L7LJL-J||F----J|FJLJLJF---7L----JF-7JLJLJ.FFLJ
+JF|FLL7|||FJF-7|L7||FJLLJ|F7|||F-JL---JFJL-JL7F-JF7|||F77JF|F7L-77-F7L-FF.FF7.--|FJL-JL7FJ||||FL--7F7L-JF7F7||L----7|F--JF--7-F7-L-.7--7J7JJ
+LL|FF7||||L7|FJL7|||L7F7FLJ||||L7F---7.|F----JL7FJ|||LJL7FFJ|L--J7-|J7LL-.LJ--..LJF----J|F||||F---J|L--7|LJL-JF----J|L---JF-JFJL77LFJ-||J|J7
+|LLFJLJLJL-J|L7FJ||L7||L---J||L7||F--JFJL----7FJL7LJL7F7L7L7L7F7F7J.FFFJL-JJ|LJ-L|L-7F7FJFJ|LJL----J-F7LJF----JF--7||F----J.FJF7L-7J.FF|-L-J
+|7.L-7F--7F-JFJL7LJ-LJL-7F--J|FJLJL---JF7F7F-J|F-JF-7||L-J-L7||LJ|J-FJ|7F|..F7JJLLF-J|LJ7L-JF----7F7FJL--JF----JF7L-JL---7-FJFJ|F-J|LJ7LJJ.L
+.FLLL||F-JL-7L-7L-7F-7F7LJF--J|F7F-----JLJLJF-JL-7L7|||LF7F-JLJF-JFF7JLL7|F-7J|||LL--JF-7F7.L-7F7LJLJF-7F-JF--7FJ|F7F7F-7L-JFJJLJ.|7|||.F-7|
+F-.L.LJL7F7FJF-JF7|L7LJL7FJF--J|||F------7F7|F--7L-JLJL7|LJF7F-J|7L||F7JL77.LLF--J|LFLL7|||F-7LJL----JLLJF-JF7LJFJ|LJLJ|L-7FJ7.F7FF-F7|F-F|J
+L|.|7|FFJ|||JL7FJ||-L--7|L-J.F7||LJF7F7F-J|||L-7L7F7F-7LJF7||L--77J|LJ|-F7F-FFLJ|-F-7F-JLJLJFJF7F7F---7F-JF-J|F7L-JF7F---7|L-7FJ|FF7|L7-7FJ7
+.|.-7-F|FJ|L77LJJ||F---JL----JLJL--JLJLJF7|||F-J.LJLJ7|F-JLJ|F-7L77L-7|.LLJF-77JFFL7|L-7F7F7L-JLJ|L--7|L--JF-J|L-7.|LJF7FJL--JL7L-JLJFJF7.J7
+L7.|-F-J|FJFJJ-LLLJL7F7F7F---------7F-7FJLJLJL---7F7F7LJF--7||FJFJF--JL7L|7|FJF7FF-JL-7LJLJL----7|LF7||F---JF7|F-JFJF-JLJF7|F7||F----JF|JF7|
+.J-.L|F7||FJJ|7-|.J|LJLJLJF-----7F-JL7||F7F7F7F-7LJLJL--JF-J||L7|7L-7F-J-FFJ|FJL7L---7|7F7F77F--JL-JLJLJF7F7||||F7L7|F7LFJL7|L7||F-----77LL|
+-J.JJLJLJLJ7.|FFJ7-F------JF---7|L---JLJ|LJLJ|L7|F-----7FJF7LJLLJ-LFJL7J-FL7LJF-JF---JL-JLJ|FJF7F-7F----JLJLJLJLJ|FJLJL7L7FJ|FJ|||F-7F-J7.JJ
+LFL7L||JL|.FJJ7J.7.L-------JF--JL------7L---7L7||L----7LJFJL7F7-|LFJF7L7F7FJF7|F-JF-------7|L-JLJFJ|F-----7F-7F--J|F--7L-JL-JL-JLJL7LJ|L--|.
+F-L7.LJ7LJL|JL7FFJ7LLF7LF---JF7F7F----7L----JJLJL7F7F7L--JF-J||F-7L-J|FJ|||FJLJL--JF------JL----7L-JL----7LJFJL--7|L-7|F7F7F7F7F--7L7L7-LFL-
+|.||.FF7.F-L-F7F7F-F-J|FJF--7|LJLJF--7L---7F-7LF7LJ||L7F--JF-J||FJF7FJL7|||L---7F7LL7F-7F7F---7FJFF-7F7F7L-7L7F-7LJF-J|||||||||L-7L-J.L7J.|7
+FJF|JF|JFL-J-|||L7-L-7LJFJF7LJF7F7L-7L----J|FJFJL7F|L7|L--7|F7||L-JLJF7LJLJF7F-J||7LLJFJ|||F-7||F7L7||LJL--JFJL7L--JF7LJLJLJ||L7FJF7J7||FF.-
+|L-||-J7JL7LL|LJFJF77L7FJFJL--JLJL--JF7F---JL-JF7L7|FJL7F7|LJ||L-----JL7F--JLJ|FJL7J.FJFJLJL7LJLJL-JLJF7F--7|F7L----JL7F7F7JLJFJ|F||-J|-7J-J
+FFLJ77.77-JJJ|F7L7||F7||FJF7F--------JLJF------JL-JLJF7LJ|L7FJ|F7F7F7F7||F---7FJF-JF7L-JF--7L7F7F7F-7FJLJF7||||F---7F7LJ||L--7L-JFJL7.|.J|||
+L-77L-7|-J..-LJL7|||||LJL-JLJF----7F7F7FJF----77F--7L|L-7|FJL7||||LJ||LJLJF7FJL7|FL|L--7L-7|FJ|||||LLJFF-JLJLJ|L7F7|||F7LJF--JF--JF-J.|..FL7
+|L---|J.L.77-FF7|||LJ|FF7F-7FL7F-7LJ|||L-JF--7L7|F7|FJF-J||F7|||LJF-JL-7F-JLJF-JL7-L--7L--JLJFJLJLJF7F7L---7F7L-J||LJ|||F7L---JF-7L7F7--7.L|
+F-J--JJ-L|L|-FJLJ|L-7|FJ||FJF7LJFJF7LJL-7FJF-JFJ||LJL7|F7LJ||||L7FJFF--JL-7F7L7F-JF-7-L7F---7|F7F7FJLJL77F-J|L7F-JL-7LJ||L7F7F-J|L-J||JL-7.|
+J|.FJJL.LJ-J.L--7L--J|L7|||FJL77L-JL---7LJ7|F7L-JL7LFJLJL-7||||FJ|F7L-7F--J||FJL-7L7|F7LJF7FJ||LJLJF7F7L-JF7L7||F---JF7||7LJ|L------J|77L|--
+LF7FF7-7FF7L-J.LL7F-7L7|||||F7L-------7L--7LJL-7F-JFJF7F--J||||L7LJ|F7|L7F7|||F--JFJLJL7FJ|L-JL7F-7|||L7F-JL-JLJL---7||LJF7|L7F------JJ-F--7
+.L-7L7-L-||7|F7F-J|7L7LJLJ|LJL-7F7F7F7L7F7L77F-JL7FJFJLJF7FJ||L-JF-J|||FJ|||||L--7L---7|L7|F7F7LJFJ|LJ7LJF--7F------J||F-JL-7|L----7F|J-JFF|
+FFLJJ|L|-F-7-||L7FJF7L---7L7F7LLJLJLJL7LJL7L7L-7FJL7L7F7|LJFJL-7FJ7FJLJ|||||||F-7|LF7FJL7|||||L7|L-JF----JF7|L-------JLJF-7FJ|F-7F7L-777L-FJ
+F--J-L-F-JFJ-|L7|L7|L----JFJ||F7.F7F-7L--7L-JF7||F-JFJ|||F-JF-7|L-7L--7L7|LJ||L7LJFJ|L7FJ||||L7|F7F7L-----J|L7F7F-7F-7F7L7|L7|L7LJL7FJ.L-L-F
+|-L|||F|F7L7.L7|L-JL-7F7F7L-JLJL-JLJL|F--JF7L||LJL7FJJ|LJ|F7|FJ|F-JF7-L7|L7FJL7L7FJFJ-||FJLJ||||||||F7FF---J-LJLJF|L7||L7||FJL7L-7L||LJ7F7J|
+|.|L-7FLJ|FJF-J|F7LF7LJLJL---7F7F---7LJF7FJ|FJL7F-J|F7L-7||||L7|L-7|L-7|L7||FFJFJL7||FJLJF--JFJLJ||||L-JF--------7L-JLJ7|||L-7|F-J.LJ--F||LL
+|-FJLF---JL-JF-J||FJ||F7F---7LJLJ7F-JF7||L7|L7FJL-7LJL-7|LJLJFJ|F-J|F-JL7||L7L7L7FJL7L7F-JF77L7F-J||L---JF-------JF-7F-7LJL--JLJJ.FJ-F-JLF-J
+|-L.FL-7F-7F7L7L||L7|FJ|L7F7||F7F7L-7|LJL-JL7|L7F7L7F7FJ|F---JF|L7J||F7FJ||FJ-L7|L7FJFJL-7|L7FJL7FJ|F----JF7F7F7F7L7LJFJFF7F7F7|F----7JJLLJ.
+|7|FF-L||JLJL7|FJ|FJ||FJFJ||L-JLJL7FJ|F-----J|FJ||FJ|LJFJL7F7F-JFJFJ||||FJ||F7FJ|FJL-JF--J|FJL7FJL7|L-----JLJ||LJL-JF7L--JLJLJL-7JJ-F|...JLF
+J-7-|JFLJF7F7||L7|L7||L7L-JL-----7|L-J|F---7FJL7|LJFJF7|F-J||L-7L-JFJ|||L7||||L7||F--7L-7FJL--J|F7||F-7F7F7F-J|F----JL----7F----J-|.J-|..||.
+J.L-LJ-LFJLJLJL7||FJ||FJF7F7F-7F7|L-7FJ|F--JL-7|L-7|-|||L7FJL7||F--JFJLJFJ|LJ|FJ|LJF7|F-JL--7F7|||||L7LJLJLJF7|L-77F77F7F7LJ-F7-F77FL7J-LJ--
+LF.|LJ|LL-----7|||L7|||FJLJ|L7LJLJF7LJ-|L-7F--JL-7|L-JLJFJL-7L-JL7F7|F--JF|F-JL7|F7|||L--7F7|||||LJ|7L7F-77FJLJF7L-JL-JLJL---JL7||JFJ|-|-|.J
+F|--.JJLLF----JLJL-JLJ|L--7|-L7F-7|L7F7L7FJL--7F7LJF----JF-7L--7FJ|||L-77FJL-77||||||L7F-J||LJ|LJF-JF7LJFJFJF7FJ|F7F----7F7F7F7||L7LF7F||F-|
+LJFL-|L7.L--7F-7F7F7F7|F7FJ|F7LJ-LJFJ|L7|L7F--J|L--JF---7L7|F7FJL7|LJF-JFJF--JFJ||||L7|L7FJ|F7L-7|F7|L7FL-JFJLJLLJLJJF-7LJLJLJ|LJFJ-.J7LL7L-
+|.|J-7-J-F--J|FJ|LJLJ||||L7LJL-7F7FJ7L7||FJL--7|F7F7|F--J-||||L7FJL7FJF7L7|JF7L7||||FJ|FJL7|||F7|||||FJF7F7L7F--7F7F7|FJFF---7L-7||L-FL--|7J
+LFJ.||..FL---JL7|F---JLJ||L---7||LJF7FJ||L-7F7|LJ||||L7F7FJ||L7|L7FJL7|L7|L7|L7||||||FJ|F7||||||||||||FJ||L7LJF-J|||LJL--JF--J-LLJJ7FFJ-FF-7
+FJFFF-F77LF---7LJL----7FJF7F--JLJF-JLJ-|L-7|||L7FJ|LJFJ|||FJL7||FJ|F-JL7|L7|L7LJ||LJ||F||||||LJ|||||||L7LJFJF7L--J||F-----J.F77F7|LF7F-7LJ||
+LF|7-L|L-7L--7L7F7F---JL-JLJF-7F7L-7F--JF-J|||FJL7L7FJFJ|||F-J||L7|L7F-J|FJ|FJF7||F-JL7LJ|||L7FJ|||||L7L-7L7||S7F7LJL-------JL-J|FFF-JFJ|-7|
+LJJ|J|L7FJ-F7L7||||F7F7F---7|FJ||F7|L7F7L-7|||L7||FJL-J-LJ|L-7||FJ|FJ|F-JL7|L-J|||L7F-J|FJ|L7|L7|||||.L7FJFJ||||||F7F-7F--------JF7L7FJJ||LL
+F|L|LF-JL--J|7||||LJLJLJF--J||FJ|||L7||L7FJ|||FJFJL----7F-JF-JLJL7||FJL-7FJ|F7FJ|L7||JF-JFJFJL7|||||L7.|L7L7|||||LJ|L7|L---------JL-J|--.|||
+-|JJFJF--7F7L-JLJL------JF7FJ||FJ||FJ||||L7|||L7L-7F7F7|L-7L--7F7LJ|L7F7LJFJ||L7L7||L7L7FJ7|F7|||||L7L7L7L7|||||L7FJFJL----------7F7FJFF7J77
+LJ.LL-JF-J||F7F-7F------7|LJFJ|L7|||||L7|FJ|||FJF-J|LJ||F7|F-7LJ|F-JFJ||F7|FJ|FJFJ|L7L7|L-7LJ|||||L7L7|FJFJ|||||FJL7L-----------7LJ|L--7J.77
+FF|7LF7L7FJLJ||FJ|F-----JL77L7|FJ|||FJFJ|L7||||FJF7L-7LJ|LJL7|F7||F7L-JLJ||L7|L7L-JFL7||F7L-7|||||FJFJ|L7|FJ|||LJF-JF-------7F-7L-7|F--JL|L-
+FL|JFJL7LJ-F-J|L-JL7F7F7F7|F-J|L-J|||FJF|FJLJ||L7||F7|F7L-7FJLJ||LJL7F7F-JL-JL7L7FF--J|LJL7FJ||||||FL7L7||L7|||F7L-7L------7|L7L-7|LJ7-J7|.|
+LFL7L-7L---JF7|F7F-J|||||LJL-7|F--J||L-7||F--J|FJ|LJLJ|L--JL--7|L7F-J|||F--7F7|FJFJF7FJLF7||FJ|||||F-JFJLJ-|||LJ|F-JF7F----JL7L7-LJJ.F-J|JF-
+FJ|L|LL7F7F7||||LJF7|||||F---J|L--7|L7FJ|||F-7|L7L-7F-JF7F7F7FJ|FJL7FJ|LJF7LJ|LJ7|FJ|L-7||||L7|LJ|||F7L-7F-J||F-J|F7||L-----7L-J-JJ|-7|J|J|J
+J7|LFJFJ|LJLJ||L7FJLJ||LJL-7F7L--7|L7|L7||||-|L7L7FJL-7|||||LJFJ|-FJL7L7FJ|F7L--7LJFJF7LJ||L7||F-J|LJL7FJL-7|LJF-J|||L7F7F-7L---7J.L7||7|-77
+FJJF77L7|F---J|FJL7F7||F---J||F7FJ|FJ|FJLJLJFJFJFJL7FFJ||||L-7L7L7|F7|FJL7|||F--JF7|FJL7FJ|FJLJL-7L-7FJL-7FJL-7L-7|||FJ||L7L----J77-J7|L|J.7
+F-FJL|-||L7F-7|L--J|LJ||F7F7|LJLJ-||JLJF7FF7|FJ||F7L7L7|||L7FJFJFJ||||L7FJLJ|L-7FJLJL-7|L7|L7F---JF-J|F7FJ|F7FJ|FJ||||FJL7L--7F77J|FFFJ7|7.|
+L7JL|L-LJ7||FJ|F---JF7||||||L--7F7|L--7|L-JLJL-7LJ|FJFJ|LJL|L7L7L7||||FJL--7|F-JL-7F7FJL-J|FJL-7F7L-7LJLJFJ||L7FJFJ||LJ|-L7F7LJL7-F|--LJJLF-
+-|||.LLL7F||L-JL--7FJ||LJLJL7F7LJ||F7FJL7F-7F-7L-7LJFJFJJF-JFJ|L-JLJ|||F-7FJ|L7FF-J||L---7||LF-J||F7L7F7-|FJL-JL7L7|L--7F-J|L7F-J-|LJ.LJ7.||
+LL7L-J|-7-LJ|-F---J|FJL--7F-J||F7||||L7FJ|.||FJF-JF-JFJF-JF7L----7F-J||L7|L7L7L7L7FJL7F7FJLJFJF7|||L7LJL7|L--7F-JFJL-7FJL-7|FJ|JJ.L-7|J.7-F|
+.|LFL7JF-JL|7FL----JL7F--JL7FJLJ||LJ|FJL7|FJ||FJF-JF7L7L-7||F7F7FJL-7|L-J|FJFJFJFJ|F-J|||F7J|FJ|||L7L7F-JL7F7|L-7|F7L||J7FLJ|FJ--|7LFJ.J|FJJ
+FF77-J7FJFL7-L.F-----J|F7F-JL7F7|L7FJ|7FJ|L7||L7L7FJL7|F-J|||||||F--J|-F7LJFJFJJ|FJ|F7||LJL7LJFJ|L7|FJL-7FJ||L7FJLJL7||FL|.LLJJ-J|F7L|FJ7JL7
+|JFJ-F7JFFF7.LLL--7F-7|||L7F7LJ||FJL7L7L7|FJ|L7|FJ|F-J||F7|||LJ||L7F7L7|L-7L7L-7||FJ||||F-7L-7|FJLLJ|F--JL7||FJ|F7F7|||JJL7|L-|-77L77|7-F7.|
+7-L7.FFJL-|L-FLLJ|||-LJ|L-J|L7FJLJFLL7|LLJL7|FJ|L7||F7||||||L-7||FJ|L7LJF7L7|F7||||FJ||LJ7|F-JLJ-LF-JL777||||L7||||LJLJJ7-LLJF7LJL|J7LF-|7.7
+|.JJF|J.L-JJF-7..FLJ77FJF7FJL|L--777.|L7JL-LJL7L7LJLJ||LJ|||F-J||L7||L7FJ|FJ||||LJ||FJL7-FJL-7.L--L7F-JJ-FJ|L7|||LJJL|.LF7.F|J|7J.J7|JL-F-JJ
+|7|F7J-F--7-JL|--|JJF-JFJ||F-JF--J||-|FJ.J7J.FL-JF-7FJL-7|||L-7||FLJF-JL7|||||||F7||L7FJFJF-7L7-7LL||LF|||FJ-LJ|L7JFF7J.LJ-|7-F-.7J7..F7LF77
+LJ|.LJF-7.J7.|||F|-FL-7L7||L-7L-7JFLFLJJ7F|7F|FF7L7LJF7FJLJ|F7|LJF--JF7FJLJFJ||LJ|||-||FJFJ-|FJ.|77LJ7-F-LJL-.LL-JFJ.|JL.|7LJ.JL-LJ|F.F7JL7J
+L7|7.FL.F7LF-LJJJ|..L-L-J|L7FJF-JF77.L|JFJ.FF--J|FJF7||L--7LJ|L7LL-7FJ|L--7L7||F-JLJJLJL7||L||7.LF-JFLLF7.LLJ-7L7LJ-L7-7F-77|FJ.LJ7|.7||F-F.
+F7J|-LLJF-7L-||7F7-7F-JFLL-JL7L--J|7|-|LFLJ-L--7LJFJ||L--7L-7|FJF--J|FJF7FJJ|||L77-LFL-LLJJ-LJJ77.FL|.F77F||LL7LJ7J|F|JL--J-F7--7FJ.L|F-7FJ7
+FL7|L|.F7JF-.LFL|LJFL|-FJJ|LLL7F-7L-7|LF77||LL-|F7|FJL7F7|F-J||F|F-7||FJ||JL||L7L7J7|L.L|7.L||LFFJ7-777||LJF7|LJF--7---F|7L7LJ7|LJ-F.LL7J7L|
+L.F|-L--F-|JFF7F|--7.L--..J.LFJL7L-7|7FJJL|-7J.LJ||L7FJ|LJ|F-JL7LJFJ|||FJ|JFLJJ|FJ-J7FF---|F77.FJFL.LF-LJ-LFJL-7-7FF7J7|L-.LJLF--|.-.|JL7F7L
+.-J|||FFJ-JFFJ.LJLL-JFL|LFJ7J|F7L7LLJFJJJ-|.7.-7FJ|FJ|-L7FJL7F7L-7|FJ|||FJ.7||LLJJJJ|L7LLJL-JJ.JFJ7J.L|7J.FL|.7J.F7LJ.JL777.|F.LFLJJF-7F|LLJ
+7F-L|-7L|JLF|7JF|.F|.L7FJJ.FFLJ|FJFJ.LJ.7|F-J-JFL7|L7L7L||F-J|L7FJ||-||LJJ..77|-J-.-FLJ7F-7F|7||7-L.FJLJF7J.J.LJ|L|7J-|F.F-FLJ||.|J.7.F-L.||
+||7JL-JJL7.F.-.FLF-|-7L7J||-|J-LJ-L-F.|FJ-|-|LLJ.LJJL-J-LJ|F-JFJ|F|||LJ-LJ--JLF-FF7L|J|7|F|LFJL7|F|-|-F-JJ..|.|..FL-.L-.FF--7L|-F7.L|.-J7LL7
+7.77.FL-JJFFJ7.77JLL.F7L7FF7-7.LJ.FF77F-J||.||.F|J7F||JFJLLJ-LL7L7LJ-L.FJ77.|.JLLL-JJF--|F|-L-FF7LJ.|||LLF-77-L7--7LFF-7.|L7|-----7.J-FF7|-|
+.LLLF|F77F-JLF7-J-|LF.F-F|J|L7-JJ-J-J-7-7-7|JJ-|7-J-LF7L|-J|7|FL-JLJJ|7FJF7LJ.L-7.L7-L|FJJJ-|7|L|-J-J-77LL.F-7-|7LF.7JL-F7|-|LJ..F|7-F7LF7FF
+FJ|L7JLJ-L...L|J..J7L7|FJL7--7|..||||FL--7L7.L-||.JJFJJ|F-LJ7|JJ||LF7L7JJ|L|.|.LFJLL7.-|JJ|FF-|||FL-JFJ|F7-|-J--|7LFJ77F|JL7L7LF-|FJ7J|.|FJ-
+J.FJ|LLJLL-|-.LL-L-|LJ-LL-L-JLL-.-JJL7-7J|LJJ7.-|JJ--L-J.FLJ-|L7--.-J-L--JLLFJL-FJ.|J.LJJLLLJ-J-L7-LL7JL-|JLJ-LLLJ-LJ|JFF7J..-7J-LJ..7.FFJJJ \ No newline at end of file
diff --git a/aoc2023/src/day11/input.txt b/aoc2023/src/day11/input.txt
new file mode 100644
index 0000000..c86cc92
--- /dev/null
+++ b/aoc2023/src/day11/input.txt
@@ -0,0 +1,140 @@
+..............#..........................#.....................#.....#...................#..................................#...............
+.............................#.........................................................................................#..........#.........
+#......................#.................................................#.....................#...........#................................
+......#..............................#........................................#.............................................................
+................................#...........#.........#.............................................................#.....#..........#......
+..................#...................................................#...................#.................................................
+............................#...............................................................................................................
+........#.....#...............................................................................#...............#.............................
+#...................................#.....#.........................................#.....................................................#.
+..........................................................................#........................#..............#........#........#.......
+.....#.....#.............#.......................#..........................................................................................
+..............................#.............................#....................#......#...................................................
+............................................................................................................................................
+.......................................#....................................#........................................#......................
+.......#................................................#..............#............................#.......................................
+................#.................................................#.........................................#...............................
+.....................#.........................#.....................................#......................................................
+...............................................................................................#..................................#.........
+.#......................................................................................................................#...................
+........#...................................................................................................................................
+...............................#...........#.............#...............................#...........#...................................#..
+.............#.....#.............................................#.....#......................................#.............................
+............................................................................................................................................
+.......................#...........#.................#..............................#....................................#..................
+...............................................................................#.....................................................#......
+..#......#.............................#............................#..................................#........................#...........
+.............................#..........................#......#...........#................................................................
+....................#.........................#..................................................#..........................................
+......#............................................................................................................#........................
+...........................................................................................................#................#...............
+#..............#...................#.............................................#........................................................#.
+.........................................#.........................................................#........................................
+.....................#............................................#.....................#...................................................
+.................................................#......#...................................................................................
+.........................................................................................................#..............#.......#...........
+...............................#..................................................................................#...................#.....
+..........................#.........................#...........#..............#..........#..................#..............................
+..........................................#.............................#...................................................................
+............#......#................................................................................#.......................................
+................................................................................................................#.....#....................#
+...#.........................#................#...............................................................................#.............
+......................#..................................#.............................#...................#................................
+.......................................................................#.....#.................#............................................
+.......#..................#.........................#....................................................................................#..
+..........................................................................................#....................#............................
+........................................#........................#.....................................................#....................
+...................#.....................................................#.......#.............................................#............
+..............................#.................#...........................................................................................
+..#..................................................#......#................#.............................................#.........#.....#
+...........#..................................................................................#.....................#.......................
+.....................................................................................................#...........................#..........
+................#......................#........................................................................#...........................
+............................................................................................................................................
+.......#..............#............#............................#......#................#.....................................#.............
+............................................#........#.........................................#............................................
+..............................#..............................................................................#.......................#......
+............................................................................................................................................
+....................#............................................................#..............................................#...........
+......................................#..............................................................#...................................#..
+..........#.....................#.......................................#..............#....................................................
+............................................................................................................................................
+....#.....................#..................#......#.......#.................#...........................................#.................
+....................................#.........................................................#....................#.............#..........
+....................................................................................................#.......................................
+.................................................................#........................................#.................................
+..................#...................................................................................................#.....................
+.........................................................................#......................#...........................................
+#......................................................#...........................#............................#.........#.................
+...........................#............#..........................................................................................#........
+..................................................................#......................#..................................................
+................#................................#...........................#..............................................................
+........#.....................................................................................................................#.............
+...................................#........................................................................................................
+.......................#.....#................................................................................#.............................
+.#...........#...........................................#.................#....................#...........................................
+..........................................................................................#............#................#...................
+..........................#..........#......................................................................................................
+.....#...............................................................................#.....................#.....................#..........
+............................................................................................................................................
+..........#............#................................#.....................#..................................#..........................
+...............#...................#.........................#....................................#..................................#......
+............................................................................................................................................
+...........................................................................................................................................#
+...#.....................................................................................................#..................................
+......................#.............................#..........................#..............................#.............................
+..........................................#...................#..........#..........................#...............#.......................
+..............................#.....................................................................................................#.......
+.........................................................#................................#.................................................
+...............................................#............................................................................................
+..........#...........................#..............#..........................#.........................#...................#.............
+#.....................................................................................#.....................................................
+.....#............................................................#..........................#.................#............................
+...........................#.......#..............#.................................................................#.......................
+.......................................................................................................#....................................
+........#..........#.....................#..................#......................#......................................#...............#.
+.............#.........................................................#....................................................................
+................................................................#...........................................................................
+.....#.................#.................................................................#......................#.....#..........#..........
+................................#......#.............#.........................................#.....#......................................
+...........................................................................#.........................................................#......
+..........#................#................................................................................................................
+.................................................#..............................#..........................................#................
+.....................................................................................#.................#.........#..........................
+.......................................................................#....................................#............................#..
+...............#......#....................................#................................................................................
+.........#...............................#..........#..........................................................................#............
+...............................................................#.................#.........#.....#......................#...................
+............................#.....#.........................................................................................................
+......#..........................................#.......#...........................................................................#......
+..............#...................................................#........................................#......#.........................
+.............................................................................#..............................................................
+.....................................#................................#................................................#....................
+..........#..................#..............................#.............................#.................................................
+....#.....................................................................#......#............................................#.............
+......................#.................................#..............................................#....................................
+.............#..............................................................................................................................
+..........................................#......#...............................................#..........#...............................
+.........................#......#.......................................................#...............................................#...
+...........................................................#.................................#...................#..........................
+...#...............#..................#..............#....................#...........................................#.....................
+.....................................................................#...........#..........................................#......#........
+..............................#...............#.................................................#......#....................................
+........#.....#.............................................................................................................................
+#........................................................#.............................#.......................................#.......#....
+....................#..................................................#....................................................................
+..........................................#......................#..........................................................................
+.........................#...........................#.............................................#............#.........#.................
+.....................................................................................................................#..............#.......
+..........#...................................#............................................................#..................#.............
+.....#..........#...................#........................................#..............................................................
+.....................................................................#.........................#.......#....................................
+......................#......#..............................................................................................................
+.#......#...................................................................................................................................
+.................................#....................................................#...........#......................#...............#..
+.................#..................................#.........#.........#...........................................................#.......
+..............................................#..................................#..........................................................
+...........................#..........................................................................#.........#...........................
+..........................................#.................................................................................................
+.....................................#...........#..................#.........................................................#.............
+..................#....................................#.............................#...........#........#.............#................... \ No newline at end of file
diff --git a/aoc2023/src/day13/input.txt b/aoc2023/src/day13/input.txt
new file mode 100644
index 0000000..3113249
--- /dev/null
+++ b/aoc2023/src/day13/input.txt
@@ -0,0 +1,1379 @@
+##..#..#......#
+.........#..#..
+.####.#.######.
+#....#.###..###
+..##..#.#.##.#.
+######...#..#..
+#.##.#.#.#..#.#
+#....#..######.
+.#..#...#.##.#.
+#....#....##...
+.#..#.#..####..
+......#.######.
+##..##.#.####.#
+
+.#...##..
+..##.#.##
+.#.###...
+###..#.##
+##.#.####
+..#.#..##
+.###...##
+.#...#.##
+#####.#..
+...#..###
+###.##.##
+####...##
+####..###
+###.##.##
+...#..###
+
+#####...####.#.
+##..###..#..#.#
+...#.###.....#.
+...#.###.....#.
+##..###..#..#.#
+#####...####.#.
+##....####.....
+#..##.....#..#.
+#..##.....#..#.
+##....####.....
+#####...######.
+##..###..#..#.#
+...#.###.....#.
+
+#..##...#
+#..#..###
+#..#..###
+#..##...#
+.##..#.#.
+.....###.
+#..#.##.#
+...#..###
+.##.#..##
+.##.#.#.#
+#####.#..
+
+######.#.#.#...
+.#..#.#.##...#.
+...#....#.#.#..
+#.##.#.#.....#.
+.......##.#.###
+#######.##.#..#
+......##...##..
+#.##.#....#.#..
+#.##.#....#.#..
+
+#...#..##..
+.##..######
+....###..##
+.#..#..##..
+.####.####.
+###.##....#
+.#..##...##
+###.#..##..
+#.#.#......
+.####......
+....#.####.
+..##..#..#.
+..#.#.####.
+..#.#.####.
+..##..#..#.
+
+#...#.#.##.#.#...
+###.#..#..#..#.##
+#...##.####.##...
+#.....#.##.#.....
+...#####..#####..
+##..#.######.#..#
+###.##.#..#.##.##
+...#..#.##.#..#..
+....#........#...
+#..##.#.##.#.##..
+#................
+
+...##.###.#
+...##.###.#
+##..#....#.
+##.....#.##
+#.##..#.#.#
+..##...#.#.
+...#####..#
+
+.##.##.#.##..
+#..#.#.#.....
+####.###..#.#
+####.####.###
+#..#.#####.##
+#..#.#....###
+#..#.#....###
+#..#.#####.##
+####.####.###
+####..##..#.#
+#..#.#.#.....
+.##.##.#.##..
+.....##.#.#..
+####..#.#.##.
+#####.#...###
+#####.#...#..
+#..#...####.#
+
+#..#.#...#...##..
+...#...#..#..##..
+#..####.#.#.####.
+..#####..#.##..##
+..#...####.##...#
+.#.#########....#
+.#.#########....#
+
+#..#...#.#.#...#.
+#.####...###.#.#.
+#.....##...##.#.#
+##.##....#....#..
+#.....##....#....
+..##.##.#...#..#.
+..##.##.#...#..#.
+#.....##....#....
+##.##....#....#..
+#.....##...##.#.#
+#.####...###.#.#.
+#..#...#.###...#.
+......#.#..##....
+......#.#..##....
+#..#...#.###...#.
+#.####...###.#.#.
+#.....##...##.#.#
+
+....#..
+#.##...
+#.###..
+#...##.
+.##..##
+.##..##
+#...##.
+#.###..
+#.##...
+
+##.##.#..
+..#..#..#
+...#####.
+..#....##
+##.##.##.
+##.##.##.
+..#...###
+...#####.
+..#..#..#
+
+...####.....#####
+.#......#.####..#
+.#########.##....
+####..#####.#####
+..######..#...##.
+#.##..##.#....##.
+....##....##.....
+#........#.#.....
+....##.....#.....
+...#..#.......##.
+#.######.##......
+.##....##.###.##.
+...####...#..#..#
+
+.#...###..###...#
+##..##.#....##..#
+.#.#.########.#.#
+.######.##.######
+.##.#...##...#.##
+.#...########...#
+.#.#...#..#...#.#
+#..#....##....#..
+#..####.##.####..
+#.##..##..##..##.
+..#...#.##.#...#.
+#..#..........#..
+#..#..........#..
+
+....#..###....#
+#..#..#..#....#
+#..##.....####.
+.##..#..#..##..
+####.###..####.
+###.#.##.#.##.#
+.##..#..##....#
+#####.###..##..
+####..#...#..#.
+#..#....#..##..
+#..####..##..##
+......#.##.##.#
+.##...#########
+.........#.##.#
+.##..######..##
+#..####..#....#
+.##.####..#..#.
+
+#..#.##...#.##.
+###.##.##.#...#
+##.########.#.#
+.#.#.##.#...###
+.#.#....####...
+.#.#....####...
+.#.#.##.#...###
+##.########.#.#
+###.#..##.#...#
+#..#.##...#.##.
+#..#.##...#.##.
+
+.##..####..##..
+####..##..#####
+.#.#.####.#.#..
+..##..##..##...
+#....#####...##
+####.#..#.#####
+##..........###
+#.#.#....#.#.##
+#...##..##...##
+.##.##..##.##..
+..##..##..##...
+....#.##.#.....
+###.######.####
+
+########..#.##.#.
+######..######.##
+#.##.#.#.###.###.
+#....#.#.####.###
+#....##..#..###..
+......##.##..###.
+..##..#..#.###..#
+..##..#.#.##...#.
+##..######..##..#
+##..######...#..#
+..##..#.#.##...#.
+..##..#..#.###..#
+......##.##..###.
+#....##..#..###..
+#....#.#.####.###
+#.##.#.#.###.###.
+######..######.##
+
+#.####..##..#
+#.#.#........
+.#.###...#..#
+#...#..##....
+...#.#.###..#
+#..####.#....
+#####.#..#..#
+.##..####....
+.....#...#..#
+##.#...#.####
+.....###.....
+###..##.#....
+.#..##.#.####
+#...#..#..##.
+##...#.......
+.#...#.......
+#...#..#..##.
+
+...#..##.
+..#.#.#.#
+######.##
+#####.###
+..####...
+######..#
+######..#
+..####...
+#####.###
+######.##
+..#.#.#.#
+...#..##.
+#..###.##
+####..##.
+...#.#..#
+...###.#.
+..##.##.#
+
+.####.....#.#
+........#.###
+##..##...##.#
+..##...####..
+..##...####..
+##..##...##.#
+........#.###
+.####.....#.#
+######.##.#..
+.#..#.####.#.
+##..####.##.#
+#.##.##..#...
+##..########.
+##..##.##.#.#
+.####....#.#.
+.....#.#.#.#.
+.#..#....#.##
+
+#..########..##
+#............##
+#.##########.##
+.#.#.####.#.#..
+##.#......#.###
+.#.###..#.#.#..
+###.######.####
+#.##.####.##.##
+##.##....##.###
+#.#.#.##.#.#.##
+#.##......##.##
+
+.#......#..####.#
+#.#.#####.#.###..
+##..##.#..#...##.
+.##.#..###...#..#
+.##.#..###...#..#
+##..##.#..#...##.
+#.#.#####.#.###..
+.#......#..####.#
+#..##.#.##..#.#..
+#..##.#.##..#.#..
+.#.....##..####.#
+#.#.#####.#.###..
+##..##.#..#...##.
+
+.#....#......#.
+..#.##.######.#
+...#.#..#..#..#
+##..#.###..#.#.
+##.............
+##..#.########.
+..#.##..####..#
+..#.##..####..#
+##..#.########.
+##.............
+##..#.###..#.#.
+
+####.##
+###..##
+#.#####
+##..#..
+#......
+####.##
+#.#....
+..###..
+..#####
+#.#....
+####.##
+#......
+##..#..
+#.#####
+###..##
+####.##
+#####..
+
+###.##.....
+##.##..#..#
+##.##.....#
+###.##.....
+#####...#..
+..#########
+########.##
+##.###...##
+..#..#..#.#
+..##...##..
+...####.#.#
+
+#.##...#....#
+##....##....#
+##..##..#..#.
+##..##..#..#.
+##.....#....#
+#.##...#....#
+.##.....####.
+#####..#.##.#
+#.####.#.##.#
+.#.##.#.#..#.
+#...#.#..##..
+###..##.####.
+.#####.......
+
+#..##.#
+#.###..
+#.###..
+#..##.#
+.##.##.
+...#...
+#..###.
+#..##..
+#..#..#
+#..#..#
+#..##..
+#..###.
+.#.#...
+
+.###.##
+.##.###
+##.....
+##..#..
+.##.###
+.###.##
+#...###
+
+..##..#.##.
+.#..#.....#
+.#..#.##.#.
+######.####
+..##.......
+..##.......
+######.####
+.#..#.##.#.
+.#..#.....#
+..##..#.##.
+#........#.
+########..#
+##..##..##.
+
+..######.....#...
+...........##.##.
+.#.####.#....####
+.#..##..#.####..#
+####..#####......
+###########.#.##.
+.#..##..#..###..#
+###.##.###...####
+#..####..##.#####
+
+###.#####..##..
+...........##..
+.#.##...#..##..
+.#...##.##....#
+.....#.###.##.#
+..#####..#....#
+##..###..##..##
+####.##...#..#.
+.#.##..##.#..#.
+.####...##.##.#
+...#.##..######
+..#..##..######
+..#..###..####.
+..#..###..####.
+..#..##..######
+.#.#.##..######
+.####...##.##.#
+
+..##.##..#.....
+..##.##..#.....
+.##...##.##...#
+.....##..##.##.
+#####.####..##.
+.#......#.##..#
+....##..###.##.
+
+#..####
+##.##..
+..#.#..
+..#.#.#
+..#...#
+.....#.
+.#.#...
+.#.#...
+.....#.
+..#...#
+..#.#.#
+
+#.###.#
+#####.#
+.##..#.
+.##..#.
+#####.#
+#.###.#
+...####
+.#.##.#
+......#
+
+#.##..##.####.#
+..######..##..#
+###....###..###
+...####...##...
+#........####..
+###.######..###
+##.####.##..##.
+##..##..######.
+.#......#.##.#.
+#.#....#.####.#
+##......######.
+..#....#..##..#
+###.##.########
+.#......#.##.#.
+.#......#....#.
+
+.##........#.
+...#.##.##..#
+.#..###..####
+...#.....####
+.#....##..###
+#..#...#.#...
+#.#...#.##.#.
+#.#...#.##.#.
+#..#...#.#...
+##....##..###
+...#.....####
+.#..###..####
+...#.##.##..#
+.##........#.
+.##........#.
+...#.##.##..#
+.#..###..####
+
+....##....###
+.########....
+##.#..#..####
+#...##...##..
+#........#.##
+###.##.####..
+..##..##..###
+..#....#.....
+#..####..####
+##.####.##.##
+##..##..##.##
+
+########.#.#.##.#
+###..####.##....#
+##....##...##..##
+#......#.########
+#.####.##.##.##.#
+#......##.#.#....
+#......##....##..
+.######.##.......
+##....####.#.##.#
+#..##..#.###....#
+...##...#....##..
+.######....######
+##.##.##.#...##..
+#..##..#.#.##..##
+.#....#.##...##..
+
+###.#...####...#.
+#..#.##..##..##.#
+.##...##....##...
+#####......#...##
+#####......#...##
+.##...##....##...
+#..#.##..##..##.#
+
+####..#.##.#.
+.#..##.####.#
+#..#.#.####.#
+#..#.#.####.#
+.#..##.####.#
+####..#.##.#.
+.###.#.####.#
+##....#......
+####.#..##..#
+##..#...##...
+...##.#....#.
+##.##########
+###.####..###
+
+#..######..#...
+.###....###..##
+.#.####.#.#..##
+.###.##.###..##
+..###..###..###
+.#...##...#..##
+###.#..#.###...
+#.#.#..#.#.##..
+#..######..##..
+...#.##.#...###
+..#......#.....
+
+......##.#.
+##.#..#....
+##.#..#....
+......##.#.
+#.#.#.##.#.
+..#.#.###.#
+#####..##..
+##.###.#..#
+..#.##...#.
+
+##......###.###
+##......###.###
+#.##..##.##..#.
+.##....##.###.#
+..........#.#.#
+..######...#..#
+##.####.##...#.
+..#....#..##..#
+.###..###..##.#
+.#......#.##.#.
+.#......#.##..#
+.#.####.#..#..#
+###.##.######..
+##..##..#.#....
+.##.##.##...##.
+
+.#....#.#..#.
+...##....##..
+##.##.##....#
+#.#..#.#.##.#
+.######..##..
+###..####..##
+##.##.###..##
+..#..#..#..#.
+.#.####.#..#.
+.#....#......
+#..##..##..##
+.#....#..##..
+###..###....#
+
+##.##.##.###....#
+.######.####....#
+#......##.##.#..#
+..#..#..##.##..##
+.#....#..#.#.##.#
+#..##..#..#######
+..#..#...##.#..#.
+...##.....#######
+#.####.#.#.##..##
+##....#######..##
+.######..##.#..#.
+.##..##..#..#..#.
+###..####...#..#.
+.#.##.#..#.#....#
+.######.#.###..##
+.........####..##
+##.##.##.........
+
+....##.##.#.#..##
+####.##.###.####.
+#..##..#.####..##
+.##....##.#.##.##
+#..#...#.#.##....
+.##......##..#.##
+#..#.##...#.#.#..
+
+....##.##
+....##.##
+....#....
+..###.#..
+##.#.####
+....#.#..
+..#......
+###....#.
+#...#.#.#
+
+.....##...###.#.#
+.##.#.##.....#...
+.##.#.##.....#...
+.....##...###.#.#
+#.######...###...
+..#.#....#.##.#.#
+##########.#..#.#
+..#..#....###..#.
+...##.#.##..###..
+#####.#.......##.
+..#..#.#.#...##.#
+..#..#.#.#...##.#
+#####.#...#...##.
+...##.#.##..###..
+..#..#....###..#.
+
+.#.##.#.....#....
+#.#..#.#.#.##.#.#
+###..####......##
+#.####.#..#..#..#
+..#..#..###..###.
+..####.....##....
+##....####....###
+
+##..#.##......#
+..#.##.#.##.###
+#..#......#.###
+.##.##.#.....#.
+#.#..##.##.##.#
+#.#..##.##.##.#
+.##.##.#.....#.
+#..#......#.###
+#.#.##.#.##.###
+##..#.##......#
+#....###.##.#..
+#....###.##.#..
+##..#.##......#
+#.#.##.#.##.###
+#..#......#.###
+
+..##.#...#.##
+.#.##.#..#...
+#..##..##..##
+#......###...
+...........##
+.#.##.#.###..
+#.#..#.###...
+.#.##.#.##.##
+##....##.####
+.#.##.#....##
+##.##.##..#..
+#.####.#.####
+#.####.#.#.##
+.#....#.##.##
+..#..#..##.##
+#..##..##....
+#......#.#.##
+
+..#..###.....
+.##.#.#...#.#
+..######.#.#.
+...#####.#.#.
+.##.#.#...#.#
+..#..###.....
+#..#######...
+.#..#.#......
+..####.#..#..
+...#..##.####
+.####.......#
+#...#.##..#.#
+...####.##.##
+...####.##.##
+#...#.##..#.#
+
+...###.
+.#..###
+.#..###
+...###.
+..#.#..
+.###..#
+..#.#.#
+.#.#.#.
+.###..#
+.###..#
+.#.#.#.
+#.#.#.#
+.###..#
+..#.#..
+...###.
+
+..######.....
+##########..#
+...####......
+#.######.#..#
+#..#..#..#..#
+#.##.###.#..#
+##..##..##..#
+##.####.##..#
+##.####.#####
+#.#.##.#.#..#
+.#..##..#.##.
+#...##...####
+..######.....
+##.####.##..#
+..........##.
+
+##.##.###.#......
+#..##..#.#..####.
+#......###.#....#
+#########.##....#
+...##.....#######
+#..##..#..#......
+#......####.#..#.
+#..##..#..#......
+.##..##.#..#.##.#
+..#..#...#.##..##
+...##....#####.##
+##########.#....#
+##.##.#####..##..
+#.####.######..##
+###..#######.##.#
+#......#..#.#..#.
+..#..#......####.
+
+.#..##.##..###.
+.#.###.##..###.
+#...#...#####..
+...##.####...##
+....#.#####.#.#
+##.#..#.###.#..
+.#.##.####..##.
+##.#...##.##.#.
+....######.####
+....#.#.##..###
+..##...#......#
+#####...####.##
+#####...####.##
+..##...#......#
+....#.#.##..###
+....######.####
+##.#...##.##.#.
+
+#..##.###
+.##.....#
+.##.##..#
+###..####
+#####.#.#
+......#.#
+#..##.#..
+#..##.#..
+......#.#
+#####.#.#
+###..####
+.##.##..#
+.##.....#
+#..##.###
+#..######
+
+..#.#.#..#.#.
+..#.#.#..#.#.
+#...#.#..#.#.
+.###.#..#..#.
+.#.#..#.#.#..
+#.....#...###
+##.##.#####..
+##.##.#####..
+#.....#...###
+.#.##.#.#.#..
+.###.#..#..#.
+
+####...#.#.
+####...#.#.
+#..#..#..##
+.....#..###
+#..#.#..###
+.........#.
+.....###.##
+######.#...
+#..##.###.#
+.........#.
+..#..#.#.#.
+#######.##.
+####.#..#.#
+
+#..###.
+#..###.
+.....##
+##.#...
+#.#.#..
+.###.#.
+#.##.##
+##..##.
+..###.#
+...###.
+.#.###.
+
+############...##
+##..####..##.#...
+##..####..##.##..
+.####..####..#.##
+..##....##..##.#.
+.####..####.#..#.
+..............##.
+#..........#.##.#
+##############.#.
+.#..#..#..#.#.#.#
+............#.#.#
+..##....##..###..
+#....##....#.###.
+##############.##
+.#..#..#..#.#...#
+
+.##......#.####
+....###..###.##
+.....######....
+....#..##.##...
+######....#.###
+#..###.##....#.
+########.#.###.
+#..#####.#..###
+.##..#...####..
+.##....##..####
+#...##.##.###..
+.##...#..######
+#..#.#.#.#.#...
+.##...#..#....#
+.##...#..#....#
+
+##.#.##.#.###
+.#.##..##.#.#
+#.#..##..#.#.
+###.#..#####.
+#.#.#..#.#.#.
+##.######.###
+#.##....##.#.
+#.##....##.#.
+##.######.###
+
+###..#####.##
+###..#####.##
+.....###..###
+...##..###...
+##.#.##.##.##
+..##.....#.##
+#.###........
+#...##...##.#
+#.####.##.#..
+#.#..###.####
+.#.#.#####...
+#.##.##.##...
+####...####..
+#####....####
+.#.##.##.#...
+.##.##..##...
+.#.#...##.#..
+
+.###..###
+.#.#....#
+.#..##..#
+.#......#
+...#..#..
+##..##..#
+####..###
+##.#..#.#
+#.##..##.
+#.##..##.
+##.#..#.#
+####..###
+##..##..#
+
+###...#....
+...##.#.#.#
+..#########
+..##....#.#
+..#######.#
+..#....##..
+..#....###.
+..#######.#
+..##....#.#
+
+####......#...###
+#.#..#..##..#..#.
+##.##..####..##.#
+..###...##...###.
+.######....######
+..#####....#####.
+#.###...##...###.
+.#......##......#
+...#..######..#..
+...#..######..#..
+.#......##......#
+
+...#..#.###
+##.####....
+...##..####
+###...#....
+..#..#...##
+##..#.##...
+...##...##.
+.......####
+####..###.#
+.....#.#..#
+##....#....
+#######.###
+##.####.###
+
+#.#..#...
+..##..#..
+..##..#..
+#.#..#...
+.####....
+##..#.###
+...##....
+...#...##
+..#..####
+.#.##...#
+....#....
+
+..#####.....##.
+#.##..#....##..
+........####..#
+......#.###..##
+....###....##.#
+....###....##.#
+......#.###..##
+........####..#
+#.##..#....##..
+..#####.....##.
+.##.#..#.#.#.##
+.##.#....#.#.##
+..#####.....##.
+
+.#.#.#.##
+.#.###.##
+.##...#..
+##.##.##.
+##.#..#..
+..#..#.#.
+##.#.#.##
+##.#.#.##
+..#..#.#.
+
+..#.#####
+##...#..#
+##.###..#
+######..#
+##...#..#
+..#.#####
+.#.#.....
+#.....##.
+...#.####
+####.####
+##.......
+#..#.#..#
+...##.##.
+#.#.##..#
+###......
+....#####
+..##..##.
+
+...##...#
+...######
+...##....
+###..#.##
+##.#.#.##
+.#...#.#.
+..#.#.###
+.....##..
+###.#....
+##.#.#.#.
+##.#.#.#.
+
+....#.....#..
+#..##.#....#.
+##...........
+..##.##...##.
+.###..#..###.
+##.########.#
+##..###....##
+###.##..#.##.
+###.##..#.##.
+##..###....##
+##.########.#
+.###.....###.
+..##.##...##.
+##...........
+#..##.#....#.
+....#.....#..
+....#.....#..
+
+..##.#.#.
+#####.#..
+#...####.
+##.###...
+##....#.#
+##.#.#...
+...#####.
+##..#...#
+.....###.
+###..##.#
+###.#.###
+###.#.###
+###..##.#
+
+..#.###
+.....#.
+..#...#
+..#..##
+####.##
+###.#.#
+###.#..
+####.##
+..#..##
+..#...#
+.....#.
+
+.###.#.#.##.#..
+#.####..##..#.#
+#.####..##..#.#
+.###.#.#.#..#..
+....#...#..##.#
+..####.##.#...#
+##..#.#..#..##.
+###..#...#.....
+###..#...#.....
+
+#...#.....##.
+#.###.#..####
+..###.######.
+.#..####..##.
+.#..####..##.
+..###.######.
+#.###.#..####
+#.........##.
+.##.##.###...
+#.##..#####..
+##..######..#
+###.#...#....
+.#.#.########
+###......###.
+....######.#.
+.###.##.##.#.
+.###.##.##.#.
+
+#..#..#....#..#
+..###.#.##.#.##
+##.###......###
+##...########..
+.....#.........
+#...###....###.
+#...###....###.
+
+.#..#....#..#..
+#....#..#####..
+.####.###..##..
+#....#####.##..
+..##.......#.##
+.......#.##..##
+##..###..###...
+.###....#.#.#..
+.#..#...##.....
+#....#..##.####
+##..###.####.##
+..##..#...#.#..
+.........#..###
+
+.####..
+#...#.#
+..##..#
+#..###.
+#..###.
+#.##..#
+#...#.#
+.####..
+..##.##
+..##...
+#....#.
+#.#..#.
+#.#..#.
+
+#####...#..##
+#.###...#..##
+.#####.#.#...
+.##.##..#####
+....##.###...
+..#.#.###.###
+.##....##..##
+##..#.###.###
+##...###.#...
+.#.##.#.#..##
+.#.#...#.####
+#....#...#...
+...##..##..##
+
+.....#.#.....
+....##.......
+#..#.#.##....
+#####.##.....
+#....####.##.
+#..####...##.
+#..###.#..##.
+....##..#####
+#####.###....
+....#.###....
+####.#...#..#
+#######......
+....#.##.####
+.##....#.#..#
+....###.##..#
+
+##.####......##.#
+....#.###.#...##.
+....#.###.#...##.
+##.####......##.#
+.##..#.##...#.###
+.#.#.#...#...#...
+#.##.#..##.#.#.#.
+#.##.#.###.#.#.#.
+.#.#.#...#...#...
+
+#####..####..####
+...###..##..###..
+..##..........##.
+##.#..##..##..#.#
+##....#.##.#....#
+##.#.#..###.#.#.#
+..#.###....###.#.
+..##..........##.
+..###...##...###.
+....#.##..##.#...
+.....#......#....
+
+.####..#..#..##
+..##...#..#....
+......###...###
+......##.##..#.
+#....#.#.#.#...
+######.###...##
+.####.#.#..##.#
+.......#.#..#..
+.......#.#..#..
+.####.#.#..##.#
+######.###...##
+#....#.#.#.#...
+......##.##.##.
+
+#.#..##.#.#..
+.#..##..#..##
+.#..##..#..##
+#.#..##.#.#..
+..#..#...#.#.
+.#...#.#.###.
+#.#####.#.##.
+#...#...#.#..
+#...#...#.#..
+#.#####.#.##.
+.#...#.#.###.
+..#..#...#.#.
+#.#..##.#.##.
+
+#..##......##..#.
+#..##......##..#.
+.#.#.#.##.#.#.#.#
+#..#.######.#..##
+.#..##.##.##..#.#
+#...#..##..#...#.
+#.############.#.
+#..##.#..#.##..##
+#..###....###..##
+##.#...##..##.###
+.##.##....##.##..
+
+..###.#.##.#.###.
+.##.##..##..##.##
+.##.##..##..##.##
+..###.#.##.#.###.
+.##..#.####.#..##
+###.##..##..##.##
+###.#.#.##.#.#.##
+.#..............#
+#...###.##.###.#.
+###...#....#...##
+.##..#..##..#..##
+..#..##....##..#.
+..#.#.######.#.#.
+###..##.##.##..##
+..#..#.#..#.#..#.
+
+###.##.##
+##..##..#
+#.######.
+#.######.
+##..##..#
+###.##.##
+.###..###
+#.#....#.
+..#.##.##
+
+....#.##..#
+......#.##.
+#.####.#..#
+#.####.#..#
+......#.##.
+....#.##..#
+.#.##.#..#.
+.##..##....
+#....##.##.
+
+.##...##.#.
+.#.##...##.
+#..#####.##
+#..#####.##
+.#.##...##.
+.##...##.#.
+.#..###...#
+###.##.##.#
+#...##.#.##
+#...##.#.##
+.##.##.##.#
+.#..###...#
+.##...##.#.
+
+.##...##.
+.##...##.
+##..###.#
+##.#.#..#
+.....#...
+#..#.##.#
+........#
+..##.###.
+..##.###.
+........#
+#..#.##.#
+.#...#...
+##.#.#..#
+##..###.#
+.##...##.
+
+####..#..##.##.##
+....#.##.........
+....#...#.######.
+.....##..##....##
+.....####........
+####..#...##..##.
+....###.##.#..#.#
+#####.....##..##.
+.##.....#...##...
+.##.##.#..######.
+#..#####..#.##.#.
+#..######.##..##.
+..#.#.#.#.######.
+.##...#..##.##.##
+####..####.####.#
+
+#...#.#
+#..#.##
+##..###
+##..##.
+#..#.##
+#...#.#
+.#....#
+#..##.#
+...#.#.
+###...#
+##..###
+.#####.
+.#####.
+##..###
+###...#
+
+##.##..##.##.#..#
+.##..##..#..##..#
+#############...#
+....#..#........#
+#..##..##..#.##..
+#..#....#..######
+#....##....###.##
+###.####.#####..#
+.#..####..#.#.###
+##..#..#..###..#.
+..##.##.##...##.#
+.##..##..##.....#
+...............#.
+...............#.
+.##..##..##.....#
+..##.##.##...##.#
+##..#..#..###..#.
+
+#.#######
+##.#...##
+#..##..##
+#..#.##..
+##.##..##
+###.#####
+###.#####
+##.##..##
+#..#.##..
+#..##..##
+##.#...##
+#.#######
+..#.#.#..
+#...#.##.
+.#.#..#..
+.#.##..##
+#.#..####
+
+.......#.#...####
+....#..#....#.##.
+..##...#...######
+##.#....#.##.####
+##..##...#####..#
+.##...#####.#####
+.####..##.#...##.
+#..#..#####..#..#
+#..#..#####..#..#
+.####..##.#...##.
+.##...#####.#####
+##..###..#####..#
+##.#....#.##.####
+..##...#...######
+....#..#....#.##. \ No newline at end of file
diff --git a/aoc2023/src/day15/input.txt b/aoc2023/src/day15/input.txt
new file mode 100644
index 0000000..86b345f
--- /dev/null
+++ b/aoc2023/src/day15/input.txt
@@ -0,0 +1 @@
+fnln-,bkxf-,spfc=9,ds-,trzx-,dtck-,xs-,bg=4,fgmpc=5,xmxf=1,cl=9,md-,ct=2,ftz=5,xhd-,vkqx-,hxd=6,mlcn=6,ctdbt=6,txpsv-,nkx=3,jfz-,fzm=3,rvcd=4,nfgp=3,jjd=7,nzq=6,zv=5,lh-,nfgp-,gcbtgm=7,zj=6,sxlh=3,vsj=8,cjb-,tslfp=5,vc-,kpn=7,qpm=5,jgmnxd-,xp-,kmm-,xb=4,tv-,bmnlf=7,cb-,vbmk=5,dvz-,ssd=6,sb-,mldgtn-,mtx-,kz-,nzq-,dnkf-,sn-,js-,bpq-,vc-,fzm=9,xqv-,gqsr=2,jzxp=5,bc-,lxg=5,sv-,gflrmd=9,ncjb-,fm=9,lln=1,ql=9,tj=2,pbmldc-,fkzq=7,vkh=3,tn=4,fdl-,frgf=1,vf-,fpg=4,xzt-,jf-,pjfk=5,rvcd-,rv=6,zrs-,qnd=1,vqzhc-,xrb=8,lvx-,dfz-,xstdx=6,sf=4,hsb=3,sqjgc-,xtl=7,zthrd=8,mldgtn-,rc-,kpz-,tpnmp=6,bzj=7,gmrrx-,bszd-,mjz-,bzj=8,ztk=9,dtv-,qgm=4,ssd=3,xc=8,hvglb-,xf-,qhvz-,vqc-,ktj=1,ppq-,zxt-,rnsbt-,qpx-,nj-,vhl-,rknz-,zngsp-,vhl-,fjh-,vrzjf=7,gkn=6,tfd=4,bgg=1,fgmpc=9,lpd-,pbmldc=4,jm=2,vlv=4,shn-,vps=8,ljsvc-,rfdrk=3,vkqx=7,gftx=9,nzq-,cq=1,ckb=6,zsx-,qpf-,cggz-,bzj=9,lfg=6,tfd-,xdfz=8,ghbr-,dsdm=8,nj=4,jf-,fnln=7,fzm=7,fkzq=7,xcq=8,fkzq-,dm-,bfz=2,lqf=4,sfp-,kpqvtc=2,fkzq-,vth-,zn-,xhs-,vsj-,psfnx=4,xbx=1,xgk=9,snpgsm-,psg=3,shn=6,qxkrd-,pxvxlh-,xbx-,gt-,ksn-,dzn=7,gp=7,mp=8,jtz=3,ph=2,jxj=8,pg=5,txkh=6,drls=6,zthrd=9,gqsr-,dtv-,mktlhp=9,bszd=5,snpgsm=5,qz=6,sh=6,lqt-,mktlhp-,mgt-,mvmqfm=5,bc-,lpd=6,zn=3,nhsvv=3,vdf-,znjg-,phsl=7,tnb=4,qlf=9,txpsv-,pxvxlh=6,lqfv=7,lffv=5,djmlb=7,pxn-,hdxvhr=8,vbz=1,vqc=1,xrb-,bj=1,bzpv=5,tdl-,xc=2,cnr-,ss=6,mf=2,sv=2,mp-,zpc-,rqg-,xtsd-,hlg=6,xdfz=9,nl-,kfp-,cr-,qxkrd-,vpxv=9,mtx=1,drls=9,jzxp-,xqfrg-,js=3,ql=8,xp-,kpz=8,zj=9,jxj-,gf-,gcbtgm-,cmpc=4,tr=4,px=6,pvv=9,tpnmp-,jhhqj=5,mmn=3,qpf=5,vnk=9,cnn-,xgr-,mmsz=4,lvs-,cv=3,cq-,bfz=8,ct=7,kr=6,gk-,zdtz=1,vqzhc=3,xzt-,vqt=4,dphx-,kmr-,fkzq-,lk=8,dvz=6,ghbr=6,hm=6,zm-,sn-,jgmnxd-,vkz-,ps-,vpxv-,gpg=4,bmnlf=9,pjfk=3,ndmt=7,zk-,zthrd=5,fgmpc=8,rgh=7,bx-,ctp=2,nl=7,rtj=6,grlkl=9,zf=8,lg=4,zngsp-,rsn=5,drls=9,lxmkfx=7,sbt-,bx-,lln-,dm=6,fnv-,qpf-,tq-,qv=9,cfnbp-,pxvxlh-,tr-,nh-,clg-,xjpbxm-,zs-,trzx=8,bgh-,cmbv=1,vq=6,lcr=9,scbjp-,sjb=2,gmrrx=6,mg=5,znjg=4,zn=9,grlkl=7,xmxf-,smtd-,vkh-,spsx=9,qpf-,bgg-,smtd-,ntg=6,qpf-,vtp-,nlcrm=8,cvc-,frgf=8,blfx-,vbz-,tcs-,bqpp-,fjh=5,rtj=5,vr=6,kjrc=1,nzq-,qpf-,vqc-,kmr-,hj=8,fnh-,scbpb-,gxg=9,kf=6,xhs-,zdl=9,sscn=9,dzt-,rl=9,gr=6,tv-,jmthd=9,gn-,bzj=4,pv=9,pcnzf-,jxj-,sxlh-,lxg=3,rpn-,vr=9,rl-,tslfp=5,pgd=2,xmxf-,mjz=9,drls-,hrbj=7,rr-,lxg-,grlkl=3,jsv=1,sr=6,dv-,scbjp=1,pkg-,mgt=9,hsb=3,ccs-,xdfz-,cqq-,nbtq=2,ljsvc-,rpn=8,msbfzl=5,kz=7,cnr=4,hz-,ctf-,tgqp=9,tfd-,sqd=7,rb-,qf-,srp-,fkzq-,pfjml=6,rnsbt-,dmp-,zngsp-,cfnbp-,kpqvtc-,gftx-,lvs-,zpc-,kpz=2,pxvxlh-,spm-,rt-,ftz-,lvs=2,zsx=2,sjb=4,lxmkfx=7,bqpp-,hb=7,xzl-,ckb=7,hsb-,cvc-,ksn=7,mktlhp=5,jhl=6,snpgsm-,mm-,xstdx=2,rm-,rqx-,ld=4,zv=6,fx-,sbx=2,blfx=8,fmkjj-,km-,cmbv=8,vz=9,lg=4,fpg=4,kpfr-,dmp=4,xxj-,jhl=2,km-,vx-,sh=8,xqv=3,kfp=3,zdm=3,tdl-,ddxn-,gzrz=9,xqv=8,kqh=2,rlrlql-,lpd=1,vr=1,ggm-,dkz=3,jx=2,trzx-,sjb-,rh=8,dbsf=4,jhhqj=8,jzxp-,bkxf-,thnmq=7,mktlhp-,jtz=7,sh-,plt-,rfdrk-,hj=4,dk-,zjvd=9,jsv-,vkn-,jc-,zk-,mmsz-,lcr-,dkz-,px-,pcnzf-,jtz-,pzd-,kqh-,ts-,znb-,dzn-,qgm-,drls=9,bmnlf=3,thnmq-,bpq-,zxt=9,lg=6,rknz=8,bzj-,vsh-,lq-,rm-,ql-,cs=1,dzt-,hfrdk=4,kmm=9,lhks=9,jsv=5,zxt=9,kc=4,rm=8,hvglb-,bzpv-,drs=1,tgqp-,trg=4,dp-,zmlr-,pvv-,lfg=2,rqg-,nh=5,mkj=5,cct=1,lxmkfx-,txpx=2,vps=5,dzn=3,dph-,kv=1,vth=6,gftx-,lztd=3,hb=8,qpx=2,fjg-,plp-,vnhfc=3,zv-,xt=1,bgkjq-,pbk=9,hj-,sv-,kpz=5,fnh-,zpc=3,zj=8,pxvxlh-,qgm=6,gct=5,tdl=5,xtl=2,lg=7,trzx=9,hvglb=3,ss=6,vpxv-,gh-,js=1,jf=1,rqx-,pg-,nqcj-,zzx-,mf-,zlcmgc=3,lxg=8,rpgj-,vhl=6,phsl=8,dtck-,rxv=2,qpf=7,nh-,ccs-,mf=3,xrm=4,pljg=1,rnsbt=5,nnn=2,snpgsm=5,qxkrd=5,xgk-,trg-,phsl-,bzj=5,ckb=4,cqbvs=5,xgk=8,ck=7,dbffb-,tj=2,dm-,fjg-,zdm=8,jc=9,rqg=3,qhvz-,cmpc-,dzn=4,xrb=2,kfp=2,vbz-,xhs-,dnkf=3,chpn-,sl-,kftx=5,rsn=5,ps=9,jm-,pbk-,vq-,qpf=4,rfdrk-,rsn=9,nqcj=7,vsh=7,npm=7,qxkrd-,hpl=1,rnsbt-,pxn-,zsx-,lpd=5,fgmpc-,vkqx-,vth-,pm-,mgt=5,cct=3,bb-,hzlzn=2,gkn-,mjz-,kx=8,qcnnzx-,kmr=7,lfl-,jhhqj-,lqfv-,gkn=5,pfjml-,lhks=4,bzj-,tnp-,nj=1,xhs-,rtj=9,rlrlql-,qcm=3,mph-,fx-,jm-,xtl-,xdfz-,msbfzl-,ckb=7,hj-,cqr=5,scbpb=2,tslfp=1,kmm-,cv=4,zpc-,qfb-,rlrlql-,trzx-,sf-,ccs-,fsz=2,dv=8,thncf=4,bmnlf-,qgm=8,plvd-,dm-,pjfk=4,gr=6,qv=7,khx=3,vs=7,dtck=9,xbx-,xstdx=8,km=6,hgp-,kf-,xf=1,vnhfc=6,xgr=1,pbk-,sl=2,jmthd=8,sbt=6,mkj=8,vnk=3,bgkjq=8,bg=2,xbx=6,mmsz-,rnxt=1,shn-,ss=3,kpqvtc-,dfz-,qxj=9,mktlhp=4,jzxp=1,hm-,vx-,bzj=1,vnhfc-,vrc=7,bgkjq=8,gp-,vq-,lh-,tnfx=4,ntg-,dd=5,znb-,vtp=4,vgln-,hz=1,lk=1,mktlhp-,vz=3,vpk-,bbsk=4,qlf=1,hgp=5,xjpbxm-,qcm=8,tz=4,lqf=2,bz=3,jfjbj=9,lfl=6,cqq=8,xzt=4,xb-,rlrlql=9,cqbvs=8,dzt-,blfx=9,rqx=5,xfn=6,px=3,chpn=7,js-,lg-,ctf=1,qcnnzx-,hsb-,xnmq=1,hpl=1,pg-,gr-,fkzq=2,rfdrk=7,tnp-,gbsp-,nq=4,vttk=1,lrpx=5,xrm=3,crb-,nglvx=5,md=2,px=6,pljg-,sjb=3,kpjqgm=9,xrm=6,slzd=6,xc-,sxlh=6,mtx-,xc-,nbtq-,plvd=2,hb-,znfd=7,ghbr=1,gkn=3,gct-,cqq-,znb=5,jsv-,txpsv=6,dk-,dbh=7,lmlx=6,lcr-,bfz=4,xhs-,cjb-,tkpb-,dkms=4,sh-,fkzq=3,kqh=8,dv=9,lrpx-,vnhfc-,bqpp-,pcnzf-,km=1,ssmflk-,pnp-,rsn-,cqbvs=5,fr-,kfp-,npm-,vbz-,jm=9,pgd-,trzx=6,hsb=6,qrn=3,lln=8,zl=6,qpf=8,djmlb=6,zj-,qhvz=1,kz-,bzpv-,bq=8,frgf=7,blfx-,tnp=9,lqf=3,zrs=5,lc=2,scb=6,dzfqlb=3,kmqjt=1,trg=1,fzm-,bgg-,gzrz-,sv-,qz-,zlcmgc=4,qcm=1,xhd=7,zmlr-,fnv-,xdfz=9,fx-,xfn=7,zdm-,fr=7,tfd=1,njvd=4,vnk=2,xbx=8,xp=3,zbgdxg-,lxmkfx-,pbmldc-,znfd-,znb-,xh=5,ccf-,lxmkfx-,tgqp=6,ng=6,kz=9,hlg=2,mmsz=9,vdf=1,vkh=9,cvc-,sfp=7,ckb=6,gxg=9,cggz=2,clg=8,zn=6,ctf=6,zdtz=1,ddxn=6,nhsvv-,plvd-,sbx-,ncjb-,lc-,pvv-,vpxv=3,mhh-,qgm=6,vbmk=8,rb-,gxx=7,pt-,qpx-,gcbtgm-,xf=4,xfn=1,tv-,mmn-,zrs=6,zm=7,pxvxlh=5,xc-,dbsf-,scbpb=3,smtd-,fsz-,znjg=3,rfdrk-,ccs=9,mgt=5,mjjk-,vsh-,sv=8,cgp-,gf=1,pg=5,mph-,ctp=3,vblpd=7,gbsp-,gf=3,nbtq-,vjsg-,jsv-,lqfv-,np=4,xh-,tq-,xs-,vk-,hb-,mmn-,vbz-,kpjqgm=5,dkz-,rzjkqp-,tvm=3,dz-,kftx-,khn-,nj=2,cnn=3,cl-,sf-,vc-,zmlr=3,lxmkfx=3,blfx=9,vbmk=6,tpnmp-,sqjgc=5,rz=2,bszd=6,kkc=9,dnkf-,lmlx=7,ddxn-,bhfh-,gflrmd-,xb-,mmn=2,jfjbj=1,zm-,sqd=4,kl-,dfz=4,ktj=5,lxmkfx=2,qxkrd-,dp=6,hl-,lqfv-,kx-,vbz=5,qf-,sv-,kpqvtc-,vhx-,ps=1,fr-,vbmk-,bnhz-,tj-,rlrlql=2,np=4,vs-,vbmk-,pmz=3,pbk-,zxt-,ck-,xf=2,jtsdd=7,ng=1,gn-,qfb=5,mf=4,xb-,rc=7,jjd-,xv=6,gzrz-,cqq=5,dzt-,scb-,plvd-,vqbp-,mvmqfm=3,pr=1,nj-,pvv=8,xtsd-,gbsp-,hnf-,fdfc=3,zzd-,kftx-,pbk=3,lrpx-,hbmt=4,mktlhp=2,ld=4,sf=4,rxv=1,kkcd=9,dph=7,ssmflk-,vnhfc=1,hrbj-,ljsvc=6,rt-,xf=5,tq-,npm=1,kkcd-,spm=7,ljsvc=4,lpd-,nh-,cnr-,xmxf-,cxq=6,mjz-,hpl-,lh-,grlkl=7,pv=9,pqf=1,zsx=7,vbz-,vgln-,dvz-,zl=6,js-,rqx=8,hdxvhr-,pkg-,tzjln=1,nhsvv=7,ggm=5,zz-,kmm-,zngsp=5,gqsr-,cnn=8,vrc=3,zxt-,txpx-,jmthd=9,gbsp-,gn-,zrq-,ss=5,xjpbxm-,ssmflk-,sr-,kl-,gp=9,mhh=7,bpqv-,mvmqfm=6,vr-,kmqjt=4,xnmq-,hvglb=5,qpf-,xb=5,jgmnxd-,sfp-,sscn=8,pcnzf=4,rr=7,gqsr=4,xs-,ql-,pxn=6,jf-,ckb=6,ps=7,bzpv-,qcm=5,gf-,vk=8,hlg-,kjrc=4,dnkf-,kjrc-,qgm=7,pt-,mmn-,dphx-,dsg=8,brp=5,lq=6,kpqvtc=8,xhs=1,tz=1,rm-,qht-,jhl=3,mr=1,tj=4,pnp-,zngsp-,lcr=5,fr=9,vgln-,bz=1,nfgp-,xzt=1,xzbz-,cqzt-,vblpd=9,mg=6,dd-,xtl-,mf=7,qln-,qxj-,mgpp=7,cb=7,zf-,pkbv=2,fgmpc=4,lc-,dmp-,zxt=1,db-,hrbj-,vnk-,smtd=1,cjb-,dtt-,zlcmgc=1,kkcd=9,xh=3,sqjgc-,td=9,npm-,cqbvs-,hj-,sf=2,zf-,mph=7,zcjvl=4,dkms-,rgh=6,zzx=4,hm=4,tz-,vr-,vf-,cqq-,bgh=1,sn-,vbz-,sxlh=3,xtl-,lqt-,kd-,mg-,vf-,lg=5,fnh-,gbsp-,ksn-,mlcn-,vqzhc=8,gzrz=6,lcr=3,qxj=1,hpl-,dphx=5,js-,fm=5,vgslz-,vf=5,ns=2,qcm-,ds-,pr-,vqfz-,hl-,mnphn-,ctp-,qht-,dv-,kd=1,lrpx=9,bpq=1,qgm=9,ckb=6,zf-,vps=5,gbkt=3,zk=4,lztd-,tpnmp=9,rr=9,rpgj=5,dbffb-,mvmqfm-,fzm=8,bpq=9,lxmkfx-,sf-,br-,jxj=1,snpgsm=2,bj-,fsz-,vjsg-,gxx=4,hbmt=1,gflrmd-,rtj-,zl-,snpgsm=7,ppq-,vrzjf-,dv-,njvd-,sxlh=1,xgr-,tv=8,kmqjt=2,cfnbp-,xxj=1,zngsp=5,cqr=1,jc=9,gr-,qxkrd-,xzbz=9,xnmq=1,zcjvl=1,vjsg=4,fx=2,srp=2,kpfr-,bbsk-,xqfrg-,tvm=1,pqf-,fdl-,ss=5,bnlpjk=6,dphx=6,vbz=4,grlkl=7,gxx=1,lrpx=3,drls-,dph=8,vs=4,sbt=3,jpc=5,pbmldc=8,ddxn-,br=3,qln-,rvcd-,dmp=5,dhh=5,fjh-,sn=6,txpx=2,ctdbt=1,rzjkqp=7,bzpv-,gt=6,sb=8,qht=9,kpz=2,hvglb=8,mr=3,fq=5,jm=5,rzjkqp-,ndmt=6,bzj-,lg-,ks=1,npm-,vqbp=4,lcr-,km=9,tv=6,thncf=6,bxx-,vq-,rpn=6,dz=2,tcs-,mr-,kd-,spfc=8,npm=7,hrbj=1,cggz-,jjd=7,drs=6,vr-,rfdrk=4,kc-,pkbv-,zmlr=1,lqt-,hsb=1,xb=5,pljg=5,bq-,gxx=5,vrzjf=9,xhs-,xk-,vdf-,lg=6,xrb-,vc-,pbmldc=5,js=5,ld=4,sbt=4,gftx-,kpz-,khx=1,mr=9,lztd=7,xqv=8,cb-,sbx=6,qpf-,vgln-,xcq=9,jf=4,zs=2,cv-,vqc-,vgln=3,bmnlf-,nsxz-,vttk-,jx=1,tnfx=9,zv-,fdfc-,rc-,lhks=4,zlcmgc-,grfxxs-,hrbj=4,vqt=8,ts=5,hd-,tq=8,bg-,mf-,pcnzf-,sh-,trzx-,xb=4,rc=8,bzj-,pkg=8,hlg=5,qcnnzx-,ck-,mjz-,vth-,mgt-,cct=1,bkxf=8,rpn=1,mg-,fjg=3,vlv-,zngsp=8,ksn-,hnf-,dbh=7,pxn=5,hsb=8,mq-,jsv=7,ccf=1,ts=8,kz-,xgr=5,xbx=5,sqd-,fpg=8,lvs=5,smtd-,zs=3,dsdm-,nrc-,jtz=8,jxj=3,sv=3,mlcn=9,psfnx-,kpqvtc=9,rsn=4,zdl-,lztd=4,vnk=2,dmp-,sscn-,zj-,dd-,zdl-,smtd-,tj=3,ggm=6,ff=2,zzd-,pfjml=7,chpn-,mjjk=4,spm=7,sfp=6,xbx-,dbffb-,sh=9,hnf-,pmz-,rzjkqp-,hb=8,bj-,hgp-,txkh-,znjg=2,vqfz-,vgln=2,zzd-,crb-,vqt=3,ssmflk-,bqpp=4,xt-,dbffb-,bhfh-,hsb-,rvcd-,sbt-,txpx-,jtz-,cb-,dp-,mvmqfm=3,ddxn-,msbfzl-,xgk-,jpc=5,phsl-,dbffb-,zcjvl=4,tvm-,pv=2,sfp-,nnn-,jmthd=2,qcnnzx=3,xnmq-,tgqp-,fzm=3,jpc=2,cnn-,jhhqj-,mvmqfm-,rtj-,km-,lk=6,slzd-,chpn-,xb-,tpnmp=9,vkz-,lqt-,vf-,gbsp-,cmpc-,xc-,pkg=5,tz-,dzt-,mvmqfm-,dvz-,lhks-,npd=6,lfg=7,bgh-,vqbp=5,grlkl-,lvx=4,mgpp=1,znb=6,zf=4,lfl-,cr=2,dbffb=3,jzxp=2,mhh=2,gftx=7,lfg-,gkn-,xb=5,djmlb-,qln=8,zmlr-,dkz=6,grlkl-,rt-,zcjvl-,vblpd-,lztd-,lfg=2,gxg=6,bj=8,zs=9,ssd-,lcr-,tqx-,ncjb-,kmr-,trg=4,kmm-,cjk-,tq=7,qqp-,scbpb=1,rc-,xzt=1,ftz-,sjb=2,rknz=4,gbsp=4,qrn=3,dhh-,mph=1,pjfk-,grfxxs-,xfn=3,bq=6,kd=3,vjzt-,vgln-,rv-,lcr-,blfx=4,gzrz-,kmm-,hj=8,pvv-,khn-,jfz-,gr-,gr-,dhh=9,ps=3,vblpd=9,sqd=3,hz=7,mp-,lxg=1,bnlpjk=3,jjd-,txpx=7,fx=9,nkx-,bg-,rvcd=4,sr=6,qz=3,vdf=9,ld-,nsxz=1,zdtz-,dzn-,hb-,vjzt-,nfgp-,cmbv=6,pljg-,sqd=1,ssd-,fzm-,qv=8,tn-,cct=8,cnn=2,vkh-,zl=8,xcq-,ppq-,scb=5,pbk=6,jmrz-,xgr-,kpjqgm-,nglvx=5,qht-,fnln-,cl-,kkc=9,kpfr-,xtl=9,dsg-,xrb-,zdm-,mmn=5,tz-,gh-,vkn-,vkqx-,gkn-,qxkrd=7,rt=7,rh=3,bc-,nzq-,mtx=8,jc-,kfp-,dkms-,thnmq-,jhhqj=6,vhx=2,lqfv-,kc-,vqzhc-,bzj-,fmkjj=5,ql-,fdfc-,kftx-,ktj-,bgh=2,cqzt-,rtj=2,vkh=2,dfz=6,xstdx=9,npd-,hf=8,jhhqj=1,snpgsm-,xrb-,hm=5,bx=1,ql=2,djmlb=7,xcq=6,xbx=4,kl=9,dk-,sh=7,ctf-,sqjgc-,thnmq=7,lhks=9,xdfz-,tk-,pt-,vgslz=7,dtv=5,sbt=9,kv=1,drs=3,db=8,lqf=6,xhd-,qln-,ckb=2,kpn-,qvlzn-,fb-,xcq=3,vqc=2,ct=4,dtck=5,vgslz=9,shn-,rv-,cr=3,tpnmp=1,cct-,zj=8,bnhz=4,psfnx-,nnn=8,kl=8,ps=5,ng=6,cnr-,snpgsm-,dnkf=9,znb-,bgkjq=1,pjfk-,pl=9,dtt-,sqd-,hgp=7,gs-,qrn=8,dvz=4,kftx=7,ggqq-,cl-,cr=9,jsv-,vjzt-,pxvxlh-,kqh=1,tqx-,lvx=9,mf-,rpn=2,bpq=4,km=4,vnk=6,cqzt=9,bxx=8,tn-,pgd=8,dp=7,thncf=8,zdtz-,vgslz=5,cnr=7,nkx-,hdxvhr=6,tj=6,xnmq-,qf=4,lq-,vnk=7,rpn=4,zd=8,rxv-,lln-,sbt=6,mhh-,rz=5,dtt=9,gxx=7,pnp=2,lqt-,xdfz=7,lhks-,gflrmd=8,kpqvtc=3,tj-,pvv-,xcq-,xfn-,kpjqgm-,kc=6,zngsp=1,vpxv-,xfn=1,qqp-,tj=2,xrb-,zsx=4,lfl-,vqc-,nq=9,lrpx=7,rpn-,phsl=7,chpn-,vq=6,dd-,ff=1,lztd-,lq-,vx-,lg=3,jmthd=7,vnhfc-,jgmnxd=6,fpg=3,xs-,ggqq-,msbfzl=7,znjg-,xt=8,xzt=9,ff=3,mmn-,dmp=7,hrbj-,vth-,dkz-,nsxz-,bnhz-,bq=2,hm-,dm=7,trzx-,xmxf=1,npm=7,qqp-,fnv-,bzpv-,hnf-,ztk=4,hz-,bx-,srp=4,sqd-,zk=5,gbsp-,fsz-,vlv=6,hpl=5,jgmnxd-,rtj=9,lh-,qhvz-,vkn-,blfx=6,sc-,rqx-,tslfp=6,zdm-,fsz-,mm=5,lc=5,ghm=6,ktj-,kl=6,dph=6,ztk-,cb=2,kz-,psfnx-,mq=4,vqc-,dph=9,zj-,js-,znb-,vqbp=9,dx=2,dtck-,gt-,br=6,zrq-,bqpp=5,ckb=6,ng=9,zdm-,jc-,lvs-,ql=9,zf-,sc=2,dph=9,bz-,vbz-,khn=6,kmr-,drs=7,kx-,vlv-,pljg=6,vpxv=6,fsz=5,vqbp-,tcs=5,qz=9,xp=2,xp=7,kx-,ssd-,bz-,vs=5,mgpp=8,rnsbt=1,hdxvhr=4,rz=9,nq-,ktj-,pv-,cmpc=5,psfnx-,pqf=9,tv=4,jpc-,jfjbj-,vps=6,bszd-,jx-,xhs=2,cfnbp-,cb=6,nfgp=8,mg-,fjh-,mtx-,vrc-,cr-,njvd-,lffv-,qqp=4,cr-,js-,jx-,pgd=9,qg-,vsj-,bnhz-,sjb=1,nglvx-,fkzq=9,qhvz-,nlcrm-,kmm=2,jzxp=2,zrs-,mtx=9,hnf-,lk=5,nq=2,rpgj=1,tkpb=7,zzx=7,pnp-,rgh=1,qhvz-,zpc=1,pmz-,nhsvv=5,zqr=6,cggz-,lhks=3,bpq-,tfd=7,jm=4,kpjqgm=9,qxj=8,pv=8,pmz=2,jf=2,gxx-,jf-,mktlhp=1,lrpx=2,lqf-,scbjp=3,fdl=7,khn-,ddxn=7,dzn=6,chpn=5,vpxv-,kl=8,sqd-,vnk=9,vbz-,cqzt=9,lc=4,nhsvv=7,ph-,bz-,xzt=7,cqr=8,spfc=3,vsh=9,bbsk-,khn=1,bl-,lffv=3,pl=8,zdl=7,qg=2,vkz-,qht=9,xhd-,blfx=5,vbmk=5,npd-,zv-,bpqv=2,tvm=6,xqv-,zv=8,dbffb-,trg-,cqbvs=2,vqbp=4,kpfr-,ql-,cggz-,kpfr-,sbt-,plp=2,fsz=3,ct=1,zcjvl=6,rpgj-,nfgp-,zqr=4,zn-,mq-,ps=8,rtj=4,kpqvtc-,ndmt=3,plvd-,xv-,rt-,fb-,psg=8,sxlh-,nhsvv=4,pkbv-,vrzjf=7,dzn=7,mmn-,jfjbj-,vnkmzj=6,dp-,rh-,cv-,dzn-,lg-,rpgj=1,dph-,ctdbt=3,cfnbp-,gxx=8,hj=3,xnmq=4,lc=5,bb=9,zdl-,zzd=9,hzlzn=9,dz=9,rz=9,bzj-,xb=4,lrpx-,vlv-,dph=1,cqbvs-,ghm-,pcnzf=2,vr-,cct-,mph=2,nsxz-,ssd=2,hfrdk-,psfnx=9,rc-,pbk-,znb-,zmlr=1,dk-,dkz=3,rqg=3,mv-,zv=9,sscn-,bszd=1,xhs-,dzt-,mgpp=3,dnkf=6,tnfx=9,drs-,spfc=3,dbsf-,sr-,lfg-,bg=2,gbkt=7,jxj-,tv-,fjh=9,fdfc=5,gs-,vbz=1,dbsf=9,zdtz=6,fgmpc=2,njvd-,hfrdk-,sh=8,scbjp-,zn-,msbfzl-,px-,spfc=6,vdf=2,vc-,vlv=2,cqq-,vhx=1,hl=3,vkqx-,fx=7,gct-,vrc-,hpl=8,zm=1,ktj-,xmxf-,rqg=7,zm=8,cqq-,zlcmgc-,kkcd-,dtt-,jmrz-,gf-,xzl-,pcnzf-,tslfp-,pxn=2,ccs=5,lmlx-,cct-,vgln=4,xt=3,gxg-,vq-,dz-,vqc-,bgh=6,zbgdxg-,ctdbt-,mg=6,fb=1,xbx=1,xv=2,lvs-,kd=9,slzd=2,xb=3,mvmqfm-,kv-,jfz-,jc=8,mgpp-,shn-,kpn-,scb=9,txpx=5,zf-,vhx-,rnxt-,pxn-,mg-,gftx=6,fsz-,xnmq-,bz=4,nfgp-,gkn=7,bnhz-,qpm=1,vhl=5,pm=1,spm-,xfn=8,xf=9,vqbp-,trg=1,pkg-,lrpx=4,mf=7,rpn=7,vqbp-,vdf=8,zz=5,tslfp-,dz=1,fjg-,cb-,zqr=3,clg-,js=2,xjpbxm-,fnln=4,pgd=7,hzlzn=6,qrn=4,khn-,psfnx=7,grfxxs=8,lvx=4,spm-,zl=6,grfxxs-,trg=1,lmlx=2,rsn-,rb-,cnn-,zdl=1,mmn=8,rr-,scbjp-,zk=2,xrm-,lc-,pkbv-,ss-,qhvz-,fq-,bnlpjk-,kkc=8,fpg=7,tgqp-,jzxp=8,rm=2,plvd-,lfg=5,jmrz=9,vk=7,spsx=2,spfc=5,plp-,cfnbp=6,jzxp-,fjh=3,xjpbxm=4,br-,nrc-,sn=3,rc-,lfl-,plt-,np=5,bgg-,xf=4,vlv-,vrc=5,cct=5,vps-,xzl=9,nnn-,pvv=9,dmp-,sf-,hm-,vtp=7,cqr=7,kv-,rnsbt-,qcm-,dvz=1,dbffb-,dbh=4,bzj=9,ctdbt-,tnp-,ksn-,dmp-,qz-,lxg=6,dtck=9,lvx-,bfz=6,xgk=7,qpm-,ggqq=2,grfxxs=3,msbfzl=1,xqfrg-,nlcrm=5,hzlzn-,rfdrk-,xhs=8,xnmq-,pbk=9,jsv=9,zk=8,dtck-,jtz=2,nhsvv=6,ddxn-,ks-,tcs=1,jsv-,xb=1,ff=1,scbjp-,mjz=7,pbmldc-,tcs-,xhs-,plt=8,zs-,xbx=6,bxx-,qcnnzx-,dkz-,dvz=2,rh=4,mhh=7,djmlb=7,bnlpjk=8,jgmnxd=9,pzd-,lffv=2,xqfrg-,cb-,tzjln-,bfz=1,fnh=8,xf-,cqbvs-,lqfv-,ld-,jtz-,nj=8,cjk-,dsdm=9,thnmq=2,ck=8,bpqv=4,rgh-,mf-,sqjgc=8,rzjkqp-,dvmm=8,zthrd=2,mtx-,cqzt=6,gct-,spfc=7,trzx-,hlg-,rqx-,lffv=5,vf-,bqpp-,nhsvv=8,kpfr=2,dfz-,cnn-,gkn-,hb=2,vnk-,px=2,hxd-,zthrd-,xv-,jzxp-,vkn=7,cxq-,ccf-,xfn-,lxmkfx=5,pljg-,lqfv=5,rfdrk=9,khn=5,cnr-,vr=9,kd-,ssd=5,mmsz=7,fnh-,mf=8,lvs=3,vgslz-,pfjml=7,dtck=8,dph-,gk=4,ntg-,lpd=2,fnv=1,mnphn-,xzbz=1,zd=8,gf=1,tr-,lpd=9,vjzt-,ss=7,qnd-,db=2,vz-,lxg-,khn=3,vkqx-,fjg-,zrs-,tnp-,rc=9,fdfc=4,tqx=1,scbjp-,nbtq=6,kmqjt-,jc=9,txpx-,pr-,vps-,zv-,vnhfc-,jmthd-,blfx=1,vqt=4,spfc-,tzjln-,cfnbp-,zf-,ndmt=4,xqfrg=2,cmbv=4,mtx-,ktj=5,nh=1,mm=6,xv=5,ng-,bfz=2,zj-,pt=6,njvd-,qcnnzx-,qgm=8,fjh-,zqr=9,tn-,zz-,mvmqfm=9,gt=3,vgslz=4,px-,fnh=7,njvd=8,jtsdd=2,rzjkqp-,np-,ph=5,zqr=6,cb=6,sxlh-,pfjml=2,dmp-,lxmkfx=2,kpqvtc=4,mvmqfm=1,rknz=8,zcjvl-,tq=1,nnn-,vc-,zdl-,ndmt-,dtt-,mf=4,qcnnzx-,zzx-,pkg=6,xfn-,rnsbt=8,rgh-,vp=2,vpk=1,zz=2,mkj-,mr-,lln-,dm-,cfnbp-,sbx=9,dsdm=1,kpqvtc-,zzx-,bqpp=9,lqf-,cqr-,mlcn-,spm=1,dhh=6,js=4,pg=1,vbmk=3,vqc-,ftz=4,zxt-,zz-,xtl=6,pr=9,cnr=8,rqx=4,bszd=3,rl=6,phl=4,dvmm=2,drs-,bnhz=4,cggz=7,nhsvv-,cnr-,bgg=4,tr=1,pjfk=8,fq-,kmm=2,jjd=9,dbsf-,sxlh-,xzt-,mjjk-,pfjml=8,lmlx-,xtsd-,ftz-,nq-,kd=3,tk=2,vth-,nrc=4,vqbp-,grfxxs=1,ssmflk-,mmsz=6,lh-,td=2,vc-,qht=1,ccs=3,fpg-,ff-,ppq=2,cl-,ff=9,gk=1,zzd-,mv-,pqf-,vq-,vtp=1,thncf-,gt=7,ksn-,bnhz=8,xmxf-,ktj-,cnr-,ctdbt-,cggz-,vps=8,ff=1,jhhqj-,hd-,dphx=3,zk-,bg-,pkg-,gh-,nl=4,dtv=1,ph=5,xk=4,sbt-,sjb=4,tslfp-,kftx-,gxg-,mjz=9,bzpv-,dvmm-,zlcmgc-,mvmqfm-,jmrz-,sf=3,zz=4,vsh-,kfp=9,cggz=4,pm=4,nlcrm-,pg=9,xhd-,spsx=9,xmxf=8,bbsk-,pr-,qhvz-,vqfz=7,dp=5,ndmt-,nlcrm-,mgt=8,gflrmd-,vkn-,jsv-,qrn=7,gk-,rc=9,qvlzn=2,xtsd-,xzl=8,vdf-,fb-,mr-,vrc=2,qpx-,bmnlf-,scbjp-,vpk=5,vjsg=3,rvcd=7,tk=2,xstdx=9,tcs-,zqr-,kpfr-,rz-,vgln-,dvmm-,lqfv=8,bszd=3,nglvx=9,lq=5,dnkf-,sfp=3,pxn-,blfx=6,zzd-,sbx-,dfz-,fq=2,qqp-,rtj-,sb-,nbtq=2,bb-,zpc=6,tfd-,zl-,scb=4,nfgp-,kftx-,zn=8,rh=3,fzm-,qvlzn=3,ctp-,qrn-,ztk-,pmz-,rh-,vpxv-,lvx-,cq-,jmrz=8,sqd=2,kftx-,ppq=7,dvz=3,vblpd-,jgmnxd-,gxx=6,vnk=5,ntg-,sjb=3,dkms=3,bgh-,zsx-,xrm=8,pkbv=7,vttk=7,lxg=5,jm=9,vqbp-,kfp-,hzlzn=5,hl=4,trg=9,lq=7,ksn-,mmsz=5,px=2,lcr=4,td-,hfrdk-,rnsbt-,qln=3,dvmm=6,gftx=6,ppq-,xbx=8,pvv=8,xcq-,tzjln-,tdl=8,vf=9,sxlh=9,bgh=5,bqpp-,zxt-,xs=5,kmm-,ps=5,ctdbt-,hd=4,md=7,xzl=5,jfz-,tzjln=9,gpg=5,lmlx=2,phsl=2,jx=3,lfl=4,kpfr-,db=9,fdl-,rm=3,bqpp=7,mp-,xv-,bpq-,pg=1,nlcrm-,xk-,mq-,lk=7,hrbj=1,hj=1,ss=8,hnf-,xqfrg-,tnfx=9,znb=8,kl-,lqf-,dsdm-,khn-,cct=4,bzj-,spsx-,lc=6,jfz=4,plp-,fb=1,bgkjq=2,pvv-,br-,cfnbp=5,sqjgc-,sv=5,mmsz-,dd-,lrpx=5,mgt-,hdxvhr=1,dsg=6,zz-,gkn-,fjg=7,px=4,lfg=7,jfjbj-,ghbr=4,ftz=1,lffv-,pjfk-,spfc-,mlcn-,vth-,qxkrd-,ctdbt-,qpx=5,gqsr-,sscn=7,ghbr-,vqbp=8,bgg-,zf=2,qxj=8,bpqv=6,hlg-,tn-,lfl-,bzj-,tk=4,ql-,gxx=6,gqsr-,mtx=1,rqg=7,zzx-,lcr-,bx=7,nl-,msbfzl-,bhfh-,sxlh=7,nsxz=8,bgg-,pfjml=4,pv-,qv-,kx=4,dp=5,gxg-,qpx=9,mjz=5,zxt-,tv=4,kx-,xtsd=7,txpx=4,hdxvhr=7,pzd=2,vqc=4,xjpbxm=3,dm-,rvcd-,ps-,hbmt=9,nsxz=5,cct-,xhs=3,cqr-,fm=3,pzd=5,qxkrd-,rz=8,pgd-,txpx-,xk-,hnf=7,hlg-,lcr-,nqcj=9,pgd-,spm=3,zk=5,jxj=9,vth-,srp-,sbx-,cs=1,vpk-,srp=7,sqjgc=7,ks=1,dvmm-,zqr=6,gbkt=5,rl=1,phl-,mg=9,rm=2,dsdm-,rz=2,pgd-,gf-,bxx-,nq=3,vtp=6,sbt=9,kpqvtc-,qcm-,td-,bnhz=3,rknz=6,mjjk=6,qf=9,thncf=5,bb-,vjsg-,cnn=6,jxj=6,vkn-,gbsp=3,kpfr=1,lqfv=6,kv-,gt=1,fq=4,kl=4,rtj-,vth-,pfjml-,hbmt-,vr=1,xmxf-,sc=1,cgp-,jx=1,chpn-,xcq-,vttk-,vpk=1,mnphn-,mtx-,gxx=1,cgp=2,qvlzn=4,sr-,ct-,rh=3,rzjkqp=2,ld=9,pljg=6,vlv-,rgh-,spfc-,jm=8,fkzq=4,xmxf-,gp-,chpn=8,xtl-,cggz-,xnmq=3,rnxt=1,znb-,nfgp-,ts-,bqpp-,fnln=3,pljg=5,hz-,kfp=4,cq-,bgkjq=9,vs-,zngsp=7,jsv=3,dbsf-,kx=4,ph-,xb-,dsg=6,sn-,jmrz=4,dzt=7,mnphn-,vk-,kkc-,kpn-,vblpd=6,vqbp-,dmp=6,hsb=1,zlcmgc-,vbmk-,dp-,tk=3,drs=8,pl=4,sbx-,jhl=9,rknz=5,qcm-,mp=8,vqfz=9,ctdbt-,qp=2,vsh=8,nkx=8,qxkrd=6,bpqv=9,cxq=3,nbtq=1,sxlh=4,fnv=5,vnkmzj-,gpg-,nh=8,zd=1,rzjkqp=6,qpx-,bzj=2,fkzq-,lxg-,bb-,lffv-,xs=3,rzjkqp-,bpqv-,bz=3,zn=5,br-,zthrd=5,kc=2,ss=2,kf-,bb-,bz=6,hb-,dtck=4,sxlh=9,mmsz-,znb-,mhh=3,nhsvv-,ntg=1,bqpp=2,thncf-,tnfx=8,nglvx=1,bzj=3,gcbtgm-,cmbv-,ctp-,pg-,zpc-,rpn=1,gn-,ncjb=8,kmr=3,tz-,bnhz-,dvz=2,mvmqfm=5,jc-,plt=6,cl=8,vc-,qgm=2,ss=5,jc-,cggz=4,chpn-,qln-,nh=8,pljg-,km-,pgd=7,tqx-,xhd=2,gmrrx=3,bhfh=6,bx=3,msbfzl=2,rm=6,qcnnzx=9,xgk=6,gct=4,kpjqgm-,jx-,tgqp=4,sv=2,xf-,ks=9,pzd=6,zrs=3,md-,thnmq-,zzd-,xnmq=3,rc=2,kmm=9,rz-,jc-,rsn-,dphx-,bqpp=7,vs=2,kkc-,sqd-,tdl=9,zbgdxg-,qgm-,gmrrx=7,cb=4,bx-,lvx=8,slzd=1,fzm=5,cs-,xs=5,xxj-,xhd-,qcm=2,xxj=6,vz=8,cqzt=2,fdfc-,vx=6,rpn-,gxx-,nhsvv=6,mktlhp-,vjzt=4,lztd=7,zs=7,mv=2,nlcrm-,tkpb=9,sxlh-,pv-,qxj-,xcq=8,xgk-,scbpb=3,dk=9,mjjk=3,lztd-,njvd=8,znjg=5,lxmkfx=5,snpgsm-,ph-,pr=1,rpgj=4,nzq=2,kc=2,rsn-,dzfqlb=6,gf-,qcm=1,tcs-,mm=2,fjh=6,vp=6,sl-,kfp=4,tslfp=9,hl=1,fzm-,lmlx=2,bnhz-,sfp-,pcnzf-,gct-,jc-,xk-,zpc=2,jxj=6,tzjln-,bqpp=5,pjfk-,cct=5,qgm=8,sxlh=7,lhks-,mmn-,rpn-,vp-,qnd=9,mjz=2,td-,gct=6,sfp-,cb-,tnb-,zf-,chpn-,pkg-,gs-,mmn=2,mnphn=9,pxvxlh-,fm-,vdf=2,vnhfc-,njvd=1,npd-,cl-,vhx-,kz-,hl=8,bpqv=7,ks-,pl=6,txkh-,mjz-,bl=1,cqzt-,bbsk=7,ghm=3,tpj=4,tv=2,qf=7,tpj=7,ztk-,mq=2,jtz-,vkn=4,cs-,xdfz-,ccf-,lxg=9,ctdbt=1,trzx-,bnhz=6,gf-,kjrc-,vr=1,msbfzl=2,vblpd=6,qxj=7,cjk-,nj=4,cjk-,sjb-,ng=4,rnsbt=4,rtj-,frgf-,tqx-,sbx=9,kmqjt=8,rfdrk=8,ctdbt=5,mldgtn=8,rfdrk=7,pnp-,phsl=3,vc-,hz-,rzjkqp=9,njvd-,qqp=7,pjfk=1,sscn=2,pkbv-,lfl-,vp=5,kr=4,ccf-,plp=8,lpd=5,mph-,rh=6,zl-,lc=2,jhhqj=5,xf=6,snpgsm-,lq-,sxlh=6,vsj-,trg=1,cl=1,vjsg-,gp-,tn-,mlcn=8,gmrrx=5,qfb-,fx-,tzjln-,tfd=2,bg-,bkxf-,qpm=3,npd-,ssmflk-,fpg-,rknz-,zngsp=1,nlcrm=4,pt-,vkz-,mq=7,mldgtn=2,gr=7,fr-,xzt-,mkj-,jmrz=5,lxmkfx-,pxvxlh=3,vbz-,nq-,sbt=8,rtj=8,ktj=3,bpq-,mq-,lqf=9,vp=7,vz=1,bb-,ndmt=4,vdf=7,mr-,fnh-,rzjkqp=7,sxlh-,bszd=1,vgslz=5,zd=2,tpnmp=6,fr=2,bgg-,lk=1,qpf-,bpq-,xt-,ps=7,pxvxlh=1,fkzq=7,mgpp-,cqzt=6,bbsk-,clg=7,ztk-,bl-,vjzt=4,tk-,plvd-,jsv-,zd=7,dm-,gxg=8,lxg=2,bgkjq-,np=4,frgf-,lh-,ssmflk-,bc-,vjsg=9,rfdrk-,jx-,pbk=7,npm=5,kjrc-,jfz=8,bz-,bfz=3,ld=6,hj=4,msbfzl=4,clg=2,vhx-,vq=1,hb=4,mmsz-,sbx-,xnmq-,cqbvs=8,hgp=5,qlf-,nfgp-,ztk=8,vnkmzj-,cmbv=9,jjd-,rz-,bl-,jfjbj=7,hxd-,tfd=6,sh-,frgf-,ctp-,sjb=7,vsh=6,br=7,vz=9,px-,lrpx-,fzm=3,tslfp=9,znfd=5,bpqv=2,mktlhp=2,hm=9,znfd-,xgk-,xdfz=7,gxx=8,vpxv=3,qfb-,qnd=1,gpg=1,txpx=4,zmlr=4,zk-,plt=5,dx-,qfb-,vqbp=2,hzlzn=3,bfz-,mgpp-,xf=1,fgmpc-,rl=9,fjg-,qpf-,tslfp-,qvlzn=3,gbsp-,scbjp=1,mktlhp-,jhl-,fdl-,jmrz=1,rc=8,dmp-,clg=2,xtl-,cqbvs-,qfb=9,lpd-,kmr=3,xh-,lh=4,spfc-,cnr=1,lqfv-,scb=7,kd-,rqx-,tpnmp=5,pjfk-,qz-,gf=7,tz=9,kjrc=5,td-,bl=3,dmp-,ccs=9,rzjkqp=5,npm-,kpn-,pljg=6,dsg-,bg-,mhh-,mvmqfm=4,xzl-,plp=7,tk=6,zn=7,njvd=6,lqfv=7,rzjkqp-,kmqjt=5,cv-,mf=7,gxx=3,pxvxlh=4,nbtq-,vqzhc=7,bpqv=2,sl=6,ccf=5,slzd-,ssmflk-,sf=3,vhx=8,mmsz-,chpn-,fzm=2,xtsd-,tvm=1,zk=9,hm=2,cv=1,lq=2,dzfqlb-,kmm-,rxv=5,txpsv-,nrc=7,ps-,gflrmd-,tv=6,gs=6,znfd-,kc=3,zzx=8,vc-,tvm-,rtj-,kqh-,dsg=9,fx=3,hm-,rsn-,lpd=1,zjvd-,nq=6,hgp=3,vqbp=5,jzxp=5,pxn-,js=4,zthrd=3,nj=3,znb-,ncjb-,kc-,kmr=6,lcr-,vs-,kpfr=3,jgmnxd=9,bhfh-,rv=4,ks=3,hf=9,bgg=4,fsz-,hf-,np-,zzd=8,pgd=6,kmqjt-,znb-,fb-,qlf-,zj=1,pvv-,nzq-,ng-,lmlx-,zdm=4,hvglb=9,nhsvv-,kjrc=4,hvglb=1,ctp-,qlf-,lfg-,jhhqj-,txpsv-,bxx=3,ppq=2,vhx=7,scb-,lq-,sscn=9,pljg-,gxg=2,cv=7,zm=6,hdxvhr=4,hpl-,mkj=5,zl=7,zcjvl-,xp=3,bszd-,lxmkfx=5,rgh=7,lztd-,xv=1,cjb-,rqx-,gflrmd=5,lqfv=1,fdfc=4,vblpd=6,tslfp=5,rnsbt-,tpnmp-,cmbv=6,cq=5,gk=2,zdtz=8,lhks=2,gr=2,cxq-,xzbz=7,bpqv-,cmbv=3,cqq-,bgg=2,znb=3,vkn=7,gxx-,pv-,vf=7,gbsp-,qp=6,grfxxs=2,vqc=6,lh-,msbfzl-,dfz-,fgmpc-,kmqjt=3,qrn-,pfjml-,pm-,qpf-,qg=8,vlv=4,cq=6,lq=1,tnfx=2,cgp-,lq-,vgln=7,bgh=3,ggm-,jtsdd=1,xk=2,rqx=5,zv-,mhh=2,bpq=6,fdfc=6,lmlx=7,hdxvhr=5,jgmnxd-,lvx-,vrzjf-,dtck=5,ph-,rqg=5,gf=9,nqcj-,vqzhc-,bj-,fjg-,qln-,jpc-,vnk=1,sbt-,qf=8,qrn=8,gpg-,nglvx-,dbsf-,hz=1,jfjbj-,hbmt=1,sqd=1,cl=7,bzj-,jtz-,vblpd=7,znfd=1,gpg-,drs=3,gn=7,mvmqfm-,cr=3,tpj-,ck=3,qp-,zrs-,tpj-,gcbtgm-,zv=8,lfg=8,jxj-,ftz-,zz-,fdfc-,plvd=9,spm-,fkzq-,xcq-,sqd=4,dph-,rsn=9,vjzt-,xt-,dsdm=4,qlf=3,qht=2,js-,sv-,slzd=9,spsx-,zk=1,rv-,jxj-,scb-,db-,ff=2,cq=9,nh-,fzm=1,cs-,rzjkqp=4,vx-,qp-,spm=9,tnb-,bgg-,phsl=2,lg=5,gmrrx=3,pfjml=1,psfnx-,dbsf=3,jmrz-,lztd-,vrzjf-,vkqx=8,mv-,sqd-,hrbj=8,tgqp-,sbt=6,lhks=2,vp-,mv=6,snpgsm=9,xf=3,tnb-,hl=5,vqbp=7,zd=1,fm-,hbmt=7,scb=1,txpsv=3,jf=6,rc=3,vs=7,qpx=1,sf=3,zbgdxg-,xv=7,xv-,hgp=3,nfgp-,qht=8,vblpd-,ql=9,kmr-,rtj=2,lpd-,rfdrk-,rxv=5,sbx-,rfdrk-,pgd=8,kpjqgm-,vjsg-,cgp-,fnln-,dvz=3,pbk-,mvmqfm-,lmlx-,ndmt=2,trzx=7,tnfx-,xgr-,zlcmgc=5,plvd=8,gs=5,sv=2,dk=9,vnkmzj-,vkn=3,xbx=9,kl-,psfnx=8,ppq-,vq=3,xzl-,mldgtn-,plvd=7,gcbtgm=1,sscn-,drs-,bnhz=2,lhks-,sf-,pbk-,sxlh=3,vkn=2,vqfz=9,gct=1,cmbv-,qgm=5,lg=6,tnp=6,jsv=7,mmn-,xnmq=3,vx-,fkzq=1,vqbp-,gbsp-,txpx=9,jtz-,hdxvhr=8,xk=4,xxj=3,vrc-,fjh-,pxn-,gbsp=8,hl=5,jm-,zn-,chpn-,nbtq=7,kqh-,chpn-,nnn-,hfrdk-,mp-,bgh-,ns-,vsj=3,fgmpc=1,kd-,dtck-,nh=4,frgf=3,cq-,pt-,vttk-,px-,smtd=7,ctf=8,zn=4,kl-,jjd=4,bzj=7,cnn-,mtx-,pzd=1,ssmflk=4,jgmnxd-,ccf=4,jmthd-,vnhfc=7,srp-,qxj=7,chpn-,nh=2,kkcd-,dm-,mmsz=4,fnln-,lq=6,kkc=1,bq-,nl=3,mmn-,jfz-,zf=4,sl=3,sqd=7,dtt=3,ql-,jmthd-,ndmt-,vqc=2,jjd=2,jpc=4,vrc=9,kpn-,gs-,mjz-,ftz=7,bq=5,cv-,xv=2,mktlhp=9,cmbv-,mtx=6,ggqq=7,fq-,rknz=3,xxj-,zngsp=3,rsn=5,xrb=3,vrc-,fb-,phsl-,plp-,pl=9,cr-,vpxv-,lk=4,khx-,rpgj=2,kd=7,md-,dvz-,rl-,dkz=9,fsz=8,vq-,pm-,xf=7,tv-,tk-,dz-,qqp-,bg=7,xb-,nfgp=9,ng=7,kfp=2,mp-,vbz-,lxg=5,xqv=1,npd-,pvv-,xzl-,slzd-,dmp-,jzxp-,dphx-,txpsv=7,mldgtn-,ql=2,xgk-,mv=7,rl=7,kjrc=6,rl-,jfz-,ctdbt-,tdl-,fq=6,lcr=6,hzlzn-,qpx-,nbtq-,td-,mr=8,zngsp=4,vps-,ssmflk-,djmlb=9,pxn=7,cqq-,nlcrm-,rt-,vgln=9,gn=2,nsxz-,cfnbp=2,xrb=8,ts-,bfz-,lh=1 \ No newline at end of file
diff --git a/aoc2023/src/day16/input.txt b/aoc2023/src/day16/input.txt
new file mode 100644
index 0000000..1778ec0
--- /dev/null
+++ b/aoc2023/src/day16/input.txt
@@ -0,0 +1,110 @@
+\..../.....-...|........\.|...........-..........-......|....././..........\..|...............................
+.../..|.......-............\...........-\|...............\.....|......-...........................-./.......|.
+......../.-.-....\...\-.......................................|..........-.......\.....-.........|......|.....
+....\........./..............|.............-..|.|.\.|.-......\........./..................|..........\........
+...|/.|..........................-........................|............|-..|...../\................./.../.....
+...|.|.......\...................|/..........\\....|....................-..................|..................
+..................\-|..........|.\......|........\.....\...........................-..............\.....\.....
+........./.-./..............................-..........|......|................/.............-......./...|./..
+....-...\..........-......\...............-/.....................\.........-\.........|..........|.....|......
+./............\......./..-......................../.|.-.|........................./.|......|...\.......-.-....
+...........././.............|..........-....../..............-.....\.-......-.............................-..\
+......................\.|.\..................-./.....\....|......................|..\...|.....................
+...|.-...|.............../..//....-\...-.-...........|......-....\.|-.............\....-.|.............\......
+......|.....\-....\.............|../..|......\....--................/....|..../|../.....-........../..........
+.............|.........-.../.|....................\...........................................................
+....\...\.-..-.....|.|...........-........./..../..........-.-....|....-..............-....|........|....../..
+..........|..............\..|........../..........................|.....|\.-...........-......\....../........
+...../.......|..../........-........|./\..\..\.\././.\.............--.......-..................\./......-.....
+....................//...-..........-.............|................/............./.\....../...........-.......
+.\-...|-/.......-........-...-...............\../...........................\/.....\...........\........|.....
+.............................\-......|......\../......-..........|...........|.........-.....\..|......-......
+./................/........-.......|..\..../|............................|...........|.-.|....................
+.\.....|...............-\............|.................|...././.-...\..........|...........-...|...-.....\....
+.......-..../.........\|.....................|....../..|/./|..........|.......|-.......\\./......-............
+.....................\|......../-.............\...|...........................\.....\.\.......................
+...|\.././...................|..................-.../\.-............\.-.........../............../.....\......
+.......\..................\..|../...........................\....\....\..../...\..\\./.-....................|.
+...............|./...\..........|...|....\........./......\...\.............\.\-......|......-...-........|..|
+.........-...........................-...-............\...\.\.................................-....|./........
+.-.|............-.....................-.................\..../......\....\....\....................|.......-..
+.....\.|......|..../................|......|.....-...\|../................./...................//.............
+.|.........\..../......-........-............--...................../........|.......\.....\..........-.......
+../.....|.|............-.................|\.....|....||...-..-....|/......................|.|-..-..........||.
+...-............|.-.............-.....................\.|.............\.\............\...|........|...../.\...
+\...........................\.|................................................/.|......-.......\........../..
+...................|....|.......|.-.............-..-\...-...............................|..................../
+/...../.....\............../...........|..|./...-.../...............................\........../|.........\...
+..-.......|.........../.......|......../.......\.............../..........-|..................................
+...\.\........\............|......................\........|...\..............................................
+../..........--........|....-..............\..\.............\...................-........./...../..-..........
+..................|.................../\..-..|..................\....././..|......-.................../.......
+-...\.............\..-..-.................../...|.|.........|../|./............/...../............../.........
+.|\............................-....................|......./..............................|..-|...|.\........
+-........../...-....-.......................|...\........|.......\................../.........................
+........................................................././.|..|.........\................/|........\........
+-.....\.........................|...........|..||..|......................................\...\....../.......|
+....\...|........\.........................//...........|........-.........\..........\-.....\................
+....|........|.........../........../....\........|......-../..............|...............|.........../......
+......\................-...........|.................\...../........|................-........................
+...............|......|...\............\............/.../.......-.-../............................\......|....
+............-........-..../.......................\..-./.....\...................................-\.....|.....
+...|...../......\...........\......\...\......./...........-../..|......................../...|...............
+...........................-...../....-.....//................../..........-.......|.................|..-.....
+................-...\.............\.../.../.\../...|.........-.\...../.................\.............../\...\.
+.....-..................../......................................-...-............/...........|...-..........|
+.........-..........\.\................-..\............................|...................-........./........
+...............-....../.....\...|.........\.../\.......-......|............\-.................|...-..........\
+.....\/......../../|......\......|.....--............|....../........-.../....-...-...........................
+..../....\....|.............../..|........./............-.........................................../.........
+.........../.................|....-..........................................................................\
+...-.....-./....................\..../.\\.................-.....-....|..\.....-....|..........................
+.....-..\..........|....|...........|.|....................................\.......-.../.../-.-........-.../..
+............../......./...-.......-..|.......-|..........\..............-.-....|..............\...............
+-........../.........|.......................\....-........../.........\.................../.............-....
+.......-....\.....\..................\..../-.//.....-\..........|........................../....|.....\.......
+..-./............./|..|........|...\\.........\...|......|.....\.........../.\......................\........\
+...../|.......\............../....................|.............-...........|......|....../.........../....-..
+.............-...-...|..\-.........................................|.......-.........|.........\..............
+......|......|............/.........................|.............\.............../....................|..-...
+../../|\......|..//....../......................................................./-...................../.....
+.....-........-................-.............|.-./..............|...-...../......................../..../.....
+...........\......|.............|....|.|.........../........|....................\.\......./..\.\..|..........
+.\................/....................-..............................|...........\....\.......-....../.../...
+...............|................-.....................................-..................\...............\....
+..........|\..................../............................./...............-.....-....-..|................\
+.................\.\...........................................-../......\.....-...............|...\..........
+..|....\............................................./.........|...-\.........-...\..|..........\.............
+..................................|...........-....-./-.\.-..................-............................./..
+....................................\-.....\\...../..................-............-........../........-....\..
+...........\......./...../|\..../-....|........|.|-.....-....|.....||.....|...........\..........\....|.-.....
+...\..........\./..............-........................././..........\././...-...........-............-...../
+\........\.....-..............................\................../.............-........................\..\..
+.........../.\...............-.\...-.....\............\....\......--.....\...................................\
+............\...............\.........\\....\....|......\.......-.................|...|....\.....\...\........
+.....|.....-............../............-............../.............../...................-......\...........-
+..........................-...|......\.....\.......\........-................./..........-......../.../...-/..
+../........|....\........|..../...........|...-..|..........\............\..../........-................|.\...
+..........-............./........................................-.......\.|/......./.................\.../.-.
+......................\.........................../.../...../../.......|...................|............|.....
+..............\..........-/........|/................................\...........................-............
+........\....\....../.......|.-........\........-..\.................................|.....\-.................
+........\......|.\.................-..-.../.............\..................|.../.-.............-/.............
+.|/.............-.\.........................|...|./........-...........\../...............\./.......-......\..
+..................-....|.....................-........|/.................\.........../..-.............../..\..
+......-......-.........../......................-......./...../.../.|........\.../....../............\.....|..
+...|../..................-.................\.....................\............-...........|.....|.|.........-|
+..............................-...........|..-/.................|................................../..........
+.../......../.............-./.............|...../......./...|...........\..............-..........-....|..-./.
+/..\...|...........|...........................|/................../......./......................\.....\.....
+..|.........-........|..|......-...................\.........|...........................-....................
+../...-.....-.............../...|\...\.......|.................|.\.........-...................-\.........-./.
+../..............................|.......|..............\...\......................\..........|...............
+............/....|../....../.............-............................./......./.................\............
+/.....\...../.........../.............../...-.../\.....|.....|............|....|..........\.....\..../........
+....\....-/.........................|............-...........\........\...\.....\\................\........-/.
+.....................-..-\...............././...........................\....-./......|..............\..-.....
+................./........|.......-.-....................\.-.||...-.......\./.|./.....|...-.../......./.......
+........-..-...../.......\.........................\.....././.\.../..|...../..................................
+.............|...............--.........../.|\/.....\.........................|..|.....................-......
+..........-...|.......\/...................|....../.-...-...|....................\..../.-...../..../..-....... \ No newline at end of file
diff --git a/aoc2023/src/day17/input.txt b/aoc2023/src/day17/input.txt
new file mode 100644
index 0000000..04d0721
--- /dev/null
+++ b/aoc2023/src/day17/input.txt
@@ -0,0 +1,141 @@
+111143231245512453233532231135242346643223434366453543664553534426223663625563233556655232522464453223446255523366641115221525545241115541324
+431121345255453245532513346436354562424226665435625542452543534236556535432235356366222264336444256255334564563564226352335454152333342425531
+211555234333213145543413562433332533444634432342622623343343455746676435745474465524463464332524462636562533446346254251543254415111115352424
+341511535443122253134546264233423566232562433526456565542774357646735536654673474477533643232255236632236625425666662645545552141115242422515
+341111243411143233254353542425566625642433362644332467546476655667755374563574564666444577323426235362444224643634223545235541134121215423153
+531254335432123321511666236453536252626542365563233477476436375343677375447543535337476464737335222455333555262365434346341345121543421555545
+352535514521514111243342542545234362225656644366655563365373766737565463557476566764463743673533232534423432654354532444434614515232111523231
+534444213321253145553225546453244552566243427573456456543553566474735356663557433377547454546773337365265654362565366242546625513555231514252
+323313551435534512622225362562263434433225636635664736767633535463645434646666633445555455344676663776363645426625355443264235342154354541551
+313344353445542136265245463656643456254675743474744556363764667356336334435764645543447755363434777747562523535253545462232443334115422245343
+411545355323353632256366354543644422255357345374367446347554465766367637555443653555375756736537575763375343236242446526465226534224412555332
+533131433141412662643523326542423234474465776365555735754776645376734774677646654667473753373634447774446536352326333564334433362123135411531
+512414542555163643526524526245525623733466554345447435364657576457576376563367444354735757756765547755635545232536536433564236626315454145425
+222144425355524633235543562342566454344764575745367646565574575636547773457356646456657637437547666745757773472565443652346664466335313555551
+425225555322663532264234233335563664747574765576347743444637647676737567333767356736363333744734647436646746476523664454633653546545122514442
+433432345135556643645433433353363575647663645376464776466577573557373364773353335555374554433464633534445576673653325425446624523422432115313
+331554441535436542646663554246654555367643355653745635636355676647567487764456667645455574637564434547453345476356634245324255236624234322155
+412551332642256525656556644673435575337544534765547457535765745875846744677848864748453556456475334367766655534547433255523464263563352324545
+443534155643554356242335334673736746664536333346353556577644664845484655676855576588488476647745635435535753465654355645265546422335564424541
+325113645335432555665355233555675344354467477467666744857886746774544874557756677867665777554343734443655754353756656432453432656526442431243
+435351452355523445664565747636637443475667333666457866648755647865645478687666547687547448455776553463657435344656637472443446523245236631254
+412143553424345325232454645555356743366537373758877467577647678654487674848784877787468644447756553677573465574353736576542332442522366564144
+431363252452364445356544557475337767655336557686768756474568654665465464884556855744876886546758447344734334637754557774553226363256242242651
+554256445333463534225356746736736743336763377746888675584476754588545785578747858657577787754874858864355637365443444365474546636352256656323
+425454462356554263636434334444466455765534574648745458464655777887654744458644875776467657545757755464375636667554445537457232633344456335351
+322453463334656455234546433475533746373377467777858787845857478676767845586566768464584884875677444488543533447537536376643424666645653654426
+432326546526255522353556547373665657473456445577748547665675868677547547785865454645454554774845748574876563377757437467553465624365666252336
+553526552222562635473565556657553364657548886884887656456865855666787554686645654858555566768654648745854464677634735446546732553642463664265
+664326265443345443746744735336634755665574447844755544578487644586454874856778477455686458576478578547554484667445666574665353445232224622335
+236532234245355276756476464355554554458887564887776455877644448447886868476548867546888764476866776558545547574453545467364757744326636223642
+632462455662552665443463346747745775658756746854568758745668675885889865596789855788675844755468675857556885843566367733464537666322366344223
+266666434363243576375767356665666877464755765578746575486748669688797696588866786698768646566485868545858886667435664777734463342523665555235
+443556525665656734577633335664448556655454678484454777545656666779696855688567966656964658877444685858567566545447466467443774467266252546652
+624455255224344733376335533753476658646544876564465586875955788776686876776867985856986576866568765548476654745754674775433435367623356456444
+262555462622446474437456377453868684444668468464476655987967866795876695585957798678969855857886488747765845586764675544766563666356435634332
+665624325625734563547365736536784556858567746767459867695988595777767769865658796865788965789678867667866557578674565534645577447432435556524
+333523334637534573776476636576557488766777764446687995988678876956786678875775556987997957898658565656667557575548444354657655335367544525324
+456466363423657475573575435664578688587455448765669969578697785989658879886787878568857799889578874487556756544556443334633446546536443652664
+222244452574756367757776634686545577855644575756668896567598879867997957659885755779787658957586658876446588645487856454536434636745444545545
+232636356457556536556365668745444488466474574987976697975796699686796855588666956768955895958675868455454458767755755376733663633374544556332
+332332622576377345736534646747554866678866788995569677878555787567775875779596796566579977885676656586446765845854744577365444454343372523366
+555664262474645377674577674647867577478684688557896658796655557657577765775656667969779597586797679965585456677454664556665646757366673426233
+356255527734373436547644678865777848585857997655679875687575776559878678858588867877856678657789789868858554664844468646634734744447367636636
+552366365773455644547347758554786677468775568778877797978995878598699565857955898857969565997667878757554646688678786867367546447363537255433
+234653475644663446373734847876648467867886788586887579567587799999866977967976866766799575567556897979657666685654448547664746376435346465542
+252443375445565446367565867885578575654575966679888956889877897698678786876967769856955595897679599865976488848485865647735437666446344436434
+243525237374773653566366744564464668675869676798668978579668697966669789967787689668989669967785588576658588654658478886653675446657763525423
+562444777554463656777574486488654468576556956965987679867969676669986697889777667866868559769957958968686745774765777755575354754635335676536
+264352744565456657667484888447847467598998779789689696779679766996889786776689888878996777588978666887977978585445584446655336663435446574336
+463534645476375645554684778858555786676885996565697889699888899766678879678998899799887896956567777585869788585685647484757343657653773563665
+432465634665435774545666885858845649887698657968779889688769778768696698686869888977969768555995578977568967465456666555784577674443567347654
+242537757554573534676885677655767659695959757675998797988778888678799667799866896879686987675557878578887699478448447774787663353534367754553
+524667356567664767788788786864867869567798856688887886998887976986998886686668767699776989677585877675977659745685675557555653563563733554246
+532356647776353655754665854564646466686577777586598677698878676969777768866697689778788897669979897577868888984565784456765466355374543736764
+353546744764545745656756586777658658697565657989587766697669768667797768668968778798869989666758756995866965667844757477467833575363475573665
+442363475553366336665585574875754767958869656955766897687769989798869789778887686787686676968967586798766967684684745655757855634753733757752
+663437377653673574868444644474888676596699778559668686678686966786679878697997667998668668679678775566688577957447548475848855753337766577654
+245676667643445744476584585486889868856958677757876786686678679686978889886998888999768868796876597559998755655765588557465675655453656434644
+623664534334746636755767677464487956975558566697767697896988988986888777988897867888887969667768658555778858798767857588765444464637377577456
+524435763477353755875846887578787556979997766576796978767969777889977779899788987687978888689776897659786666856748548645756774746364367376634
+252436533765577358467857485675499965699779976868778779896779686779787987877779796678799678678799677596566778799678664684774444556767456547463
+425573537536465645667877564778768875796687778666777866678866888788777997889889889698977679979667875765578958585784474754466784455733343567735
+464333643643774675646874764777889966956967776676876886799688979878878778878789889986887997868689965998667998898957544586884784556635746634644
+467634766367575447675444786885857898689798675679979967666789787898898779879998789996988787997866879557586768558865648756677648655653544434374
+343746456733555668756758766647798687656987598967767769799669777877779899879877997887788976797777786786686766555655656558576555537543536634463
+263736676335556377774776475777798578965889979797877679967769989798889889987997789799998866789986877778878665966865757677884784553474773577764
+436645433455747776854766587748677575858967897999889678767678779989877889979988889997876876767987687678559995869785556756658784533445456534364
+457333367374443446568888867558968899899755558786887989669778779799789777789789877797786878778769899759866986568874778856465478635343345547556
+653357365735437544784775777648977566996787598779866797796688878798979898888979997778969666688778767767968675685577484857666844654735677553374
+454465553543537354546566487886759755777886869789896779676678877997997979878787978898769888779699678677788756997994554564684577435566665665735
+645535635654537444576458775888989557678676898899899898879778777789998888888977799999876678677779969957869757677687688584466575575557463464574
+633446673336665785786556488457569967799656676688968667697989989999998988788999877898996869789799978989768599766594875486774675764367566653437
+365763544374353687774557856867888579757898686969676796986689878797978997979877977999799987889766778769957988885866744454548487444537747767446
+333636755475457746774775664885768689998686877878978686686998999898899898989888977798768997778786769665986876885655876855777745646444453543776
+257347366566556755557468747484878859559855958778679799887889887788997889779777777788977698668899997569799999896694654866676457747663766657374
+554664657744433558785576687586858965859676988969678669886988889998798779998998788898786688897788767697957657558568566856664764845635356777743
+437633353637643445485457545565887558959759869766978967769977997997797798898879888977777798877668879696986885979575658888674584733534445447645
+336773576566535576644748576564988895569965579877899669988897888788798979797979977997979687769689677585858655985875545766888476856753753775643
+447375436754766447678756554674875656886886797769889788989967878998987877797878888989798769897678795698885689978868887845785867854575334643545
+533774774334356485744844667888778799675896759697877967979877898888989779897787899796896869887878898896679879895846474568577556875467653377434
+526636647656677568754477458676456866878885686668989676699978797889989979777797888789689887999898765668796877998956878884644777453766767665573
+345776437655574577556784475666467865969688769689967879888899898787979977987989787869968767788798958965676985977558887786764565334636477577473
+462757555367744435776477675765555899756777555889787899796876786789979777799889999696968778897788975596967795797586768684467474533464663474556
+345335634367663334474446748788558686895898855886668998998877799988977999887787778696789977998687999799569767555576845465465587544735477547753
+352747473367547538454567786546446657585759898569988897798777688798687998988998969877688876686969789765886558558776665847888845556554375745442
+525653575563555774887556547555749798556987599756797867867689696667867966889689666776786689697968958698665787755764558846666855575573747534345
+326455665753733645448778877747875897567979969887898786977796667699978788696867677769979676996787658598765877957588784457484655764635365737434
+532467433765464655746576865775654596585859789697688867896988996977778898788669689878989769996769668658678679877544854467444775477564333674625
+335554544454457654447885484444866987787685589987766897996999779767969767678887676699997786677685669976768778997556877487444743767346766557456
+266536345774333444487446686656585797768599588595599776878699669999678767879886989896988777767965756768698777544665754856565457554453756356643
+342464363736646775655856546787754867795697769679858888796987869768899868797687697688878796789895765557688688985446585777584467466735366644363
+523237467646754656468466848574555667758689797896579777988779889977689668778896667696797676667785685755986597446645664545687753465567453354335
+323327756536477335755748475656576547887995887876985968976869696887779786776968996997867687879755599699567657755468776866885345435457655334225
+465352366554666376467456666544455546795667757799755996999978667976979767898877678768888758985566989859967794845764466677657453363336553674426
+555533553546357444765675856588657557878975766698966577867797677999988677666767968786787775798789997676876774564485686564547464355336356456634
+653433475335664753473446858774765764677666859687678977599767969767797969796977878998788799568865956576659644565846455864883376645435553556424
+565624333374353367374378478655648748848595599966858998869589999997986786677787987969558898667876766679797576857877576788664777573454645755524
+243444333564746346366668646545674655784777777596558976769676598668789667999889879766877787867797657978894768877458688756477776644647454654652
+323463545665546577475645558786854468657757569879597766865559566996799678799877666898856695986577997898647684875678677855454775654547364424426
+444345546665673463753634768476874774848587769865579789687878579978877559996587865859858789976885557859466565567686888557474764574774566345235
+463425647566774574744333678886747686865457799567576858589676667856577976986668978996686799577977886677544648876855645547444577633464636553523
+525644666573444644576675468484675575784565795957567577578956797786787796869877557895769667588675596744747766568788564546563666667763666225253
+434232334334645346434743378448585848667846577675678568857556598869978967698795766555887989895656586784848574867846777433673543643643345636354
+536245546237555656364544635858554588856888685777969769765876857989857999778897756695765797865577585676877858667674464376646773636576723344236
+563432433237543453765335674454676568784657684785679757868567556875775895977656667977959855575979944776757767668868556665477773367647645655455
+345662256237647446335653655474847777777457855878575955988896666669879768598869889768857697696556455457585858777745474363376763373677455666452
+236454255236363665663365567376855855468585857577666775857999657659868999786755866568579898667756458558654648847578447446356744353365436332433
+236656544552467767567677567448876458465585754786588555756756796978557899579678886778787886777445766574578586476464377437556375345344545245426
+662325463226374566436333654547585676688868454444785599797776865969998677956976597586658865956686866776584577484553367473533563564746536336443
+645354345344537355546665737533754846786764888785557644675696956878965869566966978688779976776866567854756646786873676654337473445524622236626
+233264254235366666736346437575764477565768544667785545578799879958588586787879788669995878745846576785646778646655574347764645533625345535563
+432433242246235746473543477553563665775475774755874587665558965695658699586897695998868747444878848474546545784334377573356763473236426645266
+243532622522636755753437535657447776765475565645845684687588454765579856966696756574665577485786546848546585774336373636476643336442355233566
+424366665443243666567346434354557355888674468846456668847655454648844584447647747545884765768788475648857654773677576566637647654653266642645
+355566553355543667644766357475663334576684855756856557474768868686854785488845464657775755684775878866867574456477457355345767654443322524456
+252226355555353432774774553656764464764766745687577646548754448444648855656476668476765857676478568588685475446655746336375532535436262246655
+124465325536222534633336746764356663557877585584548488677874547445477547864878867577864565556567445544564676546443567455743324244266455364265
+444646453636346242245546654333667346776464746865665867844474866746647865554675844644775465548557754474556375345735665646364353323526625624235
+412366252635624522466346354375765373635554864778855885678875757885648677787758444554675487467557768856743453437365564667776246434655322223525
+155662534242554334526573346673376775437747347484686774778445745547688488858484846876546748684767564753677657367475756735363326425522532252354
+111522322233565252443476336555573575463347454766857665787786477486485455577564475876657687767758584655535533636353747434645522266562523335624
+542422536235454325532645676434563747567556555574458874646877684645545674855674568675844866465685676443356746355677555555666633655263646665442
+211224626424363426643222663657775566775366634363464577678645547647756688757557454788857466767766573445336567467663545634344363446256343542532
+524353365435226556556322567464746534674443466757337368478575456847447776487687768855745786663475737763753364433366577364223462546556234245115
+351231443465264363362336352643774674346454366777533445747664448478677857785488484766644654674764373357565474433475733244565424353322356533151
+554223355636366655362352555655373675564737667663367637476378475656775876558465484467733734736556746773634646373557532336625245362343245314352
+415315224565323443623244633253477545773643635677437734464354663476745457476448456747555563574755374344343366743744432254533234544233652442452
+155321252324634365262226535534446766435373535475553354733776334766573455373756333733573667436757467643766753335642442322554323423224452212311
+554231145244425252354633334356244765663464645674467736446536735636374435547767747353673645457676564473344375654424643234566252323463342424331
+145124531215355646265623243325355765435544464565637674665536435365374465373674364755336673456445565567547775765322264364462642335223541214445
+245544533254142563235523522653435334444477535443567574737475663654776577746444777346766467745333753447653577332363336365532325543231234334451
+251214311244114545554462446423624626676363375354453335776637374775465676343453547674544736356577777464764476336235452444566243644313151353524
+251353112524455635524245344436546325534376365643536356555677555675344355745373347466346575334347466467665642344265334364324562252124525455152
+454211332313421263343625436544345634543275377555633667545444553367537367674333374344744754673653556564665546434666555266442463652431455221541
+115242354251513424524244565345324542344352356476443353667354646467467637463545337377445445357757536673532523352342633456335464421222514545231
+234551552324343221533222663526446236435634463664377555475474346673535434445744753657775466665644563245222634266653436345463353354354144115325
+325412113545232114263462446356336532466543425623356673677337363765363633556375433575757664356773345344465345555625252465465324322523535532422
+533444522324551243515564322652262342524325235554667764445446656633535736363765574763563335776423624463325533625243355442245443123534323312511
+334123531454531311142443565534562563644542436563665634765457377675756443636777543663643633363324553544365344443234345365224343523341515544422
+425513541335541443232314324425223643632666545263242622235765443475754557635364446664563322663626426463256624543536634556155552222222255121512
+443141524454451431355221565364643463663664635262463364522342652467643777543675336434624463452333536354565653344664465611411152424331223125543 \ No newline at end of file
diff --git a/aoc2023/src/day18/input.txt b/aoc2023/src/day18/input.txt
new file mode 100644
index 0000000..0e3c331
--- /dev/null
+++ b/aoc2023/src/day18/input.txt
@@ -0,0 +1,676 @@
+L 7 (#1dc5f0)
+U 6 (#4497e3)
+L 3 (#3b21c0)
+U 3 (#3d8523)
+L 9 (#58e7b2)
+U 8 (#35d213)
+L 10 (#329390)
+D 3 (#1302b3)
+R 7 (#07f802)
+D 8 (#38fbd3)
+L 7 (#6d0e72)
+D 6 (#2c2493)
+L 5 (#38b7d0)
+U 6 (#2ab7b3)
+L 2 (#0ce560)
+U 6 (#2ab7b1)
+L 2 (#2f6940)
+U 2 (#2a5a83)
+L 3 (#477150)
+D 11 (#0baea3)
+L 4 (#3899c0)
+D 3 (#34a803)
+L 5 (#55c0d0)
+U 9 (#328483)
+L 2 (#460290)
+U 5 (#48cfd3)
+L 4 (#1e3150)
+U 5 (#3b7ea3)
+L 7 (#2c0a10)
+U 11 (#51d803)
+L 4 (#39fe80)
+U 3 (#51d801)
+R 10 (#2938e0)
+U 2 (#1c17f3)
+R 4 (#0df9a0)
+U 3 (#579691)
+L 8 (#354a50)
+U 4 (#3d0131)
+L 6 (#1029b0)
+U 7 (#0c19b3)
+L 3 (#5f48c0)
+U 2 (#0c19b1)
+L 4 (#15ff10)
+D 9 (#0f08b1)
+L 5 (#1c8160)
+U 9 (#573b71)
+L 6 (#2d58e0)
+U 3 (#479121)
+L 4 (#1c7bb0)
+U 8 (#34d583)
+L 10 (#416f10)
+D 5 (#34d581)
+L 7 (#59af90)
+U 5 (#24a821)
+L 9 (#196ca2)
+U 6 (#1f89d3)
+L 4 (#6b4812)
+U 2 (#1f89d1)
+L 6 (#32e5a2)
+U 8 (#5eb4c1)
+R 7 (#5bffe0)
+U 10 (#3f8051)
+R 8 (#29ac30)
+U 4 (#495a21)
+R 7 (#3b4e10)
+U 2 (#52d3a1)
+R 7 (#1e27d0)
+U 4 (#09ad83)
+R 8 (#385530)
+U 4 (#218943)
+R 3 (#0d8de0)
+U 3 (#218941)
+R 3 (#3ac220)
+U 12 (#09ad81)
+R 3 (#08aa80)
+U 5 (#33c7b3)
+R 2 (#37a350)
+U 3 (#6808c3)
+R 11 (#355310)
+U 3 (#6808c1)
+R 3 (#14fbe0)
+U 6 (#47b293)
+R 6 (#28ab80)
+U 3 (#37d873)
+R 4 (#607702)
+U 2 (#3d77a3)
+R 4 (#18a432)
+U 3 (#26ee23)
+R 10 (#0ba7e0)
+U 3 (#0b2863)
+R 7 (#604a60)
+U 7 (#477053)
+R 2 (#0a1210)
+U 4 (#2f7e63)
+R 9 (#0316e0)
+D 5 (#1372d3)
+R 10 (#382a30)
+D 3 (#2da293)
+R 3 (#100920)
+D 7 (#5267e3)
+R 2 (#66c240)
+D 4 (#1c94a3)
+L 5 (#2d7770)
+U 5 (#2c0061)
+L 7 (#4181c2)
+D 5 (#1f97c1)
+L 3 (#4181c0)
+D 4 (#2b79b1)
+R 9 (#1bcaf0)
+D 4 (#04de93)
+R 2 (#010a22)
+D 4 (#599823)
+R 3 (#010a20)
+U 6 (#189b23)
+R 4 (#38f770)
+U 9 (#452e51)
+R 3 (#2551f0)
+U 6 (#333c81)
+R 6 (#0554d0)
+U 5 (#411e13)
+L 4 (#487840)
+U 10 (#411e11)
+R 4 (#2c69e0)
+U 7 (#13c311)
+L 6 (#164330)
+U 4 (#7449a1)
+R 10 (#467570)
+U 5 (#47fcc1)
+R 2 (#13e090)
+U 5 (#2e45a3)
+R 4 (#0f97a0)
+U 9 (#129b03)
+R 3 (#46c520)
+D 9 (#11dcf3)
+R 4 (#0d0e42)
+D 4 (#05ca31)
+R 4 (#56d742)
+D 2 (#05ca33)
+R 6 (#1e5ae2)
+D 3 (#56bbb3)
+R 9 (#1ce6b2)
+D 5 (#039d83)
+R 2 (#3f1c90)
+D 4 (#198063)
+L 11 (#3cf8a0)
+D 7 (#198061)
+L 3 (#2311e0)
+D 4 (#401ab3)
+L 7 (#46c522)
+D 5 (#2d4703)
+R 6 (#0f97a2)
+D 7 (#053643)
+R 6 (#603110)
+D 12 (#2ab333)
+R 2 (#25d970)
+D 3 (#1956d3)
+R 5 (#528eb0)
+D 2 (#3a55e3)
+R 5 (#1aa8d0)
+U 5 (#29e981)
+L 5 (#133d80)
+U 8 (#559581)
+R 5 (#133d82)
+U 4 (#298e61)
+R 3 (#0ed762)
+D 5 (#481221)
+R 4 (#0ed760)
+D 9 (#3a5a61)
+R 4 (#265580)
+D 3 (#241031)
+R 3 (#2bacb0)
+D 10 (#4e8481)
+R 4 (#4f2bc0)
+D 10 (#47fcc3)
+L 3 (#15d6f0)
+D 9 (#6a0e71)
+L 5 (#3cc390)
+D 4 (#2fa353)
+L 4 (#272140)
+U 5 (#029653)
+L 3 (#428820)
+U 8 (#23f923)
+L 4 (#036c82)
+D 4 (#3315f3)
+L 7 (#663ce2)
+D 2 (#09be53)
+L 8 (#075c00)
+D 5 (#552f63)
+L 5 (#662630)
+D 2 (#3e3fb1)
+L 9 (#543310)
+D 5 (#2b6db3)
+R 8 (#06d960)
+D 2 (#2b6db1)
+R 3 (#570160)
+D 6 (#441a91)
+R 6 (#2f24e2)
+D 11 (#2ca451)
+R 7 (#5700c0)
+D 5 (#36e6f1)
+R 3 (#5700c2)
+D 8 (#374141)
+R 5 (#2b1072)
+U 11 (#489e23)
+R 5 (#456682)
+D 4 (#522e63)
+R 3 (#127202)
+D 7 (#65dc21)
+R 8 (#489d40)
+D 3 (#686b21)
+L 4 (#107ca2)
+D 7 (#2271a3)
+R 4 (#148da2)
+D 3 (#34bf71)
+R 2 (#70b522)
+D 9 (#34bf73)
+R 8 (#49a172)
+D 6 (#2271a1)
+R 3 (#138232)
+U 4 (#3e4511)
+R 4 (#0bb2b0)
+U 8 (#2958d1)
+R 5 (#1df330)
+U 3 (#23af43)
+L 5 (#4bbaa0)
+U 7 (#23af41)
+L 4 (#125270)
+U 9 (#41ec91)
+R 2 (#222ff0)
+U 5 (#2936d1)
+R 8 (#2e2310)
+D 5 (#2e05a1)
+R 3 (#0ae0c0)
+D 11 (#074021)
+R 7 (#52f6e0)
+U 2 (#074023)
+R 3 (#590720)
+U 6 (#469f01)
+R 3 (#34f792)
+U 7 (#002dd1)
+R 4 (#409522)
+D 3 (#002dd3)
+R 6 (#149f72)
+D 5 (#1cc8f1)
+R 5 (#095222)
+D 7 (#3eab71)
+R 3 (#236082)
+D 11 (#3b3d71)
+R 2 (#6e2530)
+D 3 (#0887f1)
+L 6 (#1795d0)
+U 7 (#21f2d3)
+L 6 (#194240)
+D 7 (#2e0d03)
+L 3 (#605a50)
+D 4 (#257243)
+L 8 (#0a5380)
+D 7 (#2b70c3)
+L 4 (#428fd0)
+D 8 (#5b1513)
+L 6 (#1bf3f0)
+D 3 (#341241)
+L 3 (#1f7ea0)
+D 8 (#2eda01)
+R 6 (#527980)
+D 7 (#62ec43)
+R 10 (#156e00)
+D 5 (#53ce33)
+R 4 (#3a5f20)
+D 3 (#2f3bb3)
+R 6 (#5dacd0)
+U 4 (#47f0e1)
+R 6 (#538c70)
+U 4 (#32a283)
+R 8 (#27c140)
+D 9 (#198283)
+R 6 (#1b5ba0)
+U 9 (#15de53)
+R 4 (#037d60)
+U 7 (#373ac3)
+R 7 (#282640)
+U 7 (#33c993)
+R 6 (#2f6bc0)
+U 4 (#236a23)
+R 5 (#4977b0)
+D 4 (#076301)
+R 6 (#56dc60)
+U 3 (#30afb1)
+R 2 (#720272)
+U 8 (#2b0fc1)
+R 7 (#19ac60)
+U 7 (#07ff61)
+R 3 (#585610)
+U 2 (#4969b1)
+R 7 (#56dc62)
+U 5 (#029821)
+R 9 (#60a4e0)
+U 8 (#1688a3)
+L 4 (#19a5b0)
+U 3 (#20db03)
+L 7 (#1a7950)
+U 6 (#1ab903)
+L 8 (#463660)
+U 2 (#449963)
+L 3 (#11ec80)
+D 4 (#206da3)
+L 8 (#1057b0)
+D 6 (#17ffa1)
+L 8 (#6cda70)
+D 4 (#26df51)
+L 3 (#001d70)
+U 9 (#3e42f1)
+L 5 (#55e962)
+U 5 (#138341)
+L 6 (#0c3e52)
+U 9 (#4ae8f1)
+R 8 (#0ad032)
+U 7 (#14e3b1)
+R 4 (#5a3b70)
+D 7 (#1dad81)
+R 11 (#3d8e92)
+U 6 (#441b61)
+L 6 (#20de92)
+U 10 (#55efb1)
+L 6 (#1d72c2)
+U 10 (#1469a1)
+L 6 (#21f4b0)
+U 4 (#49b921)
+L 2 (#560f10)
+U 10 (#49b923)
+L 3 (#03dc20)
+D 6 (#249e01)
+L 7 (#6859d0)
+D 4 (#0947e1)
+L 3 (#5d3fd2)
+D 11 (#2c3801)
+L 6 (#26cab2)
+D 4 (#1f5b51)
+R 13 (#0fcc92)
+D 3 (#638131)
+L 7 (#404362)
+D 2 (#6cc863)
+L 6 (#1d8d62)
+D 4 (#161423)
+L 6 (#595612)
+U 7 (#09d071)
+L 4 (#10a5d0)
+U 4 (#633011)
+L 8 (#3cddf0)
+U 3 (#3a8471)
+L 7 (#407050)
+U 7 (#00b9a1)
+L 3 (#2537e0)
+U 2 (#00b9a3)
+L 5 (#3a9220)
+U 5 (#212a31)
+L 7 (#572a62)
+U 5 (#0b0ea3)
+L 4 (#52f702)
+U 6 (#0b0ea1)
+R 6 (#077262)
+U 9 (#116db1)
+R 7 (#688352)
+U 8 (#37c5e3)
+R 7 (#23b522)
+U 3 (#37c5e1)
+R 6 (#4a4aa2)
+U 9 (#57bf21)
+R 4 (#60ae60)
+U 3 (#06dc81)
+R 3 (#47d900)
+D 4 (#587561)
+R 6 (#2940e0)
+D 8 (#1268d1)
+R 5 (#0ec482)
+D 6 (#38b6c1)
+R 6 (#59c532)
+D 8 (#2e4421)
+R 6 (#0b8022)
+U 5 (#410a61)
+R 2 (#7409d0)
+U 6 (#28e351)
+R 8 (#15d2e0)
+D 4 (#12ab01)
+R 5 (#100f80)
+D 6 (#44c953)
+R 4 (#33eef0)
+U 6 (#23c7d3)
+R 5 (#4696e0)
+U 4 (#222123)
+R 9 (#26d070)
+U 9 (#4cec13)
+R 2 (#560af2)
+U 6 (#5099a3)
+L 11 (#4b4b52)
+U 4 (#10b4e3)
+L 8 (#40e6b0)
+U 6 (#1c6173)
+L 5 (#2e31e0)
+D 6 (#3d8c01)
+L 7 (#1cc6f0)
+U 9 (#083731)
+L 4 (#463da0)
+U 8 (#1cb711)
+R 8 (#0b4110)
+U 8 (#2252b3)
+R 10 (#60b900)
+U 7 (#2252b1)
+R 8 (#0ce680)
+U 5 (#467f81)
+R 9 (#0ad0b2)
+U 2 (#359203)
+R 9 (#67bc02)
+U 9 (#359201)
+R 4 (#0653e2)
+D 3 (#281ca1)
+R 9 (#1b8ee0)
+D 6 (#0b3861)
+L 8 (#336f02)
+D 3 (#3201f1)
+L 4 (#4a85a2)
+D 7 (#111eb1)
+L 9 (#1c9c90)
+D 7 (#145011)
+L 11 (#083be0)
+D 2 (#516321)
+L 6 (#083be2)
+D 9 (#20bb21)
+R 5 (#3d8030)
+D 6 (#404031)
+R 8 (#642420)
+U 4 (#56cf61)
+R 7 (#55c610)
+D 4 (#20d1e1)
+R 9 (#1b5e10)
+D 9 (#1e85d1)
+R 9 (#361f10)
+D 3 (#3d69f1)
+R 9 (#16da12)
+D 6 (#2d6471)
+R 5 (#5d9642)
+D 3 (#4656f1)
+R 6 (#44b540)
+D 8 (#2b6131)
+R 7 (#2ce630)
+D 7 (#2b6133)
+R 3 (#61b2a0)
+D 4 (#4c2661)
+R 4 (#3b7372)
+D 8 (#01ed73)
+R 5 (#4c3962)
+D 3 (#01ed71)
+R 4 (#4ba142)
+U 9 (#4377f1)
+R 3 (#1deb32)
+U 6 (#3f3323)
+R 3 (#22b722)
+U 7 (#37bc13)
+R 3 (#1918d2)
+U 4 (#13c8b3)
+R 5 (#1918d0)
+D 12 (#3e4d83)
+R 3 (#22b720)
+D 5 (#0cefe3)
+R 5 (#2bf9f2)
+D 9 (#3122d3)
+R 8 (#41a3e2)
+D 10 (#3122d1)
+R 8 (#0b6e02)
+U 7 (#266641)
+L 4 (#5a1cc2)
+U 5 (#060d11)
+R 4 (#32ff32)
+U 7 (#446c91)
+R 5 (#319c82)
+D 3 (#446c93)
+R 7 (#1bf562)
+D 2 (#44af13)
+R 6 (#6f3132)
+D 6 (#312433)
+L 5 (#489da0)
+D 5 (#53a343)
+L 8 (#489da2)
+D 3 (#5a6673)
+R 7 (#0f0f92)
+D 6 (#01b8b3)
+L 3 (#3c6b12)
+D 5 (#725613)
+L 10 (#114b12)
+D 4 (#14ace3)
+L 8 (#30d292)
+D 9 (#1ebac3)
+L 6 (#3c4292)
+D 7 (#39e2a3)
+L 2 (#1f3882)
+D 4 (#658381)
+L 3 (#0b0252)
+D 8 (#699e71)
+L 10 (#2b4ae2)
+D 2 (#1ac903)
+L 5 (#60cef2)
+D 4 (#515ea3)
+L 5 (#4d3790)
+D 6 (#354183)
+L 4 (#398170)
+U 3 (#7163a3)
+L 10 (#398172)
+U 7 (#0608f3)
+L 8 (#4d3792)
+D 4 (#06c7a3)
+L 7 (#5819c2)
+D 5 (#17c3f1)
+L 3 (#0c8892)
+D 5 (#67f951)
+R 6 (#3ff470)
+D 12 (#397601)
+R 6 (#3ff472)
+D 4 (#4f6451)
+L 9 (#665a22)
+D 2 (#1705c1)
+L 3 (#14df92)
+D 7 (#4b40a1)
+L 4 (#1fa1f2)
+D 5 (#3b7231)
+L 10 (#063e12)
+D 7 (#2a8fb1)
+L 4 (#6b71e2)
+U 4 (#218101)
+L 4 (#2e2f52)
+U 4 (#221411)
+L 5 (#200732)
+U 5 (#0ac7e1)
+L 9 (#50af62)
+D 9 (#4b7c81)
+L 3 (#50af60)
+D 4 (#2b9d31)
+L 13 (#4766d2)
+D 5 (#25ef21)
+R 3 (#119862)
+D 2 (#517a31)
+R 4 (#3e6072)
+D 10 (#21cfa1)
+R 6 (#4437f2)
+U 12 (#30f031)
+R 4 (#036652)
+D 7 (#453c91)
+R 5 (#05ea22)
+D 10 (#2da1e1)
+R 2 (#4da5a2)
+D 2 (#2da1e3)
+R 6 (#2bffc2)
+D 9 (#453c93)
+R 9 (#4ed2d2)
+D 3 (#141b71)
+R 9 (#3ecad2)
+D 5 (#234873)
+L 11 (#3c4982)
+D 3 (#2ed113)
+L 7 (#3c4980)
+D 7 (#4a6553)
+L 8 (#49bf02)
+D 8 (#337011)
+L 9 (#2eb772)
+D 3 (#690ec1)
+L 2 (#25f0a2)
+D 7 (#62eeb3)
+L 6 (#1ae012)
+D 7 (#34e643)
+R 6 (#382a72)
+D 7 (#281183)
+L 11 (#271932)
+D 4 (#470d23)
+L 9 (#4ca812)
+D 4 (#6f1ea1)
+L 7 (#4702f2)
+D 8 (#34e641)
+L 4 (#155c42)
+D 10 (#62eeb1)
+L 7 (#3a2422)
+D 4 (#3f7ca3)
+L 9 (#39b860)
+U 4 (#5cf1c3)
+L 13 (#39b862)
+U 4 (#4751f3)
+L 4 (#322dd2)
+U 4 (#539531)
+L 5 (#4171a2)
+U 5 (#539533)
+R 9 (#075042)
+D 5 (#1e57d3)
+R 7 (#5cc952)
+U 5 (#0ac0d3)
+R 6 (#1af522)
+U 9 (#374273)
+L 4 (#2992f2)
+U 2 (#299893)
+L 4 (#267bc2)
+U 10 (#47af63)
+L 3 (#282402)
+U 4 (#06a063)
+L 5 (#5cce72)
+U 9 (#47fba3)
+L 3 (#1168e2)
+U 10 (#3b1071)
+L 4 (#178c22)
+U 3 (#42b971)
+L 5 (#178c20)
+U 8 (#1dca41)
+R 9 (#442912)
+U 8 (#5b9241)
+L 3 (#1da682)
+U 7 (#31ff23)
+L 10 (#3cd732)
+U 5 (#33bab3)
+L 5 (#159fb2)
+U 4 (#2e5d93)
+L 7 (#5f9702)
+U 4 (#5566e3)
+L 4 (#0ba292)
+U 8 (#07f963)
+L 3 (#410a02)
+U 3 (#6ace93)
+L 5 (#0913a2)
+U 2 (#21a553)
+L 10 (#3d71a2)
+D 6 (#25ff63)
+L 5 (#5285b2)
+D 8 (#3cfc73)
+L 3 (#13aba2)
+D 7 (#24a793)
+L 4 (#29e4c2)
+D 12 (#1dc4b3)
+L 5 (#3cb102)
+D 8 (#5b8433)
+L 5 (#3cb100)
+D 7 (#22d9f3)
+L 7 (#6db9c2)
+D 6 (#4cd683)
+L 6 (#083f42)
+U 11 (#09bbc3)
+L 5 (#609002)
+D 7 (#12b603)
+L 7 (#041be2)
+D 8 (#4f3823)
+L 5 (#5a3412)
+U 7 (#14de13)
+L 6 (#036ee2)
+U 5 (#442823)
+L 7 (#6c5502)
+U 3 (#2edcc3)
+L 9 (#3b6b72)
+U 8 (#321e73)
+R 7 (#48e5a2)
+U 6 (#2fbec3)
+L 12 (#44ed12)
+U 6 (#0c1893)
+R 12 (#61a8e0)
+U 4 (#073043)
+R 4 (#0d47c0)
+D 6 (#469b63)
+R 2 (#047ae0)
+D 10 (#39b7d3)
+R 3 (#2492d0)
+U 8 (#2026f3)
+R 3 (#73fb40)
+U 2 (#201333)
+R 3 (#372f72)
+U 2 (#2c6143)
+R 10 (#615ea2)
+U 4 (#355653)
+R 7 (#3876d2)
+U 9 (#080463)
+L 8 (#3af4b2)
+U 10 (#6840e3)
+L 3 (#5472d2)
+U 9 (#005683) \ No newline at end of file
diff --git a/aoc2023/src/day19/input.txt b/aoc2023/src/day19/input.txt
new file mode 100644
index 0000000..8fb7e78
--- /dev/null
+++ b/aoc2023/src/day19/input.txt
@@ -0,0 +1,766 @@
+xhs{m>3771:A,a>2552:R,A}
+smp{a<3732:R,m>1999:R,x<925:R,R}
+zkk{m<2240:R,a>3345:R,R}
+nqz{x<2056:R,a<3165:R,m>1748:A,vx}
+mm{x>486:A,m>3523:R,A}
+bg{s>3338:A,kgm}
+qf{x>537:gqx,bqz}
+lv{s<2341:sc,s>2505:rtm,xqj}
+bv{a>2574:rvm,ncd}
+ssz{a<729:A,m<3390:ld,m<3772:A,R}
+gm{a>3900:A,m>2508:R,x>744:R,A}
+ts{m<642:R,m<843:gmm,s<325:gf,A}
+rtm{x<2920:A,m>3132:R,R}
+qgz{x>2082:hvx,a<1490:A,s<3742:R,kks}
+kpf{m<2390:cm,ft}
+ghn{a>2066:A,s<3291:R,a>2028:A,R}
+mkx{s<975:R,s<1112:A,m>756:A,R}
+tg{x<3668:A,x<3835:A,ftz}
+chj{x>733:R,a>3064:R,qs}
+ndl{x>2773:R,x<2370:R,R}
+dsq{s>838:A,s>496:A,m<2191:R,R}
+jl{m>1219:A,R}
+chh{x<973:R,A}
+fxv{x<2543:R,m>3368:A,s<3567:R,R}
+qvl{m>1648:A,R}
+fpb{a>1367:R,x>2441:R,a<1220:A,R}
+tph{a<2677:tss,R}
+cnc{s>1274:A,a<3947:R,A}
+cz{m>2865:R,a<3514:rm,s>687:xsr,A}
+zzq{x>76:A,A}
+vp{x<162:A,R}
+bth{x<1859:zmq,a>2455:hq,mb}
+rm{x<1253:A,R}
+ndq{s<390:R,x<2982:A,m>3468:R,R}
+vdh{x>2464:bx,m>3276:fj,ffs}
+bjc{a>3069:R,R}
+sqk{m>3029:R,s>130:R,sln}
+xl{x<2157:A,R}
+xrs{s>3440:qgz,a<1479:qsv,xt}
+dnt{x<538:qc,m<1343:jqh,x>645:fm,jvb}
+pms{a>2603:R,A}
+lf{x>390:A,s>1617:A,A}
+dvm{s>1052:R,R}
+mnc{x>2703:R,A}
+rxt{a<595:A,R}
+pb{s<3737:ngp,x>3125:A,dbk}
+zr{a<2605:R,x<422:R,A}
+pd{s>1915:xhs,zpl}
+vm{a>2377:R,R}
+in{x<1629:dv,nfq}
+xdt{s<1791:fpb,chl}
+gg{s<393:fd,x<2091:dg,tz}
+xsr{s>1167:R,m>2006:A,a<3531:A,R}
+qs{x<719:R,x>726:R,s>2919:A,R}
+kgm{m>2140:R,s<3253:R,m>1246:A,A}
+gvv{s<3124:flg,m>3004:jxl,x>2411:vf,hfg}
+nv{m<3088:A,a>1588:R,x>3499:A,R}
+lx{s<3277:R,a>2880:R,A}
+cls{m>3314:gt,kpv}
+ct{a>3320:R,a>3189:A,s<2328:R,R}
+bqz{m<1572:rjv,x<437:R,s>1572:mzn,td}
+qm{a<1975:A,s>623:R,A}
+zx{m<3520:R,s>1981:R,a<2633:A,R}
+hbk{a<1441:A,x<2151:R,x>2450:A,A}
+zp{a>2928:A,R}
+njc{x>225:R,a>3543:A,a>3524:A,A}
+dt{s<467:R,a>3868:R,x<1448:A,R}
+qlj{a<1744:A,s>1375:A,R}
+ln{x<546:dk,x<1088:jm,s>996:sdr,grf}
+zxc{x>1220:R,a<1570:R,a<1721:R,A}
+hqv{x<1168:A,a<3325:cs,zkk}
+cfx{m<1777:R,A}
+tb{a>3324:A,a<3310:R,R}
+fx{a>2975:R,x>2219:R,A}
+rnm{m<3699:A,a>1555:R,R}
+zpl{a>2213:R,m<3703:A,R}
+zvm{s<3648:R,x>2112:R,s>3879:A,A}
+gkt{x>1247:A,m>2344:A,m<1950:R,R}
+qfz{x<37:A,A}
+dq{a<2482:A,A}
+gpj{m>2417:A,m>1980:A,tq}
+khx{s>3504:R,a>633:A,s<3211:R,A}
+kh{m>629:A,A}
+zg{a<2645:mg,s<259:sqk,x<2942:gg,md}
+sxj{m<1304:xlx,lh}
+lh{m<1742:bb,x<2813:rh,m>2090:qhd,bv}
+jxg{a>3806:A,R}
+sg{a<3432:nn,m<1550:pp,m<3113:ps,js}
+pck{m<1755:dmv,s>3255:hb,s>2954:lfz,ns}
+xqj{x>2860:A,A}
+hm{a<3006:R,A}
+bbv{a>3355:rf,s<1113:hqv,m>1976:qzk,zxk}
+rpd{s<3371:R,A}
+jzc{s>1320:A,s>1117:R,s>948:R,R}
+mjp{m<3107:db,x<3329:lsq,x>3386:jgq,R}
+chl{x>3157:A,m>2688:zq,tf}
+ffq{x<2660:hbk,s<2231:cvs,A}
+pv{x>662:bc,m>2737:fn,scz}
+rf{x>1195:A,x<1012:R,hp}
+mg{s<320:mnc,ndq}
+md{s<368:ks,a<2900:A,a>2968:A,hxd}
+rb{s<976:R,A}
+cvv{s<1568:R,s>2041:A,a>2529:R,R}
+hvx{s>3628:A,m>1706:R,m>1033:R,R}
+fhg{m>3499:R,a>2802:nm,R}
+cm{a>793:gnt,s<342:vg,dl}
+mzt{m<1547:R,A}
+cf{s>3282:A,R}
+vr{m>1574:zzp,cfl}
+vbd{x<446:R,m<2633:R,A}
+mdz{a>2230:A,A}
+dck{s<2674:R,m>1804:A,m>1642:A,A}
+dk{x>356:A,R}
+sxr{m>1197:vq,qzn}
+sl{a>3532:R,A}
+rhf{x<592:A,m<3490:A,A}
+hp{a<3393:A,a<3436:R,x<1078:A,R}
+sln{m>2771:A,R}
+hq{m>3351:A,x>1966:A,m<2756:R,R}
+bm{m<2254:R,hpt}
+vt{m<3667:R,x<1031:A,A}
+dv{a<2349:npz,a>3297:tck,x<703:gq,lm}
+ddj{m<1813:mfd,A}
+fln{s>2720:A,R}
+xft{a<198:A,a<267:R,m>3094:A,A}
+xdr{s<2440:R,m<1370:jcs,a<1346:rrl,R}
+hxc{s>3518:A,a>1208:R,x>3051:R,R}
+bc{a>3542:zb,s>1446:sr,a<3492:pjm,cz}
+lfz{a>3921:A,m>2651:A,s>3077:qj,A}
+qmk{m>2209:A,R}
+bt{m>3699:R,x<2709:R,m>3441:A,A}
+cfn{x<203:R,x<238:R,x>260:R,R}
+hbb{m>3171:R,R}
+xz{a<1217:A,m<3348:R,R}
+tz{a<2930:A,A}
+cvj{x>3663:A,R}
+kb{x<812:A,x<882:R,m>1354:R,R}
+fgc{a<3044:A,m<3797:A,a>3181:R,A}
+gz{a>2501:R,x>662:R,A}
+gs{m>2349:pbh,xc}
+cxt{m<648:A,R}
+qr{s>3439:A,s<3200:A,s>3359:R,R}
+mvk{x<310:A,A}
+rfx{a<3471:pb,jrp}
+df{a>2425:R,a>2173:A,m<2169:A,A}
+lkv{x<1956:R,m>2601:jvg,zvm}
+fgv{a>3335:R,a>2798:hck,pqd}
+tn{a>3644:R,m>3271:R,R}
+vhl{m>3441:pd,lt}
+lg{x>214:xjz,jmz}
+dkl{m>979:R,x>271:R,a<2808:A,R}
+pdp{s>2793:R,A}
+jjf{a>3211:R,A}
+tv{s<2116:sx,xsq}
+gnt{m>1411:R,x<2631:A,x>3267:A,R}
+lnj{a>2864:R,A}
+jd{x<275:cfn,s>860:jzc,mvk}
+zzd{x<1338:A,a<3957:R,A}
+xlx{m<789:jqs,dpd}
+hql{s<2258:cb,x>815:knq,x>758:vlq,chj}
+qsv{m<2600:A,cg}
+bb{a>2571:rth,m>1465:A,x<3017:R,cp}
+dz{a>2559:gs,qf}
+ps{s>3207:R,gkt}
+mf{x<611:R,A}
+gp{m>2489:zdd,x>227:R,gnc}
+hv{a<3335:R,a<3515:A,R}
+klr{x<295:A,m>520:R,m>218:A,A}
+zq{x>2372:A,R}
+zf{a>1674:R,cn}
+lm{x<1313:hgj,txn}
+npz{s>1686:rt,kt}
+qdh{a<2898:R,x>2218:R,A}
+pz{x<2285:A,A}
+hdf{m<2720:A,A}
+bmc{x>3617:rcl,hsb}
+zh{s<1038:A,a>2811:R,R}
+zfz{x>2711:R,A}
+sgr{a>3615:R,m>1350:jjj,a<3585:A,A}
+qvk{s>2967:R,m>3342:A,A}
+pqd{s<99:A,s<208:A,x<2116:R,R}
+tbd{x>3755:A,a>441:R,A}
+nn{x>1301:fln,pdp}
+hxd{m>3170:R,m<2811:R,x<3367:R,R}
+fk{x>3114:nsg,dmq}
+vzf{x>2720:ms,s>481:mhr,s<294:fgv,nqz}
+lnn{s<2149:R,x>3515:tbd,a<342:xft,zcz}
+tss{s>3258:A,A}
+sh{a>1883:qm,m>3431:A,chx}
+qj{a<3876:A,x>836:R,R}
+vl{s<2783:R,m<1099:R,x<1473:A,A}
+bkt{a>3162:A,s>3117:A,x>215:A,A}
+jh{x>101:R,s<1379:A,s<1659:R,R}
+zcp{s<611:ff,qkd}
+cr{s>772:kr,m<1018:lxl,vzf}
+ms{s>407:zt,x>3417:R,chq}
+jm{s<1028:A,R}
+bn{m<3021:vzz,m<3604:qvk,x<271:fgc,R}
+ngl{s>3536:sbr,s>3350:qdh,A}
+zsf{m>1545:A,x>1434:R,a<3918:R,A}
+ggp{s>585:R,R}
+kr{m<1070:vfc,zp}
+kks{a>1629:R,a<1563:R,a<1592:A,R}
+btt{a>801:A,R}
+jsj{s>3393:A,x<3185:R,A}
+zgx{m<855:xl,A}
+gt{x<259:R,A}
+gqx{x<621:A,a<2443:hx,gz}
+gnk{a<2992:R,R}
+vc{m>2396:xx,cl}
+hhp{m>1027:sgr,ph}
+chr{x<2230:R,x<2596:R,R}
+qkd{x>797:A,x<297:A,s<793:R,A}
+zsv{x>3189:A,s>3280:pz,x<2182:A,jxg}
+bmz{x>286:A,R}
+rcl{s<3551:R,a>1235:R,A}
+sxl{a<1497:R,x>1555:A,R}
+xmv{x<2697:shm,m<2582:bl,st}
+fd{a<2818:R,R}
+jgq{x<3411:R,R}
+zj{a<2947:A,R}
+mgb{x>2219:A,s>580:A,R}
+jjs{m>2508:pj,smp}
+mfd{s>3169:R,x>3872:R,R}
+kpn{a<3544:R,a>3555:R,R}
+lq{m>3447:A,A}
+bfq{s>1868:A,qpt}
+hlc{m>3423:rnm,a<1561:A,nv}
+zn{x<915:A,m<570:A,a>3454:A,A}
+zmq{a>2577:A,s<2162:R,a<2036:R,R}
+sqz{s<1195:A,R}
+jsd{m<1634:vs,R}
+dmq{m<1655:A,A}
+nhl{a<2744:A,A}
+mkm{s<482:A,s>608:A,R}
+rc{m>234:A,x>2208:R,m>97:R,A}
+zz{a>3346:vlc,a<2753:qqc,s>276:fx,rc}
+js{a>3452:R,m<3619:A,R}
+tj{a>1494:R,m<658:R,R}
+qhd{s<2443:mdz,znr}
+shv{m<2846:A,x>2878:A,A}
+ttn{a>3182:R,a>3140:R,x<475:R,R}
+ngp{x>3141:A,A}
+pcn{x<1006:R,s>520:A,A}
+ngq{m<1256:R,s>1251:R,a>658:R,R}
+fkd{a<3655:dd,a<3774:cfx,s>2066:qmk,fk}
+qzk{a>3335:R,R}
+dx{m<2588:zcp,a<2083:sh,x<601:rrd,fh}
+qc{x<432:zh,s>956:R,A}
+fm{s<642:R,m>2905:lq,dcp}
+rr{s>2991:xmv,ths}
+dcp{a>2785:A,s<1372:R,x>674:R,A}
+bf{s<3336:A,a<1863:A,R}
+glx{x>2156:R,nq}
+rxv{s<984:A,R}
+plp{s>2690:A,a>3040:R,x<1194:A,R}
+zdd{x<411:A,s<2583:A,s<3374:R,R}
+sbp{x>2442:R,m>802:A,a<1990:A,A}
+rzc{m>1519:R,a>2789:A,R}
+hgj{x>992:kbh,a>2782:hql,mdb}
+gc{m>3015:A,a<3333:A,x<1181:R,A}
+xh{a>3215:A,x<3863:qtm,lnj}
+jdx{a>296:hz,s>2019:A,a<185:R,R}
+ftz{a<2615:A,A}
+sr{a>3503:A,m<3116:R,vt}
+bz{m<1363:A,a<3918:R,x>347:A,A}
+lxl{m>375:ts,x>2633:ssr,zz}
+rpl{a<3086:zg,km}
+rcc{a<3086:lx,x<186:A,x<206:jjf,bkt}
+xjz{s>2664:dkl,m>1134:rzc,a<2824:klr,R}
+kf{m>2364:jp,clb}
+chs{s>2600:qd,R}
+td{a>2469:A,a>2389:A,x>480:A,R}
+st{m<3511:R,x<3456:R,s>3602:cvj,rpd}
+hmq{a>2111:A,x>1851:R,A}
+xc{x<505:zr,pl}
+th{x<582:pm,lk}
+sn{m<2549:R,s>2203:R,dlr}
+chx{m>3054:A,a<1763:R,A}
+kk{m>3497:A,a<1434:A,R}
+xj{a>2832:lkb,s<3601:A,s>3811:rbp,rfg}
+ncd{a<2175:R,R}
+dmv{x>1035:A,m<796:R,x>598:jl,bz}
+zdz{s>3645:R,x>2044:R,a<2560:R,xv}
+bj{x>1208:R,x<1157:R,m>1150:A,R}
+sbr{m<3368:R,R}
+kx{x<3147:vdh,jvl}
+kv{m>3555:bmz,x>265:sl,A}
+qd{x>1553:A,a>2834:A,s<3385:A,R}
+cxs{s>1563:cxt,x>2102:A,bs}
+lt{s<1846:A,x<3520:R,x>3795:R,nkk}
+sv{m>3685:R,a>2243:R,R}
+ft{a<963:rxt,x>2779:A,x<2244:A,lzv}
+rl{a<1094:rr,s>2736:bbb,s>1976:rhb,fr}
+jn{x<583:ttn,s<1225:A,A}
+jxl{a<2453:rxj,a>2766:ngl,zfp}
+cvs{m>285:R,A}
+jqh{a<2775:dvm,gbn}
+dg{a<2815:A,R}
+jvl{x>3689:xh,x<3456:mjp,znq}
+gnc{x<140:R,x<171:A,R}
+fkh{a<3335:R,A}
+vrm{m>937:A,m<448:R,R}
+scz{m<2202:qk,gp}
+gvq{s<123:A,m<3059:A,a<3441:A,A}
+mdb{m>1624:gpj,hf}
+xsc{x<1257:bbn,x<1486:A,sxl}
+dp{m<1786:A,a<3541:R,A}
+sf{m>773:xdr,ffq}
+dlr{x<2407:R,s>1899:R,x<2587:R,R}
+rk{x>2534:A,A}
+rn{s<2830:A,hbb}
+jvg{s>3506:A,m>2651:A,m>2621:A,R}
+hfg{m>2738:zdz,a>2232:lkv,fvs}
+lzv{s<480:A,A}
+tqf{m>2290:ssz,xb}
+vmf{m<1433:qhx,m>2129:jcz,a<970:xk,dck}
+gv{m>563:R,x>1087:bd,m<346:R,vz}
+fvs{s>3483:A,a<1973:bf,x>1995:ghn,hmq}
+tqk{m<963:R,a>2859:R,A}
+rx{x<977:nnk,bqr}
+rvm{x>3305:A,m<1917:R,R}
+clb{x>1123:R,chh}
+pm{s>967:A,vbd}
+zcz{a<501:R,R}
+fsz{a>2745:R,R}
+nfq{s<1487:jbm,a>1745:jjb,rl}
+hdh{m>3509:A,s<1411:R,m<3227:A,A}
+dgv{m>2115:A,A}
+ccf{x>582:sxr,s>2966:qr,s<2421:btt,vmf}
+kbh{x<1100:hgk,m>2034:smc,bj}
+dd{m<2080:ct,s>2201:rk,hv}
+ff{s>381:R,x<841:R,R}
+gtx{s<890:A,m<3503:A,x>2000:A,R}
+bx{m<3245:R,m>3522:zfz,x<2768:tc,R}
+cbz{s<800:kpf,vr}
+hjj{a<1141:R,s<3290:R,A}
+nnk{s<496:vls,a<1328:nt,m<2251:R,gtr}
+mhr{m>1624:R,m<1228:R,m>1458:ggp,mgb}
+grb{s>2354:A,s>824:R,s<393:R,A}
+vzz{m>2291:R,m<1985:A,A}
+dc{s<2446:A,s>2870:A,s>2640:A,R}
+cb{s>956:kb,A}
+bkv{s<917:bm,jn}
+cmn{a<1575:A,s>2325:A,s<2132:pzh,A}
+vq{x>1200:R,m<1709:A,A}
+xx{s<2987:R,s>3641:A,m<3099:gnk,A}
+skj{x<2732:pgx,x>2863:pqn,a>2109:R,A}
+qk{x<433:R,x<540:grb,s>2612:dp,mf}
+nb{a<3379:dgv,x>433:xqb,mzt}
+skd{s>85:R,a>3825:R,s>57:bsr,vj}
+bsr{a<3615:R,A}
+bqr{m<2638:A,kk}
+gmm{s<271:R,R}
+ssr{m>170:mkm,A}
+xr{x>1412:R,R}
+dpd{s>2570:rz,a<2463:ndl,m<1077:tqk,fsz}
+cg{x>2240:R,s>3092:A,s<2882:R,A}
+zt{s>605:R,m<1978:R,x<3468:A,A}
+gbn{a>2840:A,x>606:R,A}
+sk{s>627:A,R}
+xv{s<3310:A,x<1827:R,R}
+jvb{m>2641:rhf,x<598:dsq,x>615:R,nr}
+dbk{a<3270:R,s<3854:A,R}
+ld{x>1033:A,s<1042:A,A}
+hz{s>2156:A,R}
+hgm{a>3479:zsv,a>3293:jsd,bg}
+sd{s<1388:R,m<220:A,a<3336:A,R}
+ks{x<3304:R,A}
+cp{x<3510:A,s>2786:A,R}
+mc{x<138:tx,m<1731:lg,nd}
+grf{a<3910:dt,zzd}
+tm{m>2653:A,R}
+znm{x>3272:R,tj}
+qtm{a<2683:A,m<3283:R,A}
+cpj{x>523:A,m>2682:A,m<2527:R,A}
+vx{x>2368:A,A}
+kp{x>444:R,x<233:R,A}
+vlq{a>3107:tm,s>3354:A,m<2037:R,R}
+mzn{m>2863:R,A}
+zb{s>1752:R,x>1070:zgf,sk}
+pqn{m<2758:A,R}
+lsq{m<3507:A,s<957:R,R}
+krr{a<3740:R,R}
+czn{a>3163:R,m<1999:R,a<3012:A,R}
+nkk{s<2070:R,R}
+nrt{s<1315:A,x<2219:R,A}
+ds{a<1180:hjj,m<1480:hxc,pf}
+xb{x<928:R,s<680:dpt,ngq}
+mj{a<2118:R,R}
+kpv{x>329:A,A}
+dpt{x<1220:R,R}
+vls{a<1332:A,a>1469:A,R}
+cs{x>1439:R,s>709:A,R}
+tl{a>1243:jsj,ds}
+xbt{x>1513:A,fz}
+hpt{m<2917:R,m<3336:R,R}
+fr{m<1904:hdc,xdt}
+dsl{x<891:R,a<3061:A,A}
+ph{m>522:A,A}
+tck{a>3652:zdg,a<3466:vvc,m<1552:gl,pv}
+lk{x>628:A,x<605:R,x>614:R,A}
+nj{s>2734:A,R}
+khd{a>2723:hm,x<1375:lxg,a<2580:A,zx}
+vvc{x<813:nb,s<1759:bbv,a<3401:kf,sg}
+fh{m<3059:R,sv}
+rt{m<2548:ccf,bqs}
+dtv{s>2651:njc,kpn}
+db{s>1037:R,s>793:A,x<3290:A,A}
+rfg{x>2488:R,A}
+rxj{a>2073:fxv,A}
+zgf{a<3590:R,R}
+lxg{a<2574:R,m>3113:A,a>2644:R,A}
+pp{x<1117:zn,a<3445:A,R}
+hk{a<3058:A,R}
+cps{x>673:gv,a<3514:lf,dtv}
+bl{m<1269:A,s>3432:A,s>3277:A,cml}
+rhb{m<2194:sf,zjt}
+rth{s<2408:R,m>1515:A,R}
+vs{x>2539:A,A}
+znq{m>3125:R,A}
+hzc{m>1851:mv,x>716:qg,jx}
+tzb{m>3238:tg,xxd}
+jxd{a<2457:A,A}
+cn{s<3324:A,A}
+qqc{x<2085:R,m<164:A,m>259:A,R}
+rbp{m>2847:A,m<2787:A,R}
+jjj{x>876:A,a<3595:A,R}
+smc{s<1533:R,a>2843:plp,x<1198:R,pms}
+ckf{s>1717:A,s<1570:R,R}
+kl{a<2275:A,A}
+fl{s>2371:tzb,vhl}
+rz{a<2450:R,s>3365:A,R}
+rjv{s<1810:A,m>758:A,s>2893:R,R}
+hx{x<671:A,a>2389:R,x>691:R,R}
+jp{s<2734:gc,s>3506:A,R}
+bnt{m>837:A,m>433:R,m>254:R,R}
+hgk{a<2704:A,a>3062:A,nxg}
+txn{m>2615:ktj,tv}
+pgx{a>1994:R,x>2611:R,A}
+xxd{m>2723:A,s<2919:zvg,m>2567:R,vm}
+gtr{s>886:A,a<1457:R,R}
+jcz{s>2754:R,a>1065:R,a<523:A,A}
+chq{x<3072:A,x<3293:R,R}
+clz{s<3150:fkd,s>3490:rfx,hgm}
+hck{x>2194:R,s>122:A,A}
+vd{m>1534:jjs,a>3770:kmt,cj}
+qzn{x>1103:R,s<2513:A,A}
+pj{m>3377:A,A}
+tc{a>3418:R,R}
+kt{a<1141:tqf,s>1093:hzc,a<1584:rx,dx}
+gf{a<3431:A,A}
+jx{s<1412:vrm,s>1565:A,dm}
+vrl{x>386:xz,R}
+mz{a<2492:A,A}
+mkg{s>1805:vc,a>3085:bkv,a<2882:dnt,th}
+ns{a>3913:R,bdr}
+kq{s<2373:A,bt}
+jcs{s>2567:R,s<2521:A,R}
+jbm{a<2334:cbz,m<2533:cr,s<516:rpl,kx}
+pjm{m<2956:A,pcn}
+nt{a>1236:A,m<2027:A,R}
+rbf{s<846:R,m>2754:hdh,x<73:qfz,jh}
+hf{s<2598:cvv,A}
+cl{s>3154:hk,a<2910:dc,m>1368:czn,ccj}
+rh{s>2442:jxd,s<2047:ckf,s>2249:df,A}
+vj{s<31:R,a<3675:R,a<3727:R,A}
+qhx{a<1403:R,s<2780:A,R}
+hsb{s<3410:R,a<1336:A,A}
+vfc{x<2652:kh,s>1086:bjc,m>636:R,A}
+cd{s<1248:R,a>2984:R,A}
+nhf{a<3351:bk,gvq}
+jmz{x>176:R,a>2694:bnt,a>2565:R,vp}
+cfl{a>1330:sbp,s<1255:mkx,m<858:R,pqm}
+lkb{a<2993:R,m<2845:R,A}
+jjb{a>3094:clz,m<2393:sxj,x<3056:gvv,fl}
+rrd{a<2231:A,m>3181:kl,x>325:R,dkj}
+fj{m>3651:R,gtx}
+hdc{x>2461:znm,s>1764:bfq,s>1606:zgx,cxs}
+kmt{x<1020:xjj,s<2087:xr,A}
+cj{m<730:txd,x>819:A,kp}
+xqb{s<1587:rb,a<3436:R,vpg}
+xq{a<3606:R,x<329:R,R}
+tq{s<2112:A,s<3362:R,A}
+zzp{x>2975:sqz,m<2520:R,R}
+pqm{m<1122:A,s<1390:R,a>875:R,A}
+jq{x<3451:R,cf}
+xjj{s>2372:R,x<668:A,s>1023:R,R}
+tfq{s>3172:R,m>1532:R,A}
+bqs{x>919:xsc,vrl}
+thp{a<2602:R,m<2928:R,x<247:A,A}
+dkj{x>141:A,m<2971:R,A}
+pzx{x>2642:A,a<3478:A,R}
+ths{x<2809:sn,a>725:qvl,m<1362:jdx,lnn}
+qg{a>1868:mj,m>836:A,zxc}
+tx{s>1835:tph,m<2098:px,rbf}
+vf{a<2428:skj,m<2736:pg,x>2633:shv,xj}
+km{s>209:zqs,a>3504:skd,x<2757:glx,nhf}
+kj{s<3287:nj,thp}
+cml{m<1837:A,s<3096:R,a>494:A,R}
+rlc{m>474:R,m>251:A,x>2484:A,A}
+txd{s>2156:R,A}
+gl{a>3563:hhp,cps}
+ccj{m>569:A,s<2508:A,R}
+pf{m>3126:A,x>3194:R,R}
+pbh{m>3239:mm,cpj}
+zjt{a>1394:cmn,lv}
+drm{a>1592:A,R}
+bdr{a<3869:R,m>2643:A,x>1082:A,A}
+jqs{s>2614:rlc,dq}
+mv{x<623:R,qlj}
+nr{m<2107:R,R}
+zdg{a<3847:vd,s>2594:pck,ln}
+xk{s<2671:A,m>1780:R,A}
+px{s<685:zzq,s<1444:A,a<2772:R,A}
+znr{m>2244:R,a>2352:A,x<3509:A,R}
+bk{s>79:R,x<3271:R,A}
+ktj{x<1421:khd,m<3145:xbt,x>1493:chs,zj}
+hb{s>3741:R,s>3440:A,gm}
+ffs{s<1003:A,m>2845:cd,x>2032:nrt,hdf}
+dl{x<3044:R,m>1590:A,m<588:A,A}
+vg{m<1260:A,s<201:A,a>302:A,A}
+zfp{s>3617:chr,R}
+qpt{x<2038:R,s<1806:R,x>2275:R,R}
+jrp{m<1617:krr,s<3809:A,A}
+zqs{s>394:pzx,tn}
+knq{x>908:R,x<872:R,dsl}
+bbb{x<2800:xrs,a>1484:jpt,x>3526:vrp,tl}
+fz{s<1941:R,R}
+nm{a>2984:A,m>3291:A,A}
+rrl{s>2543:A,a>1195:A,a>1143:R,R}
+jpt{a>1614:zf,m<2537:jq,hlc}
+mb{s>2480:A,a>2039:R,A}
+flg{x<2119:bth,m<3180:mz,a>2238:fhg,kq}
+qlg{a>3593:R,A}
+nd{s<1985:jd,a<2754:kj,x<224:rcc,bn}
+nsg{x>3601:R,R}
+pg{a>2794:A,m>2531:A,tk}
+vpg{a<3448:A,x>601:A,m>2200:A,R}
+qq{a<3599:qlg,xq}
+mjq{m>906:A,R}
+tk{s<3534:R,A}
+tf{x<2430:A,m<2307:A,x<2765:R,A}
+bd{m>361:R,a>3529:A,R}
+xsq{a>2809:vl,a<2624:tfq,m<1412:mjq,nhl}
+bs{m<1209:R,x<1880:A,A}
+fn{a<3588:kv,a<3614:qq,s<1821:cls,rn}
+xt{m<2535:A,drm}
+pzh{x>3042:R,x>2454:A,R}
+sx{x<1429:bvs,rxv}
+vz{x<933:R,A}
+nq{m<3063:R,A}
+dm{m>867:R,A}
+sdr{s>1536:zsf,cnc}
+bvs{x<1372:A,x<1409:R,m>1611:A,R}
+zxk{m>1166:tb,m>571:fkh,sd}
+nxg{x>1061:R,x<1037:R,x>1045:R,R}
+gq{x<350:mc,a<2674:dz,mkg}
+vrp{x<3760:bmc,ddj}
+bbn{x>1096:A,m<3379:A,s>2981:R,A}
+sc{s>2125:R,A}
+vlc{s<330:R,x>2068:R,R}
+pl{s>2521:R,x<590:R,R}
+shm{m<1775:R,a<392:R,khx}
+zvg{s>2600:A,R}
+
+{x=864,m=2222,a=195,s=384}
+{x=901,m=448,a=737,s=1768}
+{x=2926,m=108,a=66,s=710}
+{x=447,m=2075,a=739,s=2}
+{x=597,m=681,a=975,s=28}
+{x=2159,m=1819,a=2019,s=618}
+{x=384,m=15,a=1695,s=142}
+{x=76,m=739,a=729,s=42}
+{x=1070,m=3064,a=2917,s=2856}
+{x=1584,m=1118,a=1134,s=1906}
+{x=23,m=7,a=309,s=260}
+{x=987,m=52,a=513,s=2353}
+{x=2128,m=133,a=1707,s=2272}
+{x=1721,m=9,a=10,s=2757}
+{x=56,m=1928,a=2447,s=651}
+{x=358,m=1514,a=208,s=2003}
+{x=991,m=160,a=1850,s=29}
+{x=135,m=900,a=257,s=1885}
+{x=1594,m=1262,a=292,s=773}
+{x=958,m=762,a=1835,s=129}
+{x=204,m=851,a=781,s=51}
+{x=393,m=77,a=65,s=1317}
+{x=102,m=2858,a=694,s=133}
+{x=1558,m=357,a=508,s=289}
+{x=185,m=111,a=305,s=2389}
+{x=877,m=2013,a=2980,s=2509}
+{x=2494,m=1224,a=54,s=939}
+{x=336,m=1421,a=2434,s=2183}
+{x=375,m=713,a=2313,s=459}
+{x=2899,m=54,a=334,s=1951}
+{x=452,m=585,a=16,s=531}
+{x=220,m=566,a=192,s=346}
+{x=1556,m=1173,a=7,s=611}
+{x=793,m=1179,a=549,s=16}
+{x=2730,m=545,a=888,s=2861}
+{x=8,m=136,a=1607,s=40}
+{x=641,m=2099,a=2295,s=745}
+{x=2342,m=100,a=1010,s=1306}
+{x=3432,m=432,a=658,s=645}
+{x=121,m=1563,a=1172,s=1807}
+{x=60,m=1124,a=859,s=595}
+{x=39,m=2653,a=1212,s=295}
+{x=1810,m=2143,a=250,s=899}
+{x=1049,m=1680,a=2472,s=66}
+{x=1305,m=645,a=1311,s=18}
+{x=32,m=1575,a=933,s=88}
+{x=2066,m=2204,a=2147,s=48}
+{x=806,m=263,a=862,s=406}
+{x=1218,m=142,a=2380,s=2080}
+{x=199,m=1608,a=815,s=504}
+{x=1355,m=844,a=312,s=186}
+{x=409,m=1271,a=2737,s=620}
+{x=652,m=409,a=315,s=1051}
+{x=2044,m=149,a=2045,s=3394}
+{x=1787,m=496,a=142,s=313}
+{x=70,m=78,a=953,s=872}
+{x=1072,m=1733,a=541,s=115}
+{x=254,m=302,a=1483,s=1537}
+{x=239,m=1242,a=929,s=15}
+{x=517,m=932,a=1899,s=844}
+{x=2926,m=364,a=595,s=1294}
+{x=1358,m=68,a=34,s=1728}
+{x=2065,m=312,a=3623,s=181}
+{x=414,m=451,a=876,s=80}
+{x=1689,m=843,a=139,s=245}
+{x=1136,m=289,a=2256,s=2537}
+{x=99,m=1094,a=980,s=382}
+{x=1610,m=751,a=456,s=143}
+{x=717,m=113,a=530,s=502}
+{x=2050,m=1025,a=431,s=48}
+{x=3411,m=87,a=306,s=2865}
+{x=1894,m=19,a=46,s=3399}
+{x=574,m=1848,a=599,s=1924}
+{x=3,m=1021,a=26,s=1166}
+{x=776,m=1882,a=1946,s=453}
+{x=1170,m=381,a=957,s=601}
+{x=1703,m=200,a=298,s=1246}
+{x=117,m=43,a=286,s=1131}
+{x=2642,m=18,a=552,s=8}
+{x=333,m=458,a=518,s=1260}
+{x=2391,m=794,a=1032,s=1156}
+{x=1439,m=629,a=1737,s=268}
+{x=70,m=465,a=603,s=1399}
+{x=312,m=648,a=875,s=785}
+{x=3106,m=348,a=45,s=198}
+{x=2991,m=18,a=1424,s=436}
+{x=397,m=1490,a=520,s=53}
+{x=553,m=232,a=2916,s=781}
+{x=1404,m=738,a=925,s=513}
+{x=757,m=619,a=442,s=43}
+{x=1747,m=924,a=11,s=430}
+{x=3644,m=201,a=693,s=33}
+{x=336,m=141,a=1473,s=2008}
+{x=1723,m=1595,a=91,s=282}
+{x=768,m=426,a=895,s=573}
+{x=312,m=604,a=12,s=361}
+{x=2900,m=23,a=748,s=578}
+{x=1100,m=116,a=2804,s=2407}
+{x=121,m=94,a=937,s=514}
+{x=61,m=2592,a=1518,s=855}
+{x=356,m=64,a=1167,s=732}
+{x=1538,m=702,a=444,s=524}
+{x=1071,m=230,a=1273,s=954}
+{x=1538,m=1389,a=963,s=681}
+{x=3560,m=407,a=606,s=1015}
+{x=276,m=534,a=14,s=2920}
+{x=122,m=1529,a=3159,s=302}
+{x=764,m=529,a=1535,s=1743}
+{x=1015,m=491,a=1323,s=1241}
+{x=831,m=1667,a=2553,s=146}
+{x=841,m=203,a=2621,s=696}
+{x=1586,m=403,a=1308,s=1892}
+{x=2119,m=47,a=446,s=124}
+{x=2321,m=2184,a=309,s=735}
+{x=44,m=99,a=2037,s=1730}
+{x=917,m=192,a=31,s=1104}
+{x=1135,m=2330,a=2073,s=1651}
+{x=1149,m=907,a=51,s=79}
+{x=299,m=330,a=2588,s=1829}
+{x=203,m=1847,a=205,s=696}
+{x=418,m=498,a=1030,s=307}
+{x=1560,m=1398,a=54,s=723}
+{x=1232,m=39,a=216,s=648}
+{x=1449,m=527,a=2553,s=39}
+{x=2579,m=154,a=208,s=1099}
+{x=213,m=1557,a=2636,s=202}
+{x=1787,m=1475,a=1407,s=1761}
+{x=1057,m=33,a=29,s=1488}
+{x=46,m=2348,a=2573,s=1457}
+{x=2080,m=352,a=247,s=97}
+{x=166,m=10,a=938,s=1203}
+{x=375,m=3545,a=21,s=2507}
+{x=1525,m=1748,a=63,s=511}
+{x=4,m=712,a=1182,s=2085}
+{x=460,m=996,a=1,s=2354}
+{x=538,m=1452,a=1066,s=2980}
+{x=328,m=488,a=2291,s=1542}
+{x=787,m=2124,a=649,s=281}
+{x=890,m=17,a=1812,s=99}
+{x=950,m=308,a=67,s=87}
+{x=792,m=500,a=64,s=546}
+{x=194,m=524,a=849,s=1060}
+{x=24,m=492,a=1727,s=1628}
+{x=3080,m=427,a=11,s=300}
+{x=910,m=2320,a=2178,s=225}
+{x=100,m=586,a=2247,s=1402}
+{x=1277,m=400,a=1053,s=11}
+{x=442,m=450,a=1063,s=1664}
+{x=1360,m=658,a=1705,s=306}
+{x=60,m=1215,a=1012,s=2971}
+{x=37,m=973,a=1351,s=2900}
+{x=755,m=1798,a=41,s=1999}
+{x=456,m=565,a=13,s=18}
+{x=1068,m=108,a=1261,s=216}
+{x=179,m=559,a=1871,s=1357}
+{x=760,m=1634,a=1753,s=502}
+{x=33,m=466,a=1114,s=112}
+{x=443,m=1297,a=280,s=1777}
+{x=2608,m=1971,a=651,s=2930}
+{x=244,m=1227,a=1578,s=15}
+{x=1063,m=635,a=2276,s=331}
+{x=321,m=1326,a=2474,s=359}
+{x=1412,m=186,a=2378,s=750}
+{x=1007,m=463,a=211,s=520}
+{x=2193,m=158,a=1966,s=952}
+{x=1047,m=348,a=37,s=88}
+{x=3034,m=1692,a=248,s=1957}
+{x=508,m=1601,a=213,s=712}
+{x=640,m=386,a=1410,s=2062}
+{x=683,m=855,a=503,s=3485}
+{x=574,m=28,a=978,s=287}
+{x=4,m=1189,a=20,s=330}
+{x=1716,m=1734,a=166,s=547}
+{x=903,m=1023,a=220,s=2002}
+{x=2105,m=2151,a=753,s=216}
+{x=357,m=1260,a=242,s=32}
+{x=382,m=1261,a=3644,s=2198}
+{x=451,m=1290,a=1901,s=446}
+{x=510,m=391,a=1064,s=1313}
+{x=1279,m=40,a=1825,s=946}
+{x=21,m=1879,a=1728,s=429}
+{x=50,m=183,a=1799,s=895}
+{x=2200,m=2092,a=827,s=1450}
+{x=230,m=1800,a=1178,s=1276}
+{x=747,m=1987,a=838,s=1589}
+{x=2113,m=613,a=727,s=26}
+{x=34,m=305,a=1750,s=1402}
+{x=394,m=3102,a=229,s=339}
+{x=247,m=1734,a=102,s=847}
+{x=819,m=1651,a=3293,s=1663}
+{x=459,m=2156,a=175,s=296}
+{x=1194,m=2195,a=324,s=297}
+{x=510,m=47,a=9,s=1406}
+{x=478,m=18,a=114,s=643}
+{x=278,m=2041,a=185,s=237}
+{x=2208,m=263,a=252,s=70}
+{x=22,m=956,a=1030,s=240}
+{x=164,m=466,a=3598,s=1158}
+{x=2901,m=267,a=108,s=455}
+{x=569,m=1421,a=1176,s=1237} \ No newline at end of file
diff --git a/aoc2023/src/day2/input.txt b/aoc2023/src/day2/input.txt
new file mode 100644
index 0000000..34a6672
--- /dev/null
+++ b/aoc2023/src/day2/input.txt
@@ -0,0 +1,100 @@
+Game 1: 1 green, 4 blue; 1 blue, 2 green, 1 red; 1 red, 1 green, 2 blue; 1 green, 1 red; 1 green; 1 green, 1 blue, 1 red
+Game 2: 2 blue, 2 red, 6 green; 1 red, 6 green, 7 blue; 10 green, 8 blue, 1 red; 2 green, 18 blue, 2 red; 14 blue, 3 green, 1 red; 8 green, 1 red, 9 blue
+Game 3: 6 green, 5 blue, 9 red; 4 blue, 1 green, 13 red; 9 green, 14 red, 1 blue
+Game 4: 14 green, 3 blue, 16 red; 20 red; 4 green, 2 red, 1 blue; 10 blue, 11 green, 18 red; 3 red, 3 blue, 6 green; 2 green, 18 red, 9 blue
+Game 5: 5 green, 4 blue; 1 red, 3 blue, 2 green; 4 green, 2 red, 15 blue; 11 blue, 8 green, 4 red; 4 red, 3 green; 4 red, 3 green, 7 blue
+Game 6: 6 blue, 10 green; 2 red, 6 green, 2 blue; 4 red, 4 blue, 1 green; 2 blue, 7 green, 2 red
+Game 7: 14 green, 3 red, 2 blue; 5 blue, 3 green, 2 red; 1 green, 3 blue
+Game 8: 7 red; 3 blue, 9 red, 1 green; 5 green, 5 blue, 7 red; 1 red, 2 blue
+Game 9: 3 green, 4 blue, 1 red; 3 blue, 12 green, 18 red; 7 green, 9 red, 8 blue; 2 blue, 10 red, 12 green; 4 blue, 1 red, 1 green; 4 blue, 6 green, 6 red
+Game 10: 2 blue, 4 green, 2 red; 7 green, 4 red; 5 red, 8 green
+Game 11: 1 blue, 10 green, 15 red; 1 blue, 2 green, 2 red; 5 green, 10 blue, 8 red; 13 red, 7 blue; 1 red, 9 green, 4 blue; 9 blue, 9 red, 8 green
+Game 12: 1 green, 10 red, 3 blue; 14 red, 1 green, 4 blue; 6 red, 3 green, 12 blue; 13 blue, 1 green, 18 red; 4 green, 14 red, 7 blue
+Game 13: 1 red, 3 green; 2 green, 1 red, 5 blue; 1 blue; 1 green, 7 blue, 1 red; 1 red, 2 green, 7 blue
+Game 14: 7 blue, 9 red, 1 green; 8 red, 2 blue; 11 red, 18 blue, 4 green; 2 blue, 3 green, 1 red; 1 green, 8 red, 9 blue; 2 blue, 8 red, 1 green
+Game 15: 8 blue, 3 green, 15 red; 13 red, 10 blue; 2 red
+Game 16: 1 green, 1 red; 1 blue, 2 green, 2 red; 1 blue, 4 red, 1 green; 3 green; 2 blue, 3 green, 4 red
+Game 17: 1 green, 3 red, 14 blue; 1 red, 2 blue, 2 green; 3 red
+Game 18: 1 red, 2 green, 8 blue; 2 blue, 14 red; 4 blue, 2 red, 2 green; 6 red
+Game 19: 2 red, 11 blue, 18 green; 3 red, 6 green, 3 blue; 7 green, 1 red, 10 blue
+Game 20: 10 red, 1 blue, 4 green; 4 green, 3 blue; 10 green, 13 red, 4 blue; 2 red, 7 green; 4 red, 3 blue, 5 green; 13 red, 1 green, 4 blue
+Game 21: 20 red, 4 green, 5 blue; 10 red, 11 green, 4 blue; 1 red, 8 blue, 14 green; 11 green, 8 blue, 15 red; 8 blue, 2 green, 13 red
+Game 22: 2 red, 11 blue, 4 green; 1 blue, 3 red, 6 green; 6 green, 1 red, 1 blue; 4 green, 7 blue, 3 red; 11 blue, 6 green, 4 red
+Game 23: 6 green, 3 red, 1 blue; 17 green, 11 red; 1 red, 2 blue, 13 green; 13 green, 19 red
+Game 24: 1 blue; 12 red, 1 blue; 1 red; 12 red, 1 green, 1 blue; 11 red, 1 blue; 12 red, 1 green
+Game 25: 12 blue, 6 red, 3 green; 8 green, 14 blue; 11 green, 5 blue, 6 red; 4 red, 12 blue, 8 green
+Game 26: 15 red, 13 green, 9 blue; 9 blue, 8 green, 7 red; 2 green, 6 red, 3 blue; 1 blue, 7 red, 3 green; 13 blue, 4 green, 18 red
+Game 27: 9 blue, 5 red; 15 red, 12 blue, 3 green; 12 red, 12 blue, 1 green
+Game 28: 18 red, 4 green; 4 green, 6 red; 1 blue, 6 green, 19 red; 9 green, 17 red; 4 green, 5 blue, 18 red
+Game 29: 7 green, 6 red, 6 blue; 6 blue, 19 red, 4 green; 4 green, 4 blue, 13 red; 5 blue, 15 red, 10 green; 2 green, 6 blue, 5 red; 8 red, 10 green, 6 blue
+Game 30: 1 green, 13 red, 12 blue; 1 red, 2 blue; 11 blue, 1 red, 1 green
+Game 31: 8 green, 18 blue, 17 red; 4 red, 8 green, 6 blue; 9 blue, 7 green; 3 green, 1 blue, 12 red; 5 red, 10 blue, 11 green
+Game 32: 17 red, 17 green, 7 blue; 18 red, 16 green; 1 blue
+Game 33: 16 blue, 3 red; 9 blue, 1 red, 2 green; 3 green, 7 blue; 1 green, 4 red; 3 green, 1 red, 8 blue; 5 blue
+Game 34: 5 blue, 8 red, 1 green; 9 red, 10 blue, 7 green; 1 green, 14 blue; 8 blue, 4 red, 10 green; 15 blue, 8 green, 7 red; 2 red, 6 green, 3 blue
+Game 35: 13 red, 9 blue; 7 blue, 16 red, 10 green; 4 red, 6 blue; 3 blue, 12 green, 7 red; 8 blue, 6 red; 10 blue, 3 green, 2 red
+Game 36: 1 blue, 9 red, 2 green; 11 red, 3 blue, 2 green; 2 green, 6 red; 8 green, 11 red, 3 blue; 4 green, 7 blue, 11 red; 9 green, 8 red, 2 blue
+Game 37: 8 green, 3 blue, 4 red; 14 blue, 10 green, 3 red; 19 green, 2 blue, 7 red
+Game 38: 2 green, 3 red, 3 blue; 3 green, 9 red; 13 blue, 8 red; 6 red, 5 green, 13 blue
+Game 39: 8 red, 5 blue; 4 green, 5 blue, 3 red; 18 red, 2 green, 6 blue; 2 green, 5 blue, 17 red; 1 green, 2 red; 5 green, 6 blue
+Game 40: 12 red, 4 blue, 1 green; 11 green, 20 blue, 4 red; 10 blue, 4 red
+Game 41: 2 green, 2 blue; 2 red, 2 green; 2 green, 2 blue, 10 red
+Game 42: 6 green, 3 blue; 2 red, 2 green, 1 blue; 3 blue, 5 green, 6 red; 6 red; 1 blue, 6 green, 12 red
+Game 43: 1 blue, 4 green; 1 blue; 2 blue, 8 red, 2 green; 2 blue, 1 red, 4 green; 1 blue, 4 red, 4 green; 4 green, 7 red
+Game 44: 8 green, 9 red; 1 red, 2 blue, 13 green; 4 blue, 8 green, 17 red; 13 red, 13 green; 1 red, 9 green; 19 red, 3 green, 3 blue
+Game 45: 10 blue, 2 red, 1 green; 6 green, 5 red, 8 blue; 3 blue, 1 red; 4 green, 10 blue, 4 red
+Game 46: 3 red, 8 blue; 6 blue, 7 green, 6 red; 6 green, 1 blue, 7 red; 8 red, 1 green, 5 blue; 9 red, 12 blue, 10 green; 7 green, 5 red, 1 blue
+Game 47: 5 red; 2 blue, 2 green, 5 red; 3 green, 7 red; 14 red, 3 green, 2 blue
+Game 48: 7 blue, 12 green, 2 red; 11 green, 10 blue, 1 red; 1 red, 13 blue, 2 green; 14 green, 2 red, 9 blue; 2 red, 12 green, 3 blue; 2 red, 7 blue
+Game 49: 4 green, 5 blue; 9 blue; 10 blue, 5 green, 2 red; 10 blue, 2 red, 2 green; 1 red, 1 green, 4 blue; 2 blue
+Game 50: 2 red, 2 blue, 7 green; 7 red, 9 green, 3 blue; 5 red, 10 green
+Game 51: 15 red, 9 blue, 4 green; 5 red, 2 blue, 15 green; 4 blue, 3 green, 20 red; 12 green, 1 red, 10 blue; 10 green, 5 blue, 13 red; 9 red, 10 green, 11 blue
+Game 52: 3 blue, 12 green, 1 red; 6 green; 1 red, 8 green; 1 blue, 1 green, 1 red
+Game 53: 10 green, 7 red, 12 blue; 9 blue, 6 green, 2 red; 8 green, 5 blue, 5 red; 7 blue, 16 green, 11 red; 6 red, 8 blue, 13 green
+Game 54: 10 green, 6 blue, 3 red; 6 green, 2 red, 8 blue; 9 blue, 11 green, 2 red; 10 green, 1 blue, 3 red
+Game 55: 4 blue, 1 red; 3 red, 7 blue; 12 red, 4 green, 8 blue; 3 green, 5 blue, 1 red; 13 blue, 12 red, 1 green
+Game 56: 12 blue, 15 green; 1 green, 7 red, 11 blue; 5 green, 9 blue, 1 red; 8 red, 5 green, 6 blue
+Game 57: 4 green, 11 blue, 18 red; 14 blue, 14 red, 16 green; 7 red, 15 green, 3 blue; 18 red, 20 green, 8 blue; 12 blue, 9 red, 16 green
+Game 58: 10 blue, 9 green, 8 red; 13 green, 6 blue, 8 red; 8 green, 4 red; 4 blue, 1 red, 18 green; 7 red, 10 green, 10 blue; 15 blue, 10 green, 3 red
+Game 59: 17 green, 2 blue, 2 red; 2 blue, 1 red, 8 green; 14 green, 1 red, 1 blue; 15 green, 3 blue, 2 red; 2 blue, 8 green, 1 red; 1 blue, 1 red, 8 green
+Game 60: 1 green, 1 blue, 1 red; 4 blue, 3 red, 2 green; 13 green; 2 blue, 2 red, 8 green; 4 red, 12 green, 4 blue; 4 green, 4 blue, 4 red
+Game 61: 3 blue, 7 red; 5 blue, 8 red, 1 green; 1 blue, 8 red; 10 blue, 2 red, 1 green; 1 green, 5 blue, 2 red
+Game 62: 10 red, 2 green; 8 blue, 7 red, 2 green; 4 green, 2 blue, 10 red
+Game 63: 1 green, 3 blue, 5 red; 6 green, 5 blue, 2 red; 3 blue, 7 red
+Game 64: 6 red, 20 blue; 4 red, 3 blue, 2 green; 3 green, 19 blue, 6 red; 2 green, 6 blue, 3 red; 13 blue, 5 green, 5 red
+Game 65: 6 red, 9 blue, 20 green; 6 red, 16 green, 4 blue; 12 red, 6 green, 5 blue
+Game 66: 2 blue, 5 red, 4 green; 13 blue, 2 green; 1 green, 6 blue
+Game 67: 4 green, 5 blue, 2 red; 1 red, 14 blue, 6 green; 1 green, 14 red, 5 blue; 18 red, 16 blue; 15 blue, 8 red, 18 green; 1 green, 18 red, 6 blue
+Game 68: 1 blue, 9 red, 7 green; 7 red, 1 blue, 6 green; 5 green, 1 blue, 8 red
+Game 69: 12 green, 3 blue, 4 red; 9 green, 8 red, 7 blue; 4 blue, 5 red, 10 green; 4 red, 5 green, 7 blue; 9 green, 4 red, 2 blue; 3 green, 13 blue, 1 red
+Game 70: 9 red, 1 green, 8 blue; 11 green, 13 blue, 12 red; 3 blue, 5 green, 8 red; 1 red, 14 blue
+Game 71: 10 blue; 2 green, 8 blue, 9 red; 5 red, 1 blue
+Game 72: 3 green, 5 blue, 5 red; 1 blue, 1 red, 2 green; 4 red, 4 blue, 1 green; 5 blue, 4 red, 1 green; 6 blue, 3 green, 5 red; 5 blue, 1 red, 4 green
+Game 73: 3 red, 1 green, 1 blue; 7 green, 2 red, 1 blue; 2 green, 1 blue, 3 red; 1 red, 4 green, 1 blue; 3 red, 5 green
+Game 74: 5 blue, 1 red, 4 green; 3 red, 2 green; 4 red, 6 blue; 2 red, 2 blue; 1 green, 4 red, 8 blue; 5 blue, 4 red
+Game 75: 3 red, 5 blue, 3 green; 9 green, 6 blue, 7 red; 2 green, 3 red, 12 blue; 14 green, 4 blue, 10 red
+Game 76: 1 blue, 7 red, 1 green; 6 red, 1 blue, 2 green; 4 red, 2 green; 3 red, 1 blue; 16 red, 1 green
+Game 77: 3 red, 10 blue, 1 green; 4 red, 7 blue, 3 green; 7 blue, 6 green, 7 red; 5 green, 15 blue, 7 red; 12 green, 5 red
+Game 78: 6 red, 10 blue, 15 green; 6 green, 11 red, 4 blue; 6 blue, 8 red; 4 blue, 7 red, 2 green; 11 green, 7 red, 11 blue; 3 blue, 14 green, 6 red
+Game 79: 14 red, 6 green, 4 blue; 13 red, 6 blue; 6 red, 13 green, 4 blue
+Game 80: 8 red, 2 blue, 8 green; 6 red, 10 green, 4 blue; 3 red, 9 green; 2 green, 8 blue, 7 red; 7 blue, 3 red, 11 green; 1 red, 12 green, 8 blue
+Game 81: 9 red, 4 blue, 11 green; 1 blue, 4 red, 2 green; 5 red; 3 blue, 2 red, 2 green; 14 red, 12 green
+Game 82: 5 green; 2 blue; 2 red; 1 blue, 2 red, 11 green; 8 green, 2 red, 1 blue
+Game 83: 3 green, 7 red, 6 blue; 7 red, 7 green, 11 blue; 7 blue, 13 green, 7 red; 12 blue, 10 red, 2 green; 1 green, 11 red, 7 blue; 12 blue, 9 red, 9 green
+Game 84: 5 blue, 1 green; 16 green, 4 blue, 8 red; 7 red, 5 blue, 16 green
+Game 85: 9 green, 20 blue, 7 red; 19 blue, 14 red, 2 green; 10 green, 2 red, 10 blue
+Game 86: 1 green, 3 red, 5 blue; 9 red, 2 blue, 6 green; 8 green, 14 red, 3 blue; 18 green, 2 blue, 7 red; 2 blue, 10 red, 14 green; 17 green, 4 blue, 12 red
+Game 87: 4 green, 8 red, 13 blue; 7 red, 13 blue, 4 green; 1 green, 8 blue
+Game 88: 9 blue, 11 red; 5 green, 7 blue, 12 red; 10 red, 2 green, 1 blue; 2 blue, 5 red, 5 green; 7 red, 6 green, 9 blue; 1 green, 10 red, 5 blue
+Game 89: 7 red, 2 green, 1 blue; 1 blue, 2 green; 6 red, 1 green; 7 red, 1 blue; 3 green, 3 red
+Game 90: 8 blue, 2 red, 3 green; 9 green, 4 blue, 3 red; 7 green, 11 blue, 2 red; 13 green, 12 blue, 8 red; 10 blue, 2 green; 5 green, 1 red, 9 blue
+Game 91: 2 red, 2 green, 4 blue; 5 blue, 2 red, 16 green; 11 green; 3 blue, 2 red, 8 green; 4 green, 3 blue
+Game 92: 8 red, 12 blue, 3 green; 11 red, 10 blue, 6 green; 14 red, 8 green, 14 blue
+Game 93: 3 green, 2 red, 3 blue; 3 green, 3 red, 1 blue; 2 blue, 16 red, 3 green; 2 green; 5 green, 2 blue, 2 red
+Game 94: 5 red, 2 green; 9 red, 3 blue; 2 green, 2 blue, 5 red; 3 blue, 8 red, 2 green; 8 red, 1 blue, 1 green
+Game 95: 3 blue, 4 green, 7 red; 7 red, 1 green, 15 blue; 6 blue, 2 green, 7 red
+Game 96: 2 blue, 1 red, 6 green; 7 blue, 8 green; 1 red, 7 green; 2 green, 14 blue, 1 red; 3 blue, 1 red, 7 green; 4 blue, 11 green
+Game 97: 2 red, 9 blue, 8 green; 3 green, 5 blue; 6 green, 1 red, 9 blue; 2 red, 13 green, 1 blue; 2 green, 2 red, 2 blue
+Game 98: 2 blue, 1 green, 1 red; 4 blue, 5 red, 1 green; 4 blue, 3 red, 2 green
+Game 99: 17 red, 2 blue, 4 green; 4 green, 8 red, 6 blue; 5 red
+Game 100: 6 red, 4 green; 3 red, 2 blue, 9 green; 1 blue, 5 green, 14 red; 1 blue, 2 red, 2 green; 9 red, 1 blue, 14 green; 2 blue, 11 green, 8 red \ No newline at end of file
diff --git a/aoc2023/src/day20/input.txt b/aoc2023/src/day20/input.txt
new file mode 100644
index 0000000..6949a60
--- /dev/null
+++ b/aoc2023/src/day20/input.txt
@@ -0,0 +1,58 @@
+%hb -> mj
+%mx -> mt, xz
+%xh -> qc
+%tg -> cq
+%kp -> xz, nj
+%mj -> jj, lv
+%cq -> jm
+%mt -> sj, xz
+&jj -> hb, lz, rk, xv, vj, vh, lv
+%rm -> bz, xq
+%hx -> bz
+%xv -> lz
+%xx -> kp, xz
+%pt -> vx
+&xz -> bq, gr, sj, rv, zf
+%vx -> gf, cv
+%xb -> xz, bq
+%xk -> gf, rd
+%lv -> zk
+&rk -> gh
+%kn -> gf, tz
+&gh -> rx
+%sj -> vp
+%jm -> vm, bz
+%rr -> rv, xz
+%tz -> rz
+%gg -> kn
+&cd -> gh
+%qc -> kh, bz
+%kb -> gf
+%vp -> xz, xx
+%fb -> bz, tg
+%rd -> cp
+%qn -> vh, jj
+%xr -> jj
+%tp -> rm, bz
+%cp -> gg
+&bz -> qx, cq, xh, fb, tg
+%qq -> pt, gf
+%xq -> bz, hx
+%gx -> jj, qv
+%bq -> rr
+%cv -> gf, kb
+%zk -> jj, xv
+&zf -> gh
+&qx -> gh
+%vh -> gx
+%qv -> xr, jj
+%lz -> qn
+broadcaster -> fb, xk, gr, vj
+%nj -> xz
+%gr -> xz, xb
+%kh -> tp, bz
+%vm -> bz, xh
+%rz -> qq, gf
+&gf -> tz, cd, rd, xk, pt, cp, gg
+%rv -> mx
+%vj -> hb, jj \ No newline at end of file
diff --git a/aoc2023/src/day3/input.txt b/aoc2023/src/day3/input.txt
new file mode 100644
index 0000000..1903642
--- /dev/null
+++ b/aoc2023/src/day3/input.txt
@@ -0,0 +1,140 @@
+............830..743.......59..955.......663..........................................367...........895....899...............826...220......
+.......284.....*............*.....$...+.....*...377..................*.......419.............488...*.......*...................*..-....939..
+....%.........976..679.461.7..........350..33.........$.380...$...151.897..........295..#......*....105.....418.............481........&....
+...992.....#......=...../........701................508...*..578........................259...331.................795..945........79........
+.........868........................*.............................17*..........348................441*852........*.....-...........@.....922
+....................*200............311..63................452.......323.#778.*....674....................680......696...372.....*..........
+.......266.......209......589.....=......*...365.........7.*...233.............755....*......644...272........697..*....*.....682..225......
+..836..........................949....607..........&....*..899...*....679.527.........331..........$....788../.....43....89.................
+........367.....328.&......%...............680...69..717.......60.......*.*............................*..........................728...264.
+........*.........*..119.253.......................................626....129...274............97...679.......752........*.......*....*.*...
+........360......471........../.........573-.702.............866...@...........*......772....../........259....*.........430....136.742.543.
+.........................../.852...............*...775...............643....455....../...........832....*.....41..535.......................
+.............-..........340.................103....*..........$...51*..................74................438......%...776...+.23*..663......
+.15.......806...............990.....................427....924............530.........=..............................*....968.....=....480..
+......#..............@914...*..............*........................%......*................................/.....406.................*.....
+....201.........79........592............70.894.....247..513+....367..$299.698......199................-.....223....../.........563....783..
+......................448........489................*.................................*....440...889...715..........351.....39..............
+.138....../766...........*.......................152.........................377....599.......*...*...........................@.............
+....%.820.......10*43.670..$87....100*244..@706..........668..319#...........................831.736....@............./..693.....321%.......
+......=...930#..................@...................493....*............152......569.................=.914....764.....9.-...................
+378$...............&.....854..505.........%........&.....124......12........117.....*591..979..76..133..........+............/..........883.
+...............602.141.....*...............770.....................*.........*................../.........874.@....../684....778............
+...........................954.....*397.........................394...........614..307*74..457..............+.514.......................327.
+........335*25.....-....31..........................................$...719.................*........6..214................878..............
+...............86*.269....*...480........................*....140..947....*..&.......................*......972..............*..364*274.....
+501-.......805..........285...*..................6....335.167...*........18...332.............741...127......+.............246..............
+......616.......752*276.....470.848..599.........*............779..=................539...961..$.........204.......-..201*.....%............
+.491.....*..521.........*94.......*.-.....&...163........285/......51..99*......474..*...-.......945.....&......839.......140...201.....$...
+....$.795..*........539.........500.......662.............................421....*...459..../.......*407.............../................471.
+...........110.......*...............252.............................%..........730......551..509.............824...230....569....48=.......
+......150...................................+..70.565=.&320.........983....155................=.....54.......%............*....@......../...
+...............972..146...........49.433..137..............................*....%..................@....................436.451..........328
+568-...@.552%....-.-................*.................957................93......74...........*........156.566../....#...........285........
+.....565..............693....443......................*....394.@58...362...................383.583.............542.38............./..890....
+...*.................*........*........&.223...........506.............=..................................300...............477........&....
+..612..459..........462....663......125....................720..............355.....253...............904......................*............
+........$................................622..............=................*...........*30.........#.$........................284........383
+............&.999....&.......................%........240....295*681.846....53.....806......793..646....626./76..737....479.........558.@...
+.........892..#.......885.....804..587*....340.........*..............%............*.........*..........*................%............/.....
+660..635...........-............./.....213........$....512.....551.............*....910........................@............................
+........*..........361..270*.....................328..............*.........853........................*.....985...965............232...948.
+..501@......................213...412$.....375..................631..916.......................254...284.........#....*..252........*.......
+...................695............................872*876..622..........-.........*..575...851*..................910.395..*....*717.248.....
+.....91.........80....*..390...........497....496............*.......@.........297..*................&....873.............946.8.........647.
+.......*.424.......108.....=.............*..................686....418.............131........600.96.327...=...561...321............343*....
+....731....*..............................938..........256..............909.......................................*.........................
+.........811...=....................680...........167...*...601.....................892..#.......142*.......151..108............201.........
+................653........879....@.*.........%...*...699..*..............726............695.870.....526.$................*8............234.
+....54....311..............=...320..619.......495.375.......926....914.........654..............*........236...$.......444.....@613.........
+...*........*......450*............................................*...786.625.......804.850.....674..........305...........................
+..593.512....517.......155.....646*239....286......+...........96..264....*......471.*......*.........314*901..............879..............
+..........................................=.....419....820......&..................+.......163....148........................*....586.......
+.....331.....................637....126.................*..147............650...............................................315....*........
+.......%......................$....../.................392....@...943..34...*......752.............................161..30.........970.521..
+.........984.412#.......-.569...@................464....................*.275..&.....#.126*506....................*.......=.168-............
+.724..................570....*.914.388.........%..$.........274.......263.......130..............102.....2....21+.268....................226
+..........776=...6........759.......*..283..309.....682......$..........................................%........................446........
+....%284.........-....#...........119....*......622...@....+............/.......929..178...........141/............../650...628.+...........
+....................440........88.........335...*.......804............968..976*....+...................$.421..431..................*.......
+.....880@.......871.....30......................249...........134....*................*...............95....-...*.....856...353...94.....963
+...............*....97..&.......989./.........*.....522+..$.....*.226.436.905......347.396.707...511..........342.....-.....*...........*...
+........936*....299.........217.&...478....931.457........62.391............&...............*..../...884*....................370........483.
+....965.....992.............*......................................371*771.............37..382...........990...391.......852................
+.......*........985.......753.&..........561.204.......................................*......................*...........@..........+935...
+......677.....................164.883...............325........951.....847....%......433....*944.50...753..344..............................
+.829.......583........429............*34......243...*.........*.............329.%........421...........*..........803..746............675...
+...*..................*....512............999.......102......398.................640................401....310.............164...452..*.....
+269........9........705....*........782....%.......................615.734....-..............289...........*.....................=....661...
+........37.#..............14.......*........../.......586.............*........623.......129........324.....601...%.....@...................
+...165................#.........861............463.......*.......361*..............356........175.....*.........906.897..716....118..#......
+.....*.............728....417.........+...395#.........443...........829.....390-....................399...............*..........+..813....
+....176..253...846......$...........719..........132............897...............334......................20...........51.....%............
+..............*....*..278................958........*.......=.................183*.......427.......766.......*..914.282......674............
+....&......344...249.....................*.....445.770.....67.....301................295*.........*....715.390...*...../...............424..
+.....541......................160.580...........#................=...........*677..............394.......*........327....739...179.360..*...
+..........=................%.....*................-954......%.............406......765..................930.....*.........../.....*.....370.
+....%.....979.379..........415...............318..........284....440../............-....133.........157......579.550................747.....
+.240..........*.....................@...........*642............*.....84.....%.331................2*...................582...=........*.....
+......=.....246....167...............704.............763........999.......781...*.....-109............126..801............*.484....632..542.
+....%..488.........@..........................$954....*../.....................779..........232................510.....149..................
+...27..........984.........*....485.....937........982..234..............225..................*..........122.............................16.
+...........473.#..........558..*.............410-...........93............#..655....846....829.....760......=...................=....+......
+.....=390..*...................624........#.................+..473..............#......=...........+...577#......$...481.......651.869.806..
+747.......543.259.../717............&...346.......948..........$...........472.............230+......=.........206......*...................
+................*........+.224/...798.........311...*..896*220...............&.+..................825....../............378...370...........
+...............485.641.674.....................*......................618.......389........................565..&674...........*............
+..........475.................=.162............461.441...................*..........652......&....508..856...........364....464.............
+...............154...452#...693....*................*.......391.........979....344..&.......814..............501.......=....................
+...............*................425....25#...........788............879...........*.....29....................&....................850...794
+393.............523...507*683..............174@..........-.............=...369....439....-.......*305.891..........952............*.........
+..........+...............................................535..911.........................*....1.........441.....-.........88...906........
+..........997...17.............779..............960...................209........545......513................*...........98...........+608..
+.....................63.968...*.........340.......*...858..339...........%.-767...+...173........47.........906............*210.............
+.............&..575..*....@.788.........*.........178.....*.......949.................+...........*.............-.....399.............@.....
+..........571....%....984............414...............$.912.....*......302.............594.240..724....341..645.......*.......=..848.642...
+....282@...........*......=......189.....138...227*.906.........70......*..................*.............=..........957...657.81../.........
+..........*...$.813.179.901.592.....*....................................7....127.............$692...............$..........*.........*.....
+.......207..91..............*.....784...872..756.........&..322..............*.........*19.........749.......548..624.694..858...512..598...
+.................+.........352...........*.....*.934..126...*.....351..........40...616.......153.....*661............*...........*.........
+...823........829...346...........821...826.304...%.......115.......*..........*...............*.............../...622...523.......606......
+...*...............*.............*...................186...........813....716@.372....16..300...489..108.....770.......................697..
+..........919...782.......912................@.........*.%485............................*..........*...............208.220....853..........
+...308......*............*......269.........539.......2.............853.......941.660.532........246.......980..357*....+.....*......./.....
+..../......32.164.......15.479.=.............................=...............*....*......................#....*......+......-.855.....415...
+.......305..../.....649....*......633...925...634............121............355....578.......14*....422..543.297....429..142................
+..960..+..............*.....536......*..@....-.......51..-.........592#..........+..............9..*........................................
+.....*......515......434............908..........189......430..................332...722..-.........450..#.........................139......
+..259......*.............................39..33.....$..................................*...159..443.....925.............743....414.&...=437.
+......58..475...........227%.......217..../...*................../...............&....506..........................63..*.......*............
+.......=......-..............993....%.........166........605....293........977+..498......%.....834...455...........*.....%....981.991......
+...........636..728...*.......*.......494...............................................205........*.@...........528....226.........#....785
+664.9..............$..9...494.272...............725*....775...$....854..........226.243..........832....637*73................165...........
+...*...340+.............@...*.......548.............405....*...768..*..............*.......81.........................10.787.$.......918....
+.......................145...265....+..........110........45.........90..299.....$........&.....696...475.-452..290....*...*..........@.....
+......+....246.108.305...................894....=............121.588......*....69...................................236..97......348........
+.......709........*...........-...........-..........411...=...*.......135........................738..383.....634*..........429.@..........
+...........%........%217......119.....................@..47.........+.......923..............606...*.......960..............-...............
+....835.....744...................546.......215.............512.....950.......%...444......&...$.833......./.........813.......400..%...48..
+........362.......898..#.......................*.732........*.............965....&.........584..................521..#...........-.995......
+....64.*.........*.....265........781..376...320.#........998...450.......%............................$...............................304..
+....-...966...875..981........742*.......*...........*276.........*...............541.....219.279..357..164...551..%717...............%.....
+...................*...786.$..........*...163.....915...........960...%...509.135*...........*................-...........%.539.............
+....666..699......179..+...612..=734..545...........................88.....&.......392...46..........483=..&.......548.135.....*.413.#620...
+...$....*....948..........................530.656....%..484....*..................*......./...741..........444......*.......150...*.........
+......................524...928..........=........858....=..562.571........117@.195..896......*......662.......148.388.............320......
+...166..48.../....-............#...159.......487.....................260...............#...713.........*.347................................
+......*.......657..837.....273.......%........*...155.................*........225..................228.....*370..../.......724.....764.....
+......654.679.................@.........-....918...................681..461.............................776......737.................+......
+...........*....859......881#............625......$...........888.........+...57...............887.$.......*............................#911
+...46*....72...&...................................102.............651........*......*530.......-..667....850..829*.869%........298.........
+......925..........892.352*........6.41....................+...160.$.....*.72..878..1.....................................738......*926..32.
+...............279.........721......*..............694....799..&......878....*................219....+...482..368$...........*../...........
+......604........*....................583*506........-...........740..........347............*....576......*................498..478.974....
+..486.-....................626..................320........&....../.................*979.=....863........497........111..............%......
+...................................538..78...*.....*......7...455.......223......939......673..........=......559-....*...834............58.
+.......644....&.......#..669+.1.......*.....782.....865......*....779..#..............110...../....937..312...........489...................
+.......*....571.....69........*.......169...................919....*.....808.................335...*.............................24*896.....
+.......233................590.553..............198=..450.........661.......*.....................15...-....................-575.............
+...........919*.....................................*.......234.........492..%...........300...........301........./866..........*..........
+...............470.....440.874...116....240........299......................27......409.......................................639.136....... \ No newline at end of file
diff --git a/aoc2023/src/day4/input.txt b/aoc2023/src/day4/input.txt
new file mode 100644
index 0000000..0391b6a
--- /dev/null
+++ b/aoc2023/src/day4/input.txt
@@ -0,0 +1,203 @@
+Card 1: 8 86 59 90 68 52 55 24 37 69 | 10 55 8 86 6 62 69 68 59 37 91 90 24 22 78 61 58 89 52 96 95 94 13 36 81
+Card 2: 6 42 98 5 17 31 13 36 63 61 | 99 88 14 20 63 5 56 33 6 21 92 13 17 7 31 93 30 74 98 15 11 36 61 42 47
+Card 3: 16 58 72 77 1 67 33 82 68 7 | 16 37 15 75 78 1 49 82 22 45 83 58 77 79 50 88 98 67 33 72 42 29 35 7 68
+Card 4: 75 35 37 6 29 54 64 57 82 4 | 8 33 27 85 84 54 75 37 4 57 70 29 64 94 17 6 38 41 82 81 71 35 47 51 19
+Card 5: 23 85 52 77 81 50 28 59 87 82 | 70 65 12 35 9 41 62 31 47 66 58 15 76 46 68 67 55 86 17 38 18 1 75 79 13
+Card 6: 77 64 13 36 68 88 16 75 25 95 | 25 64 55 58 75 66 23 16 27 68 69 88 13 9 39 42 29 65 83 97 32 89 53 96 94
+Card 7: 31 12 76 29 48 96 41 49 21 37 | 94 81 65 82 15 33 53 91 88 37 46 29 3 80 95 67 11 27 31 30 49 89 78 41 90
+Card 8: 20 5 52 31 46 25 88 95 39 83 | 36 62 48 39 69 3 81 11 61 95 43 85 34 46 5 8 13 45 10 17 2 88 70 52 89
+Card 9: 8 85 89 55 77 9 40 5 57 37 | 56 84 62 42 49 50 51 35 75 25 13 74 68 1 99 48 41 94 45 66 17 69 23 29 67
+Card 10: 74 1 7 89 97 82 75 9 11 42 | 94 71 41 30 50 58 23 81 35 6 97 57 67 85 98 10 87 43 96 77 31 8 54 72 65
+Card 11: 38 29 6 5 4 84 34 1 94 23 | 89 48 51 84 49 33 50 65 79 53 12 8 5 1 35 69 83 57 11 42 67 26 9 6 55
+Card 12: 35 83 44 75 36 65 85 87 60 72 | 8 3 91 33 59 29 56 26 21 60 80 88 25 5 51 47 46 44 41 31 62 79 76 89 55
+Card 13: 8 56 97 66 32 70 25 76 18 20 | 15 50 91 65 3 67 98 81 9 44 18 92 13 64 96 47 87 46 7 33 66 71 82 88 90
+Card 14: 37 52 63 28 19 89 44 76 98 24 | 70 13 59 31 17 84 90 6 62 19 74 36 94 1 15 12 29 95 47 92 23 67 60 58 53
+Card 15: 71 70 25 51 95 86 66 37 27 53 | 14 20 30 17 59 96 11 68 46 13 75 44 40 62 32 7 81 91 73 64 93 83 35 80 49
+Card 16: 97 4 63 22 75 73 5 52 34 26 | 33 98 64 47 90 94 28 35 43 30 73 51 7 27 10 40 97 37 34 32 22 71 63 21 80
+Card 17: 15 18 29 55 14 25 69 4 59 75 | 66 4 82 23 94 22 26 16 55 69 75 20 76 25 29 59 15 18 70 2 28 39 95 14 40
+Card 18: 26 40 70 42 37 68 25 76 56 97 | 33 97 28 13 24 50 66 53 67 84 26 68 42 56 92 40 65 76 25 32 70 93 85 37 94
+Card 19: 56 61 7 53 48 88 77 73 27 79 | 50 81 29 15 46 19 33 89 54 85 58 73 68 34 84 2 40 27 44 94 88 62 14 1 56
+Card 20: 34 89 62 72 6 30 16 53 78 2 | 2 78 73 89 85 40 47 30 34 8 60 23 72 26 62 96 6 91 29 16 57 46 59 53 94
+Card 21: 65 18 22 53 8 31 32 84 39 9 | 75 16 70 3 14 61 34 9 38 71 8 49 53 52 81 18 45 82 41 44 32 63 65 51 69
+Card 22: 44 80 76 71 36 1 50 87 23 27 | 1 76 83 67 87 68 25 80 8 23 57 29 52 4 50 64 24 44 77 45 27 32 36 73 71
+Card 23: 68 90 10 43 73 63 85 47 11 96 | 9 29 53 84 4 6 25 82 11 21 73 83 20 95 66 27 80 26 70 33 85 47 17 74 98
+Card 24: 51 68 2 69 39 86 55 70 6 54 | 72 17 14 26 91 52 96 86 66 64 51 2 92 53 36 39 89 42 40 68 55 37 6 54 7
+Card 25: 74 92 43 35 29 93 39 53 10 54 | 86 35 10 18 92 43 56 25 44 53 93 39 29 54 11 12 55 61 83 41 21 69 81 4 74
+Card 26: 80 19 99 93 76 67 70 60 39 9 | 98 2 26 95 21 49 44 9 31 58 83 46 14 99 4 78 12 56 89 71 66 29 47 64 96
+Card 27: 92 52 5 46 49 62 74 72 44 87 | 37 93 24 29 5 88 72 81 62 50 69 33 52 19 23 8 84 1 70 87 95 96 61 63 49
+Card 28: 79 80 98 59 54 45 91 16 11 4 | 80 10 98 45 78 91 1 65 12 11 4 82 88 79 54 55 8 99 59 67 68 16 25 3 70
+Card 29: 52 30 9 13 44 71 48 63 65 27 | 90 31 17 80 44 39 85 93 58 65 8 63 16 35 40 1 73 68 52 6 97 99 13 10 61
+Card 30: 12 19 35 9 82 20 72 61 50 67 | 11 84 77 14 46 29 62 28 81 98 43 12 15 72 35 99 19 97 75 1 20 7 82 60 52
+Card 31: 21 58 93 11 50 25 88 77 64 29 | 42 1 31 30 99 69 54 32 88 24 95 15 55 56 14 45 19 33 87 34 7 93 79 23 74
+Card 32: 39 87 70 22 46 95 69 3 58 80 | 85 95 24 45 84 22 37 12 33 43 93 96 27 56 70 67 91 58 10 68 69 40 97 82 13
+Card 33: 91 42 78 76 77 27 22 98 94 70 | 80 17 63 21 37 52 46 44 2 7 73 86 49 40 23 4 92 60 43 76 29 22 24 69 42
+Card 34: 11 50 70 95 32 81 26 57 7 76 | 83 64 65 46 87 56 28 98 90 11 96 40 99 3 16 12 61 19 97 76 51 92 93 34 15
+Card 35: 80 28 55 51 98 5 92 54 73 78 | 78 66 10 38 36 51 1 83 94 33 42 17 62 56 59 21 86 25 46 48 63 12 45 31 65
+Card 36: 63 76 16 74 10 14 50 73 81 35 | 3 68 1 76 62 53 67 97 13 85 28 65 32 72 34 98 57 20 71 17 64 48 8 56 44
+Card 37: 37 1 38 62 56 27 17 8 21 98 | 78 31 14 23 18 62 4 2 97 88 59 34 57 46 81 16 36 58 86 35 72 61 7 80 28
+Card 38: 56 30 92 44 33 11 16 45 72 60 | 74 86 59 87 22 81 46 32 52 21 78 10 57 1 13 85 49 75 95 29 8 38 77 54 50
+Card 39: 66 83 99 18 79 70 57 25 86 55 | 8 41 50 87 77 7 78 84 53 35 43 26 13 29 30 69 91 65 32 59 31 45 56 15 48
+Card 40: 64 46 22 83 33 38 95 75 69 89 | 82 65 45 68 75 33 69 49 22 95 89 74 53 46 38 25 83 64 8 59 81 16 94 27 60
+Card 41: 90 26 49 5 76 98 92 64 19 32 | 47 35 49 45 13 67 73 55 4 64 79 63 89 57 5 75 85 91 25 88 74 70 28 68 86
+Card 42: 45 52 92 43 76 96 4 86 53 62 | 96 53 55 18 95 44 25 45 47 66 62 2 52 60 10 3 1 37 87 92 98 70 9 86 23
+Card 43: 9 64 57 76 21 30 38 98 85 1 | 11 22 92 81 58 59 48 75 2 32 15 84 27 56 86 99 98 66 54 96 20 37 67 12 29
+Card 44: 11 41 84 1 76 6 64 8 31 44 | 11 1 33 58 55 6 84 44 70 20 64 41 90 98 72 42 8 38 4 39 76 17 18 69 31
+Card 45: 88 12 95 1 24 71 70 49 79 8 | 86 57 43 12 90 78 70 76 24 95 39 8 1 13 47 71 49 75 15 32 2 77 58 79 21
+Card 46: 84 91 96 41 17 76 9 36 81 1 | 82 5 99 19 43 20 86 69 37 44 95 41 55 65 96 70 24 47 77 15 31 36 2 79 22
+Card 47: 48 80 18 4 40 11 90 17 27 68 | 33 40 15 99 48 12 25 27 44 17 50 94 68 63 11 29 80 4 18 42 32 90 19 2 91
+Card 48: 44 30 51 97 22 57 87 17 53 11 | 35 17 81 22 11 30 75 80 74 54 79 16 78 97 89 87 51 37 43 72 53 57 27 94 23
+Card 49: 31 2 7 13 9 33 95 41 57 34 | 25 90 77 13 1 95 18 17 34 92 10 33 80 2 82 66 91 73 70 86 21 7 42 47 19
+Card 50: 16 44 77 76 23 81 47 29 62 22 | 35 27 83 47 88 76 98 64 31 86 48 42 95 67 25 44 17 51 18 26 12 1 90 99 62
+Card 51: 55 68 41 17 28 83 64 62 22 13 | 24 6 23 22 64 7 83 74 44 34 28 68 13 32 26 50 62 17 12 41 97 55 16 1 9
+Card 52: 96 79 43 83 37 25 86 24 66 34 | 79 18 6 2 64 62 86 48 65 34 29 68 9 87 76 71 3 69 61 41 40 35 37 55 32
+Card 53: 46 1 10 43 47 17 62 52 58 75 | 58 14 52 71 31 75 55 50 8 99 63 23 4 13 10 62 16 17 82 43 56 46 76 83 65
+Card 54: 75 33 27 30 87 32 68 89 44 17 | 73 28 31 97 27 9 57 14 15 20 39 82 38 36 43 58 75 4 44 30 33 80 16 48 17
+Card 55: 70 11 9 44 14 32 83 10 99 71 | 65 48 21 75 83 71 92 2 34 22 11 14 39 31 63 25 88 15 80 76 96 90 52 70 99
+Card 56: 17 38 6 13 3 67 87 64 37 68 | 41 7 53 11 5 62 93 28 65 8 56 32 1 69 47 18 82 40 20 12 80 37 89 43 2
+Card 57: 64 29 46 22 61 56 32 20 97 72 | 31 14 29 44 74 22 1 56 4 52 58 45 50 78 67 11 97 72 16 20 27 57 61 83 85
+Card 58: 62 85 13 46 79 37 99 81 91 8 | 98 17 85 23 33 94 35 2 47 20 3 11 36 96 43 46 25 60 59 10 22 55 87 58 28
+Card 59: 58 36 55 31 69 91 21 51 56 10 | 19 49 73 6 34 27 40 65 11 55 44 67 37 97 14 85 84 89 72 29 64 15 70 68 94
+Card 60: 46 40 95 45 75 74 7 38 10 81 | 32 38 4 61 78 5 39 99 86 33 2 98 83 42 11 75 27 73 81 9 54 37 40 12 80
+Card 61: 40 29 73 56 91 44 24 77 1 5 | 87 52 80 45 70 48 47 44 69 17 16 6 82 66 37 42 39 3 10 15 97 13 40 99 62
+Card 62: 54 55 29 80 70 50 97 89 33 68 | 21 3 76 73 6 42 2 91 19 18 72 92 94 11 77 32 52 8 81 48 35 16 27 12 84
+Card 63: 19 45 77 86 6 33 83 91 52 36 | 18 68 60 58 84 29 9 67 21 99 24 80 69 96 25 85 46 50 95 27 61 4 90 63 88
+Card 64: 88 23 57 8 93 17 20 42 54 51 | 12 78 82 80 85 43 73 44 84 89 15 36 30 10 25 29 7 99 61 60 86 14 26 28 83
+Card 65: 92 13 3 54 4 95 28 72 8 15 | 15 60 66 33 82 95 94 69 71 59 54 99 40 31 83 17 13 80 28 72 4 92 45 87 46
+Card 66: 1 42 10 66 94 21 46 95 73 32 | 64 99 3 86 69 71 95 78 60 28 5 19 35 85 67 7 32 16 39 66 89 42 31 43 58
+Card 67: 87 50 23 52 5 22 88 82 59 72 | 26 59 48 90 82 55 50 37 87 35 2 52 72 11 40 23 54 88 19 33 5 97 86 22 30
+Card 68: 21 89 80 14 73 61 9 7 68 48 | 18 89 38 26 32 21 79 15 14 86 44 55 95 41 80 7 9 29 73 1 13 48 68 28 61
+Card 69: 9 82 65 50 57 40 96 36 83 60 | 96 17 88 60 40 74 33 19 41 23 82 89 92 72 50 83 4 7 56 34 9 36 52 57 65
+Card 70: 40 63 61 64 3 21 52 11 66 53 | 82 42 13 30 44 72 74 83 45 70 38 33 80 8 64 48 49 73 19 51 85 47 90 84 92
+Card 71: 92 24 98 94 89 41 1 93 28 32 | 28 61 92 13 53 89 43 23 32 66 81 93 94 38 90 36 24 68 1 91 98 41 29 67 64
+Card 72: 29 61 68 1 78 69 33 45 39 18 | 81 12 36 28 73 75 18 35 42 33 95 68 3 79 39 8 24 82 87 45 11 91 23 51 1
+Card 73: 15 33 51 46 80 95 67 71 97 16 | 23 7 93 94 55 33 5 84 28 32 15 59 98 6 46 17 86 43 39 81 36 42 63 71 82
+Card 74: 95 9 16 72 30 20 41 97 45 90 | 30 72 49 66 36 9 82 98 95 16 48 57 46 86 47 90 20 85 54 74 73 4 22 60 32
+Card 75: 82 55 49 44 75 57 19 59 38 4 | 21 78 35 6 93 75 28 41 83 72 55 22 64 89 70 47 23 29 20 99 48 53 27 65 13
+Card 76: 19 31 41 50 27 43 74 21 51 44 | 24 79 71 16 49 37 60 14 8 33 52 40 98 6 34 62 56 4 10 30 39 48 99 67 22
+Card 77: 39 23 28 96 98 50 40 34 79 74 | 85 68 79 33 48 23 56 10 89 38 50 71 17 28 6 74 53 4 98 26 8 22 39 31 66
+Card 78: 80 31 82 32 70 17 68 44 22 97 | 72 6 95 57 13 94 37 44 70 46 32 69 22 56 40 15 77 88 17 82 31 47 71 18 68
+Card 79: 37 53 75 59 72 43 65 74 81 26 | 37 23 11 48 45 86 74 2 59 58 92 12 65 78 16 97 57 76 67 26 18 41 43 54 49
+Card 80: 63 41 23 39 40 10 26 93 24 73 | 30 19 74 40 49 90 22 65 78 10 24 93 73 41 51 7 61 15 29 39 63 16 64 23 37
+Card 81: 88 68 74 9 97 46 11 87 39 10 | 40 3 14 85 64 43 42 97 90 9 39 13 29 72 47 10 48 4 68 96 99 25 98 65 57
+Card 82: 81 48 21 57 65 39 12 66 95 33 | 16 33 79 85 92 52 50 34 15 22 9 45 74 17 24 63 28 72 84 62 58 77 41 64 83
+Card 83: 45 33 86 43 63 96 25 88 53 15 | 73 93 79 18 2 26 21 65 28 57 52 88 1 80 33 38 76 3 56 35 6 23 34 24 13
+Card 84: 31 74 96 40 36 99 91 92 63 10 | 78 38 59 27 84 34 31 72 19 91 12 45 57 92 32 44 70 50 10 24 87 33 49 65 61
+Card 85: 24 20 39 42 78 57 12 64 40 44 | 68 34 77 20 21 12 35 23 97 3 50 65 42 18 84 41 43 69 94 37 76 57 31 45 79
+Card 86: 51 48 14 80 3 72 92 15 35 43 | 50 69 18 76 63 30 58 19 65 16 70 55 54 12 87 62 60 68 93 83 1 44 26 98 27
+Card 87: 11 4 31 73 5 81 2 32 29 51 | 3 47 9 18 16 19 66 36 23 70 91 64 69 87 51 84 43 65 35 42 63 72 82 54 93
+Card 88: 94 10 52 17 78 45 99 66 8 81 | 11 31 71 59 41 88 67 30 47 98 33 21 37 15 53 20 36 58 57 91 39 28 49 70 86
+Card 89: 28 68 50 39 98 57 78 71 11 48 | 95 67 79 86 53 17 66 60 77 6 44 54 19 31 74 80 63 99 47 12 91 21 70 8 10
+Card 90: 36 90 94 26 59 84 63 38 48 39 | 69 56 39 88 89 97 26 38 83 55 87 13 33 68 95 94 18 48 36 44 59 84 63 90 66
+Card 91: 89 3 61 68 53 85 66 81 11 78 | 29 10 81 58 22 47 19 3 36 98 61 85 89 78 39 17 50 53 11 66 68 24 4 86 25
+Card 92: 57 5 56 91 64 38 89 47 55 74 | 73 51 48 19 57 98 64 9 74 65 53 47 54 72 69 38 56 1 21 6 91 40 55 5 89
+Card 93: 6 86 18 53 9 82 70 81 89 26 | 21 69 75 10 8 86 89 70 47 23 78 96 98 53 6 9 2 81 31 56 39 55 18 1 42
+Card 94: 86 78 79 57 3 2 5 69 30 53 | 80 2 53 90 3 30 48 79 5 78 19 35 62 59 97 56 13 12 70 86 10 69 51 55 57
+Card 95: 64 51 15 84 25 94 88 80 20 33 | 1 90 50 47 32 15 20 51 84 65 64 55 39 94 19 66 40 25 88 43 80 34 29 3 92
+Card 96: 83 88 94 87 79 45 49 91 99 33 | 91 53 72 37 87 40 26 88 33 49 89 99 24 59 94 52 75 83 79 71 62 50 92 28 6
+Card 97: 51 91 36 6 68 9 97 78 39 80 | 18 97 68 34 91 61 78 3 23 84 8 16 36 96 65 99 59 80 58 90 14 32 1 41 74
+Card 98: 92 41 9 7 52 86 83 40 8 63 | 47 17 14 35 34 22 19 52 79 7 81 92 1 82 93 73 25 58 60 39 59 27 3 16 41
+Card 99: 72 47 22 4 62 58 31 91 34 50 | 49 65 94 71 82 25 24 9 64 62 50 60 14 84 16 93 1 46 8 19 47 44 21 10 11
+Card 100: 96 18 53 37 54 98 30 84 58 45 | 30 59 89 23 8 35 85 6 36 54 37 17 92 79 27 39 4 61 11 80 19 58 72 51 47
+Card 101: 67 26 23 99 78 60 55 82 83 11 | 60 22 91 21 18 29 67 62 34 93 56 59 49 52 38 79 28 11 17 77 76 20 2 99 92
+Card 102: 28 94 4 54 77 42 17 44 59 48 | 24 13 61 6 5 83 50 77 76 37 90 71 79 47 8 98 41 75 59 70 89 16 30 17 45
+Card 103: 65 69 32 77 64 99 24 71 73 90 | 20 26 72 17 16 46 86 2 28 13 88 45 5 70 95 55 33 65 49 68 50 58 85 83 22
+Card 104: 78 17 88 26 65 79 8 18 47 25 | 31 86 76 30 84 44 62 97 81 42 14 72 25 32 82 5 54 69 98 52 68 13 92 3 58
+Card 105: 72 63 74 24 23 67 34 26 50 73 | 11 70 76 89 84 92 79 33 82 44 71 48 35 8 59 14 93 15 29 18 55 3 38 77 28
+Card 106: 36 40 51 81 60 96 34 49 85 89 | 72 15 7 40 60 97 68 52 36 55 87 96 85 89 49 61 78 34 37 27 76 5 51 81 12
+Card 107: 56 6 20 66 35 45 14 19 62 52 | 15 27 93 17 77 19 35 43 80 72 47 88 8 70 71 92 83 82 10 97 25 90 44 69 87
+Card 108: 33 44 49 78 10 26 20 65 77 13 | 33 54 2 24 17 20 26 7 93 5 3 77 81 46 92 78 49 65 32 51 44 95 13 29 10
+Card 109: 51 25 49 60 83 75 46 43 50 41 | 96 12 53 50 78 92 60 15 76 6 5 34 41 23 25 70 20 75 86 73 30 39 32 48 95
+Card 110: 13 22 99 91 47 53 35 34 37 77 | 79 35 1 13 88 57 76 89 81 15 53 56 99 34 6 68 77 32 91 47 87 37 4 24 16
+Card 111: 17 21 92 30 95 1 52 5 27 46 | 86 24 6 51 99 68 16 34 19 76 31 10 56 63 58 97 87 26 40 73 8 54 69 18 90
+Card 112: 52 83 38 39 95 12 57 14 46 85 | 12 95 85 14 89 50 52 17 92 18 38 34 55 83 16 66 19 88 4 20 46 57 77 39 11
+Card 113: 6 25 93 3 52 46 2 13 70 7 | 67 46 40 2 3 77 35 50 57 52 55 75 53 72 97 89 34 84 15 31 23 7 58 25 21
+Card 114: 24 53 25 12 17 82 14 50 3 74 | 91 83 57 50 96 68 52 11 56 44 89 95 15 13 54 20 76 48 30 88 53 55 93 65 47
+Card 115: 95 81 49 37 80 70 7 60 75 99 | 29 74 98 94 49 59 60 86 75 93 72 56 87 82 76 32 33 4 46 70 27 83 1 35 2
+Card 116: 80 67 54 68 98 47 12 56 77 60 | 45 81 47 78 29 39 56 42 80 54 68 90 37 2 16 96 5 38 14 59 7 30 6 67 20
+Card 117: 6 59 84 35 1 53 28 77 94 24 | 97 62 40 54 93 44 90 63 26 64 91 75 6 4 22 82 80 2 69 12 77 21 53 49 10
+Card 118: 86 30 39 49 32 29 27 68 97 50 | 2 48 36 99 83 4 38 5 47 77 66 1 20 10 14 15 63 78 89 91 85 80 41 28 54
+Card 119: 87 78 77 15 85 99 2 35 45 11 | 58 51 62 42 63 90 37 22 8 83 34 31 67 35 72 17 91 7 88 49 13 39 59 4 18
+Card 120: 80 21 33 94 26 68 73 35 83 3 | 67 9 94 49 27 50 40 30 60 90 86 91 98 69 6 15 36 71 38 31 17 33 41 70 84
+Card 121: 81 17 27 59 99 69 49 14 83 91 | 20 77 55 73 87 36 25 56 54 58 45 68 80 18 3 15 65 31 96 40 75 30 92 42 23
+Card 122: 22 44 29 27 77 20 86 34 5 99 | 63 19 97 74 4 39 7 52 87 31 81 45 23 18 53 47 50 73 80 2 70 94 26 66 14
+Card 123: 39 40 61 53 56 60 96 5 68 25 | 97 98 6 79 81 32 51 26 59 13 10 2 3 77 88 80 63 90 52 12 87 29 49 18 76
+Card 124: 78 19 92 75 56 95 2 16 43 44 | 95 2 56 4 92 66 53 88 21 16 43 78 17 44 85 48 12 19 52 40 69 75 59 82 26
+Card 125: 14 43 38 9 8 62 17 28 12 11 | 80 19 38 43 11 34 29 9 32 12 62 28 77 72 17 69 33 96 94 78 67 8 93 90 4
+Card 126: 60 95 93 99 11 49 20 75 37 54 | 54 42 19 49 92 95 11 34 74 93 60 52 99 5 7 75 20 12 68 98 43 50 36 37 56
+Card 127: 73 24 71 80 58 62 17 41 61 43 | 68 43 79 58 87 67 6 62 20 41 93 71 27 88 23 17 24 42 52 13 61 80 81 84 73
+Card 128: 99 10 91 58 70 47 80 30 96 57 | 46 57 3 72 4 87 70 10 59 7 96 48 28 97 91 58 47 76 36 80 8 23 19 30 99
+Card 129: 50 3 78 8 80 11 57 52 94 47 | 63 60 38 92 50 65 91 88 53 17 96 42 66 28 1 25 75 76 73 87 90 36 82 24 68
+Card 130: 38 42 33 70 61 58 73 88 74 29 | 83 92 77 58 56 74 55 93 38 46 29 28 37 68 33 73 91 61 12 64 25 88 42 31 70
+Card 131: 92 46 42 96 12 14 95 84 57 78 | 11 6 82 41 73 55 8 93 76 98 99 86 31 21 78 29 32 70 62 23 95 15 9 77 52
+Card 132: 40 97 45 2 19 99 29 98 37 20 | 5 56 36 21 33 83 32 98 66 20 16 37 97 93 40 78 43 77 99 29 87 96 2 30 39
+Card 133: 97 81 10 23 75 6 53 27 35 47 | 37 93 8 92 68 65 15 85 25 67 61 56 5 42 88 18 76 87 60 46 59 94 86 57 91
+Card 134: 96 66 54 61 10 85 98 40 13 41 | 90 58 9 38 28 24 57 52 5 81 80 62 34 54 79 49 2 95 1 18 41 65 82 32 42
+Card 135: 54 79 66 83 45 35 10 27 41 94 | 67 42 4 89 51 95 1 63 90 40 65 23 98 7 86 9 97 3 11 61 92 69 77 80 2
+Card 136: 37 86 74 45 70 95 33 28 82 32 | 67 13 62 8 63 41 78 40 24 91 11 48 7 85 59 81 44 37 45 90 66 70 35 33 94
+Card 137: 75 89 5 18 91 57 37 63 85 40 | 27 34 9 51 76 41 69 86 95 81 36 82 1 38 10 99 7 47 21 77 8 30 19 71 60
+Card 138: 9 67 82 54 5 98 7 6 40 96 | 13 83 90 88 44 17 82 24 47 84 23 85 62 45 72 91 58 46 38 32 25 79 70 59 33
+Card 139: 1 6 65 80 35 91 63 22 60 50 | 79 84 81 92 75 36 88 90 86 16 53 17 44 43 15 94 73 51 14 42 33 98 74 57 4
+Card 140: 24 43 8 76 91 79 42 68 81 70 | 65 36 56 57 16 69 38 86 85 37 22 9 98 33 45 25 95 28 52 2 27 6 14 46 55
+Card 141: 62 32 78 2 21 45 75 48 91 85 | 38 42 3 20 21 56 48 75 86 45 40 91 33 73 25 85 16 78 2 24 72 26 32 61 62
+Card 142: 90 10 32 43 65 91 24 22 34 62 | 91 26 72 81 7 11 32 10 90 33 34 87 35 24 29 3 59 62 2 65 22 43 57 74 79
+Card 143: 16 52 66 56 50 57 77 71 73 40 | 71 43 80 59 36 39 77 40 11 4 64 16 85 52 49 73 56 57 10 9 86 46 66 6 50
+Card 144: 61 56 14 66 2 73 39 8 33 97 | 26 8 47 67 16 18 37 39 14 9 61 33 97 2 66 56 73 4 75 11 62 68 49 44 34
+Card 145: 75 65 92 85 73 18 70 95 49 22 | 25 8 49 2 16 13 97 33 93 66 75 85 73 71 65 18 22 53 92 38 44 50 62 70 95
+Card 146: 78 62 86 83 26 23 80 2 77 87 | 23 96 38 63 83 22 20 86 77 21 67 66 75 5 36 47 26 61 80 87 82 16 78 46 2
+Card 147: 84 36 18 42 50 12 64 61 99 91 | 18 75 61 76 74 12 1 41 28 91 64 24 55 36 27 3 84 99 42 50 95 83 31 7 22
+Card 148: 61 91 60 18 68 50 73 29 23 87 | 18 76 33 5 27 97 31 37 21 38 56 91 60 87 23 55 58 61 50 45 14 29 72 68 73
+Card 149: 46 97 81 18 85 95 91 43 72 87 | 32 23 1 49 66 96 24 16 42 22 81 51 72 8 20 37 44 71 45 25 90 88 5 94 74
+Card 150: 17 99 20 36 33 78 9 87 81 84 | 37 8 79 65 31 99 45 36 81 90 73 11 49 46 87 84 3 33 19 12 57 9 20 48 17
+Card 151: 35 46 49 80 66 75 99 77 8 53 | 75 24 5 67 4 53 49 61 19 23 26 97 93 77 46 66 35 40 99 39 30 80 76 25 8
+Card 152: 11 80 39 1 30 36 16 85 33 66 | 26 66 60 2 94 16 81 48 80 43 85 96 51 68 33 63 88 54 6 36 37 59 5 1 47
+Card 153: 49 86 25 83 96 8 93 88 24 57 | 66 60 51 33 57 95 49 79 63 2 93 58 65 70 55 76 87 27 1 46 11 52 80 84 54
+Card 154: 38 41 75 30 91 6 14 66 47 57 | 34 56 11 70 71 60 22 81 41 74 39 67 79 98 87 42 62 3 32 57 55 46 33 16 51
+Card 155: 25 31 45 21 68 57 73 20 71 32 | 20 18 98 53 60 7 38 10 12 19 77 64 79 74 17 33 83 88 28 16 32 21 89 69 65
+Card 156: 19 35 39 37 84 50 62 95 96 56 | 89 24 92 67 4 47 54 59 72 84 3 5 76 96 23 1 58 86 32 21 78 88 68 44 48
+Card 157: 24 68 39 72 23 93 81 51 45 25 | 96 33 76 99 5 70 93 18 24 68 6 64 49 92 45 80 15 77 4 57 25 13 44 28 2
+Card 158: 51 18 46 75 2 80 20 72 17 29 | 97 55 47 23 20 4 39 24 64 11 31 16 90 29 93 72 18 45 27 46 61 70 80 68 67
+Card 159: 34 10 70 56 51 9 99 32 15 74 | 13 31 44 56 63 20 99 81 40 78 84 90 50 52 85 19 41 10 45 71 22 28 26 8 14
+Card 160: 69 49 13 23 36 64 24 18 57 7 | 54 62 96 36 7 10 28 64 1 85 3 63 73 21 27 37 49 47 75 34 97 30 77 32 9
+Card 161: 35 16 44 25 42 62 95 77 89 34 | 29 26 11 78 97 23 28 36 10 96 54 81 17 22 80 27 77 44 41 34 20 51 76 24 75
+Card 162: 60 17 28 76 67 12 41 15 53 70 | 41 19 35 64 65 15 37 22 80 66 55 40 45 81 17 98 85 74 57 4 16 91 49 5 68
+Card 163: 57 3 82 45 28 70 50 17 85 48 | 68 87 47 62 58 31 88 92 98 90 46 29 5 85 93 24 95 99 39 75 55 33 65 49 14
+Card 164: 33 81 13 87 53 48 79 70 17 91 | 92 57 21 4 36 27 62 1 46 80 31 72 5 94 58 99 75 67 83 25 51 9 26 52 63
+Card 165: 55 70 45 36 72 59 81 16 69 98 | 60 7 43 54 66 78 83 23 25 94 48 67 26 56 53 58 2 4 27 31 34 39 49 85 74
+Card 166: 94 64 48 15 36 35 79 23 77 33 | 78 80 25 5 18 34 92 69 84 86 26 13 89 65 29 3 7 39 71 31 42 21 51 48 55
+Card 167: 13 34 54 2 20 16 89 79 88 9 | 47 75 25 82 72 76 51 37 95 22 71 55 54 74 9 33 97 83 27 2 79 28 17 91 24
+Card 168: 33 82 70 88 7 46 96 67 26 89 | 73 8 22 1 59 45 92 24 43 41 15 64 3 58 83 63 57 82 20 18 91 13 77 60 19
+Card 169: 91 4 32 45 55 98 80 52 9 33 | 20 45 37 28 69 61 60 81 12 33 51 74 15 97 50 86 72 99 2 41 70 58 19 40 39
+Card 170: 45 72 63 87 70 33 89 41 4 18 | 25 9 19 49 26 63 11 73 54 64 70 37 45 82 30 1 90 24 87 42 4 40 91 71 18
+Card 171: 74 99 84 26 66 10 95 8 75 68 | 34 62 37 97 57 65 75 74 6 67 68 96 4 1 95 55 52 82 13 47 63 48 94 26 77
+Card 172: 62 99 47 83 94 8 51 70 9 76 | 94 99 83 26 57 76 18 67 22 80 61 34 8 39 65 78 13 81 70 51 62 93 9 3 33
+Card 173: 42 99 9 18 48 61 36 83 13 84 | 7 69 44 61 35 54 27 3 60 55 99 84 32 48 18 19 72 42 89 65 4 92 79 75 13
+Card 174: 48 34 46 43 53 51 72 35 19 3 | 72 43 57 51 14 34 2 36 53 25 94 81 87 61 19 35 23 4 99 26 48 46 7 90 86
+Card 175: 46 59 27 28 82 13 99 35 18 6 | 36 90 70 87 64 31 42 71 50 27 76 45 99 32 21 20 9 88 23 93 17 46 80 85 59
+Card 176: 92 44 3 29 10 7 66 4 57 21 | 36 68 61 87 65 1 53 95 60 2 34 47 75 42 82 8 83 79 54 74 93 26 69 22 32
+Card 177: 89 23 17 80 22 65 98 11 94 3 | 91 28 37 99 63 60 42 87 23 98 71 39 82 93 57 68 62 13 75 77 22 26 53 48 90
+Card 178: 11 75 56 47 64 88 91 66 59 12 | 41 97 40 26 42 67 23 28 31 99 85 30 11 94 81 55 74 89 52 64 65 69 3 38 43
+Card 179: 31 97 46 27 96 57 45 30 64 82 | 36 42 81 54 85 31 1 29 8 84 28 50 64 76 10 67 77 39 21 4 75 78 99 47 12
+Card 180: 10 32 84 45 87 16 82 14 95 8 | 21 8 41 66 56 42 77 83 90 9 55 61 19 38 23 50 28 62 99 58 33 11 84 39 98
+Card 181: 90 54 11 49 95 88 15 75 18 2 | 30 5 68 41 71 52 56 10 50 60 81 51 27 94 42 55 6 87 78 66 72 96 36 12 62
+Card 182: 73 1 91 2 99 75 30 29 48 89 | 46 51 34 7 18 57 64 9 23 68 16 19 85 70 66 72 5 87 12 4 25 97 10 89 60
+Card 183: 16 20 31 39 75 36 78 33 88 69 | 57 17 8 70 79 37 6 48 51 85 30 45 98 26 3 83 29 58 87 54 61 35 74 43 66
+Card 184: 69 50 38 49 9 96 75 82 80 14 | 23 99 30 83 78 9 50 40 14 74 75 8 37 69 82 42 26 49 96 1 38 58 80 84 7
+Card 185: 44 66 49 89 36 28 30 85 32 68 | 44 28 66 72 33 65 31 67 36 30 99 89 12 25 32 76 68 85 48 90 78 92 13 49 82
+Card 186: 46 48 6 52 24 19 51 76 11 47 | 93 63 78 33 31 86 68 10 74 70 3 83 36 4 54 79 8 77 38 57 97 27 22 29 53
+Card 187: 49 12 70 83 40 68 15 78 88 95 | 72 31 40 69 37 65 71 35 9 44 49 95 89 68 50 41 20 58 16 60 90 22 28 96 10
+Card 188: 86 47 96 63 55 29 91 31 59 23 | 55 77 30 23 91 75 86 47 29 31 78 67 4 92 96 26 63 37 80 54 1 11 32 15 98
+Card 189: 40 97 46 63 66 58 54 35 33 59 | 75 17 57 71 55 62 43 96 85 98 83 37 40 23 65 94 93 25 72 78 46 47 28 33 56
+Card 190: 94 41 57 47 6 24 65 59 44 20 | 95 86 26 77 87 47 18 27 16 85 57 61 66 37 35 38 23 42 50 60 98 71 62 8 25
+Card 191: 57 32 39 19 48 77 27 96 10 61 | 68 82 86 70 75 35 11 24 69 56 45 95 67 44 25 36 90 47 74 39 27 55 66 87 12
+Card 192: 50 94 12 32 88 76 95 23 46 49 | 60 9 6 37 42 50 96 15 95 66 34 94 91 4 33 29 14 92 16 80 98 64 12 57 36
+Card 193: 32 25 53 7 71 31 80 42 92 63 | 84 78 28 90 27 24 5 67 63 75 81 12 31 55 46 60 89 98 37 16 86 23 72 43 22
+Card 194: 79 47 88 9 97 76 62 23 72 84 | 77 78 67 65 91 79 64 38 41 26 89 16 10 71 86 82 47 75 61 11 34 66 7 3 70
+Card 195: 22 47 95 56 66 98 44 73 50 30 | 92 33 28 65 16 60 8 45 56 2 47 84 25 55 58 17 35 88 38 95 81 63 43 57 98
+Card 196: 76 23 10 43 9 32 46 62 84 79 | 22 4 49 42 23 55 13 35 90 9 24 52 65 26 95 94 18 37 47 79 56 59 54 86 48
+Card 197: 65 44 24 84 49 62 6 54 42 20 | 25 72 90 58 77 60 59 73 11 39 91 19 21 28 62 8 41 66 87 56 64 52 80 82 24
+Card 198: 63 44 64 86 78 25 92 90 99 70 | 62 29 51 81 21 6 75 58 54 90 18 10 59 98 97 41 4 52 53 64 80 28 92 11 9
+Card 199: 7 15 47 28 44 22 74 76 40 56 | 78 24 95 38 25 36 77 46 89 45 18 42 3 75 62 90 52 81 83 85 80 26 4 23 71
+Card 200: 85 88 3 44 54 19 9 71 29 53 | 72 42 56 55 33 68 65 86 58 3 57 83 12 31 96 9 13 62 70 80 17 29 41 27 6
+Card 201: 10 51 69 82 56 40 94 9 90 78 | 57 92 89 1 99 87 5 73 80 28 2 6 67 70 33 18 17 78 16 95 69 44 38 24 55
+Card 202: 44 47 79 75 24 50 86 80 62 87 | 66 91 36 15 28 81 57 69 30 14 10 20 27 18 77 46 95 72 39 23 38 34 60 37 26
+Card 203: 59 31 79 81 4 21 24 54 48 62 | 37 90 25 51 70 77 18 17 97 52 40 75 43 3 91 50 87 67 42 15 14 63 6 13 5 \ No newline at end of file
diff --git a/aoc2023/src/day6/input.txt b/aoc2023/src/day6/input.txt
new file mode 100644
index 0000000..1026e3a
--- /dev/null
+++ b/aoc2023/src/day6/input.txt
@@ -0,0 +1,2 @@
+Time: 41 66 72 66
+Distance: 244 1047 1228 1040 \ No newline at end of file
diff --git a/aoc2023/src/day7/input.txt b/aoc2023/src/day7/input.txt
new file mode 100644
index 0000000..b1d1932
--- /dev/null
+++ b/aoc2023/src/day7/input.txt
@@ -0,0 +1,1000 @@
+3Q373 470
+K53JT 351
+A9JK9 856
+2T333 515
+867T4 541
+58K22 253
+5JA6J 994
+K4A4K 865
+94377 519
+92J2Q 901
+J7676 389
+2KK36 938
+JQ2KK 987
+Q7A82 509
+TTTA5 243
+72J27 502
+AKKKA 387
+23222 674
+55335 161
+AA655 73
+QKKQA 686
+5J2T5 680
+666AT 385
+ATA3A 761
+TTT8J 364
+98A2T 282
+59A44 260
+6T9QJ 130
+T7TKQ 721
+9274T 656
+T9AJ4 182
+A2222 259
+TQKJ7 67
+4J844 560
+AAATA 636
+9J36J 546
+QJQQQ 119
+249TT 295
+877J7 221
+4KA23 116
+929Q2 929
+99JQQ 445
+Q9QJ8 432
+4Q7TJ 963
+4J2J8 783
+5J657 257
+88788 183
+KKK7K 909
+KK396 637
+J45AT 117
+84448 806
+A2698 820
+A9AA5 320
+A3934 19
+Q45Q5 392
+78686 254
+A55A5 701
+98A4K 655
+5AJ88 95
+AK3KK 55
+773KK 33
+J9J9J 356
+2KAKK 563
+655K5 287
+55T56 475
+54444 308
+5J5QA 811
+QKA76 792
+2K288 42
+JTKA2 694
+88668 889
+8TQ64 212
+23QQ2 261
+8K8K5 365
+JKKAA 234
+3J894 880
+667Q2 817
+888T4 599
+T5Q83 315
+3QK29 670
+JK4KK 322
+75T8T 144
+AAA7K 291
+7T333 495
+A49K4 448
+JJ3J3 251
+5999J 278
+38438 890
+6K3Q9 122
+TTT99 93
+94775 240
+K8QJ3 369
+59674 107
+267J4 355
+QTQTQ 187
+46J44 961
+Q7AK2 580
+69969 609
+876A5 474
+A3866 642
+Q3QQA 526
+JAA88 425
+35Q9K 986
+QQTQJ 550
+54535 357
+2J222 639
+QK5J7 743
+222Q2 191
+T4T44 855
+QTQQ2 338
+JA7A2 300
+AAAJ2 508
+4J455 23
+A77AA 339
+5KK25 899
+252J2 737
+7QJ76 888
+K46QK 795
+A4T3J 640
+8A8K8 176
+AA5AA 41
+J2Q24 958
+58855 632
+333J3 610
+74474 807
+K3AAA 78
+JJ222 765
+44224 688
+76733 361
+5845K 181
+TT4T2 974
+23J33 102
+QQJ6Q 34
+Q9AQQ 150
+22747 717
+KAA5A 121
+7AA7J 286
+J786T 780
+3K8TT 32
+A6KAA 25
+9A362 166
+A29Q2 499
+6688K 57
+KKQKA 947
+999JJ 975
+6A666 927
+TTT3K 658
+JQQ7T 467
+8A247 934
+7JK8J 712
+KK39K 612
+6666Q 17
+77Q37 868
+A66AJ 169
+KKKKJ 535
+7Q7JJ 591
+K9848 646
+46888 931
+A86A8 326
+743TA 527
+QKK67 977
+KKJ6K 471
+AAJ7A 571
+55292 330
+3A222 390
+6453J 109
+JKKKA 403
+4J9T5 21
+K7A5K 486
+6TT34 793
+3479Q 60
+44624 443
+6KK3K 164
+4447J 112
+QQ27Q 452
+JAK65 522
+Q5Q5Q 354
+J5Q6A 540
+68999 711
+3QJ4Q 155
+A6AAA 314
+222KK 767
+55T9A 373
+T5T57 913
+TTTTA 794
+8J258 190
+3Q87J 489
+AAQAQ 950
+Q4JJ4 588
+6T64T 9
+636K5 228
+AA222 248
+7KJ35 616
+26646 507
+44A4J 829
+23323 904
+TA265 135
+JJQT9 136
+KATJ8 644
+J2862 713
+4JQ28 152
+Q3K2T 56
+6Q232 812
+9A622 885
+KJKKJ 773
+3859T 374
+99333 101
+TKTTK 205
+3333A 35
+5A4AQ 548
+T4944 967
+43353 813
+423JK 869
+T99T7 219
+3AAAA 394
+T65Q6 740
+J9243 352
+6656J 496
+444K4 574
+Q8T6K 98
+AQ55K 917
+7QQJ7 605
+TJ5TT 615
+68JQ5 852
+7A3J2 745
+369AK 217
+57755 343
+A8844 61
+Q76QQ 698
+36333 774
+237Q7 12
+KT694 283
+88286 154
+4T552 990
+Q9J54 759
+K6697 350
+A3A33 937
+AA9AA 246
+QQ7KK 748
+TT4A6 380
+4J992 845
+A66AA 573
+5QQ2Q 28
+86J37 214
+2A443 362
+Q9QKK 654
+44434 964
+77773 74
+44355 235
+9QK75 863
+3AJ33 766
+T2TJT 53
+44494 860
+883A9 309
+QQ59Q 360
+A88A8 584
+A83A4 395
+7J9TA 299
+55955 833
+QJK35 188
+4656A 514
+8KTQ4 554
+56J47 985
+J272J 184
+9J999 671
+72295 31
+53555 264
+4A537 750
+7A4JJ 875
+QK834 463
+88KKA 570
+QQ9JK 906
+6Q646 858
+53336 359
+QJ8QJ 587
+424TJ 607
+KTKK6 285
+Q5AQQ 84
+899A8 542
+K8TKK 250
+4JA4A 705
+6J75J 896
+888K8 312
+5583J 660
+6T335 614
+Q757T 945
+3AKKA 629
+KK946 825
+3393Q 406
+7J288 367
+49999 907
+99729 837
+66265 384
+K47JQ 263
+2AJ4K 566
+TTKKA 186
+8J877 418
+56844 666
+JTTTT 531
+6TJ94 26
+JQ5J5 344
+7J772 85
+33747 510
+KJA2A 729
+333TQ 578
+JQAT4 955
+75766 834
+QQ6QQ 980
+32K33 306
+TTTJ6 231
+2QTTT 213
+999AQ 608
+33353 202
+Q8Q8Q 756
+KK555 490
+746K8 691
+98A75 853
+JQ858 816
+KK9KK 536
+9T999 933
+TA8A8 39
+8558J 919
+J8KQK 15
+73Q2K 503
+2K2KJ 585
+JK9K5 903
+TJ7T7 545
+J723T 453
+KT895 583
+TTTKT 123
+39535 393
+K4K88 893
+43KK6 821
+6AA8J 504
+972TA 597
+7J736 592
+536A8 63
+J23Q3 402
+83K9Q 405
+28337 396
+9T558 776
+7AA78 946
+QTT24 441
+26QT3 401
+AJQAQ 953
+6T6AJ 304
+JK5KK 162
+2JJ2J 484
+73773 6
+8J864 630
+78782 557
+6TJ52 424
+487JQ 830
+8J698 82
+AJAAA 866
+228J8 204
+622J4 823
+6J2QJ 79
+22K22 232
+A86A6 444
+83K8Q 965
+JK586 944
+JA848 465
+8888A 45
+2T28T 803
+73J73 450
+27272 857
+7A777 544
+A998J 679
+46466 458
+KJ233 192
+4453J 378
+TQQJT 451
+A3K5J 512
+888Q6 968
+6AA66 841
+QQ222 883
+3K5A3 233
+JA4AA 379
+62288 778
+44456 51
+4A644 862
+55647 981
+A77A7 327
+KQ3A3 687
+QQ7Q7 976
+T4A2T 293
+46226 628
+Q59Q5 348
+36AJ2 984
+54433 532
+JJQ24 831
+7455J 381
+78845 218
+72AQ5 276
+52T22 618
+99399 68
+36AA3 118
+69669 839
+33Q5J 785
+TJ766 626
+T28J4 556
+T883Q 142
+73928 932
+TJ884 494
+AJ36Q 485
+9Q999 324
+T725Q 267
+22622 88
+92364 685
+97792 789
+J673K 620
+99943 625
+77JJ7 921
+8828Q 572
+7777J 353
+TAAJT 926
+99T29 787
+AQ4J4 520
+9J559 5
+J3T94 706
+K9KK9 918
+KK252 439
+79925 97
+TT47T 497
+848T4 126
+6TTT6 426
+K8825 925
+888J8 62
+K5K85 972
+AAKKA 449
+J5555 663
+89J99 27
+4Q444 922
+A9A99 397
+5A555 163
+8J3K8 662
+29989 645
+95222 751
+Q4Q4Q 193
+555K5 982
+74AJ8 735
+KKQ6K 668
+7676Q 916
+A28T7 784
+K57KK 388
+A4J4J 115
+2K442 229
+33TT3 956
+TT6TA 741
+TT782 131
+TJ5JQ 238
+TQ7T7 415
+29KQQ 598
+A8AAT 676
+46A28 650
+6698K 696
+6J969 158
+6694A 271
+QTQ5T 498
+Q2QQQ 613
+2A7QJ 210
+6T466 683
+QJ575 799
+Q63Q3 822
+Q9J28 848
+TTTT7 7
+KA9AA 854
+K2JJT 859
+28228 179
+K29KJ 429
+JJ8JJ 222
+A99A5 457
+QQTTT 983
+43KK2 134
+984JJ 1
+97J97 892
+2AAA8 689
+9Q77J 819
+98TJK 517
+56KA5 71
+7J66J 294
+55855 335
+TTT8T 596
+33663 407
+7J774 911
+3JQ55 564
+QQQ7Q 329
+85668 120
+KK333 301
+Q3553 867
+7K557 988
+Q8488 400
+96J99 643
+29224 714
+T8ATA 346
+99J93 462
+K83J3 697
+3KQJ4 653
+5KJQ2 824
+4JJ3A 897
+56248 727
+JJ666 702
+355T5 245
+45KAK 553
+88AAA 236
+K55J5 581
+AJJ49 65
+A8Q3J 197
+AAAKQ 529
+55976 707
+77776 930
+A9995 227
+K7J7K 912
+29K99 244
+4Q464 80
+22972 195
+666JQ 189
+26278 241
+79288 601
+5454A 427
+JTAKQ 138
+88833 549
+84J54 215
+AATAK 114
+58959 145
+8ATTJ 431
+QJ26K 265
+A3JA3 81
+T8T4J 242
+4T3A3 37
+44777 871
+JQ542 561
+A97Q9 693
+A76T4 412
+28T4A 481
+T485A 861
+78286 303
+K6776 52
+T8TKQ 754
+KJ938 957
+Q444Q 840
+25A89 455
+58588 673
+K8858 634
+K8KJ8 170
+K6KKK 851
+53353 140
+2T2K6 593
+QQAQA 48
+TT6J6 305
+922J2 920
+AA22K 22
+J555Q 725
+TTAAT 781
+2244J 171
+A95K7 436
+2J299 651
+78AAA 321
+2KKK2 690
+2J565 649
+77J5K 77
+T999T 762
+J4445 879
+J888Q 873
+J884J 1000
+98898 413
+29299 442
+QKQ3Q 678
+A652A 993
+55272 898
+KA5K5 664
+8KJAQ 147
+Q56QJ 734
+K77J3 739
+J7677 661
+T5569 206
+2AA2J 757
+TJTJT 342
+T2TTT 682
+88J82 363
+9KK78 700
+AT4T4 730
+86968 736
+99995 207
+7A3J4 172
+8KK87 991
+TKKJJ 16
+J7532 165
+J9888 996
+9AJTA 92
+43T78 310
+93J77 317
+J4424 805
+43J86 703
+952TJ 127
+54363 146
+8T2J7 435
+88848 832
+TAAAQ 791
+8228T 256
+699QT 815
+KQQQK 30
+T82J3 49
+36222 4
+AK288 86
+6792A 194
+2Q22T 667
+J3545 270
+9QJK4 280
+QQ22Q 371
+K9247 446
+A422A 943
+765K3 469
+9J5A6 874
+4A4QA 775
+8Q8Q8 124
+T8Q62 850
+8Q8Q5 747
+6KT88 738
+82888 722
+3TQQQ 349
+2J3TT 539
+7TQ59 72
+8998T 733
+JQJT3 414
+82428 589
+92856 423
+89833 54
+79T4A 523
+95839 979
+TJJT5 936
+33839 29
+37433 511
+TKJ2T 681
+JT973 633
+Q8Q8J 971
+Q5555 440
+K8886 24
+Q75A4 43
+3AQ33 298
+T446T 719
+577J5 753
+KJTKT 167
+52528 8
+25222 641
+QJ2T8 621
+A8JQJ 316
+7T7A7 772
+KQQTQ 141
+83734 758
+6Q66Q 434
+QJ6Q2 638
+AAA7A 196
+57555 203
+4QJQ4 216
+82J5Q 763
+A73A3 940
+46AJQ 559
+T4936 103
+89Q29 262
+7872T 466
+A5J58 274
+AAAQA 290
+37399 844
+A759Q 328
+TJ9TT 273
+77887 268
+64A2J 978
+6T76Q 110
+QQ467 742
+9J7Q5 422
+4K6Q3 91
+336K3 826
+6K63Q 382
+23552 105
+243AA 505
+Q887J 764
+2J92A 749
+68A3Q 416
+7T8T8 199
+225J5 404
+24774 153
+T7T77 870
+3J393 347
+Q5Q8J 128
+7Q777 796
+QKKKK 617
+86686 108
+44KT4 75
+56858 622
+5AJK4 960
+3245Q 311
+36536 370
+6644Q 11
+JKAAA 104
+T2426 579
+J3399 83
+33933 602
+A299J 777
+26J22 224
+8666J 594
+J3J38 669
+3AJ84 239
+52Q8T 877
+QJQQK 779
+QJ6T8 797
+43339 399
+9AJ74 476
+T499Q 13
+2TAKA 928
+T3K78 809
+2923K 201
+J8858 798
+T8888 818
+98399 168
+8T266 555
+23A57 652
+3KKK3 113
+22T22 460
+AJJAA 106
+7QKA8 464
+QQ8TQ 368
+99A99 341
+62Q5A 223
+J9T47 568
+Q7388 894
+69662 744
+96J2T 323
+2A779 89
+Q2874 269
+77797 948
+5359A 864
+AJ9K4 482
+Q3Q44 567
+JT958 665
+A38J3 438
+J4666 296
+428J5 501
+38K8K 410
+6T979 709
+3533T 284
+2285A 910
+933T6 882
+K6666 786
+56Q32 992
+5J752 198
+AJJQJ 600
+KK5KK 3
+38T94 180
+67QTJ 69
+J6636 200
+229J8 493
+QJTQ3 247
+5KQ5K 149
+654AT 528
+T84T4 878
+Q23QQ 905
+QQQ74 325
+4JTQQ 408
+T4T78 340
+3T5T5 551
+3J3J3 391
+88844 631
+TTT9T 810
+57775 935
+A777J 604
+4555T 2
+A5J8T 942
+22AJJ 506
+22323 997
+A3323 624
+84442 516
+2T992 76
+J7T76 828
+J8552 995
+KTKK3 886
+33853 782
+53233 129
+44J4J 372
+KQQT2 480
+K5649 576
+3J63K 760
+2J666 827
+6JT68 318
+45Q64 849
+49884 801
+9KTTK 902
+66737 952
+5Q8J4 708
+57Q92 724
+627J7 331
+K22J6 473
+4T444 923
+J4444 552
+78J8J 491
+4K328 477
+4AA3A 808
+7A34Q 437
+AQ888 428
+8TA99 768
+AA9A9 143
+9K5AT 211
+77722 40
+TQTTT 941
+Q2A4K 492
+236T9 677
+J8686 746
+J585K 64
+TJKQT 582
+T3TTJ 157
+22266 38
+KT5TK 692
+QJQQJ 908
+4K623 279
+7JJJ7 173
+64A66 524
+J7AJ8 417
+K43Q3 769
+T662T 148
+54J2J 488
+K6485 44
+J6666 970
+J26J9 209
+8337Q 334
+A27A4 319
+A7T78 132
+K777A 842
+KKK4K 249
+99K9K 430
+8745K 151
+Q2QTJ 433
+QKQ76 525
+25Q2Q 533
+5QK6J 800
+77T77 558
+5K323 939
+33KK4 590
+K8A52 111
+ATQJ6 569
+ATK89 50
+4433A 836
+3KKKQ 891
+46TK4 538
+5249Q 447
+2462K 675
+8JT6T 336
+466J7 459
+7K7KK 838
+544Q4 959
+58773 483
+823J5 999
+2TKA5 752
+AKJ58 386
+7T833 99
+KQ88Q 659
+KJ3A4 790
+K9595 307
+3K3J4 534
+3838T 220
+32522 720
+366Q3 500
+J8868 989
+T7KTK 376
+JQQQA 14
+42555 409
+5T5T5 648
+4KK4Q 383
+K7777 884
+736A3 543
+343Q3 366
+TJ856 237
+JJ555 46
+K5QQQ 275
+QAQQ7 672
+8KTJQ 731
+QQQ3Q 47
+J257Q 575
+6Q3QQ 87
+QKK43 924
+TTATJ 998
+K44K5 771
+37895 881
+48823 521
+KKK74 456
+99J79 139
+J4542 635
+AJ96K 954
+K8937 411
+5J355 895
+96967 185
+333T3 562
+TAJ77 755
+J38A8 487
+AAT79 313
+A6Q73 398
+386JA 10
+J35Q8 623
+27758 969
+3K3KJ 966
+7928Q 627
+AAA4A 59
+2AA52 478
+848J8 133
+55225 843
+TTQT9 619
+3Q79K 255
+27AK8 58
+TKTKK 272
+KTTAT 333
+55666 802
+47748 454
+Q3T56 699
+63T3T 302
+8754Q 723
+4J86T 358
+8TTQ9 226
+5523J 125
+88588 606
+58AAA 208
+TK273 137
+4Q7KQ 160
+29292 577
+Q333Q 611
+22TT2 716
+A55AA 258
+64822 468
+22228 847
+2242T 788
+JA26Q 472
+8JAAA 174
+K5Q8A 175
+Q5AT4 732
+J4434 530
+76666 337
+9998Q 547
+9T2J9 100
+3Q982 90
+7727Q 281
+92944 973
+K2597 814
+K444K 36
+26KJ6 292
+34K38 962
+5A378 225
+636J9 375
+TTTT4 420
+A66TA 461
+69QK5 345
+76293 479
+66966 804
+A3383 297
+T82TT 657
+2QJJQ 156
+K2JK3 94
+K6K66 252
+K58QJ 876
+6J979 513
+92647 718
+QQ9Q9 586
+862Q5 20
+5465K 915
+KQ44Q 595
+T66T6 288
+TJT7T 710
+5JT8K 159
+KJTK3 603
+KKJTQ 949
+67776 914
+J4323 177
+22229 704
+96999 178
+8AJKA 70
+69T69 419
+65556 770
+87738 537
+547J4 835
+44766 421
+3355J 684
+2K266 647
+5TTT5 266
+3T3TT 332
+88JJ8 96
+QQ5K3 887
+K7JKK 377
+J8Q2Q 66
+2KKJ6 230
+TTKQT 277
+22Q92 18
+JTTTK 695
+J993Q 846
+88898 728
+88T87 715
+Q74J4 872
+4T999 951
+T997Q 289
+92QA9 726
+AJ394 900
+TT2T2 518
+JJJJJ 565 \ No newline at end of file
diff --git a/aoc2023/src/day8/input.txt b/aoc2023/src/day8/input.txt
new file mode 100644
index 0000000..e27fbc1
--- /dev/null
+++ b/aoc2023/src/day8/input.txt
@@ -0,0 +1,740 @@
+LRLRLLRLRLRRLRLRLRRLRLRLLRRLRRLRLRLRLLRRRLRRRLLRRLRLRLRRRLRRLRRRLRLRLRRLRLLRLRLRRLRRRLRLRRLRRRLLRLRLRRRLRRRLRLRRRLRLRRRLLRRLLLRRRLLRRRLRRRLRRRLRLRLRLLRLRRLRLRLLLRRLRRLRRLRLRRLRRLLRRLRLRRRLRLRLLRRRLRRRLRRRLLLRRRLRLRLRRLRRRLRRRLRLRRRLRRLRRRLRLRRLLRRRLRRRLLLRRLRLRLRRLRRRLRRLRRLRLRRRR
+
+GXT = (MQM, CHN)
+MBK = (RCK, RCK)
+HBS = (QHS, RXC)
+SXK = (FDB, FKP)
+NJB = (BSB, KJM)
+SPD = (FNL, RSH)
+FJF = (NFH, XJN)
+GHV = (LSV, BTS)
+QDT = (HXV, PDX)
+MDH = (XDK, DKN)
+AAA = (FKL, CFC)
+GRB = (VDP, LMM)
+CXK = (DVB, CRJ)
+FDB = (FTD, CNK)
+LQT = (BJV, SMQ)
+TSK = (NQD, VSG)
+VLF = (NDS, CTV)
+PGP = (DKC, CKL)
+PVJ = (FDB, FKP)
+VSV = (NFP, QHX)
+KXN = (XJN, NFH)
+KMQ = (VBH, XXH)
+QXR = (RMD, TLT)
+DLN = (TPD, KBG)
+BHK = (GRP, RXF)
+TSX = (HQP, SHK)
+PTV = (VSG, NQD)
+QVN = (XBH, DHC)
+DDM = (TCB, XRQ)
+NKD = (CDR, BJM)
+JNR = (FMC, SQN)
+VPQ = (JGC, VCJ)
+HPB = (STQ, DDM)
+HRT = (JNR, BGH)
+CNQ = (HQV, PJQ)
+PMG = (LRB, XXP)
+RKV = (XGN, VCG)
+KVQ = (KHS, SLV)
+MDM = (VDX, NSF)
+VHT = (PGP, GJS)
+BPD = (NBF, VNH)
+JCQ = (JCB, XVR)
+CFJ = (PQP, CBJ)
+DSX = (BXN, VDS)
+MGH = (PFV, NLQ)
+MPK = (FND, BJX)
+QFR = (HFC, CNG)
+PHS = (VNH, NBF)
+KTT = (MTG, SQM)
+JBK = (CSR, VXV)
+BKL = (DLB, SHQ)
+GQH = (PCH, LDZ)
+XVJ = (CQM, SLF)
+VBN = (FFF, PDL)
+KQH = (SLT, XLG)
+SSN = (PQH, LFT)
+MQM = (SBH, TTC)
+SCR = (HGH, QGS)
+XTZ = (XKM, JTJ)
+ZZZ = (CFC, FKL)
+PRA = (GRB, MDB)
+VTV = (LXQ, HKP)
+PPX = (SQM, MTG)
+PVA = (MRJ, CVH)
+BJH = (VTR, RKG)
+KPH = (RFD, NJP)
+HXG = (NVJ, HNG)
+LRX = (DCX, MGH)
+NFD = (PFR, FVQ)
+TDG = (TDH, ZZZ)
+XKM = (XDG, VHT)
+CKT = (LDC, VPF)
+QQR = (BFQ, FXC)
+RGJ = (KTV, GFR)
+XDK = (MVC, SPX)
+TLT = (MBK, DGL)
+CDR = (JBG, KPH)
+LTH = (DFN, BHK)
+PVV = (BFQ, FXC)
+FCK = (FRJ, KVG)
+FXB = (MDH, VSJ)
+DHD = (LDJ, RNH)
+HHR = (HSK, CJD)
+LSV = (LNP, NMD)
+JSX = (DPF, SNN)
+SBH = (XKD, GTX)
+BHJ = (JSX, TMN)
+CQX = (XPG, RLB)
+XRQ = (FJK, NCF)
+GMF = (JBX, DRV)
+KBD = (HCC, TND)
+KGT = (NLK, FRX)
+RKM = (RTM, FMQ)
+GNM = (GML, NLB)
+SXP = (RKG, VTR)
+PMS = (XBH, DHC)
+PQH = (PJD, CXK)
+XXH = (BMB, JGJ)
+RHL = (QHS, RXC)
+DFS = (JVK, VBN)
+QCS = (XGN, VCG)
+MJJ = (DDM, STQ)
+SPV = (PXX, RRT)
+FRJ = (SNX, MPQ)
+FKC = (CBF, RKM)
+SRG = (QFH, LGP)
+VVQ = (BJV, SMQ)
+BQC = (DSP, TXQ)
+SHQ = (NKR, RGJ)
+KCS = (QGS, HGH)
+MTV = (BXN, VDS)
+CNC = (HPB, MJJ)
+SNF = (XXP, LRB)
+KTP = (QRX, KML)
+GSC = (HSK, CJD)
+QRX = (CRB, TXL)
+MDB = (VDP, LMM)
+PFV = (CLM, CTN)
+RRB = (HHR, GSC)
+DDQ = (PXX, RRT)
+TJB = (LSX, XNR)
+BSP = (TXC, LKB)
+MMV = (DKK, NFD)
+DCB = (XKP, TNJ)
+QKV = (CTT, SFM)
+XDG = (PGP, GJS)
+JMJ = (JLK, NJB)
+VBJ = (HJV, JFD)
+QHM = (CLJ, QGP)
+STR = (HXG, RFC)
+DPF = (VNQ, DQQ)
+RXF = (NHV, GBX)
+FXC = (JLX, LBS)
+XVR = (MVT, QHD)
+KNM = (BJD, QCK)
+GTX = (MSB, FNP)
+XCS = (PTN, NRH)
+CGS = (FRX, NLK)
+RCK = (CQM, CQM)
+CDS = (PRR, GCJ)
+BXN = (KQC, MSV)
+PTN = (VST, QHJ)
+TPD = (HJF, TSS)
+RNH = (TTK, DBN)
+TSM = (TPD, KBG)
+KTG = (GPT, BMD)
+PJP = (XBR, TCM)
+QPF = (KJF, NJX)
+HKP = (PLS, PGK)
+KBG = (HJF, TSS)
+SQK = (LSD, KNM)
+XKD = (MSB, FNP)
+QQP = (LFB, LTK)
+MDX = (KTJ, FXF)
+JLK = (KJM, BSB)
+FBR = (PMG, SNF)
+GSJ = (TDH, TDH)
+DQQ = (FKK, KRF)
+CTV = (CQD, RQX)
+MNT = (RLG, XXQ)
+GFL = (FGJ, KMD)
+BJK = (VQX, JCQ)
+SPN = (NKS, CNQ)
+LNL = (XLM, XLC)
+HKF = (HKJ, NNC)
+FTD = (CCX, MSS)
+RPV = (MDQ, DGS)
+DCX = (NLQ, PFV)
+JGB = (DVT, DRH)
+CGM = (CHN, MQM)
+JNQ = (PPX, KTT)
+BJM = (JBG, KPH)
+NFP = (SPD, XCT)
+TPL = (LSD, KNM)
+XTV = (CTJ, HPX)
+LKB = (PDF, SLK)
+QVK = (KMQ, MGF)
+QVP = (VCX, JNQ)
+NSR = (TJB, NBB)
+XLA = (DLB, SHQ)
+QLP = (HBS, RHL)
+BGH = (FMC, SQN)
+BJX = (LRX, PNM)
+MVC = (BPD, PHS)
+DXQ = (TMN, JSX)
+PBK = (QKV, CTH)
+GBJ = (RNH, LDJ)
+BMB = (HJS, TJT)
+SHT = (MFQ, LCT)
+HSK = (CGS, KGT)
+DRH = (PKN, PBN)
+PQF = (XKP, TNJ)
+RPX = (HCT, HQT)
+FPH = (VQL, NPJ)
+GLC = (PMS, QVN)
+VDP = (SXK, PVJ)
+JFD = (QBD, DGT)
+LQL = (NPT, GVS)
+TPQ = (NHL, MTD)
+KRF = (HVT, MPK)
+JQG = (QDT, PCK)
+PJQ = (KVH, LBV)
+VBB = (XXQ, RLG)
+PSH = (SQV, TLB)
+VXH = (VCX, JNQ)
+VQD = (NBB, TJB)
+JVD = (GDJ, JGQ)
+SDR = (FTF, NQL)
+NQQ = (TFM, CMC)
+FNL = (LTV, CSX)
+FVS = (NSF, VDX)
+VTJ = (VXH, QVP)
+KQC = (LGG, LGG)
+SCS = (MTV, DSX)
+QPS = (HMV, QQP)
+CQM = (JDD, JDD)
+FJX = (VBB, MNT)
+GBQ = (BXV, LFR)
+HGH = (SQK, TPL)
+SLT = (FXB, NGN)
+PBD = (HDC, FCX)
+CKL = (MQS, NND)
+LSX = (MBF, SPN)
+HNG = (JQG, GKD)
+MFQ = (PSH, TGK)
+SNX = (GCS, KSF)
+FMQ = (DXT, DFS)
+TXC = (SLK, PDF)
+VST = (SSN, LSR)
+BFB = (VSV, SVC)
+VNX = (TMF, QFS)
+VPK = (VBB, MNT)
+NVR = (XPG, RLB)
+FLS = (FSL, CKH)
+FKP = (FTD, CNK)
+MGF = (XXH, VBH)
+LNM = (NFD, DKK)
+FNP = (VTT, MVG)
+HDC = (PXP, GVH)
+KVL = (LCT, MFQ)
+XGP = (RHG, RTK)
+JCT = (NJB, JLK)
+XSL = (SVC, VSV)
+SRS = (HPD, XBL)
+FSL = (JMG, TFD)
+CXB = (KQV, QGK)
+QRP = (CGF, CQF)
+PRG = (MDX, KPL)
+VLL = (MRB, MHN)
+VNQ = (KRF, FKK)
+NPJ = (VPK, FJX)
+MHN = (SRG, TTL)
+KFN = (DFN, BHK)
+FVQ = (LJM, TJV)
+GKD = (QDT, PCK)
+GVS = (FCK, NGC)
+MBF = (CNQ, NKS)
+SMQ = (KSV, KMF)
+CRJ = (GSJ, TDG)
+LHT = (BTL, KMB)
+KJM = (KJC, BGC)
+TTC = (GTX, XKD)
+QFT = (PRM, KXS)
+SDS = (JMP, TSR)
+BLX = (PQF, DCB)
+PXX = (LJT, QFK)
+SQV = (FCB, HXF)
+RQX = (DBJ, VTV)
+THV = (GJL, MND)
+SLK = (XBP, CXB)
+LVS = (CTJ, HPX)
+TSS = (CGL, JST)
+MTG = (RKT, GTJ)
+FFF = (GBQ, VTM)
+XMV = (KVL, SHT)
+FDJ = (MLG, MLG)
+HPD = (MQK, FLS)
+TLB = (HXF, FCB)
+BGC = (SCR, KCS)
+FBM = (PBD, MFK)
+TJP = (JSS, GHV)
+TXL = (NQC, RXH)
+TKM = (GLQ, TKP)
+RNS = (BJK, PHJ)
+RRT = (LJT, QFK)
+DHC = (XVF, STR)
+RXM = (KVL, SHT)
+JBX = (GBJ, DHD)
+TBR = (HJV, JFD)
+MFK = (HDC, FCX)
+TFD = (QXN, QSK)
+HMV = (LFB, LTK)
+RMD = (MBK, DGL)
+RJP = (CTX, TPQ)
+CBF = (FMQ, RTM)
+XXG = (JDH, TJP)
+PDX = (XGQ, BSP)
+XBL = (MQK, FLS)
+GMT = (PCB, GTK)
+DGT = (GNH, KVQ)
+CHN = (TTC, SBH)
+NKS = (HQV, PJQ)
+HJC = (DXQ, BHJ)
+CSR = (TSX, HSM)
+XTK = (BJM, CDR)
+DRT = (MPB, PSV)
+HQT = (CRM, XTZ)
+HNM = (SXJ, GMF)
+NLQ = (CLM, CTN)
+LTK = (PGS, SCS)
+DNR = (DRT, QLK)
+QVR = (DLN, TSM)
+VLD = (GSP, CKT)
+LFT = (PJD, CXK)
+KVG = (SNX, MPQ)
+FBS = (JSN, KFT)
+GTK = (XHH, LCL)
+KJZ = (MDB, GRB)
+QGK = (PKK, VFK)
+VDS = (KQC, MSV)
+KHS = (TRF, JVD)
+BHH = (MLG, RPX)
+JVL = (CQF, CGF)
+RGQ = (CQJ, KTG)
+VTM = (LFR, BXV)
+GML = (VFF, VLD)
+CTJ = (FKC, PDT)
+BJV = (KSV, KSV)
+SPX = (BPD, PHS)
+CTX = (NHL, MTD)
+LRB = (HHP, CDS)
+XHH = (MKX, KQH)
+FDL = (QFT, MNG)
+CCX = (HKF, VPS)
+GPT = (VHX, QPF)
+VFK = (VJX, QPS)
+QFH = (LHP, CKD)
+KMD = (QFR, XVX)
+MSB = (VTT, MVG)
+TRF = (JGQ, GDJ)
+PHJ = (VQX, JCQ)
+DBN = (NRQ, GBN)
+JPM = (PMG, SNF)
+TND = (HQB, XXT)
+FJK = (XHV, FBS)
+PNM = (DCX, MGH)
+QFK = (RKR, QVK)
+VNV = (NRC, XXN)
+QXN = (PSG, CFJ)
+NND = (HJC, MPN)
+DQM = (TJP, JDH)
+PGK = (XQK, PRG)
+HMK = (BJK, PHJ)
+DLB = (RGJ, NKR)
+PXP = (XTK, NKD)
+LGG = (CNP, CNP)
+HKJ = (VQD, NSR)
+TMN = (SNN, DPF)
+FRX = (FBR, JPM)
+PTA = (JTJ, XKM)
+NRH = (VST, QHJ)
+BQD = (KTP, GFF)
+VTT = (KFN, LTH)
+GMV = (VCJ, JGC)
+XLG = (FXB, NGN)
+JDH = (GHV, JSS)
+TJT = (JCT, JMJ)
+HCT = (CRM, CRM)
+BGR = (JMP, TSR)
+CKH = (JMG, TFD)
+DHX = (QGP, CLJ)
+BQN = (TBN, BTQ)
+RSH = (CSX, LTV)
+SXJ = (DRV, JBX)
+MRB = (SRG, TTL)
+GTG = (SPV, DDQ)
+VQL = (VPK, FJX)
+RXC = (GXT, CGM)
+MSV = (LGG, HLF)
+PSV = (GBL, RRB)
+LRV = (XTV, LVS)
+MVR = (NQL, FTF)
+JDD = (GRB, MDB)
+TKG = (LHT, VLM)
+NHL = (MMV, LNM)
+XBR = (DHX, QHM)
+DNK = (TXQ, DSP)
+GBX = (SDS, BGR)
+PDT = (CBF, RKM)
+PGH = (FGJ, KMD)
+GTR = (RPT, CXM)
+GBP = (LNB, DNR)
+DKC = (MQS, NND)
+HSM = (SHK, HQP)
+VVV = (GLQ, TKP)
+TTJ = (DNK, BQC)
+CJD = (CGS, KGT)
+VSG = (RMJ, BQN)
+XGQ = (TXC, LKB)
+CNP = (PCH, PCH)
+JPT = (NDS, CTV)
+MVT = (GBP, RLR)
+HJF = (CGL, JST)
+KGB = (GML, NLB)
+MPN = (DXQ, BHJ)
+KFT = (DTS, DJP)
+QCK = (RLF, QVR)
+MJR = (MJD, RPS)
+LBV = (FPH, RFH)
+JMG = (QSK, QXN)
+LDJ = (DBN, TTK)
+XBP = (KQV, QGK)
+RTM = (DFS, DXT)
+VBH = (BMB, JGJ)
+LHP = (MMH, BPV)
+PMR = (MDQ, DGS)
+NNR = (JDF, NVP)
+GJL = (JDT, QLP)
+JST = (SBL, LNL)
+KML = (TXL, CRB)
+FBA = (KQG, JSC)
+KSF = (TLH, JBK)
+VFF = (CKT, GSP)
+PSG = (PQP, CBJ)
+LDZ = (JSC, KQG)
+DKN = (MVC, SPX)
+DRV = (DHD, GBJ)
+MJB = (HNM, LKH)
+MNG = (KXS, PRM)
+SNN = (VNQ, DQQ)
+GNH = (KHS, SLV)
+BJF = (HPD, XBL)
+LGP = (LHP, CKD)
+XVZ = (CVH, MRJ)
+GRP = (NHV, GBX)
+NGC = (FRJ, KVG)
+BJD = (QVR, RLF)
+FKL = (LRV, DSH)
+KSV = (VHK, VHK)
+XQK = (KPL, MDX)
+NRC = (DMT, GLC)
+VNH = (LQT, VVQ)
+CGL = (SBL, SBL)
+GVH = (NKD, XTK)
+DBJ = (LXQ, HKP)
+KVC = (PMX, XPR)
+NJP = (VXG, TTJ)
+VXG = (BQC, DNK)
+CLJ = (JVL, QRP)
+RFH = (VQL, NPJ)
+GFR = (KGB, GNM)
+KQV = (VFK, PKK)
+SQM = (GTJ, RKT)
+MQS = (MPN, HJC)
+BXV = (RJP, CLN)
+VSJ = (DKN, XDK)
+SHK = (XMV, RXM)
+GSP = (LDC, VPF)
+MSS = (VPS, HKF)
+SFM = (NVR, CQX)
+FMC = (BJF, SRS)
+DXS = (RMD, TLT)
+QHS = (CGM, GXT)
+DJP = (FDL, JHP)
+MPT = (PQF, DCB)
+LXQ = (PLS, PGK)
+RFD = (TTJ, VXG)
+JGJ = (HJS, TJT)
+XGN = (KVT, LQL)
+NBB = (LSX, XNR)
+CKD = (MMH, BPV)
+CTT = (CQX, NVR)
+CBJ = (RRG, KBD)
+CNG = (THV, QBK)
+BMD = (QPF, VHX)
+XLC = (BKL, SCZ)
+KQG = (CPT, VLL)
+KTJ = (KVC, VBM)
+JBG = (NJP, RFD)
+KVT = (NPT, GVS)
+QGP = (JVL, QRP)
+HFC = (THV, QBK)
+JDT = (HBS, RHL)
+MNF = (NRS, XVZ)
+GKR = (GTK, PCB)
+NVP = (NQQ, RRQ)
+MPQ = (GCS, KSF)
+PLS = (PRG, XQK)
+JDF = (NQQ, RRQ)
+CQD = (DBJ, VTV)
+LNP = (TPK, SCP)
+HQP = (XMV, RXM)
+RJM = (MJD, RPS)
+MQK = (FSL, CKH)
+KXS = (HBJ, HMP)
+CSX = (QCS, RKV)
+VCG = (LQL, KVT)
+NVJ = (JQG, GKD)
+NLB = (VLD, VFF)
+CQN = (NVP, JDF)
+PDL = (VTM, GBQ)
+SJM = (JNR, BGH)
+VTR = (HMK, RNS)
+QGS = (SQK, TPL)
+NFH = (XRH, DKD)
+TXQ = (GFL, PGH)
+GCJ = (XSL, BFB)
+RKT = (CQN, NNR)
+BFQ = (LBS, JLX)
+PKN = (FGD, TKG)
+XKP = (FDJ, BHH)
+QHX = (SPD, XCT)
+NKR = (GFR, KTV)
+GLQ = (FBM, KLD)
+PRR = (XSL, BFB)
+XLT = (HPB, MJJ)
+HRD = (QVP, VXH)
+SNL = (VSF, GTG)
+TBN = (XCS, LJX)
+RPS = (NFM, VNX)
+MKX = (XLG, SLT)
+NQC = (MPT, BLX)
+DKK = (FVQ, PFR)
+LCT = (TGK, PSH)
+XHV = (JSN, KFT)
+PRM = (HMP, HBJ)
+NQL = (BQD, TTN)
+HQV = (KVH, LBV)
+RKG = (HMK, RNS)
+LCL = (KQH, MKX)
+LMM = (PVJ, SXK)
+NCF = (XHV, FBS)
+NRS = (MRJ, CVH)
+RTK = (RJM, MJR)
+RFC = (NVJ, HNG)
+XXQ = (SXP, BJH)
+RPT = (NMV, VNV)
+QBR = (CTH, QKV)
+FXF = (VBM, KVC)
+CRB = (NQC, RXH)
+NQD = (BQN, RMJ)
+RKR = (KMQ, MGF)
+DSP = (GFL, PGH)
+DSH = (XTV, LVS)
+DMT = (QVN, PMS)
+VPS = (NNC, HKJ)
+JSC = (CPT, VLL)
+XKS = (DVT, DRH)
+TTV = (LKH, HNM)
+MJD = (VNX, NFM)
+SCZ = (SHQ, DLB)
+XVX = (CNG, HFC)
+KTV = (KGB, GNM)
+QHJ = (LSR, SSN)
+CQJ = (GPT, BMD)
+NMD = (TPK, SCP)
+DVB = (GSJ, GSJ)
+JMP = (MQP, RGQ)
+BSB = (BGC, KJC)
+CPT = (MRB, MHN)
+PQP = (RRG, KBD)
+RLG = (BJH, SXP)
+VQX = (XVR, JCB)
+XJN = (XRH, DKD)
+JHP = (QFT, MNG)
+KMB = (HRT, SJM)
+QSK = (PSG, CFJ)
+DKD = (VLF, JPT)
+NHV = (BGR, SDS)
+HXV = (XGQ, BSP)
+XXN = (DMT, GLC)
+VLM = (KMB, BTL)
+RLR = (DNR, LNB)
+PCH = (KQG, JSC)
+XRH = (VLF, JPT)
+SBL = (XLM, XLM)
+CRM = (JTJ, XKM)
+JSS = (BTS, LSV)
+CXM = (NMV, VNV)
+MLG = (HCT, HCT)
+JXH = (MVR, SDR)
+XBH = (XVF, STR)
+DXT = (VBN, JVK)
+JSN = (DTS, DJP)
+KLD = (MFK, PBD)
+KVH = (RFH, FPH)
+NJX = (GMV, VPQ)
+NRQ = (GKR, GMT)
+HXF = (DXS, QXR)
+DGS = (SNL, BVF)
+LJT = (RKR, QVK)
+JLX = (XGP, TKS)
+FCX = (PXP, GVH)
+VDX = (VBJ, TBR)
+VSF = (SPV, DDQ)
+VCX = (KTT, PPX)
+MMH = (MDM, FVS)
+MPB = (GBL, RRB)
+RLF = (TSM, DLN)
+RMJ = (BTQ, TBN)
+VJX = (QQP, HMV)
+XVF = (RFC, HXG)
+CTN = (VVV, TKM)
+QHD = (GBP, RLR)
+JGC = (JXH, QCQ)
+KPL = (FXF, KTJ)
+NGN = (MDH, VSJ)
+XPG = (MJB, TTV)
+MQP = (KTG, CQJ)
+JCB = (QHD, MVT)
+MNM = (RPT, CXM)
+RXH = (BLX, MPT)
+HHP = (GCJ, PRR)
+SLV = (JVD, TRF)
+HVT = (BJX, FND)
+MTD = (MMV, LNM)
+TTL = (QFH, LGP)
+LTV = (QCS, RKV)
+VXV = (TSX, HSM)
+TCM = (QHM, DHX)
+NBF = (LQT, VVQ)
+BTQ = (LJX, XCS)
+TKP = (KLD, FBM)
+LDC = (HSD, PJP)
+VHK = (NRS, NRS)
+NFM = (TMF, QFS)
+GTJ = (NNR, CQN)
+LSD = (QCK, BJD)
+HJV = (QBD, DGT)
+QBK = (MND, GJL)
+XNR = (MBF, SPN)
+HQB = (KXN, FJF)
+TNJ = (FDJ, BHH)
+TGK = (SQV, TLB)
+KMF = (VHK, MNF)
+JVK = (PDL, FFF)
+NSF = (VBJ, TBR)
+SCP = (QQR, PVV)
+XXP = (HHP, CDS)
+VHX = (NJX, KJF)
+VCJ = (JXH, QCQ)
+KJC = (KCS, SCR)
+XXT = (FJF, KXN)
+NNC = (VQD, NSR)
+VBM = (XPR, PMX)
+JTJ = (XDG, VHT)
+CNK = (CCX, MSS)
+FTF = (TTN, BQD)
+LKH = (SXJ, GMF)
+TLH = (CSR, VXV)
+GFF = (KML, QRX)
+LFR = (CLN, RJP)
+DTS = (FDL, JHP)
+TTN = (KTP, GFF)
+BTL = (HRT, SJM)
+HJS = (JCT, JMJ)
+HBJ = (JVR, GSF)
+SLF = (JDD, KJZ)
+CVH = (CNC, XLT)
+JGQ = (JGB, XKS)
+FGJ = (QFR, XVX)
+STQ = (XRQ, TCB)
+GCS = (JBK, TLH)
+FKK = (HVT, MPK)
+LJM = (DQM, XXG)
+BTS = (NMD, LNP)
+SVC = (NFP, QHX)
+VPF = (PJP, HSD)
+NPT = (NGC, FCK)
+TTK = (GBN, NRQ)
+XCT = (FNL, RSH)
+RRG = (TND, HCC)
+HMP = (GSF, JVR)
+TJV = (XXG, DQM)
+CTH = (CTT, SFM)
+TPK = (QQR, PVV)
+LSR = (PQH, LFT)
+XLM = (BKL, BKL)
+FGD = (VLM, LHT)
+GSF = (VTJ, HRD)
+PBN = (FGD, TKG)
+NMV = (NRC, XXN)
+CLN = (TPQ, CTX)
+TMF = (TSK, PTV)
+HPX = (FKC, PDT)
+GBN = (GMT, GKR)
+PCK = (PDX, HXV)
+TCB = (NCF, FJK)
+LJX = (NRH, PTN)
+QBD = (KVQ, GNH)
+CMC = (QBR, PBK)
+GBL = (HHR, GSC)
+SQN = (BJF, SRS)
+FCB = (QXR, DXS)
+GDJ = (XKS, JGB)
+PCB = (LCL, XHH)
+BPV = (MDM, FVS)
+PJD = (DVB, DVB)
+RHG = (MJR, RJM)
+DVT = (PKN, PBN)
+TFM = (QBR, PBK)
+HCC = (HQB, XXT)
+PGS = (DSX, MTV)
+TSR = (MQP, RGQ)
+KJF = (GMV, VPQ)
+GJS = (DKC, CKL)
+LNB = (QLK, DRT)
+PKK = (QPS, VJX)
+TKS = (RHG, RTK)
+QFS = (TSK, PTV)
+DGL = (RCK, XVJ)
+XPR = (MNM, GTR)
+TDH = (FKL, CFC)
+PDF = (XBP, CXB)
+DFN = (RXF, GRP)
+JVR = (HRD, VTJ)
+LBS = (TKS, XGP)
+QCQ = (MVR, SDR)
+MND = (JDT, QLP)
+PFR = (LJM, TJV)
+QLK = (MPB, PSV)
+CFC = (LRV, DSH)
+PMX = (GTR, MNM)
+CGF = (PMR, RPV)
+MVG = (LTH, KFN)
+NLK = (FBR, JPM)
+LFB = (SCS, PGS)
+BVF = (VSF, GTG)
+MDQ = (BVF, SNL)
+CQF = (PMR, RPV)
+FND = (LRX, PNM)
+MRJ = (CNC, XLT)
+HSD = (XBR, TCM)
+HLF = (CNP, GQH)
+RRQ = (CMC, TFM)
+CLM = (TKM, VVV)
+RLB = (TTV, MJB)
+NDS = (RQX, CQD) \ No newline at end of file
diff --git a/aoc2023/src/day9/input.txt b/aoc2023/src/day9/input.txt
new file mode 100644
index 0000000..6e0678f
--- /dev/null
+++ b/aoc2023/src/day9/input.txt
@@ -0,0 +1,200 @@
+16 22 27 23 4 -16 23 267 1025 2943 7407 17445 39670 88339 193607 417868 887273 1851158 3792224 7628687 15083115
+12 27 53 97 184 369 757 1550 3165 6502 13489 28103 58181 118520 236055 458342 867210 1600341 2884757 5087813 8793398
+3 9 23 45 75 113 159 213 275 345 423 509 603 705 815 933 1059 1193 1335 1485 1643
+14 21 42 87 173 334 631 1162 2072 3563 5904 9441 14607 21932 32053 45724 63826 87377 117542 155643 203169
+6 13 20 27 34 41 48 55 62 69 76 83 90 97 104 111 118 125 132 139 146
+18 28 38 48 58 68 78 88 98 108 118 128 138 148 158 168 178 188 198 208 218
+21 33 40 47 73 158 375 850 1793 3543 6630 11857 20405 33964 54893 86412 132829 199805 294660 426723 607729
+5 11 28 62 114 176 227 229 123 -175 -778 -1832 -3520 -6066 -9739 -14857 -21791 -30969 -42880 -58078 -77186
+24 40 75 158 329 650 1234 2297 4245 7835 14509 27104 51294 98315 189749 365429 696074 1303683 2396426 4333544 7754453
+18 23 29 46 96 212 448 922 1929 4181 9250 20305 43249 88396 172934 324721 588708 1038939 1802431 3107544 5380614
+23 48 93 172 303 512 850 1439 2577 4950 10022 20709 42513 85461 167621 322006 611043 1157808 2213227 4297234 8485467
+-5 1 16 41 89 207 507 1216 2767 5970 12327 24602 47877 91653 174402 333999 651945 1308548 2704118 5713694 12198267
+6 29 72 158 337 698 1389 2653 4895 8818 15726 28221 51759 97922 190866 379323 758008 1504863 2945432 5665084 10707897
+9 12 14 16 18 23 61 248 912 2857 7918 20117 47998 109127 238298 501654 1019615 2002014 3798866 6969266 12368366
+17 22 22 7 -38 -133 -303 -578 -993 -1588 -2408 -3503 -4928 -6743 -9013 -11808 -15203 -19278 -24118 -29813 -36458
+-2 4 18 55 139 307 619 1172 2109 3609 5862 9109 14010 22956 43541 96348 230584 553042 1278506 2813195 5887325
+8 15 28 69 174 408 898 1887 3825 7548 14661 28355 55092 107964 213209 422581 836414 1645965 3210142 6193077 11808762
+16 42 93 189 363 674 1225 2187 3843 6689 11662 20608 37156 68227 126480 234080 428266 769300 1351491 2318111 3881153
+22 28 29 28 44 131 412 1147 2869 6647 14589 30812 63325 127656 253684 498111 966448 1850438 3489669 6469940 11775962
+10 22 64 147 279 478 797 1361 2416 4390 7966 14167 24453 40830 65971 103349 157382 233590 338764 481147 670627
+26 44 80 147 257 416 626 905 1352 2314 4756 10993 26015 59722 130486 270571 534070 1008160 1828632 3200823 5427261
+10 13 25 59 130 257 465 787 1266 1957 2929 4267 6074 8473 11609 15651 20794 27261 35305 45211 57298
+22 34 53 80 110 130 129 142 361 1361 4516 12738 31795 72709 156208 321132 640567 1253344 2426426 4679304 9031095
+-3 3 14 32 60 112 238 564 1347 3045 6402 12548 23114 40362 67330 107992 167433 252039 369702 530040 744632
+9 6 1 -6 -15 -26 -39 -54 -71 -90 -111 -134 -159 -186 -215 -246 -279 -314 -351 -390 -431
+8 19 30 41 52 63 74 85 96 107 118 129 140 151 162 173 184 195 206 217 228
+12 28 56 112 219 400 680 1122 1935 3705 7813 17117 36988 76803 152011 286901 518214 899754 1508166 2450062 3870689
+4 18 45 100 211 419 778 1355 2230 3496 5259 7638 10765 14785 19856 26149 33848 43150 54265 67416 82839
+14 27 62 122 200 276 326 367 589 1672 5468 16376 44007 108213 248366 540095 1124752 2259977 4404234 8354542 15465362
+10 22 40 63 103 210 507 1241 2865 6190 12701 25249 49587 97767 195548 398210 823495 1718635 3594121 7486884 15473014
+14 34 81 182 390 802 1584 3006 5499 9763 16982 29248 50393 87661 155200 281530 525422 1008672 1981041 3943806 7877282
+12 6 3 23 101 286 644 1284 2444 4698 9375 19317 40145 82250 163780 314954 584100 1045886 1812291 3046947 4983573
+13 21 32 52 86 138 211 307 427 571 738 926 1132 1352 1581 1813 2041 2257 2452 2616 2738
+17 35 58 79 89 86 96 217 705 2144 5802 14399 33741 76089 166928 358407 755996 1571412 3227213 6560698 13212768
+17 31 59 122 252 488 875 1475 2402 3896 6454 11039 19391 34467 61040 106490 181823 302957 492317 780784 1210046
+11 13 19 31 63 168 488 1351 3457 8223 18396 39097 79555 156016 296889 552619 1016132 1867206 3470206 6587672 12837496
+16 29 54 116 265 600 1300 2668 5219 9890 18523 34882 66641 129080 251748 490245 946750 1805263 3391104 6269484 11405501
+14 27 57 121 242 458 839 1513 2706 4807 8477 14831 25734 44266 75427 127171 211878 348395 564801 902077 1418890
+7 20 34 49 65 82 100 119 139 160 182 205 229 254 280 307 335 364 394 425 457
+1 6 11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101
+11 27 54 101 191 376 755 1502 2915 5494 10051 17860 30889 52245 87140 144991 243747 418245 735396 1320359 2399651
+2 8 29 83 199 423 835 1581 2927 5359 9789 17981 33374 62532 117469 219074 401880 720802 1262037 2164843 3671777
+6 24 54 96 150 216 294 384 486 600 726 864 1014 1176 1350 1536 1734 1944 2166 2400 2646
+10 19 51 124 260 486 847 1434 2430 4183 7326 12972 22998 40360 69185 113940 176032 244249 271543 122978 -535002
+-2 -4 -14 -20 14 157 520 1272 2677 5175 9538 17144 30453 53895 95688 171741 313968 587314 1122914 2179488 4251816
+10 2 -8 -10 16 111 367 983 2360 5278 11264 23369 47724 96431 192545 378084 726118 1357970 2466328 4344512 7421136
+9 22 62 142 278 503 886 1552 2699 4608 7642 12230 18832 27881 39698 54376 71629 90602 109638 125998 135530
+-2 -1 13 46 97 157 212 250 272 307 431 790 1627 3313 6382 11570 19858 32519 51169 77822 114949
+18 43 87 167 324 645 1288 2508 4685 8358 14272 23448 37289 57738 87507 130399 191748 279005 402501 576421 820026
+-8 -3 21 87 247 597 1292 2561 4722 8197 13527 21387 32601 48157 69222 97157 133532 180141 239017 312447 402987
+1 15 44 102 209 386 650 1009 1457 1969 2496 2960 3249 3212 2654 1331 -1055 -4861 -10508 -18486 -29359
+5 1 -2 6 59 235 682 1661 3639 7499 14980 29518 57729 111857 213604 399865 731009 1302477 2260610 3823774 6310015
+1 9 37 102 234 477 887 1529 2484 3904 6221 10771 21422 48445 117084 285457 680175 1564375 3463249 7388968 15233734
+-3 -3 -1 11 59 207 588 1446 3189 6453 12177 21689 36803 59927 94182 143532 212925 308445 437475 608871 833147
+10 8 4 -1 1 26 99 259 588 1312 3062 7435 18059 42442 94973 201543 406366 781704 1441336 2558759 4391269
+10 15 18 27 59 146 351 801 1756 3756 7920 16506 33869 67961 132485 249722 453870 794437 1338782 2172261 3393567
+7 15 41 104 240 511 1006 1830 3083 4847 7237 10652 16512 29023 58918 130730 296023 656207 1400169 2864048 5623160
+-8 -4 15 66 176 382 731 1280 2096 3256 4847 6966 9720 13226 17611 23012 29576 37460 46831 57866 70752
+11 15 15 11 3 -9 -25 -45 -69 -97 -129 -165 -205 -249 -297 -349 -405 -465 -529 -597 -669
+-1 2 8 24 76 213 509 1071 2071 3838 7075 13309 25742 50751 100388 196360 376127 701946 1273914 2248326 3862968
+11 12 10 -4 -30 -41 52 467 1667 4541 10659 22594 44276 81300 141049 232411 364763 545762 777320 1048944 1327390
+9 11 12 20 63 215 648 1733 4223 9564 20404 41417 80649 151761 277849 498056 879093 1535245 2662704 4597458 7910851
+21 22 23 43 114 293 701 1602 3535 7522 15407 30447 58395 109537 202601 372448 685608 1272236 2392115 4569768 8866201
+17 27 37 47 57 67 77 87 97 107 117 127 137 147 157 167 177 187 197 207 217
+18 42 72 103 130 150 170 224 408 956 2402 5903 13836 30828 65432 132724 258166 483158 872788 1526383 2591566
+23 30 36 41 45 48 50 51 51 50 48 45 41 36 30 23 15 6 -4 -15 -27
+14 31 52 83 148 308 690 1526 3202 6317 11752 20749 35000 56746 88886 135096 199958 289099 409340 568855 777340
+4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64
+14 26 44 76 143 283 574 1197 2563 5538 11840 24799 50942 103413 209274 424645 865170 1765883 3597017 7286172 14643193
+12 27 49 69 87 136 330 950 2594 6451 14824 32143 66919 135472 268945 526276 1017696 1946291 3679643 6870089 12651367
+11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 106 111
+10 35 74 146 282 527 958 1744 3300 6630 14020 30337 65320 137420 279964 550689 1046022 1921877 3423206 5925084 9988734
+20 29 40 59 108 247 607 1436 3177 6629 13289 26035 50387 96675 183550 343396 630338 1131693 1983878 3393971 5668318
+8 24 59 134 284 569 1103 2113 4045 7744 14750 27772 51427 93361 165904 288451 490806 817776 1335357 2138914 3363822
+11 25 55 105 179 281 415 585 795 1049 1351 1705 2115 2585 3119 3721 4395 5145 5975 6889 7891
+19 37 74 159 334 661 1245 2294 4257 8117 15987 32302 66195 136227 279739 571067 1156243 2317357 4588524 8958785 17217096
+-2 9 41 103 219 443 870 1652 3057 5656 10790 21562 44740 94217 197246 406018 820326 1634301 3236137 6423499 12866391
+5 -1 -8 -9 10 70 199 432 811 1385 2210 3349 4872 6856 9385 12550 16449 21187 26876 33635 41590
+19 32 45 58 71 84 97 110 123 136 149 162 175 188 201 214 227 240 253 266 279
+22 37 55 71 94 167 396 1005 2447 5608 12151 25096 49895 96676 185249 356351 696284 1389007 2822275 5796409 11921644
+22 47 92 163 266 410 610 889 1282 1854 2764 4460 8230 17669 42342 106334 266942 653145 1540604 3491025 7600370
+23 38 73 146 277 488 805 1274 2012 3332 6035 12106 26379 60395 140880 327309 746281 1655398 3556625 7389446 14848405
+10 34 81 160 274 417 573 715 811 876 1179 2852 9421 30324 88549 236536 588096 1380274 3089189 6639788 13773628
+17 32 52 70 76 73 108 318 991 2642 6104 12634 24034 42787 72208 116610 181485 273700 401708 575774 808216
+-4 7 32 78 155 279 498 962 2061 4658 10451 22528 46285 91178 174513 330071 627521 1214340 2401733 4831449 9782898
+-1 1 -1 -2 13 71 214 503 1023 1889 3253 5312 8317 12583 18500 26545 37295 51441 69803 93346 123197
+14 25 55 119 234 420 706 1143 1844 3111 5790 12143 27772 65506 152698 344108 743534 1538777 3056905 5851463 10843458
+-7 -7 2 25 72 160 317 595 1112 2172 4561 10190 23357 53033 116746 246846 500187 972563 1819588 3286119 5746790
+24 51 91 144 210 289 381 486 604 735 879 1036 1206 1389 1585 1794 2016 2251 2499 2760 3034
+-6 -8 -7 -4 9 70 282 871 2293 5443 12063 25532 52395 105321 208785 409850 798384 1544682 2969297 5672672 10775633
+18 38 74 128 197 273 343 389 388 312 128 -202 -721 -1477 -2523 -3917 -5722 -8006 -10842 -14308 -18487
+14 14 6 -15 -54 -116 -206 -329 -490 -694 -946 -1251 -1614 -2040 -2534 -3101 -3746 -4474 -5290 -6199 -7206
+0 4 22 78 215 499 1023 1911 3322 5454 8548 12892 18825 26741 37093 50397 67236 88264 114210 145882 184171
+15 19 27 58 141 316 650 1285 2551 5196 10802 22466 45823 90469 171801 313223 548567 924441 1502037 2357706 3581329
+28 49 76 114 185 353 769 1757 3977 8715 18361 37142 72176 134903 242928 422277 710018 1157133 1831442 2820274 4232451
+2 -5 0 35 133 356 819 1728 3430 6476 11736 20729 36639 67155 131593 277209 613962 1384465 3098432 6781691 14423617
+-2 7 41 121 269 517 931 1662 3062 5945 12131 25493 53858 112344 229132 455405 882418 1670639 3098937 5646285 10124879
+15 19 18 9 -6 -15 9 113 369 879 1780 3249 5508 8829 13539 20025 28739 40203 55014 73849 97470
+9 14 33 89 229 533 1128 2215 4117 7356 12767 21657 36017 58795 94238 148311 229201 347914 518973 761225 1098765
+8 23 51 104 202 386 739 1423 2763 5438 10883 22095 45241 92932 191019 392729 807586 1658885 3393971 6888230 13809204
+6 3 10 41 110 231 418 685 1046 1515 2106 2833 3710 4751 5970 7381 8998 10835 12906 15225 17806
+12 12 16 37 101 264 650 1525 3438 7497 15913 33051 67399 135147 266525 516779 984800 1844138 3393654 6138665 10918457
+9 30 68 138 276 551 1072 2001 3595 6307 10985 19236 34096 61304 111765 206261 384197 719228 1346090 2504950 4612204
+23 38 66 121 224 409 731 1285 2251 3984 7170 13069 23864 43131 76439 132081 221927 362378 575386 889489 1340792
+16 28 40 52 64 76 88 100 112 124 136 148 160 172 184 196 208 220 232 244 256
+17 30 61 119 219 397 747 1501 3179 6842 14487 29629 58121 109269 197305 343287 577501 942446 1496489 2318283 3512047
+-1 5 14 37 100 253 588 1271 2598 5105 9816 18826 36619 72851 147828 302628 616809 1237973 2429186 4642459 8629254
+16 36 76 164 342 666 1206 2046 3284 5032 7416 10576 14666 19854 26322 34266 43896 55436 69124 85212 103966
+-5 -3 12 63 182 411 809 1475 2612 4686 8786 17372 35707 74388 153464 308525 598601 1114243 1980956 3346921 5332708
+14 26 38 50 62 74 86 98 110 122 134 146 158 170 182 194 206 218 230 242 254
+2 -4 -19 -52 -115 -221 -369 -502 -417 401 3053 9640 23844 51688 102447 189584 331368 550394 870413 1307468 1850007
+21 43 82 139 220 346 563 952 1639 2805 4696 7633 12022 18364 27265 39446 55753 77167 104814 139975 184096
+-8 -16 -17 2 54 155 326 590 966 1484 2301 4109 9224 24092 64560 166325 404748 930980 2035275 4253332 8536722
+-2 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
+12 33 69 137 269 529 1047 2087 4183 8402 16827 33411 65487 126554 241758 459276 874624 1682767 3288727 6538653 13194051
+5 11 36 85 167 311 593 1176 2363 4661 8852 16065 27841 46181 73565 112928 167577 241031 336764 457829 606339
+5 0 6 43 134 309 628 1231 2423 4814 9565 18848 36718 70725 134771 253948 472385 865492 1558424 2753105 4766758
+20 31 42 53 64 75 86 97 108 119 130 141 152 163 174 185 196 207 218 229 240
+17 34 57 94 167 331 710 1554 3321 6788 13195 24426 43231 73493 120544 191534 295857 445638 656285 947110 1342023
+19 22 16 1 -16 -13 61 313 960 2430 5532 11711 23385 44323 79959 137439 225057 350542 517400 718181 923118
+12 20 36 60 92 132 180 236 300 372 452 540 636 740 852 972 1100 1236 1380 1532 1692
+15 28 66 154 345 743 1533 3025 5728 10495 18847 33738 61349 115157 224805 454707 941713 1968938 4106276 8470690 17196453
+26 54 104 181 285 412 556 719 953 1484 3011 7356 18816 46948 112339 258637 577588 1260474 2701490 5699779 11842279
+-5 0 13 48 130 307 671 1382 2697 5034 9163 16738 31609 62754 130392 278202 597329 1273687 2682530 5580428 11497888
+8 23 49 86 133 194 288 465 841 1695 3749 8922 22170 55570 136666 324373 737550 1603839 3339673 6676646 12854891
+7 18 29 40 51 62 73 84 95 106 117 128 139 150 161 172 183 194 205 216 227
+10 24 44 69 95 111 110 139 432 1714 5858 17254 45544 110822 253017 547981 1133786 2251864 4308844 7966159 14265585
+-5 -2 6 18 42 106 277 693 1613 3490 7072 13536 24660 43038 72343 117643 185775 285782 429418 631726 911694
+25 49 82 120 164 225 336 574 1090 2143 4134 7640 13481 22991 39079 69707 137760 306259 738049 1829516 4498299
+28 39 59 115 256 569 1203 2401 4540 8179 14115 23447 37648 58645 88907 131541 190396 270175 376555 516315 697472
+11 22 42 82 162 312 578 1053 1983 4058 9103 21549 51304 118974 264819 563384 1146435 2237670 4203680 7626820 13407030
+13 32 67 140 285 548 987 1672 2685 4120 6083 8692 12077 16380 21755 28368 36397 46032 57475 70940 86653
+16 33 54 83 134 242 480 986 2021 4120 8486 17955 39204 87515 196569 437797 957362 2044827 4257394 8639335 17100774
+9 16 28 45 77 154 347 816 1911 4366 9654 20646 42906 87373 176023 353702 712286 1438821 2909549 5870876 11783816
+8 6 12 48 156 403 877 1669 2836 4346 6024 7554 8652 9615 12577 23971 58912 148486 351260 770724 1580844
+10 34 83 183 372 704 1257 2145 3534 5662 8863 13595 20472 30300 44117 63237 89298 124314 170731 231487 310076
+8 20 36 53 68 78 80 71 48 8 -52 -135 -244 -382 -552 -757 -1000 -1284 -1612 -1987 -2412
+8 24 64 148 311 624 1225 2369 4520 8531 15994 29900 55846 104185 193758 358183 656084 1187050 2115368 3703412 6355581
+5 15 30 49 71 95 120 145 169 191 210 225 235 239 236 225 205 175 134 81 15
+20 50 100 187 348 653 1224 2260 4071 7142 12288 21029 36419 64717 118496 222024 419946 790371 1463632 2649684 4685450
+19 31 52 89 164 327 670 1344 2599 4900 9234 17847 35889 74868 159497 340530 717567 1477557 2956756 5736005 10781030
+18 39 72 138 278 564 1112 2106 3859 6958 12565 22975 42565 79305 147043 268821 481528 842249 1436726 2390408 3882632
+4 10 15 19 22 24 25 25 24 22 19 15 10 4 -3 -11 -20 -30 -41 -53 -66
+17 26 56 136 308 628 1180 2113 3711 6506 11444 20114 35050 60116 100984 165715 265453 415242 634976 950492 1394816
+25 37 60 118 244 489 953 1860 3725 7710 16362 35110 75232 159574 333227 682794 1369993 2688371 5156120 9663710 17702660
+4 8 33 90 191 348 577 927 1566 2968 6257 13776 29961 62612 124665 236581 429480 749160 1261153 2056982 3261795
+13 25 58 131 276 546 1035 1922 3551 6559 12064 21925 39086 68016 115257 190092 305345 478325 731926 1095895 1608280
+8 7 17 55 139 281 476 687 826 731 139 -1345 -4283 -9443 -17842 -30793 -49956 -77393 -115627 -167705 -237265
+5 22 61 137 265 460 737 1111 1597 2210 2965 3877 4961 6232 7705 9395 11317 13486 15917 18625 21625
+15 14 17 28 53 111 267 709 1908 4922 11933 27153 58340 119414 235217 450591 848077 1582290 2945281 5487158 10231495
+2 9 28 68 137 258 498 1015 2135 4478 9159 18097 34472 63377 112719 194430 326056 532799 850094 1326810 2029171
+22 34 46 53 55 67 142 416 1181 3001 6930 15013 31533 66065 140600 305315 671836 1480416 3230374 6924401 14511151
+18 34 63 125 258 526 1027 1901 3338 5586 8959 13845 20714 30126 42739 59317 80738 108002 142239 184717 236850
+27 52 102 187 321 526 843 1369 2346 4335 8515 17154 34306 66795 125554 227394 397285 671238 1099884 1752853 2724063
+23 38 55 78 115 182 314 595 1239 2789 6549 15431 35510 78803 168285 347274 697739 1377040 2692175 5248108 10237257
+25 38 63 120 243 496 1004 2001 3903 7429 13817 25215 45369 80781 142570 249338 431421 736992 1240579 2054666 3345159
+28 41 54 67 80 93 106 119 132 145 158 171 184 197 210 223 236 249 262 275 288
+-6 0 15 44 101 212 418 778 1372 2304 3705 5736 8591 12500 17732 24598 33454 44704 58803 76260 97641
+4 28 65 121 220 415 796 1496 2709 4761 8325 14968 28410 57238 120465 258450 553719 1170131 2426846 4940384 9902961
+6 7 15 36 76 141 237 370 546 771 1051 1392 1800 2281 2841 3486 4222 5055 5991 7036 8196
+24 33 45 62 77 83 95 191 590 1804 4931 12217 28162 61797 131542 275661 574402 1195504 2484736 5141196 10551151
+23 41 68 104 149 203 266 338 419 509 608 716 833 959 1094 1238 1391 1553 1724 1904 2093
+22 42 68 105 161 238 323 380 347 146 -277 -830 -906 1697 13721 53857 170028 477110 1234650 2999191 6910095
+-9 -1 22 61 119 200 304 418 503 477 194 -581 -2201 -5170 -10180 -18152 -30281 -48085 -73458 -108727 -156713
+11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 101 106 111
+7 13 33 88 211 463 966 1970 3984 8020 16029 31654 61492 117150 218504 398730 711877 1243999 2129161 3571988 5878841
+26 54 107 191 316 512 855 1506 2775 5254 10135 19972 40418 83980 177798 379260 806629 1698071 3523848 7197074 14465457
+7 6 4 13 65 221 583 1306 2603 4745 8094 13284 21806 37503 69932 141398 301131 653436 1413420 3017283 6339755
+8 13 26 47 76 113 158 211 272 341 418 503 596 697 806 923 1048 1181 1322 1471 1628
+14 19 31 61 140 340 804 1785 3694 7157 13081 22729 37804 60542 93814 141237 207294 297463 418355 577861 785308
+18 25 41 74 132 223 355 536 774 1077 1453 1910 2456 3099 3847 4708 5690 6801 8049 9442 10988
+13 39 87 171 318 573 1009 1765 3152 5886 11539 23368 47825 97318 195247 385056 746111 1420737 2658839 4889321 8831144
+10 8 14 34 74 141 255 482 1006 2285 5397 12804 30003 69026 155797 345601 755687 1633870 3501675 7448656 15726061
+6 11 25 69 172 364 663 1064 1547 2130 3002 4780 8943 18505 38998 79845 156212 291437 520143 892151 1477318
+27 50 84 135 218 372 697 1431 3090 6700 14160 28802 56287 106157 194788 351446 631221 1142968 2109356 3994435 7771240
+9 31 66 114 175 249 336 436 549 675 814 966 1131 1309 1500 1704 1921 2151 2394 2650 2919
+8 7 7 8 10 22 98 426 1513 4538 11998 28875 64756 137733 281650 559617 1089152 2088679 3962843 7457584 13938920
+-5 -7 -9 -11 -2 54 247 779 2078 5020 11348 24426 50527 100927 195162 365902 666005 1178435 2029861 3408899 5590116
+10 16 34 74 147 274 521 1081 2432 5608 12628 27136 55313 107130 198019 351047 599686 991280 1591318 2488630 3801631
+9 8 21 66 172 391 830 1721 3552 7290 14748 29193 56376 106318 196477 357514 644161 1156577 2084086 3797672 7049008
+14 40 88 183 380 785 1580 3064 5738 10495 19048 34867 65134 124613 242953 477946 938949 1827706 3509661 6640837 12400447
+15 25 39 64 129 294 653 1337 2538 4600 8260 15178 28989 57277 115164 231711 461221 903259 1738853 3298396 6194405
+9 6 6 11 31 107 353 1029 2669 6320 14014 29709 61115 123102 243845 475664 914050 1731530 3239870 6009120 11104366
+26 37 48 75 147 313 670 1432 3073 6602 14068 29452 60189 119691 231437 435496 798808 1431239 2510444 4320037 7307627
+3 -1 -10 -24 -43 -67 -96 -130 -169 -213 -262 -316 -375 -439 -508 -582 -661 -745 -834 -928 -1027
+18 43 89 169 300 508 853 1501 2897 6147 13824 31625 71718 159389 345977 733436 1519704 3080095 6109095 11860445 22542764
+17 38 63 88 109 122 123 108 73 14 -73 -192 -347 -542 -781 -1068 -1407 -1802 -2257 -2776 -3363
+3 2 10 40 110 248 497 920 1605 2670 4268 6592 9880 14420 20555 28688 39287 52890 70110 91640 118258
+21 37 57 85 131 212 354 601 1040 1854 3418 6456 12280 23135 42677 76614 133543 226019 371895 595975 932025
+14 28 56 121 265 567 1177 2386 4774 9508 18898 37365 73056 140538 265518 493797 909482 1673256 3102528 5835085 11151679
+13 31 73 156 302 533 869 1334 1975 2899 4333 6712 10800 17849 29801 49538 81185 130471 205153 315508 474898
+-1 -10 -9 16 78 189 360 601 921 1328 1829 2430 3136 3951 4878 5919 7075 8346 9731 11228 12834
+1 10 33 77 148 252 400 620 988 1712 3344 7262 16674 38591 87590 192932 412066 856321 1739510 3468242 6804651
+2 19 60 137 265 461 749 1184 1908 3251 5909 11312 22519 46478 99470 219319 490975 1097216 2415107 5194716 10885594
+7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13
+13 24 44 89 197 451 1016 2204 4587 9194 17866 33915 63351 117117 215018 392358 710721 1274860 2258304 3941069 6763777
+1 -4 1 26 80 183 394 857 1858 3876 7615 14048 24625 42043 72406 130287 249223 501620 1034021 2126310 4286814
+7 20 36 46 41 20 1 35 223 736 1838 3912 7489 13280 22211 35461 54503 81148 117592 166466 230889
+16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96
+-1 3 12 46 137 336 738 1542 3172 6494 13173 26223 50812 95393 173241 304485 518733 858397 1382834 2173428 3339747 \ No newline at end of file